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

github.com/FastLED/FastLED.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Garcia <danielgarcia@gmail.com>2015-08-11 07:54:52 +0300
committerDaniel Garcia <danielgarcia@gmail.com>2015-08-11 07:54:52 +0300
commit78b34f2f17acb7a1a0bd07a1fca2bcef75415f3b (patch)
tree86586f12de7d2ed95cc1d332e068ca77bef981ff
parent85106389123969759b5f4a38a508dcb876b49d1a (diff)
Updating docs
-rw-r--r--docs/3.1/_fast_l_e_d_8h_source.html686
-rw-r--r--docs/3.1/_fast_s_p_i___l_e_d2_8h_source.html2
-rw-r--r--docs/3.1/annotated.html148
-rw-r--r--docs/3.1/bitswap_8h.html2
-rw-r--r--docs/3.1/bitswap_8h_source.html512
-rw-r--r--docs/3.1/chipsets_8h_source.html1018
-rw-r--r--docs/3.1/class_a_p_a102_controller-members.html61
-rw-r--r--docs/3.1/class_a_p_a102_controller.html5
-rw-r--r--docs/3.1/class_a_p_a104.html2
-rw-r--r--docs/3.1/class_a_v_r_software_s_p_i_output-members.html2
-rw-r--r--docs/3.1/class_a_v_r_software_s_p_i_output.html2
-rw-r--r--docs/3.1/class_c_every_n_time_periods-members.html2
-rw-r--r--docs/3.1/class_c_every_n_time_periods.html4
-rw-r--r--docs/3.1/class_c_fast_l_e_d-members.html4
-rw-r--r--docs/3.1/class_c_fast_l_e_d.html25
-rw-r--r--docs/3.1/class_c_h_s_v_palette16-members.html2
-rw-r--r--docs/3.1/class_c_h_s_v_palette16.html2
-rw-r--r--docs/3.1/class_c_h_s_v_palette256-members.html2
-rw-r--r--docs/3.1/class_c_h_s_v_palette256.html2
-rw-r--r--docs/3.1/class_c_l_e_d_controller-members.html61
-rw-r--r--docs/3.1/class_c_l_e_d_controller.html5
-rw-r--r--docs/3.1/class_c_min_wait-members.html2
-rw-r--r--docs/3.1/class_c_min_wait.html6
-rw-r--r--docs/3.1/class_c_r_g_b_palette16-members.html15
-rw-r--r--docs/3.1/class_c_r_g_b_palette16.html11
-rw-r--r--docs/3.1/class_c_r_g_b_palette256-members.html15
-rw-r--r--docs/3.1/class_c_r_g_b_palette256.html11
-rw-r--r--docs/3.1/class_d_a_t_a___n_o_p-members.html2
-rw-r--r--docs/3.1/class_d_a_t_a___n_o_p.html4
-rw-r--r--docs/3.1/class_d_m_x_s_e_r_i_a_l-members.html61
-rw-r--r--docs/3.1/class_d_m_x_s_e_r_i_a_l.html5
-rw-r--r--docs/3.1/class_d_m_x_s_i_m_p_l_e-members.html61
-rw-r--r--docs/3.1/class_d_m_x_s_i_m_p_l_e.html5
-rw-r--r--docs/3.1/class_d_m_x_serial_controller-members.html61
-rw-r--r--docs/3.1/class_d_m_x_serial_controller.html5
-rw-r--r--docs/3.1/class_d_m_x_simple_controller-members.html61
-rw-r--r--docs/3.1/class_d_m_x_simple_controller.html5
-rw-r--r--docs/3.1/class_fast_pin-members.html2
-rw-r--r--docs/3.1/class_fast_pin.html2
-rw-r--r--docs/3.1/class_fast_pin_b_b-members.html2
-rw-r--r--docs/3.1/class_fast_pin_b_b.html2
-rw-r--r--docs/3.1/class_g_w6205.html2
-rw-r--r--docs/3.1/class_g_w6205__400.html2
-rw-r--r--docs/3.1/class_g_w6205_controller400_khz.html2
-rw-r--r--docs/3.1/class_g_w6205_controller800_khz.html2
-rw-r--r--docs/3.1/class_input_pin-members.html28
-rw-r--r--docs/3.1/class_input_pin.html68
-rw-r--r--docs/3.1/class_input_pin__coll__graph.md52
-rw-r--r--docs/3.1/class_input_pin__coll__graph.pngbin3854 -> 5298 bytes
-rw-r--r--docs/3.1/class_input_pin__inherit__graph.md52
-rw-r--r--docs/3.1/class_input_pin__inherit__graph.pngbin3854 -> 5298 bytes
-rw-r--r--docs/3.1/class_l_p_d1886.html2
-rw-r--r--docs/3.1/class_l_p_d1886_controller1250_khz.html2
-rw-r--r--docs/3.1/class_l_p_d8806_controller-members.html63
-rw-r--r--docs/3.1/class_l_p_d8806_controller.html5
-rw-r--r--docs/3.1/class_n_e_o_p_i_x_e_l.html2
-rw-r--r--docs/3.1/class_output_pin-members.html32
-rw-r--r--docs/3.1/class_output_pin.html68
-rw-r--r--docs/3.1/class_output_pin__coll__graph.md52
-rw-r--r--docs/3.1/class_output_pin__coll__graph.pngbin4122 -> 5564 bytes
-rw-r--r--docs/3.1/class_output_pin__inherit__graph.md52
-rw-r--r--docs/3.1/class_output_pin__inherit__graph.pngbin4122 -> 5564 bytes
-rw-r--r--docs/3.1/class_p9813_controller-members.html63
-rw-r--r--docs/3.1/class_p9813_controller.html5
-rw-r--r--docs/3.1/class_pin-members.html31
-rw-r--r--docs/3.1/class_pin.html65
-rw-r--r--docs/3.1/class_pin__coll__graph.md52
-rw-r--r--docs/3.1/class_pin__coll__graph.pngbin2233 -> 3007 bytes
-rw-r--r--docs/3.1/class_pin__inherit__graph.md52
-rw-r--r--docs/3.1/class_pin__inherit__graph.pngbin6172 -> 8589 bytes
-rw-r--r--docs/3.1/class_s_m16716_controller-members.html63
-rw-r--r--docs/3.1/class_s_m16716_controller.html5
-rw-r--r--docs/3.1/class_s_p_i_output-members.html2
-rw-r--r--docs/3.1/class_s_p_i_output.html2
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html2
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html2
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html2
-rw-r--r--docs/3.1/class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html2
-rw-r--r--docs/3.1/class_selectable-members.html2
-rw-r--r--docs/3.1/class_selectable.html2
-rw-r--r--docs/3.1/class_selectable__inherit__graph.md52
-rw-r--r--docs/3.1/class_selectable__inherit__graph.pngbin6231 -> 8665 bytes
-rw-r--r--docs/3.1/class_software_s_p_i_output-members.html2
-rw-r--r--docs/3.1/class_software_s_p_i_output.html2
-rw-r--r--docs/3.1/class_t_m1803.html2
-rw-r--r--docs/3.1/class_t_m1803_controller400_khz.html2
-rw-r--r--docs/3.1/class_t_m1804.html2
-rw-r--r--docs/3.1/class_t_m1809.html2
-rw-r--r--docs/3.1/class_t_m1809_controller800_khz.html2
-rw-r--r--docs/3.1/class_t_m1829.html2
-rw-r--r--docs/3.1/class_t_m1829_controller1600_khz.html2
-rw-r--r--docs/3.1/class_t_m1829_controller800_khz.html2
-rw-r--r--docs/3.1/class_u_c_s1903.html2
-rw-r--r--docs/3.1/class_u_c_s1903_b.html2
-rw-r--r--docs/3.1/class_u_c_s1903_b_controller800_khz.html2
-rw-r--r--docs/3.1/class_u_c_s1903_controller400_khz.html2
-rw-r--r--docs/3.1/class_u_c_s1904.html2
-rw-r--r--docs/3.1/class_u_c_s1904_controller800_khz.html2
-rw-r--r--docs/3.1/class_w_s2801_controller-members.html63
-rw-r--r--docs/3.1/class_w_s2801_controller.html5
-rw-r--r--docs/3.1/class_w_s2803_controller-members.html63
-rw-r--r--docs/3.1/class_w_s2803_controller.html5
-rw-r--r--docs/3.1/class_w_s2811.html2
-rw-r--r--docs/3.1/class_w_s2811__400.html2
-rw-r--r--docs/3.1/class_w_s2811_controller400_khz.html2
-rw-r--r--docs/3.1/class_w_s2811_controller800_khz.html2
-rw-r--r--docs/3.1/class_w_s2812.html2
-rw-r--r--docs/3.1/class_w_s2812_b.html2
-rw-r--r--docs/3.1/class_w_s2812_controller800_khz.html2
-rw-r--r--docs/3.1/classes.html65
-rw-r--r--docs/3.1/classq-members.html2
-rw-r--r--docs/3.1/classq.html4
-rw-r--r--docs/3.1/color_8h_source.html111
-rw-r--r--docs/3.1/colorpalettes_8h_source.html39
-rw-r--r--docs/3.1/colorutils_8h_source.html1867
-rw-r--r--docs/3.1/controller_8h_source.html1091
-rw-r--r--docs/3.1/dmx_8h_source.html214
-rw-r--r--docs/3.1/fastled__config_8h_source.html4
-rw-r--r--docs/3.1/fastpin_8h_source.html299
-rw-r--r--docs/3.1/fastspi_8h_source.html175
-rw-r--r--docs/3.1/fastspi__bitbang_8h_source.html682
-rw-r--r--docs/3.1/fastspi__dma_8h_source.html2
-rw-r--r--docs/3.1/fastspi__nop_8h_source.html106
-rw-r--r--docs/3.1/fastspi__ref_8h_source.html200
-rw-r--r--docs/3.1/fastspi__types_8h_source.html63
-rw-r--r--docs/3.1/files.html55
-rw-r--r--docs/3.1/functions.html4
-rw-r--r--docs/3.1/functions_func.html4
-rw-r--r--docs/3.1/globals.html2
-rw-r--r--docs/3.1/globals_func.html2
-rw-r--r--docs/3.1/graph_legend.html2
-rw-r--r--docs/3.1/group___bitswap.html2
-rw-r--r--docs/3.1/group___color_enums.html2
-rw-r--r--docs/3.1/group___colorpalletes.html22
-rw-r--r--docs/3.1/group___colorutils.html69
-rw-r--r--docs/3.1/group___noise.html2
-rw-r--r--docs/3.1/hierarchy.html203
-rw-r--r--docs/3.1/hsv2rgb_8h_source.html165
-rw-r--r--docs/3.1/index.html2
-rw-r--r--docs/3.1/inherit_graph_0.map5
-rw-r--r--docs/3.1/inherit_graph_0.md52
-rw-r--r--docs/3.1/inherit_graph_0.pngbin3502 -> 19481 bytes
-rw-r--r--docs/3.1/inherit_graph_1.map5
-rw-r--r--docs/3.1/inherit_graph_1.md52
-rw-r--r--docs/3.1/inherit_graph_1.pngbin19481 -> 5269 bytes
-rw-r--r--docs/3.1/inherit_graph_10.map2
-rw-r--r--docs/3.1/inherit_graph_10.md52
-rw-r--r--docs/3.1/inherit_graph_10.pngbin2059 -> 2280 bytes
-rw-r--r--docs/3.1/inherit_graph_11.map2
-rw-r--r--docs/3.1/inherit_graph_11.md52
-rw-r--r--docs/3.1/inherit_graph_11.pngbin2280 -> 1112 bytes
-rw-r--r--docs/3.1/inherit_graph_12.map2
-rw-r--r--docs/3.1/inherit_graph_12.md52
-rw-r--r--docs/3.1/inherit_graph_12.pngbin1112 -> 2032 bytes
-rw-r--r--docs/3.1/inherit_graph_13.map2
-rw-r--r--docs/3.1/inherit_graph_13.md52
-rw-r--r--docs/3.1/inherit_graph_13.pngbin2032 -> 2240 bytes
-rw-r--r--docs/3.1/inherit_graph_14.map2
-rw-r--r--docs/3.1/inherit_graph_14.md52
-rw-r--r--docs/3.1/inherit_graph_14.pngbin2240 -> 1321 bytes
-rw-r--r--docs/3.1/inherit_graph_15.map2
-rw-r--r--docs/3.1/inherit_graph_15.md52
-rw-r--r--docs/3.1/inherit_graph_15.pngbin1321 -> 2327 bytes
-rw-r--r--docs/3.1/inherit_graph_16.map3
-rw-r--r--docs/3.1/inherit_graph_16.md52
-rw-r--r--docs/3.1/inherit_graph_16.pngbin2327 -> 2402 bytes
-rw-r--r--docs/3.1/inherit_graph_17.map32
-rw-r--r--docs/3.1/inherit_graph_17.md52
-rw-r--r--docs/3.1/inherit_graph_17.pngbin2402 -> 143288 bytes
-rw-r--r--docs/3.1/inherit_graph_18.map31
-rw-r--r--docs/3.1/inherit_graph_18.md52
-rw-r--r--docs/3.1/inherit_graph_18.pngbin143288 -> 2189 bytes
-rw-r--r--docs/3.1/inherit_graph_19.map2
-rw-r--r--docs/3.1/inherit_graph_19.md52
-rw-r--r--docs/3.1/inherit_graph_19.pngbin2189 -> 1344 bytes
-rw-r--r--docs/3.1/inherit_graph_2.map2
-rw-r--r--docs/3.1/inherit_graph_2.md52
-rw-r--r--docs/3.1/inherit_graph_2.pngbin5269 -> 1742 bytes
-rw-r--r--docs/3.1/inherit_graph_20.map2
-rw-r--r--docs/3.1/inherit_graph_20.md52
-rw-r--r--docs/3.1/inherit_graph_20.pngbin1344 -> 4886 bytes
-rw-r--r--docs/3.1/inherit_graph_21.map2
-rw-r--r--docs/3.1/inherit_graph_21.md52
-rw-r--r--docs/3.1/inherit_graph_21.pngbin4886 -> 3456 bytes
-rw-r--r--docs/3.1/inherit_graph_22.map2
-rw-r--r--docs/3.1/inherit_graph_22.md52
-rw-r--r--docs/3.1/inherit_graph_22.pngbin3456 -> 1099 bytes
-rw-r--r--docs/3.1/inherit_graph_23.map5
-rw-r--r--docs/3.1/inherit_graph_23.md52
-rw-r--r--docs/3.1/inherit_graph_23.pngbin1099 -> 5086 bytes
-rw-r--r--docs/3.1/inherit_graph_24.map8
-rw-r--r--docs/3.1/inherit_graph_24.md52
-rw-r--r--docs/3.1/inherit_graph_24.pngbin5086 -> 26334 bytes
-rw-r--r--docs/3.1/inherit_graph_25.map3
-rw-r--r--docs/3.1/inherit_graph_25.md52
-rw-r--r--docs/3.1/inherit_graph_25.pngbin16246 -> 6339 bytes
-rw-r--r--docs/3.1/inherit_graph_26.map2
-rw-r--r--docs/3.1/inherit_graph_26.md52
-rw-r--r--docs/3.1/inherit_graph_26.pngbin6339 -> 6168 bytes
-rw-r--r--docs/3.1/inherit_graph_27.map2
-rw-r--r--docs/3.1/inherit_graph_27.md52
-rw-r--r--docs/3.1/inherit_graph_27.pngbin6168 -> 857 bytes
-rw-r--r--docs/3.1/inherit_graph_28.map2
-rw-r--r--docs/3.1/inherit_graph_28.md52
-rw-r--r--docs/3.1/inherit_graph_28.pngbin857 -> 1762 bytes
-rw-r--r--docs/3.1/inherit_graph_29.map2
-rw-r--r--docs/3.1/inherit_graph_29.md52
-rw-r--r--docs/3.1/inherit_graph_29.pngbin1762 -> 3149 bytes
-rw-r--r--docs/3.1/inherit_graph_3.map2
-rw-r--r--docs/3.1/inherit_graph_3.md52
-rw-r--r--docs/3.1/inherit_graph_3.pngbin1742 -> 3958 bytes
-rw-r--r--docs/3.1/inherit_graph_4.map2
-rw-r--r--docs/3.1/inherit_graph_4.md52
-rw-r--r--docs/3.1/inherit_graph_4.pngbin3958 -> 1384 bytes
-rw-r--r--docs/3.1/inherit_graph_5.map2
-rw-r--r--docs/3.1/inherit_graph_5.md52
-rw-r--r--docs/3.1/inherit_graph_5.pngbin1384 -> 1060 bytes
-rw-r--r--docs/3.1/inherit_graph_6.map2
-rw-r--r--docs/3.1/inherit_graph_6.md52
-rw-r--r--docs/3.1/inherit_graph_6.pngbin1060 -> 1985 bytes
-rw-r--r--docs/3.1/inherit_graph_7.map2
-rw-r--r--docs/3.1/inherit_graph_7.md52
-rw-r--r--docs/3.1/inherit_graph_7.pngbin1985 -> 2157 bytes
-rw-r--r--docs/3.1/inherit_graph_8.map12
-rw-r--r--docs/3.1/inherit_graph_8.md52
-rw-r--r--docs/3.1/inherit_graph_8.pngbin2157 -> 64958 bytes
-rw-r--r--docs/3.1/inherit_graph_9.map12
-rw-r--r--docs/3.1/inherit_graph_9.md52
-rw-r--r--docs/3.1/inherit_graph_9.pngbin64958 -> 2059 bytes
-rw-r--r--docs/3.1/inherits.html70
-rw-r--r--docs/3.1/led__sysdefs_8h_source.html57
-rw-r--r--docs/3.1/lib8tion_8h_source.html3100
-rw-r--r--docs/3.1/md__r_e_a_d_m_e.html23
-rw-r--r--docs/3.1/md__t_o_d_o.html6
-rw-r--r--docs/3.1/md_release_notes.html2
-rw-r--r--docs/3.1/modules.html14
-rw-r--r--docs/3.1/noise_8h.html2
-rw-r--r--docs/3.1/noise_8h_source.html95
-rw-r--r--docs/3.1/pages.html12
-rw-r--r--docs/3.1/pixeltypes_8h_source.html1631
-rw-r--r--docs/3.1/platforms_8h_source.html37
-rw-r--r--docs/3.1/power__mgt_8h_source.html90
-rw-r--r--docs/3.1/search/all_0.js3
-rw-r--r--docs/3.1/search/all_1.js5
-rw-r--r--docs/3.1/search/all_10.js5
-rw-r--r--docs/3.1/search/all_11.js8
-rw-r--r--docs/3.1/search/all_12.js19
-rw-r--r--docs/3.1/search/all_13.js1
-rw-r--r--docs/3.1/search/all_2.js6
-rw-r--r--docs/3.1/search/all_3.js3
-rw-r--r--docs/3.1/search/all_4.js4
-rw-r--r--docs/3.1/search/all_6.js6
-rw-r--r--docs/3.1/search/all_c.js3
-rw-r--r--docs/3.1/search/all_d.js8
-rw-r--r--docs/3.1/search/all_f.js4
-rw-r--r--docs/3.1/search/classes_0.js5
-rw-r--r--docs/3.1/search/classes_1.js5
-rw-r--r--docs/3.1/search/classes_10.js15
-rw-r--r--docs/3.1/search/classes_11.js16
-rw-r--r--docs/3.1/search/classes_2.js12
-rw-r--r--docs/3.1/search/classes_3.js16
-rw-r--r--docs/3.1/search/classes_4.js8
-rw-r--r--docs/3.1/search/classes_5.js7
-rw-r--r--docs/3.1/search/classes_6.js6
-rw-r--r--docs/3.1/search/classes_7.js3
-rw-r--r--docs/3.1/search/classes_8.js4
-rw-r--r--docs/3.1/search/classes_9.js4
-rw-r--r--docs/3.1/search/classes_a.js2
-rw-r--r--docs/3.1/search/classes_b.js2
-rw-r--r--docs/3.1/search/classes_c.js4
-rw-r--r--docs/3.1/search/classes_d.js4
-rw-r--r--docs/3.1/search/classes_e.js13
-rw-r--r--docs/3.1/search/classes_f.js20
-rw-r--r--docs/3.1/search/functions_0.js2
-rw-r--r--docs/3.1/search/functions_1.js7
-rw-r--r--docs/3.1/search/functions_2.js10
-rw-r--r--docs/3.1/search/functions_3.js11
-rw-r--r--docs/3.1/search/functions_4.js5
-rw-r--r--docs/3.1/search/functions_5.js4
-rw-r--r--docs/3.1/search/functions_6.js9
-rw-r--r--docs/3.1/search/functions_7.js7
-rw-r--r--docs/3.1/search/functions_8.js4
-rw-r--r--docs/3.1/search/functions_9.js4
-rw-r--r--docs/3.1/search/functions_a.js2
-rw-r--r--docs/3.1/search/functions_b.js3
-rw-r--r--docs/3.1/search/functions_c.js8
-rw-r--r--docs/3.1/search/functions_d.js11
-rw-r--r--docs/3.1/search/groups_0.js3
-rw-r--r--docs/3.1/search/groups_2.js2
-rw-r--r--docs/3.1/search/groups_3.js4
-rw-r--r--docs/3.1/search/pages_1.js2
-rw-r--r--docs/3.1/search/pages_2.js3
-rw-r--r--docs/3.1/search/searchdata.js10
-rw-r--r--docs/3.1/search/variables_0.js2
-rw-r--r--docs/3.1/struct_c_h_s_v-members.html2
-rw-r--r--docs/3.1/struct_c_h_s_v.html68
-rw-r--r--docs/3.1/struct_c_r_g_b-members.html6
-rw-r--r--docs/3.1/struct_c_r_g_b.html72
-rw-r--r--docs/3.1/struct_multi_pixel_controller-members.html2
-rw-r--r--docs/3.1/struct_multi_pixel_controller.html8
-rw-r--r--docs/3.1/struct_pixel_controller-members.html2
-rw-r--r--docs/3.1/struct_pixel_controller.html2
-rw-r--r--docs/3.1/structsub4-members.html2
-rw-r--r--docs/3.1/structsub4.html2
-rw-r--r--docs/3.1/todo.html2
-rw-r--r--docs/3.1/union_i_e_e_e754binary32__t-members.html2
-rw-r--r--docs/3.1/union_i_e_e_e754binary32__t.html62
-rw-r--r--docs/3.1/unionbitswap__type-members.html2
-rw-r--r--docs/3.1/unionbitswap__type.html2
-rw-r--r--docs/3.1/unionjust8bits-members.html2
-rw-r--r--docs/3.1/unionjust8bits.html2
-rw-r--r--docs/3.1/uniont_bytes_for_long-members.html2
-rw-r--r--docs/3.1/uniont_bytes_for_long.html2
313 files changed, 7433 insertions, 7569 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
index 25ddfb93..75a88b5d 100644
--- a/docs/3.1/_fast_l_e_d_8h_source.html
+++ b/docs/3.1/_fast_l_e_d_8h_source.html
@@ -129,373 +129,387 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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;<a class="code" href="noise_8h.html">noise.h</a>&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="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword">enum</span> ESPIChipsets {</div>
-<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; LPD8806,</div>
-<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; WS2801,</div>
-<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; WS2803,</div>
-<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; SM16716,</div>
-<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; P9813,</div>
-<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; APA102,</div>
-<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; DOTSTAR</div>
-<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;};</div>
-<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
-<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">enum</span> ESM { SMART_MATRIX };</div>
-<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword">enum</span> OWS2811 { OCTOWS2811 };</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &quot;fastled_progmem.h&quot;</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &quot;lib8tion.h&quot;</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &quot;hsv2rgb.h&quot;</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &quot;colorutils.h&quot;</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#include &quot;colorpalettes.h&quot;</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="noise_8h.html">noise.h</a>&quot;</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#include &quot;power_mgt.h&quot;</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="preprocessor">#include &quot;fastspi.h&quot;</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#include &quot;chipsets.h&quot;</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;FASTLED_NAMESPACE_BEGIN</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">enum</span> ESPIChipsets {</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; LPD8806,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; WS2801,</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; WS2803,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; SM16716,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; P9813,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; APA102,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; DOTSTAR</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"><a class="line" href="class_n_e_o_p_i_x_e_l.html"> 69</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_s2812_controller800_khz.html">WS2812Controller800Khz</a>&lt;DATA_PIN, GRB&gt; {};</div>
-<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="class_t_m1829.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_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="l00071"></a><span class="lineno"><a class="line" href="class_t_m1809.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_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="l00072"></a><span class="lineno"><a class="line" href="class_t_m1804.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_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="l00073"></a><span class="lineno"><a class="line" href="class_t_m1803.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_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="l00074"></a><span class="lineno"><a class="line" href="class_u_c_s1903.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_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="l00075"></a><span class="lineno"><a class="line" href="class_u_c_s1903_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_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="l00076"></a><span class="lineno"><a class="line" href="class_u_c_s1904.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_u_c_s1904.html">UCS1904</a> : <span class="keyword">public</span> <a class="code" href="class_u_c_s1904_controller800_khz.html">UCS1904Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
-<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="class_w_s2812.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_w_s2812.html">WS2812</a> : <span class="keyword">public</span> <a class="code" href="class_w_s2812_controller800_khz.html">WS2812Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
-<div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="class_w_s2812_b.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_s2812_b.html">WS2812B</a> : <span class="keyword">public</span> <a class="code" href="class_w_s2812_controller800_khz.html">WS2812Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
-<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="class_w_s2811.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_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="l00080"></a><span class="lineno"><a class="line" href="class_a_p_a104.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_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="l00081"></a><span class="lineno"><a class="line" href="class_w_s2811__400.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_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="l00082"></a><span class="lineno"><a class="line" href="class_g_w6205.html"> 82</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="l00083"></a><span class="lineno"><a class="line" href="class_g_w6205__400.html"> 83</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="l00084"></a><span class="lineno"><a class="line" href="class_l_p_d1886.html"> 84</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="l00085"></a><span class="lineno"> 85</span>&#160;<span class="preprocessor">#ifdef DmxSimple_h</span></div>
-<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="class_d_m_x_s_i_m_p_l_e.html"> 86</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_d_m_x_s_i_m_p_l_e.html">DMXSIMPLE</a> : <span class="keyword">public</span> <a class="code" href="class_d_m_x_simple_controller.html">DMXSimpleController</a>&lt;DATA_PIN, 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;<span class="preprocessor">#ifdef DmxSerial_h</span></div>
-<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="class_d_m_x_s_e_r_i_a_l.html"> 89</a></span>&#160;<span class="keyword">template</span>&lt;EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_d_m_x_s_e_r_i_a_l.html">DMXSERIAL</a> : <span class="keyword">public</span> <a class="code" href="class_d_m_x_serial_controller.html">DMXSerialController</a>&lt;RGB_ORDER&gt; {};</div>
-<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</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(20)&gt; class LPD8806 : public LPD8806Controller&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;<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="l00094"></a><span class="lineno"> 94</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="l00095"></a><span class="lineno"> 95</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="l00069"></a><span class="lineno"> 69</span>&#160;<span class="keyword">enum</span> ESM { SMART_MATRIX };</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="keyword">enum</span> OWS2811 { OCTOWS2811,OCTOWS2811_400 };</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">#ifdef FASTLED_HAS_CLOCKLESS</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="class_n_e_o_p_i_x_e_l.html"> 73</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_s2812_controller800_khz.html">WS2812Controller800Khz</a>&lt;DATA_PIN, GRB&gt; {};</div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="class_t_m1829.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_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="l00075"></a><span class="lineno"><a class="line" href="class_t_m1809.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_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="l00076"></a><span class="lineno"><a class="line" href="class_t_m1804.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_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="l00077"></a><span class="lineno"><a class="line" href="class_t_m1803.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_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="l00078"></a><span class="lineno"><a class="line" href="class_u_c_s1903.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_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="l00079"></a><span class="lineno"><a class="line" href="class_u_c_s1903_b.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_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="l00080"></a><span class="lineno"><a class="line" href="class_u_c_s1904.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_u_c_s1904.html">UCS1904</a> : <span class="keyword">public</span> <a class="code" href="class_u_c_s1904_controller800_khz.html">UCS1904Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="class_w_s2812.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_w_s2812.html">WS2812</a> : <span class="keyword">public</span> <a class="code" href="class_w_s2812_controller800_khz.html">WS2812Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="class_w_s2812_b.html"> 82</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_s2812_controller800_khz.html">WS2812Controller800Khz</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="class_w_s2811.html"> 83</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="l00084"></a><span class="lineno"><a class="line" href="class_a_p_a104.html"> 84</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="l00085"></a><span class="lineno"><a class="line" href="class_w_s2811__400.html"> 85</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="l00086"></a><span class="lineno"><a class="line" href="class_g_w6205.html"> 86</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="l00087"></a><span class="lineno"><a class="line" href="class_g_w6205__400.html"> 87</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="l00088"></a><span class="lineno"><a class="line" href="class_l_p_d1886.html"> 88</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="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor">#ifdef DmxSimple_h</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="class_d_m_x_s_i_m_p_l_e.html"> 90</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_d_m_x_s_i_m_p_l_e.html">DMXSIMPLE</a> : <span class="keyword">public</span> <a class="code" href="class_d_m_x_simple_controller.html">DMXSimpleController</a>&lt;DATA_PIN, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="preprocessor">#ifdef DmxSerial_h</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="class_d_m_x_s_e_r_i_a_l.html"> 93</a></span>&#160;<span class="keyword">template</span>&lt;EOrder RGB_ORDER&gt; <span class="keyword">class </span><a class="code" href="class_d_m_x_s_e_r_i_a_l.html">DMXSERIAL</a> : <span class="keyword">public</span> <a class="code" href="class_d_m_x_serial_controller.html">DMXSerialController</a>&lt;RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="preprocessor">#endif</span></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="keyword">enum</span> EBlockChipsets {</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="preprocessor">#ifdef PORTA_FIRST_PIN</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; WS2811_PORTA,</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 PORTB_FIRST_PIN</span></div>
-<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; WS2811_PORTB,</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 PORTC_FIRST_PIN</span></div>
-<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; WS2811_PORTC,</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 PORTD_FIRST_PIN</span></div>
-<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; WS2811_PORTD,</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; WS2811_400_PORTA,</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="preprocessor">#ifdef PORTB_FIRST_PIN</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; WS2811_PORTB,</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; WS2811_400_PORTB,</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">#ifdef PORTC_FIRST_PIN</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; WS2811_PORTC,</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; WS2811_400_PORTC,</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;<span class="preprocessor">#ifdef HAS_PORTDC</span></div>
-<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; WS2811_PORTDC,</div>
-<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="preprocessor">#endif</span></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="preprocessor">#if defined(LIB8_ATTINY)</span></div>
-<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="preprocessor">#define NUM_CONTROLLERS 2</span></div>
-<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="preprocessor">#define NUM_CONTROLLERS 8</span></div>
-<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div>
-<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html"> 125</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="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// int m_nControllers;</span></div>
-<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; uint8_t m_Scale; </div>
-<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; uint16_t m_nFPS; </div>
-<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; uint32_t m_nMinMicros; </div>
-<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="class_c_fast_l_e_d.html">CFastLED</a>();</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="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00146"></a><span class="lineno"> 146</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="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;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
-<div class="line"><a name="l00169"></a><span class="lineno"> 169</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00170"></a><span class="lineno"> 170</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00171"></a><span class="lineno"> 171</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00172"></a><span class="lineno"> 172</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00173"></a><span class="lineno"> 173</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">case</span> DOTSTAR:</div>
-<div class="line"><a name="l00175"></a><span class="lineno"> 175</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div>
-<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div>
-<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div>
-<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="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;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
-<div class="line"><a name="l00181"></a><span class="lineno"> 181</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00182"></a><span class="lineno"> 182</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00183"></a><span class="lineno"> 183</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00184"></a><span class="lineno"> 184</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00185"></a><span class="lineno"> 185</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">case</span> DOTSTAR:</div>
-<div class="line"><a name="l00187"></a><span class="lineno"> 187</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div>
-<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div>
-<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;</div>
-<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="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;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
-<div class="line"><a name="l00193"></a><span class="lineno"> 193</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00194"></a><span class="lineno"> 194</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00195"></a><span class="lineno"> 195</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00196"></a><span class="lineno"> 196</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00197"></a><span class="lineno"> 197</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">case</span> DOTSTAR:</div>
-<div class="line"><a name="l00199"></a><span class="lineno"> 199</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
-<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div>
-<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div>
-<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div>
-<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="preprocessor">#ifdef SPI_DATA</span></div>
-<div class="line"><a name="l00204"></a><span class="lineno"> 204</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;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00205"></a><span class="lineno"> 205</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="l00110"></a><span class="lineno"> 110</span>&#160;<span class="preprocessor">#ifdef PORTD_FIRST_PIN</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; WS2811_PORTD,</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; WS2811_400_PORTD,</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="preprocessor">#ifdef HAS_PORTDC</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; WS2811_PORTDC,</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; WS2811_400_PORTDC,</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;};</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="preprocessor">#if defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="preprocessor">#define NUM_CONTROLLERS 2</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="preprocessor">#define NUM_CONTROLLERS 8</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html"> 130</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="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// int m_nControllers;</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; uint8_t m_Scale; </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; uint16_t m_nFPS; </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; uint32_t m_nMinMicros; </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="class_c_fast_l_e_d.html">CFastLED</a>();</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="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00151"></a><span class="lineno"> 151</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="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;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">case</span> DOTSTAR:</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div>
+<div class="line"><a name="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">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;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">case</span> DOTSTAR:</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</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;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</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;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">case</span> DOTSTAR:</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</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> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div>
-<div class="line"><a name="l00208"></a><span class="lineno"> 208</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;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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; <span class="keywordflow">return</span> addLeds&lt;CHIPSET, SPI_DATA, SPI_CLOCK, RGB_ORDER&gt;(data, nLedsOrOffset, nLedsIfOffset);</div>
-<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div>
-<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div>
-<div class="line"><a name="l00212"></a><span class="lineno"> 212</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;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00213"></a><span class="lineno"> 213</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="l00214"></a><span class="lineno"> 214</span>&#160; }</div>
-<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div>
-<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="preprocessor">#endif</span></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;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="preprocessor">#ifdef SPI_DATA</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</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;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00210"></a><span class="lineno"> 210</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="l00211"></a><span class="lineno"> 211</span>&#160; }</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; <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;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00214"></a><span class="lineno"> 214</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="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="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;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00218"></a><span class="lineno"> 218</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="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="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="l00238"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"> 238</a></span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9">addLeds</a>(<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="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keyword">static</span> CHIPSET&lt;DATA_PIN, RGB_ORDER&gt; c;</div>
-<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset);</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;</div>
-<div class="line"><a name="l00243"></a><span class="lineno"> 243</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="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keyword">static</span> CHIPSET&lt;DATA_PIN, RGB&gt; c;</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;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="preprocessor">#ifdef FASTLED_HAS_CLOCKLESS</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</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="l00244"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"> 244</a></span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9">addLeds</a>(<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="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keyword">static</span> CHIPSET&lt;DATA_PIN, RGB_ORDER&gt; c;</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset);</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div>
-<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <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="l00249"></a><span class="lineno"> 249</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="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keyword">static</span> CHIPSET&lt;DATA_PIN&gt; c;</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keyword">static</span> CHIPSET&lt;DATA_PIN, RGB&gt; c;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset);</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; }</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div>
-<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="preprocessor"> #ifdef FASTSPI_USE_DMX_SIMPLE</span></div>
-<div class="line"><a name="l00256"></a><span class="lineno"> 256</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="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="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">switch</span>(CHIPSET) {</div>
-<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">case</span> DMX: { <span class="keyword">static</span> DMXController&lt;DATA_PIN&gt; controller; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;controller, data, nLedsOrOffset, nLedsIfOffset); }</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="preprocessor"> #endif</span></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;</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="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="l00286"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#ac4dff92f45048399edb0812a02ab9d96"> 286</a></span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#ac4dff92f45048399edb0812a02ab9d96">addLeds</a>(<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="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keyword">static</span> CHIPSET&lt;RGB_ORDER&gt; c;</div>
-<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset);</div>
-<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div>
-<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div>
-<div class="line"><a name="l00291"></a><span class="lineno"> 291</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="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">static</span> CHIPSET&lt;RGB&gt; c;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</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="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">static</span> CHIPSET&lt;DATA_PIN&gt; c;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset);</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;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="preprocessor"> #ifdef FASTSPI_USE_DMX_SIMPLE</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</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="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00264"></a><span class="lineno"> 264</span>&#160; {</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">case</span> DMX: { <span class="keyword">static</span> DMXController&lt;DATA_PIN&gt; controller; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;controller, data, nLedsOrOffset, nLedsIfOffset); }</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"> #endif</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</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="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="l00292"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#ac4dff92f45048399edb0812a02ab9d96"> 292</a></span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#ac4dff92f45048399edb0812a02ab9d96">addLeds</a>(<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="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">static</span> CHIPSET&lt;RGB_ORDER&gt; c;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset);</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;</div>
-<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="preprocessor">#ifdef USE_OCTOWS2811</span></div>
-<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keyword">template</span>&lt;OWS2811 CHIPSET, EOrder RGB_ORDER&gt;</div>
-<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00300"></a><span class="lineno"> 300</span>&#160; {</div>
-<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
-<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">case</span> OCTOWS2811: { <span class="keyword">static</span> COctoWS2811Controller&lt;RGB_ORDER&gt; controller; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;controller, data, nLedsOrOffset, nLedsIfOffset); }</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; }</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="keyword">template</span>&lt;OWS2811 CHIPSET&gt;</div>
-<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00308"></a><span class="lineno"> 308</span>&#160; {</div>
-<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">return</span> addLeds&lt;CHIPSET,GRB&gt;(data,nLedsOrOffset,nLedsIfOffset);</div>
-<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div>
-<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;</div>
-<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="preprocessor">#endif</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="preprocessor">#ifdef SmartMatrix_h</span></div>
-<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">template</span>&lt;ESM CHIPSET&gt;</div>
-<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00317"></a><span class="lineno"> 317</span>&#160; {</div>
-<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
-<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">case</span> SMART_MATRIX: { <span class="keyword">static</span> CSmartMatrixController controller; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;controller, data, nLedsOrOffset, nLedsIfOffset); }</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="preprocessor">#endif</span></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;</div>
-<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div>
-<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="preprocessor">#ifdef HAS_BLOCKLESS</span></div>
-<div class="line"><a name="l00327"></a><span class="lineno"> 327</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="keyword">template</span>&lt;EBlockChipsets CHIPSET, <span class="keywordtype">int</span> NUM_LANES, EOrder RGB_ORDER&gt;</div>
-<div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"> 347</a></span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9">addLeds</a>(<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="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
-<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;<span class="preprocessor"> #ifdef PORTA_FIRST_PIN</span></div>
-<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">case</span> WS2811_PORTA: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTA_FIRST_PIN, NS(320), NS(320), NS(640), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
-<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="preprocessor"> #endif</span></div>
-<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="preprocessor"> #ifdef PORTB_FIRST_PIN</span></div>
-<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">case</span> WS2811_PORTB: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTB_FIRST_PIN, NS(320), NS(320), NS(640), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
-<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="preprocessor"> #endif</span></div>
-<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="preprocessor"> #ifdef PORTC_FIRST_PIN</span></div>
-<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">case</span> WS2811_PORTC: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTC_FIRST_PIN, NS(320), NS(320), NS(640), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
-<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="preprocessor"> #endif</span></div>
-<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="preprocessor"> #ifdef PORTD_FIRST_PIN</span></div>
-<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">case</span> WS2811_PORTD: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTD_FIRST_PIN, NS(320), NS(320), NS(640), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
-<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="preprocessor"> #endif</span></div>
-<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="preprocessor"> #ifdef HAS_PORTDC</span></div>
-<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">case</span> WS2811_PORTDC: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> SixteenWayInlineBlockClocklessController&lt;16,NS(320), NS(320), NS(640), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</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="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">static</span> CHIPSET&lt;RGB&gt; c;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;c, data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;<span class="preprocessor">#ifdef USE_OCTOWS2811</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keyword">template</span>&lt;OWS2811 CHIPSET, EOrder RGB_ORDER&gt;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00306"></a><span class="lineno"> 306</span>&#160; {</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">case</span> OCTOWS2811: { <span class="keyword">static</span> COctoWS2811Controller&lt;RGB_ORDER&gt; controller; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;controller, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">case</span> OCTOWS2811_400: { <span class="keyword">static</span> COctoWS2811Controller&lt;RGB_ORDER,true&gt; controller; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;controller, data, nLedsOrOffset, nLedsIfOffset); }</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keyword">template</span>&lt;OWS2811 CHIPSET&gt;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00315"></a><span class="lineno"> 315</span>&#160; {</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> addLeds&lt;CHIPSET,GRB&gt;(data,nLedsOrOffset,nLedsIfOffset);</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;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="preprocessor">#endif</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;<span class="preprocessor">#ifdef SmartMatrix_h</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keyword">template</span>&lt;ESM CHIPSET&gt;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00324"></a><span class="lineno"> 324</span>&#160; {</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">case</span> SMART_MATRIX: { <span class="keyword">static</span> CSmartMatrixController controller; <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(&amp;controller, data, nLedsOrOffset, nLedsIfOffset); }</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; }</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="preprocessor">#ifdef FASTLED_HAS_BLOCKLESS</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</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="keyword">template</span>&lt;EBlockChipsets CHIPSET, <span class="keywordtype">int</span> NUM_LANES, EOrder RGB_ORDER&gt;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"> 354</a></span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9">addLeds</a>(<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="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">switch</span>(CHIPSET) {</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="preprocessor"> #ifdef PORTA_FIRST_PIN</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">case</span> WS2811_PORTA: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTA_FIRST_PIN, NS(320), NS(320), NS(640), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">case</span> WS2811_400_PORTA: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTA_FIRST_PIN, NS(800), NS(800), NS(900), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;<span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="preprocessor"> #ifdef PORTB_FIRST_PIN</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">case</span> WS2811_PORTB: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTB_FIRST_PIN, NS(320), NS(320), NS(640), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">case</span> WS2811_400_PORTB: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTB_FIRST_PIN, NS(800), NS(800), NS(900), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;<span class="preprocessor"> #endif</span></div>
-<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div>
-<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; }</div>
-<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;</div>
-<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keyword">template</span>&lt;EBlockChipsets CHIPSET, <span class="keywordtype">int</span> NUM_LANES&gt;</div>
-<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">return</span> addLeds&lt;CHIPSET,NUM_LANES,GRB&gt;(data,nLedsOrOffset,nLedsIfOffset);</div>
-<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; }</div>
-<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div>
-<div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#a730ba7d967e882b4b893689cf333b2eb"> 376</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a730ba7d967e882b4b893689cf333b2eb">setBrightness</a>(uint8_t scale) { m_Scale = scale; }</div>
-<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div>
-<div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#ac2615781ec12e025fb17cc0e66281716"> 380</a></span>&#160; uint8_t <a class="code" href="class_c_fast_l_e_d.html#ac2615781ec12e025fb17cc0e66281716">getBrightness</a>() { <span class="keywordflow">return</span> m_Scale; }</div>
-<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;</div>
-<div class="line"><a name="l00384"></a><span class="lineno"> 384</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="l00364"></a><span class="lineno"> 364</span>&#160;<span class="preprocessor"> #ifdef PORTC_FIRST_PIN</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">case</span> WS2811_PORTC: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTC_FIRST_PIN, NS(320), NS(320), NS(640), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">case</span> WS2811_400_PORTC: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTC_FIRST_PIN, NS(800), NS(800), NS(900), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;<span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="preprocessor"> #ifdef PORTD_FIRST_PIN</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">case</span> WS2811_PORTD: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTD_FIRST_PIN, NS(320), NS(320), NS(640), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">case</span> WS2811_400_PORTD: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> InlineBlockClocklessController&lt;NUM_LANES, PORTD_FIRST_PIN, NS(800), NS(800), NS(900), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="preprocessor"> #endif</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="preprocessor"> #ifdef HAS_PORTDC</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">case</span> WS2811_PORTDC: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> SixteenWayInlineBlockClocklessController&lt;16,NS(320), NS(320), NS(640), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">case</span> WS2811_400_PORTDC: <span class="keywordflow">return</span> <a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<span class="keyword">new</span> SixteenWayInlineBlockClocklessController&lt;16,NS(800), NS(800), NS(900), RGB_ORDER&gt;(), data, nLedsOrOffset, nLedsIfOffset);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="preprocessor"> #endif</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; }</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="keyword">template</span>&lt;EBlockChipsets CHIPSET, <span class="keywordtype">int</span> NUM_LANES&gt;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp;<a class="code" href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">addLeds</a>(<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="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">return</span> addLeds&lt;CHIPSET,NUM_LANES,GRB&gt;(data,nLedsOrOffset,nLedsIfOffset);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;</div>
-<div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de"> 387</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="l00388"></a><span class="lineno"> 388</span>&#160;</div>
-<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a042989511cbc42390620bedc196ea956">clear</a>(<span class="keywordtype">boolean</span> writeData = <span class="keyword">false</span>);</div>
-<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div>
-<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#ac4f613f1b3e618528dca3189df88ce80">clearData</a>();</div>
-<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;</div>
-<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a7315b060d295bad5fbd32e50eaaf02b0">showColor</a>(<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="l00388"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#a730ba7d967e882b4b893689cf333b2eb"> 388</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a730ba7d967e882b4b893689cf333b2eb">setBrightness</a>(uint8_t scale) { m_Scale = scale; }</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;</div>
+<div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#ac2615781ec12e025fb17cc0e66281716"> 392</a></span>&#160; uint8_t <a class="code" href="class_c_fast_l_e_d.html#ac2615781ec12e025fb17cc0e66281716">getBrightness</a>() { <span class="keywordflow">return</span> m_Scale; }</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</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="l00397"></a><span class="lineno"> 397</span>&#160;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de"> 399</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="l00400"></a><span class="lineno"> 400</span>&#160;</div>
-<div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#a570df74cf09e6215c3647333d2b479a9"> 403</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a570df74cf09e6215c3647333d2b479a9">showColor</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; color) { <a class="code" href="class_c_fast_l_e_d.html#a570df74cf09e6215c3647333d2b479a9">showColor</a>(color, m_Scale); }</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a042989511cbc42390620bedc196ea956">clear</a>(<span class="keywordtype">boolean</span> writeData = <span class="keyword">false</span>);</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;</div>
-<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a6819ff831058a710d4582dfc09817202">delay</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ms);</div>
-<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;</div>
-<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a28c2dfb0ec592db03f3063ade135f19f">setTemperature</a>(<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="l00414"></a><span class="lineno"> 414</span>&#160;</div>
-<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#ad266c3e649cc12a6dc49a1e229acc282">setCorrection</a>(<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="l00419"></a><span class="lineno"> 419</span>&#160;</div>
-<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a7ae5d3864df01101d82d242c123ffb36">setDither</a>(uint8_t ditherMode = BINARY_DITHER);</div>
-<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;</div>
-<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a09f4d61853d88482fa5824144c8127ed">setMaxRefreshRate</a>(uint16_t refresh);</div>
-<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;</div>
-<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a61d27e179c9b68bde89d220aebc0de32">countFPS</a>(<span class="keywordtype">int</span> nFrames=25);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#ac4f613f1b3e618528dca3189df88ce80">clearData</a>();</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a7315b060d295bad5fbd32e50eaaf02b0">showColor</a>(<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="l00412"></a><span class="lineno"> 412</span>&#160;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#a570df74cf09e6215c3647333d2b479a9"> 415</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a570df74cf09e6215c3647333d2b479a9">showColor</a>(<span class="keyword">const</span> <span class="keyword">struct</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp; color) { <a class="code" href="class_c_fast_l_e_d.html#a570df74cf09e6215c3647333d2b479a9">showColor</a>(color, m_Scale); }</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a6819ff831058a710d4582dfc09817202">delay</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ms);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a28c2dfb0ec592db03f3063ade135f19f">setTemperature</a>(<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="l00426"></a><span class="lineno"> 426</span>&#160;</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#ad266c3e649cc12a6dc49a1e229acc282">setCorrection</a>(<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="l00431"></a><span class="lineno"> 431</span>&#160;</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a7ae5d3864df01101d82d242c123ffb36">setDither</a>(uint8_t ditherMode = BINARY_DITHER);</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;</div>
-<div class="line"><a name="l00439"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#aa8c3ae3381e524ce30b181ffa23b83cd"> 439</a></span>&#160; uint16_t <a class="code" href="class_c_fast_l_e_d.html#aa8c3ae3381e524ce30b181ffa23b83cd">getFPS</a>() { <span class="keywordflow">return</span> m_nFPS; }</div>
-<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div>
-<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordtype">int</span> <a class="code" href="class_c_fast_l_e_d.html#ae5730545ea18b1f5228172f9d246beb6">count</a>();</div>
-<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;</div>
-<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_fast_l_e_d.html#a646128b7d8c14b5020b285dbc8bc713b">operator[]</a>(<span class="keywordtype">int</span> x);</div>
-<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div>
-<div class="line"><a name="l00451"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#a18fba22754d2a1a206fc5db8d24a92d0"> 451</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="class_c_fast_l_e_d.html#a18fba22754d2a1a206fc5db8d24a92d0">size</a>() { <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[0].size(); }</div>
-<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;</div>
-<div class="line"><a name="l00455"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#ae3c0a81b88fb64a65725cb2fed67f766"> 455</a></span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> *<a class="code" href="class_c_fast_l_e_d.html#ae3c0a81b88fb64a65725cb2fed67f766">leds</a>() { <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[0].leds(); }</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;<span class="preprocessor">#define FastSPI_LED FastLED</span></div>
-<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="preprocessor">#define FastSPI_LED2 FastLED</span></div>
-<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="preprocessor">#ifndef LEDS</span></div>
-<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;<span class="preprocessor">#define LEDS FastLED</span></div>
-<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a1f39e8404db214bbd6a776f52a77d8b1">setMaxRefreshRate</a>(uint16_t refresh, <span class="keywordtype">bool</span> constrain=<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_fast_l_e_d.html#a61d27e179c9b68bde89d220aebc0de32">countFPS</a>(<span class="keywordtype">int</span> nFrames=25);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#aa8c3ae3381e524ce30b181ffa23b83cd"> 454</a></span>&#160; uint16_t <a class="code" href="class_c_fast_l_e_d.html#aa8c3ae3381e524ce30b181ffa23b83cd">getFPS</a>() { <span class="keywordflow">return</span> m_nFPS; }</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordtype">int</span> <a class="code" href="class_c_fast_l_e_d.html#ae5730545ea18b1f5228172f9d246beb6">count</a>();</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_fast_l_e_d.html#a646128b7d8c14b5020b285dbc8bc713b">operator[]</a>(<span class="keywordtype">int</span> x);</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;</div>
-<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<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="l00465"></a><span class="lineno"> 465</span>&#160;</div>
-<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="comment">// Warnings for undefined things</span></div>
-<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="preprocessor">#ifndef HAS_HARDWARE_PIN_SUPPORT</span></div>
-<div class="line"><a name="l00468"></a><span class="lineno"> 468</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="l00469"></a><span class="lineno"> 469</span>&#160;<span class="preprocessor">#define NO_HARDWARE_PIN_SUPPORT</span></div>
-<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#a18fba22754d2a1a206fc5db8d24a92d0"> 466</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="class_c_fast_l_e_d.html#a18fba22754d2a1a206fc5db8d24a92d0">size</a>() { <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[0].size(); }</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;</div>
+<div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="class_c_fast_l_e_d.html#ae3c0a81b88fb64a65725cb2fed67f766"> 470</a></span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> *<a class="code" href="class_c_fast_l_e_d.html#ae3c0a81b88fb64a65725cb2fed67f766">leds</a>() { <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[0].leds(); }</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="preprocessor">#define FastSPI_LED FastLED</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="preprocessor">#define FastSPI_LED2 FastLED</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="preprocessor">#ifndef LEDS</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="preprocessor">#define LEDS FastLED</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="preprocessor">#endif</span></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;<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="l00480"></a><span class="lineno"> 480</span>&#160;</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="comment">// Warnings for undefined things</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="preprocessor">#ifndef HAS_HARDWARE_PIN_SUPPORT</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</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="l00484"></a><span class="lineno"> 484</span>&#160;<span class="preprocessor">#define NO_HARDWARE_PIN_SUPPORT</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="preprocessor">#endif</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;</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;FASTLED_NAMESPACE_END</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="preprocessor">#endif</span></div>
<div class="ttc" id="bitswap_8h_html"><div class="ttname"><a href="bitswap_8h.html">bitswap.h</a></div><div class="ttdoc">Functions for rotating bits/bytes. </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:413</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_ac4dff92f45048399edb0812a02ab9d96"><div class="ttname"><a href="class_c_fast_l_e_d.html#ac4dff92f45048399edb0812a02ab9d96">CFastLED::addLeds</a></div><div class="ttdeci">static CLEDController &amp; addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)</div><div class="ttdoc">Add a 3rd party library based CLEDController instance to the world. </div><div class="ttdef"><b>Definition:</b> FastLED.h:286</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:77</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_fast_l_e_d_html_a646128b7d8c14b5020b285dbc8bc713b"><div class="ttname"><a href="class_c_fast_l_e_d.html#a646128b7d8c14b5020b285dbc8bc713b">CFastLED::operator[]</a></div><div class="ttdeci">CLEDController &amp; operator[](int x)</div><div class="ttdoc">Get a reference to a registered controller. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:63</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:84</div></div>
-<div class="ttc" id="class_u_c_s1904_controller800_khz_html"><div class="ttname"><a href="class_u_c_s1904_controller800_khz.html">UCS1904Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:419</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:82</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="ttdoc">Base definition for an LED controller. </div><div class="ttdef"><b>Definition:</b> controller.h:32</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_a18fba22754d2a1a206fc5db8d24a92d0"><div class="ttname"><a href="class_c_fast_l_e_d.html#a18fba22754d2a1a206fc5db8d24a92d0">CFastLED::size</a></div><div class="ttdeci">int size()</div><div class="ttdoc">Get the number of leds in the first controller. </div><div class="ttdef"><b>Definition:</b> FastLED.h:451</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:407</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_ac2615781ec12e025fb17cc0e66281716"><div class="ttname"><a href="class_c_fast_l_e_d.html#ac2615781ec12e025fb17cc0e66281716">CFastLED::getBrightness</a></div><div class="ttdeci">uint8_t getBrightness()</div><div class="ttdoc">Get the current global brightness setting. </div><div class="ttdef"><b>Definition:</b> FastLED.h:380</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="ttdoc">LPD8806 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:18</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:416</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:434</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_ae5730545ea18b1f5228172f9d246beb6"><div class="ttname"><a href="class_c_fast_l_e_d.html#ae5730545ea18b1f5228172f9d246beb6">CFastLED::count</a></div><div class="ttdeci">int count()</div><div class="ttdoc">Get how many controllers have been registered. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:53</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="ttdoc">High level controller interface for FastLED. </div><div class="ttdef"><b>Definition:</b> FastLED.h:125</div></div>
-<div class="ttc" id="class_d_m_x_simple_controller_html"><div class="ttname"><a href="class_d_m_x_simple_controller.html">DMXSimpleController</a></div><div class="ttdef"><b>Definition:</b> dmx.h:10</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"><div class="ttname"><a href="class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9">CFastLED::addLeds</a></div><div class="ttdeci">static CLEDController &amp; addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)</div><div class="ttdoc">Add a clockless (aka 3wire, also DMX) based CLEDController instance to the world. ...</div><div class="ttdef"><b>Definition:</b> FastLED.h:238</div></div>
-<div class="ttc" id="class_w_s2812_controller800_khz_html"><div class="ttname"><a href="class_w_s2812_controller800_khz.html">WS2812Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:404</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:425</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:74</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:422</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:71</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="ttdoc">WS2801 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:91</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_a7ae5d3864df01101d82d242c123ffb36"><div class="ttname"><a href="class_c_fast_l_e_d.html#a7ae5d3864df01101d82d242c123ffb36">CFastLED::setDither</a></div><div class="ttdeci">void setDither(uint8_t ditherMode=BINARY_DITHER)</div><div class="ttdoc">Set the dithering mode. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:133</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_a28c2dfb0ec592db03f3063ade135f19f"><div class="ttname"><a href="class_c_fast_l_e_d.html#a28c2dfb0ec592db03f3063ade135f19f">CFastLED::setTemperature</a></div><div class="ttdeci">void setTemperature(const struct CRGB &amp;temp)</div><div class="ttdoc">Set a global color temperature. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:117</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_aa8c3ae3381e524ce30b181ffa23b83cd"><div class="ttname"><a href="class_c_fast_l_e_d.html#aa8c3ae3381e524ce30b181ffa23b83cd">CFastLED::getFPS</a></div><div class="ttdeci">uint16_t getFPS()</div><div class="ttdoc">Get the number of frames/second being written out. </div><div class="ttdef"><b>Definition:</b> FastLED.h:439</div></div>
-<div class="ttc" id="class_d_m_x_s_i_m_p_l_e_html"><div class="ttname"><a href="class_d_m_x_s_i_m_p_l_e.html">DMXSIMPLE</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:86</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:400</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_ae3c0a81b88fb64a65725cb2fed67f766"><div class="ttname"><a href="class_c_fast_l_e_d.html#ae3c0a81b88fb64a65725cb2fed67f766">CFastLED::leds</a></div><div class="ttdeci">CRGB * leds()</div><div class="ttdoc">Get a pointer to led data for the first controller. </div><div class="ttdef"><b>Definition:</b> FastLED.h:455</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:428</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:70</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:69</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:387</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_ad266c3e649cc12a6dc49a1e229acc282"><div class="ttname"><a href="class_c_fast_l_e_d.html#ad266c3e649cc12a6dc49a1e229acc282">CFastLED::setCorrection</a></div><div class="ttdeci">void setCorrection(const struct CRGB &amp;correction)</div><div class="ttdoc">Set a global color correction. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:125</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_a7315b060d295bad5fbd32e50eaaf02b0"><div class="ttname"><a href="class_c_fast_l_e_d.html#a7315b060d295bad5fbd32e50eaaf02b0">CFastLED::showColor</a></div><div class="ttdeci">void showColor(const struct CRGB &amp;color, uint8_t scale)</div><div class="ttdoc">Set all leds on all controllers to the given color/scale. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:75</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:78</div></div>
-<div class="ttc" id="class_u_c_s1904_html"><div class="ttname"><a href="class_u_c_s1904.html">UCS1904</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:76</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_a09f4d61853d88482fa5824144c8127ed"><div class="ttname"><a href="class_c_fast_l_e_d.html#a09f4d61853d88482fa5824144c8127ed">CFastLED::setMaxRefreshRate</a></div><div class="ttdeci">void setMaxRefreshRate(uint16_t refresh)</div><div class="ttdoc">Set the maximum refresh rate. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:199</div></div>
-<div class="ttc" id="class_p9813_controller_html"><div class="ttname"><a href="class_p9813_controller.html">P9813Controller</a></div><div class="ttdoc">P9813 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:235</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_afd7928d822589740af6e23b2d510cf3f"><div class="ttname"><a href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">CFastLED::addLeds</a></div><div class="ttdeci">static CLEDController &amp; addLeds(CLEDController *pLed, struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)</div><div class="ttdoc">Add a CLEDController instance to the world. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:26</div></div>
-<div class="ttc" id="class_d_m_x_s_e_r_i_a_l_html"><div class="ttname"><a href="class_d_m_x_s_e_r_i_a_l.html">DMXSERIAL</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:89</div></div>
-<div class="ttc" id="class_d_m_x_serial_controller_html"><div class="ttname"><a href="class_d_m_x_serial_controller.html">DMXSerialController</a></div><div class="ttdef"><b>Definition:</b> dmx.h:57</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_a730ba7d967e882b4b893689cf333b2eb"><div class="ttname"><a href="class_c_fast_l_e_d.html#a730ba7d967e882b4b893689cf333b2eb">CFastLED::setBrightness</a></div><div class="ttdeci">void setBrightness(uint8_t scale)</div><div class="ttdoc">Set the global brightness scaling. </div><div class="ttdef"><b>Definition:</b> FastLED.h:376</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:431</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:431</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_ac4dff92f45048399edb0812a02ab9d96"><div class="ttname"><a href="class_c_fast_l_e_d.html#ac4dff92f45048399edb0812a02ab9d96">CFastLED::addLeds</a></div><div class="ttdeci">static CLEDController &amp; addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)</div><div class="ttdoc">Add a 3rd party library based CLEDController instance to the world. </div><div class="ttdef"><b>Definition:</b> FastLED.h:292</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:81</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:83</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a646128b7d8c14b5020b285dbc8bc713b"><div class="ttname"><a href="class_c_fast_l_e_d.html#a646128b7d8c14b5020b285dbc8bc713b">CFastLED::operator[]</a></div><div class="ttdeci">CLEDController &amp; operator[](int x)</div><div class="ttdoc">Get a reference to a registered controller. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:66</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:88</div></div>
+<div class="ttc" id="class_u_c_s1904_controller800_khz_html"><div class="ttname"><a href="class_u_c_s1904_controller800_khz.html">UCS1904Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:437</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:86</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="ttdoc">Base definition for an LED controller. </div><div class="ttdef"><b>Definition:</b> controller.h:34</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a18fba22754d2a1a206fc5db8d24a92d0"><div class="ttname"><a href="class_c_fast_l_e_d.html#a18fba22754d2a1a206fc5db8d24a92d0">CFastLED::size</a></div><div class="ttdeci">int size()</div><div class="ttdoc">Get the number of leds in the first controller. </div><div class="ttdef"><b>Definition:</b> FastLED.h:466</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:425</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_ac2615781ec12e025fb17cc0e66281716"><div class="ttname"><a href="class_c_fast_l_e_d.html#ac2615781ec12e025fb17cc0e66281716">CFastLED::getBrightness</a></div><div class="ttdeci">uint8_t getBrightness()</div><div class="ttdoc">Get the current global brightness setting. </div><div class="ttdef"><b>Definition:</b> FastLED.h:392</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="ttdoc">LPD8806 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:20</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:434</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:452</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_ae5730545ea18b1f5228172f9d246beb6"><div class="ttname"><a href="class_c_fast_l_e_d.html#ae5730545ea18b1f5228172f9d246beb6">CFastLED::count</a></div><div class="ttdeci">int count()</div><div class="ttdoc">Get how many controllers have been registered. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:56</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="ttdoc">High level controller interface for FastLED. </div><div class="ttdef"><b>Definition:</b> FastLED.h:130</div></div>
+<div class="ttc" id="class_d_m_x_simple_controller_html"><div class="ttname"><a href="class_d_m_x_simple_controller.html">DMXSimpleController</a></div><div class="ttdef"><b>Definition:</b> dmx.h:12</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9"><div class="ttname"><a href="class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9">CFastLED::addLeds</a></div><div class="ttdeci">static CLEDController &amp; addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)</div><div class="ttdoc">Add a clockless (aka 3wire, also DMX) based CLEDController instance to the world. ...</div><div class="ttdef"><b>Definition:</b> FastLED.h:244</div></div>
+<div class="ttc" id="class_w_s2812_controller800_khz_html"><div class="ttname"><a href="class_w_s2812_controller800_khz.html">WS2812Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:422</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:443</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:78</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:440</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:75</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="ttdoc">WS2801 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:94</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a7ae5d3864df01101d82d242c123ffb36"><div class="ttname"><a href="class_c_fast_l_e_d.html#a7ae5d3864df01101d82d242c123ffb36">CFastLED::setDither</a></div><div class="ttdeci">void setDither(uint8_t ditherMode=BINARY_DITHER)</div><div class="ttdoc">Set the dithering mode. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:136</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a28c2dfb0ec592db03f3063ade135f19f"><div class="ttname"><a href="class_c_fast_l_e_d.html#a28c2dfb0ec592db03f3063ade135f19f">CFastLED::setTemperature</a></div><div class="ttdeci">void setTemperature(const struct CRGB &amp;temp)</div><div class="ttdoc">Set a global color temperature. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:120</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_aa8c3ae3381e524ce30b181ffa23b83cd"><div class="ttname"><a href="class_c_fast_l_e_d.html#aa8c3ae3381e524ce30b181ffa23b83cd">CFastLED::getFPS</a></div><div class="ttdeci">uint16_t getFPS()</div><div class="ttdoc">Get the number of frames/second being written out. </div><div class="ttdef"><b>Definition:</b> FastLED.h:454</div></div>
+<div class="ttc" id="class_d_m_x_s_i_m_p_l_e_html"><div class="ttname"><a href="class_d_m_x_s_i_m_p_l_e.html">DMXSIMPLE</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:90</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:418</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_ae3c0a81b88fb64a65725cb2fed67f766"><div class="ttname"><a href="class_c_fast_l_e_d.html#ae3c0a81b88fb64a65725cb2fed67f766">CFastLED::leds</a></div><div class="ttdeci">CRGB * leds()</div><div class="ttdoc">Get a pointer to led data for the first controller. </div><div class="ttdef"><b>Definition:</b> FastLED.h:470</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:446</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:74</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:73</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:399</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_ad266c3e649cc12a6dc49a1e229acc282"><div class="ttname"><a href="class_c_fast_l_e_d.html#ad266c3e649cc12a6dc49a1e229acc282">CFastLED::setCorrection</a></div><div class="ttdeci">void setCorrection(const struct CRGB &amp;correction)</div><div class="ttdoc">Set a global color correction. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:128</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a7315b060d295bad5fbd32e50eaaf02b0"><div class="ttname"><a href="class_c_fast_l_e_d.html#a7315b060d295bad5fbd32e50eaaf02b0">CFastLED::showColor</a></div><div class="ttdeci">void showColor(const struct CRGB &amp;color, uint8_t scale)</div><div class="ttdoc">Set all leds on all controllers to the given color/scale. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:78</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:82</div></div>
+<div class="ttc" id="class_u_c_s1904_html"><div class="ttname"><a href="class_u_c_s1904.html">UCS1904</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:80</div></div>
+<div class="ttc" id="class_p9813_controller_html"><div class="ttname"><a href="class_p9813_controller.html">P9813Controller</a></div><div class="ttdoc">P9813 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:249</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_afd7928d822589740af6e23b2d510cf3f"><div class="ttname"><a href="class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f">CFastLED::addLeds</a></div><div class="ttdeci">static CLEDController &amp; addLeds(CLEDController *pLed, struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)</div><div class="ttdoc">Add a CLEDController instance to the world. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:28</div></div>
+<div class="ttc" id="class_d_m_x_s_e_r_i_a_l_html"><div class="ttname"><a href="class_d_m_x_s_e_r_i_a_l.html">DMXSERIAL</a></div><div class="ttdef"><b>Definition:</b> FastLED.h:93</div></div>
+<div class="ttc" id="class_d_m_x_serial_controller_html"><div class="ttname"><a href="class_d_m_x_serial_controller.html">DMXSerialController</a></div><div class="ttdef"><b>Definition:</b> dmx.h:63</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a730ba7d967e882b4b893689cf333b2eb"><div class="ttname"><a href="class_c_fast_l_e_d.html#a730ba7d967e882b4b893689cf333b2eb">CFastLED::setBrightness</a></div><div class="ttdeci">void setBrightness(uint8_t scale)</div><div class="ttdoc">Set the global brightness scaling. </div><div class="ttdef"><b>Definition:</b> FastLED.h:388</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:449</div></div>
<div class="ttc" id="noise_8h_html"><div class="ttname"><a href="noise_8h.html">noise.h</a></div><div class="ttdoc">Noise functions provided by the library. </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:410</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_a570df74cf09e6215c3647333d2b479a9"><div class="ttname"><a href="class_c_fast_l_e_d.html#a570df74cf09e6215c3647333d2b479a9">CFastLED::showColor</a></div><div class="ttdeci">void showColor(const struct CRGB &amp;color)</div><div class="ttdoc">Set all leds on all controllers to the given color. </div><div class="ttdef"><b>Definition:</b> FastLED.h:403</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:72</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:75</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="ttdoc">APA102 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:147</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_a61d27e179c9b68bde89d220aebc0de32"><div class="ttname"><a href="class_c_fast_l_e_d.html#a61d27e179c9b68bde89d220aebc0de32">CFastLED::countFPS</a></div><div class="ttdeci">void countFPS(int nFrames=25)</div><div class="ttdoc">for debugging, will keep track of time between calls to countFPS, and every nFrames calls...</div><div class="ttdef"><b>Definition:</b> FastLED.cpp:186</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:133</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_a042989511cbc42390620bedc196ea956"><div class="ttname"><a href="class_c_fast_l_e_d.html#a042989511cbc42390620bedc196ea956">CFastLED::clear</a></div><div class="ttdeci">void clear(boolean writeData=false)</div><div class="ttdoc">clear the leds, optionally wiping the local array of data as well </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:90</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:79</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:81</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:80</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_ac4f613f1b3e618528dca3189df88ce80"><div class="ttname"><a href="class_c_fast_l_e_d.html#ac4f613f1b3e618528dca3189df88ce80">CFastLED::clearData</a></div><div class="ttdeci">void clearData()</div><div class="ttdoc">clear out the local data array </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:97</div></div>
-<div class="ttc" id="class_c_fast_l_e_d_html_a6819ff831058a710d4582dfc09817202"><div class="ttname"><a href="class_c_fast_l_e_d.html#a6819ff831058a710d4582dfc09817202">CFastLED::delay</a></div><div class="ttdeci">void delay(unsigned long ms)</div><div class="ttdoc">Delay for the given number of milliseconds. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:105</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="ttdoc">SM16716 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:323</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:73</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:83</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:428</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a570df74cf09e6215c3647333d2b479a9"><div class="ttname"><a href="class_c_fast_l_e_d.html#a570df74cf09e6215c3647333d2b479a9">CFastLED::showColor</a></div><div class="ttdeci">void showColor(const struct CRGB &amp;color)</div><div class="ttdoc">Set all leds on all controllers to the given color. </div><div class="ttdef"><b>Definition:</b> FastLED.h:415</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:76</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:79</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="ttdoc">APA102 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:150</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a61d27e179c9b68bde89d220aebc0de32"><div class="ttname"><a href="class_c_fast_l_e_d.html#a61d27e179c9b68bde89d220aebc0de32">CFastLED::countFPS</a></div><div class="ttdeci">void countFPS(int nFrames=25)</div><div class="ttdoc">for debugging, will keep track of time between calls to countFPS, and every nFrames calls...</div><div class="ttdef"><b>Definition:</b> FastLED.cpp:189</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:136</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a042989511cbc42390620bedc196ea956"><div class="ttname"><a href="class_c_fast_l_e_d.html#a042989511cbc42390620bedc196ea956">CFastLED::clear</a></div><div class="ttdeci">void clear(boolean writeData=false)</div><div class="ttdoc">clear the leds, optionally wiping the local array of data as well </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:93</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:83</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:85</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:84</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_ac4f613f1b3e618528dca3189df88ce80"><div class="ttname"><a href="class_c_fast_l_e_d.html#ac4f613f1b3e618528dca3189df88ce80">CFastLED::clearData</a></div><div class="ttdeci">void clearData()</div><div class="ttdoc">clear out the local data array </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:100</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a1f39e8404db214bbd6a776f52a77d8b1"><div class="ttname"><a href="class_c_fast_l_e_d.html#a1f39e8404db214bbd6a776f52a77d8b1">CFastLED::setMaxRefreshRate</a></div><div class="ttdeci">void setMaxRefreshRate(uint16_t refresh, bool constrain=false)</div><div class="ttdoc">Set the maximum refresh rate. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:202</div></div>
+<div class="ttc" id="class_c_fast_l_e_d_html_a6819ff831058a710d4582dfc09817202"><div class="ttname"><a href="class_c_fast_l_e_d.html#a6819ff831058a710d4582dfc09817202">CFastLED::delay</a></div><div class="ttdeci">void delay(unsigned long ms)</div><div class="ttdoc">Delay for the given number of milliseconds. </div><div class="ttdef"><b>Definition:</b> FastLED.cpp:108</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="ttdoc">SM16716 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:339</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:77</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:87</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index 1f05c967..933db289 100644
--- 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
@@ -92,7 +92,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/annotated.html b/docs/3.1/annotated.html
index 013020ea..5487477f 100644
--- a/docs/3.1/annotated.html
+++ b/docs/3.1/annotated.html
@@ -91,84 +91,86 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="contents">
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
<table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><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">Template definition for STM32 style ARM pins, providing direct access to the various GPIO registers </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">APA102 controller class </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="unionbitswap__type.html" target="_self">bitswap_type</a></td><td class="desc">Union containing a full 8 bytes to swap the bit orientation on </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="class_c_every_n_time_periods.html" target="_self">CEveryNTimePeriods</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_fast_l_e_d.html" target="_self">CFastLED</a></td><td class="desc">High level controller interface for FastLED </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="struct_c_h_s_v.html" target="_self">CHSV</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_h_s_v_palette16.html" target="_self">CHSVPalette16</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_h_s_v_palette256.html" target="_self">CHSVPalette256</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="class_c_l_e_d_controller.html" target="_self">CLEDController</a></td><td class="desc">Base definition for an LED controller </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_min_wait.html" target="_self">CMinWait</a></td><td class="desc">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 this should make sure that chipsets that have </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="struct_c_r_g_b.html" target="_self">CRGB</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_c_r_g_b_palette16.html" target="_self">CRGBPalette16</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_c_r_g_b_palette256.html" target="_self">CRGBPalette256</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_d_a_t_a___n_o_p.html" target="_self">DATA_NOP</a></td><td class="desc">Some of the SPI controllers will need to perform a transform on each byte before doing anyting with it </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_d_m_x_s_e_r_i_a_l.html" target="_self">DMXSERIAL</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_d_m_x_serial_controller.html" target="_self">DMXSerialController</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_d_m_x_s_i_m_p_l_e.html" target="_self">DMXSIMPLE</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="class_d_m_x_simple_controller.html" target="_self">DMXSimpleController</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_fast_pin.html" target="_self">FastPin</a></td><td class="desc">The simplest level of <a class="el" href="class_pin.html">Pin</a> class </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_fast_pin_b_b.html" target="_self">FastPinBB</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_g_w6205.html" target="_self">GW6205</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="class_g_w6205__400.html" target="_self">GW6205_400</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_g_w6205_controller400_khz.html" target="_self">GW6205Controller400Khz</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_g_w6205_controller800_khz.html" target="_self">GW6205Controller800Khz</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="union_i_e_e_e754binary32__t.html" target="_self">IEEE754binary32_t</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="class_input_pin.html" target="_self">InputPin</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="unionjust8bits.html" target="_self">just8bits</a></td><td class="desc">Structure representing 8 bits of access </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_l_p_d1886.html" target="_self">LPD1886</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_l_p_d1886_controller1250_khz.html" target="_self">LPD1886Controller1250Khz</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_l_p_d8806_controller.html" target="_self">LPD8806Controller</a></td><td class="desc">LPD8806 controller class </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="struct_multi_pixel_controller.html" target="_self">MultiPixelController</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_n_e_o_p_i_x_e_l.html" target="_self">NEOPIXEL</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_output_pin.html" target="_self">OutputPin</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_p9813_controller.html" target="_self">P9813Controller</a></td><td class="desc">P9813 controller class </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_pin.html" target="_self">Pin</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="struct_pixel_controller.html" target="_self">PixelController</a></td><td class="desc">Pixel controller class </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="classq.html" target="_self">q</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_selectable.html" target="_self">Selectable</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_s_m16716_controller.html" target="_self">SM16716Controller</a></td><td class="desc">SM16716 controller class </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_software_s_p_i_output.html" target="_self">SoftwareSPIOutput</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_s_p_i_output.html" target="_self">SPIOutput</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_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI2_DATA, SPI2_CLOCK, SPI_SPEED &gt;</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_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_DATA, SPI_CLOCK, SPI_SPEED &gt;</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_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED &gt;</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_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED &gt;</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="structsub4.html" target="_self">sub4</a></td><td class="desc">Structure representing 32 bits of access </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="uniont_bytes_for_long.html" target="_self">tBytesForLong</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_t_m1803.html" target="_self">TM1803</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_t_m1803_controller400_khz.html" target="_self">TM1803Controller400Khz</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_t_m1804.html" target="_self">TM1804</a></td><td class="desc"></td></tr>
-<tr id="row_52_" 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.html" target="_self">TM1809</a></td><td class="desc"></td></tr>
-<tr id="row_53_"><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_54_" 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.html" target="_self">TM1829</a></td><td class="desc"></td></tr>
-<tr id="row_55_"><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_56_" 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_controller800_khz.html" target="_self">TM1829Controller800Khz</a></td><td class="desc"></td></tr>
-<tr id="row_57_"><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_58_" 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.html" target="_self">UCS1903B</a></td><td class="desc"></td></tr>
-<tr id="row_59_"><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_60_" 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_controller400_khz.html" target="_self">UCS1903Controller400Khz</a></td><td class="desc"></td></tr>
-<tr id="row_61_"><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_s1904.html" target="_self">UCS1904</a></td><td class="desc"></td></tr>
-<tr id="row_62_" 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_s1904_controller800_khz.html" target="_self">UCS1904Controller800Khz</a></td><td class="desc"></td></tr>
-<tr id="row_63_"><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">WS2801 controller class </td></tr>
-<tr id="row_64_" 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_s2803_controller.html" target="_self">WS2803Controller</a></td><td class="desc"></td></tr>
-<tr id="row_65_"><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_66_" 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__400.html" target="_self">WS2811_400</a></td><td class="desc"></td></tr>
-<tr id="row_67_"><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_68_" 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_controller800_khz.html" target="_self">WS2811Controller800Khz</a></td><td class="desc"></td></tr>
-<tr id="row_69_"><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_70_" 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_b.html" target="_self">WS2812B</a></td><td class="desc"></td></tr>
-<tr id="row_71_"><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_controller800_khz.html" target="_self">WS2812Controller800Khz</a></td><td class="desc"></td></tr>
+<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_a_p_a102_controller.html" target="_self">APA102Controller</a></td><td class="desc">APA102 controller class </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_a104.html" target="_self">APA104</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_v_r_software_s_p_i_output.html" target="_self">AVRSoftwareSPIOutput</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="unionbitswap__type.html" target="_self">bitswap_type</a></td><td class="desc">Union containing a full 8 bytes to swap the bit orientation on </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_every_n_time_periods.html" target="_self">CEveryNTimePeriods</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="class_c_fast_l_e_d.html" target="_self">CFastLED</a></td><td class="desc">High level controller interface for FastLED </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="struct_c_h_s_v.html" target="_self">CHSV</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_palette16.html" target="_self">CHSVPalette16</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_h_s_v_palette256.html" target="_self">CHSVPalette256</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_l_e_d_controller.html" target="_self">CLEDController</a></td><td class="desc">Base definition for an LED controller </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="class_c_min_wait.html" target="_self">CMinWait</a></td><td class="desc">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 this should make sure that chipsets that have </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="struct_c_r_g_b.html" target="_self">CRGB</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_palette16.html" target="_self">CRGBPalette16</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_c_r_g_b_palette256.html" target="_self">CRGBPalette256</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_d_a_t_a___n_o_p.html" target="_self">DATA_NOP</a></td><td class="desc">Some of the SPI controllers will need to perform a transform on each byte before doing anyting with it </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_d_m_x_s_e_r_i_a_l.html" target="_self">DMXSERIAL</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_d_m_x_serial_controller.html" target="_self">DMXSerialController</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_d_m_x_s_i_m_p_l_e.html" target="_self">DMXSIMPLE</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_d_m_x_simple_controller.html" target="_self">DMXSimpleController</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="class_fast_pin.html" target="_self">FastPin</a></td><td class="desc">The simplest level of <a class="el" href="class_pin.html">Pin</a> class </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_fast_pin_b_b.html" target="_self">FastPinBB</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_g_w6205.html" target="_self">GW6205</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_g_w6205__400.html" target="_self">GW6205_400</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="class_g_w6205_controller400_khz.html" target="_self">GW6205Controller400Khz</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_g_w6205_controller800_khz.html" target="_self">GW6205Controller800Khz</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="union_i_e_e_e754binary32__t.html" target="_self">IEEE754binary32_t</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="class_input_pin.html" target="_self">InputPin</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="unionjust8bits.html" target="_self">just8bits</a></td><td class="desc">Structure representing 8 bits of access </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_l_p_d1886.html" target="_self">LPD1886</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_l_p_d1886_controller1250_khz.html" target="_self">LPD1886Controller1250Khz</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_l_p_d8806_controller.html" target="_self">LPD8806Controller</a></td><td class="desc">LPD8806 controller class </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="struct_multi_pixel_controller.html" target="_self">MultiPixelController</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_n_e_o_p_i_x_e_l.html" target="_self">NEOPIXEL</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_output_pin.html" target="_self">OutputPin</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_p9813_controller.html" target="_self">P9813Controller</a></td><td class="desc">P9813 controller class </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_pin.html" target="_self">Pin</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="struct_pixel_controller.html" target="_self">PixelController</a></td><td class="desc">Pixel controller class </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="classq.html" target="_self">q</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_selectable.html" target="_self">Selectable</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_s_m16716_controller.html" target="_self">SM16716Controller</a></td><td class="desc">SM16716 controller class </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_software_s_p_i_output.html" target="_self">SoftwareSPIOutput</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_s_p_i_output.html" target="_self">SPIOutput</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_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI2_DATA, SPI2_CLOCK, SPI_SPEED &gt;</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_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt;</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_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt;</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_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_DATA, SPI_CLOCK, SPI_SPEED &gt;</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_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED &gt;</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_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED &gt;</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="structsub4.html" target="_self">sub4</a></td><td class="desc">Structure representing 32 bits of access </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="uniont_bytes_for_long.html" target="_self">tBytesForLong</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_t_m1803.html" target="_self">TM1803</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_t_m1803_controller400_khz.html" target="_self">TM1803Controller400Khz</a></td><td class="desc"></td></tr>
+<tr id="row_52_" 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_53_"><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_54_" 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_55_"><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_56_" 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_57_"><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_58_" 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_t_r_g_b_gradient_palette_entry_union.html" target="_self">TRGBGradientPaletteEntryUnion</a></td><td class="desc"></td></tr>
+<tr id="row_59_"><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_60_" 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.html" target="_self">UCS1903B</a></td><td class="desc"></td></tr>
+<tr id="row_61_"><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_62_" 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_controller400_khz.html" target="_self">UCS1903Controller400Khz</a></td><td class="desc"></td></tr>
+<tr id="row_63_"><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_s1904.html" target="_self">UCS1904</a></td><td class="desc"></td></tr>
+<tr id="row_64_" 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_s1904_controller800_khz.html" target="_self">UCS1904Controller800Khz</a></td><td class="desc"></td></tr>
+<tr id="row_65_"><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">WS2801 controller class </td></tr>
+<tr id="row_66_" 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_s2803_controller.html" target="_self">WS2803Controller</a></td><td class="desc"></td></tr>
+<tr id="row_67_"><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_68_" 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__400.html" target="_self">WS2811_400</a></td><td class="desc"></td></tr>
+<tr id="row_69_"><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_70_" 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_controller800_khz.html" target="_self">WS2811Controller800Khz</a></td><td class="desc"></td></tr>
+<tr id="row_71_"><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_72_" 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_b.html" target="_self">WS2812B</a></td><td class="desc"></td></tr>
+<tr id="row_73_"><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_controller800_khz.html" target="_self">WS2812Controller800Khz</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/bitswap_8h.html b/docs/3.1/bitswap_8h.html
index 7aa2bcfd..b8091348 100644
--- a/docs/3.1/bitswap_8h.html
+++ b/docs/3.1/bitswap_8h.html
@@ -120,7 +120,7 @@ Functions</h2></td></tr>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/bitswap_8h_source.html b/docs/3.1/bitswap_8h_source.html
index 9afbe4ba..02bdec0d 100644
--- a/docs/3.1/bitswap_8h_source.html
+++ b/docs/3.1/bitswap_8h_source.html
@@ -90,264 +90,268 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<a href="bitswap_8h.html">Go to the documentation of this file.</a><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="l00006"></a><span class="lineno"> 6</span>&#160;</div>
-<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#ifdef FASTLED_ARM</span></div>
-<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
-<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; uint8_t raw;</div>
-<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; <span class="keyword">struct </span>{</div>
-<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; uint32_t a0:1;</div>
-<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; uint32_t a1:1;</div>
-<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; uint32_t a2:1;</div>
-<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; uint32_t a3:1;</div>
-<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; uint32_t a4:1;</div>
-<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; uint32_t a5:1;</div>
-<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; uint32_t a6:1;</div>
-<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; uint32_t a7:1;</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;} <a class="code" href="unionjust8bits.html">just8bits</a>;</div>
-<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
-<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="structsub4.html"> 27</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
-<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; uint32_t a0:1;</div>
-<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; uint32_t a1:1;</div>
-<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; uint32_t a2:1;</div>
-<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; uint32_t a3:1;</div>
-<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; uint32_t a4:1;</div>
-<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; uint32_t a5:1;</div>
-<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; uint32_t a6:1;</div>
-<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; uint32_t a7:1;</div>
-<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; uint32_t b0:1;</div>
-<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; uint32_t b1:1;</div>
-<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; uint32_t b2:1;</div>
-<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; uint32_t b3:1;</div>
-<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; uint32_t b4:1;</div>
-<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; uint32_t b5:1;</div>
-<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; uint32_t b6:1;</div>
-<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; uint32_t b7:1;</div>
-<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; uint32_t c0:1;</div>
-<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; uint32_t c1:1;</div>
-<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; uint32_t c2:1;</div>
-<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; uint32_t c3:1;</div>
-<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; uint32_t c4:1;</div>
-<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; uint32_t c5:1;</div>
-<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; uint32_t c6:1;</div>
-<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; uint32_t c7:1;</div>
-<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; uint32_t d0:1;</div>
-<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; uint32_t d1:1;</div>
-<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; uint32_t d2:1;</div>
-<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; uint32_t d3:1;</div>
-<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; uint32_t d4:1;</div>
-<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; uint32_t d5:1;</div>
-<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; uint32_t d6:1;</div>
-<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; uint32_t d7:1;</div>
-<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;} <a class="code" href="structsub4.html">sub4</a>;</div>
-<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div>
-<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="unionbitswap__type.html"> 63</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
-<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; uint32_t word[2];</div>
-<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; uint8_t bytes[8];</div>
-<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">struct </span>{</div>
-<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="structsub4.html">sub4</a> a;</div>
-<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="structsub4.html">sub4</a> b;</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;} <a class="code" href="unionbitswap__type.html">bitswap_type</a>;</div>
-<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
-<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div>
-<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#define SWAPSA(X,N) out. X ## 0 = in.a.a ## N; \</span></div>
-<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="preprocessor"> out. X ## 1 = in.a.b ## N; \</span></div>
-<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor"> out. X ## 2 = in.a.c ## N; \</span></div>
-<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="preprocessor"> out. X ## 3 = in.a.d ## N;</span></div>
-<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div>
-<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="preprocessor">#define SWAPSB(X,N) out. X ## 0 = in.b.a ## N; \</span></div>
-<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="preprocessor"> out. X ## 1 = in.b.b ## N; \</span></div>
-<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor"> out. X ## 2 = in.b.c ## N; \</span></div>
-<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor"> out. X ## 3 = in.b.d ## N;</span></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">#define SWAPS(X,N) out. X ## 0 = in.a.a ## N; \</span></div>
-<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor"> out. X ## 1 = in.a.b ## N; \</span></div>
-<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="preprocessor"> out. X ## 2 = in.a.c ## N; \</span></div>
-<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="preprocessor"> out. X ## 3 = in.a.d ## N; \</span></div>
-<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="preprocessor"> out. X ## 4 = in.b.a ## N; \</span></div>
-<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="preprocessor"> out. X ## 5 = in.b.b ## N; \</span></div>
-<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor"> out. X ## 6 = in.b.c ## N; \</span></div>
-<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="preprocessor"> out. X ## 7 = in.b.d ## N;</span></div>
-<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div>
-<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div>
-<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> swapbits8(<a class="code" href="unionbitswap__type.html">bitswap_type</a> in, <a class="code" href="unionbitswap__type.html">bitswap_type</a> &amp; out) {</div>
-<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
-<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// SWAPS(a.a,7);</span></div>
-<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// SWAPS(a.b,6);</span></div>
-<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// SWAPS(a.c,5);</span></div>
-<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// SWAPS(a.d,4);</span></div>
-<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// SWAPS(b.a,3);</span></div>
-<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// SWAPS(b.b,2);</span></div>
-<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// SWAPS(b.c,1);</span></div>
-<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// SWAPS(b.d,0);</span></div>
-<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div>
-<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// SWAPSA(a.a,7);</span></div>
-<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// SWAPSA(a.b,6);</span></div>
-<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">// SWAPSA(a.c,5);</span></div>
-<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// SWAPSA(a.d,4);</span></div>
-<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">//</span></div>
-<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="comment">// SWAPSB(a.a,7);</span></div>
-<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">// SWAPSB(a.b,6);</span></div>
-<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// SWAPSB(a.c,5);</span></div>
-<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="comment">// SWAPSB(a.d,4);</span></div>
-<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">//</span></div>
-<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="comment">// SWAPSA(b.a,3);</span></div>
-<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// SWAPSA(b.b,2);</span></div>
-<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="comment">// SWAPSA(b.c,1);</span></div>
-<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="comment">// SWAPSA(b.d,0);</span></div>
-<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">// //</span></div>
-<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// SWAPSB(b.a,3);</span></div>
-<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// SWAPSB(b.b,2);</span></div>
-<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">// SWAPSB(b.c,1);</span></div>
-<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">// SWAPSB(b.d,0);</span></div>
-<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div>
-<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; 8; i++) {</div>
-<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="unionjust8bits.html">just8bits</a> work;</div>
-<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; work.a3 = in.word[0] &gt;&gt; 31;</div>
-<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; work.a2 = in.word[0] &gt;&gt; 23;</div>
-<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; work.a1 = in.word[0] &gt;&gt; 15;</div>
-<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; work.a0 = in.word[0] &gt;&gt; 7;</div>
-<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; in.word[0] &lt;&lt;= 1;</div>
-<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; work.a7 = in.word[1] &gt;&gt; 31;</div>
-<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; work.a6 = in.word[1] &gt;&gt; 23;</div>
-<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; work.a5 = in.word[1] &gt;&gt; 15;</div>
-<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; work.a4 = in.word[1] &gt;&gt; 7;</div>
-<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; in.word[1] &lt;&lt;= 1;</div>
-<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; out.bytes[i] = work.raw;</div>
-<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
-<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;}</div>
-<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div>
-<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00143"></a><span class="lineno"> 143</span>&#160;</div>
-<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> row = 0; row &lt; 7; row++) {</div>
-<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; uint8_t x = A[row];</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; uint8_t bit = (1&lt;&lt;row);</div>
-<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *p = B;</div>
-<div class="line"><a name="l00149"></a><span class="lineno"> 149</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="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span>(x &amp; mask) {</div>
-<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; *p++ |= bit;</div>
-<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; *p++ &amp;= ~bit;</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="comment">// B[7] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
-<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="comment">// B[6] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
-<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="comment">// B[5] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
-<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">// B[4] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
-<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="comment">// B[3] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
-<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">// B[2] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
-<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// B[1] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
-<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="comment">// B[0] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></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;</div>
-<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00170"></a><span class="lineno"> 170</span>&#160; uint32_t x, y, t;</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">// Load the array and pack it into x and y.</span></div>
-<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; y = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A);</div>
-<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; x = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A+4);</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">// pre-transform x</span></div>
-<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; t = (x ^ (x &gt;&gt; 7)) &amp; 0x00AA00AA; x = x ^ t ^ (t &lt;&lt; 7);</div>
-<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; t = (x ^ (x &gt;&gt;14)) &amp; 0x0000CCCC; x = x ^ t ^ (t &lt;&lt;14);</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">// pre-transform y</span></div>
-<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; t = (y ^ (y &gt;&gt; 7)) &amp; 0x00AA00AA; y = y ^ t ^ (t &lt;&lt; 7);</div>
-<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; t = (y ^ (y &gt;&gt;14)) &amp; 0x0000CCCC; y = y ^ t ^ (t &lt;&lt;14);</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">// final transform</span></div>
-<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; t = (x &amp; 0xF0F0F0F0) | ((y &gt;&gt; 4) &amp; 0x0F0F0F0F);</div>
-<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; y = ((x &lt;&lt; 4) &amp; 0xF0F0F0F0) | (y &amp; 0x0F0F0F0F);</div>
-<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; x = 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; *((uint32_t*)B) = y;</div>
-<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; *((uint32_t*)(B+4)) = x;</div>
-<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;}</div>
-<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div>
-<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00195"></a><span class="lineno"> 195</span>&#160; uint32_t x, y, t;</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">// Load the array and pack it into x and y.</span></div>
-<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; y = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A);</div>
-<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; x = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A+4);</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">// pre-transform x</span></div>
-<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; t = (x ^ (x &gt;&gt; 7)) &amp; 0x00AA00AA; x = x ^ t ^ (t &lt;&lt; 7);</div>
-<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; t = (x ^ (x &gt;&gt;14)) &amp; 0x0000CCCC; x = x ^ t ^ (t &lt;&lt;14);</div>
-<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div>
-<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="comment">// pre-transform y</span></div>
-<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; t = (y ^ (y &gt;&gt; 7)) &amp; 0x00AA00AA; y = y ^ t ^ (t &lt;&lt; 7);</div>
-<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; t = (y ^ (y &gt;&gt;14)) &amp; 0x0000CCCC; y = y ^ t ^ (t &lt;&lt;14);</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">// final transform</span></div>
-<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; t = (x &amp; 0xF0F0F0F0) | ((y &gt;&gt; 4) &amp; 0x0F0F0F0F);</div>
-<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; y = ((x &lt;&lt; 4) &amp; 0xF0F0F0F0) | (y &amp; 0x0F0F0F0F);</div>
-<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; x = t;</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; B[7] = y; y &gt;&gt;= 8;</div>
-<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; B[6] = y; y &gt;&gt;= 8;</div>
-<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; B[5] = y; y &gt;&gt;= 8;</div>
-<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; B[4] = y;</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; B[3] = x; x &gt;&gt;= 8;</div>
-<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; B[2] = x; x &gt;&gt;= 8;</div>
-<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; B[1] = x; x &gt;&gt;= 8;</div>
-<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; B[0] = x; <span class="comment">/* */</span></div>
-<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;}</div>
-<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div>
-<div class="line"><a name="l00226"></a><span class="lineno"> 226</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="l00227"></a><span class="lineno"> 227</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00228"></a><span class="lineno"> 228</span>&#160; uint32_t x, y, t;</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">// Load the array and pack it into x and y.</span></div>
-<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">if</span>(m == 1) {</div>
-<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; y = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A);</div>
-<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; x = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A+4);</div>
-<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00235"></a><span class="lineno"> 235</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="l00236"></a><span class="lineno"> 236</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="l00237"></a><span class="lineno"> 237</span>&#160; }</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">// pre-transform x</span></div>
-<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; t = (x ^ (x &gt;&gt; 7)) &amp; 0x00AA00AA; x = x ^ t ^ (t &lt;&lt; 7);</div>
-<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; t = (x ^ (x &gt;&gt;14)) &amp; 0x0000CCCC; x = x ^ t ^ (t &lt;&lt;14);</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">// pre-transform y</span></div>
-<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; t = (y ^ (y &gt;&gt; 7)) &amp; 0x00AA00AA; y = y ^ t ^ (t &lt;&lt; 7);</div>
-<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; t = (y ^ (y &gt;&gt;14)) &amp; 0x0000CCCC; y = y ^ t ^ (t &lt;&lt;14);</div>
-<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</div>
-<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// final transform</span></div>
-<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; t = (x &amp; 0xF0F0F0F0) | ((y &gt;&gt; 4) &amp; 0x0F0F0F0F);</div>
-<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; y = ((x &lt;&lt; 4) &amp; 0xF0F0F0F0) | (y &amp; 0x0F0F0F0F);</div>
-<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; x = t;</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; B[7*n] = y; y &gt;&gt;= 8;</div>
-<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; B[6*n] = y; y &gt;&gt;= 8;</div>
-<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; B[5*n] = y; y &gt;&gt;= 8;</div>
-<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; B[4*n] = y;</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; B[3*n] = x; x &gt;&gt;= 8;</div>
-<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; B[2*n] = x; x &gt;&gt;= 8;</div>
-<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; B[n] = x; x &gt;&gt;= 8;</div>
-<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; B[0] = x;</div>
-<div class="line"><a name="l00261"></a><span class="lineno"> 261</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="l00262"></a><span class="lineno"> 262</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="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="preprocessor">#endif</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;FASTLED_NAMESPACE_BEGIN</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#ifdef FASTLED_ARM</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; uint8_t raw;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; uint32_t a0:1;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; uint32_t a1:1;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; uint32_t a2:1;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; uint32_t a3:1;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; uint32_t a4:1;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; uint32_t a5:1;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; uint32_t a6:1;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; uint32_t a7:1;</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;} <a class="code" href="unionjust8bits.html">just8bits</a>;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="structsub4.html"> 29</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; uint32_t a0:1;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; uint32_t a1:1;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; uint32_t a2:1;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; uint32_t a3:1;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; uint32_t a4:1;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; uint32_t a5:1;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; uint32_t a6:1;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; uint32_t a7:1;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; uint32_t b0:1;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; uint32_t b1:1;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; uint32_t b2:1;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; uint32_t b3:1;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; uint32_t b4:1;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; uint32_t b5:1;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; uint32_t b6:1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; uint32_t b7:1;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; uint32_t c0:1;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; uint32_t c1:1;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; uint32_t c2:1;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; uint32_t c3:1;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; uint32_t c4:1;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; uint32_t c5:1;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; uint32_t c6:1;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; uint32_t c7:1;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; uint32_t d0:1;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; uint32_t d1:1;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; uint32_t d2:1;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; uint32_t d3:1;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; uint32_t d4:1;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; uint32_t d5:1;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; uint32_t d6:1;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; uint32_t d7:1;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;} <a class="code" href="structsub4.html">sub4</a>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="unionbitswap__type.html"> 65</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; uint32_t word[2];</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; uint8_t bytes[8];</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="structsub4.html">sub4</a> a;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="structsub4.html">sub4</a> b;</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;} <a class="code" href="unionbitswap__type.html">bitswap_type</a>;</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="preprocessor">#define SWAPSA(X,N) out. X ## 0 = in.a.a ## N; \</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="preprocessor"> out. X ## 1 = in.a.b ## N; \</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="preprocessor"> out. X ## 2 = in.a.c ## N; \</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="preprocessor"> out. X ## 3 = in.a.d ## N;</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor">#define SWAPSB(X,N) out. X ## 0 = in.b.a ## N; \</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor"> out. X ## 1 = in.b.b ## N; \</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="preprocessor"> out. X ## 2 = in.b.c ## N; \</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="preprocessor"> out. X ## 3 = in.b.d ## N;</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="preprocessor">#define SWAPS(X,N) out. X ## 0 = in.a.a ## N; \</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="preprocessor"> out. X ## 1 = in.a.b ## N; \</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="preprocessor"> out. X ## 2 = in.a.c ## N; \</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="preprocessor"> out. X ## 3 = in.a.d ## N; \</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor"> out. X ## 4 = in.b.a ## N; \</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="preprocessor"> out. X ## 5 = in.b.b ## N; \</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="preprocessor"> out. X ## 6 = in.b.c ## N; \</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="preprocessor"> out. X ## 7 = in.b.d ## N;</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;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> swapbits8(<a class="code" href="unionbitswap__type.html">bitswap_type</a> in, <a class="code" href="unionbitswap__type.html">bitswap_type</a> &amp; out) {</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">// SWAPS(a.a,7);</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// SWAPS(a.b,6);</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// SWAPS(a.c,5);</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// SWAPS(a.d,4);</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// SWAPS(b.a,3);</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// SWAPS(b.b,2);</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">// SWAPS(b.c,1);</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// SWAPS(b.d,0);</span></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="comment">// SWAPSA(a.a,7);</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// SWAPSA(a.b,6);</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">// SWAPSA(a.c,5);</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="comment">// SWAPSA(a.d,4);</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">// SWAPSB(a.a,7);</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="comment">// SWAPSB(a.b,6);</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// SWAPSB(a.c,5);</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="comment">// SWAPSB(a.d,4);</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">// SWAPSA(b.a,3);</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="comment">// SWAPSA(b.b,2);</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">// SWAPSA(b.c,1);</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// SWAPSA(b.d,0);</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// //</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">// SWAPSB(b.a,3);</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">// SWAPSB(b.b,2);</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">// SWAPSB(b.c,1);</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// SWAPSB(b.d,0);</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; 8; i++) {</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="unionjust8bits.html">just8bits</a> work;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; work.a3 = in.word[0] &gt;&gt; 31;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; work.a2 = in.word[0] &gt;&gt; 23;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; work.a1 = in.word[0] &gt;&gt; 15;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; work.a0 = in.word[0] &gt;&gt; 7;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; in.word[0] &lt;&lt;= 1;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; work.a7 = in.word[1] &gt;&gt; 31;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; work.a6 = in.word[1] &gt;&gt; 23;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; work.a5 = in.word[1] &gt;&gt; 15;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; work.a4 = in.word[1] &gt;&gt; 7;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; in.word[1] &lt;&lt;= 1;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; out.bytes[i] = work.raw;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00145"></a><span class="lineno"> 145</span>&#160;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> row = 0; row &lt; 7; row++) {</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; uint8_t x = A[row];</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; uint8_t bit = (1&lt;&lt;row);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *p = B;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</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="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">if</span>(x &amp; mask) {</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; *p++ |= bit;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; *p++ &amp;= ~bit;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="comment">// B[7] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">// B[6] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="comment">// B[5] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">// B[4] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// B[3] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="comment">// B[2] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="comment">// B[1] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// B[0] |= (x &amp; 0x01) &lt;&lt; row; x &gt;&gt;= 1;</span></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;}</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00172"></a><span class="lineno"> 172</span>&#160; uint32_t x, y, t;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="comment">// Load the array and pack it into x and y.</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; y = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; x = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A+4);</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; <span class="comment">// pre-transform x</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; t = (x ^ (x &gt;&gt; 7)) &amp; 0x00AA00AA; x = x ^ t ^ (t &lt;&lt; 7);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; t = (x ^ (x &gt;&gt;14)) &amp; 0x0000CCCC; x = x ^ t ^ (t &lt;&lt;14);</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="comment">// pre-transform y</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; t = (y ^ (y &gt;&gt; 7)) &amp; 0x00AA00AA; y = y ^ t ^ (t &lt;&lt; 7);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; t = (y ^ (y &gt;&gt;14)) &amp; 0x0000CCCC; y = y ^ t ^ (t &lt;&lt;14);</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">// final transform</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; t = (x &amp; 0xF0F0F0F0) | ((y &gt;&gt; 4) &amp; 0x0F0F0F0F);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; y = ((x &lt;&lt; 4) &amp; 0xF0F0F0F0) | (y &amp; 0x0F0F0F0F);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; x = t;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; *((uint32_t*)B) = y;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; *((uint32_t*)(B+4)) = x;</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="l00196"></a><span class="lineno"> 196</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00197"></a><span class="lineno"> 197</span>&#160; uint32_t x, y, t;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="comment">// Load the array and pack it into x and y.</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; y = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; x = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A+4);</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="comment">// pre-transform x</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; t = (x ^ (x &gt;&gt; 7)) &amp; 0x00AA00AA; x = x ^ t ^ (t &lt;&lt; 7);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; t = (x ^ (x &gt;&gt;14)) &amp; 0x0000CCCC; x = x ^ t ^ (t &lt;&lt;14);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="comment">// pre-transform y</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; t = (y ^ (y &gt;&gt; 7)) &amp; 0x00AA00AA; y = y ^ t ^ (t &lt;&lt; 7);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; t = (y ^ (y &gt;&gt;14)) &amp; 0x0000CCCC; y = y ^ t ^ (t &lt;&lt;14);</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">// final transform</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; t = (x &amp; 0xF0F0F0F0) | ((y &gt;&gt; 4) &amp; 0x0F0F0F0F);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; y = ((x &lt;&lt; 4) &amp; 0xF0F0F0F0) | (y &amp; 0x0F0F0F0F);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; x = t;</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; B[7] = y; y &gt;&gt;= 8;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; B[6] = y; y &gt;&gt;= 8;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; B[5] = y; y &gt;&gt;= 8;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; B[4] = y;</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; B[3] = x; x &gt;&gt;= 8;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; B[2] = x; x &gt;&gt;= 8;</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; B[1] = x; x &gt;&gt;= 8;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; B[0] = x; <span class="comment">/* */</span></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;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</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="l00229"></a><span class="lineno"> 229</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00230"></a><span class="lineno"> 230</span>&#160; uint32_t x, y, t;</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">// Load the array and pack it into x and y.</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">if</span>(m == 1) {</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; y = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; x = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*)(A+4);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</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="l00238"></a><span class="lineno"> 238</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="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">// pre-transform x</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; t = (x ^ (x &gt;&gt; 7)) &amp; 0x00AA00AA; x = x ^ t ^ (t &lt;&lt; 7);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; t = (x ^ (x &gt;&gt;14)) &amp; 0x0000CCCC; x = x ^ t ^ (t &lt;&lt;14);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// pre-transform y</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; t = (y ^ (y &gt;&gt; 7)) &amp; 0x00AA00AA; y = y ^ t ^ (t &lt;&lt; 7);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; t = (y ^ (y &gt;&gt;14)) &amp; 0x0000CCCC; y = y ^ t ^ (t &lt;&lt;14);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// final transform</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; t = (x &amp; 0xF0F0F0F0) | ((y &gt;&gt; 4) &amp; 0x0F0F0F0F);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; y = ((x &lt;&lt; 4) &amp; 0xF0F0F0F0) | (y &amp; 0x0F0F0F0F);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; x = t;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; B[7*n] = y; y &gt;&gt;= 8;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; B[6*n] = y; y &gt;&gt;= 8;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; B[5*n] = y; y &gt;&gt;= 8;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; B[4*n] = y;</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; B[3*n] = x; x &gt;&gt;= 8;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; B[2*n] = x; x &gt;&gt;= 8;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; B[n] = x; x &gt;&gt;= 8;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; B[0] = x;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</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="l00264"></a><span class="lineno"> 264</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="l00265"></a><span class="lineno"> 265</span>&#160;}</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div>
-<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="ttc" id="unionjust8bits_html"><div class="ttname"><a href="unionjust8bits.html">just8bits</a></div><div class="ttdoc">structure representing 8 bits of access </div><div class="ttdef"><b>Definition:</b> bitswap.h:12</div></div>
-<div class="ttc" id="structsub4_html"><div class="ttname"><a href="structsub4.html">sub4</a></div><div class="ttdoc">structure representing 32 bits of access </div><div class="ttdef"><b>Definition:</b> bitswap.h:27</div></div>
-<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void swapbits8(bitswap_type in</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> delay.h:79</div></div>
-<div class="ttc" id="unionbitswap__type_html"><div class="ttname"><a href="unionbitswap__type.html">bitswap_type</a></div><div class="ttdoc">union containing a full 8 bytes to swap the bit orientation on </div><div class="ttdef"><b>Definition:</b> bitswap.h:63</div></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="preprocessor">#endif</span></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;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="unionjust8bits_html"><div class="ttname"><a href="unionjust8bits.html">just8bits</a></div><div class="ttdoc">structure representing 8 bits of access </div><div class="ttdef"><b>Definition:</b> bitswap.h:14</div></div>
+<div class="ttc" id="structsub4_html"><div class="ttname"><a href="structsub4.html">sub4</a></div><div class="ttdoc">structure representing 32 bits of access </div><div class="ttdef"><b>Definition:</b> bitswap.h:29</div></div>
+<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void swapbits8(bitswap_type in</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> fastled_delay.h:82</div></div>
+<div class="ttc" id="unionbitswap__type_html"><div class="ttname"><a href="unionbitswap__type.html">bitswap_type</a></div><div class="ttdoc">union containing a full 8 bytes to swap the bit orientation on </div><div class="ttdef"><b>Definition:</b> bitswap.h:65</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/chipsets_8h_source.html b/docs/3.1/chipsets_8h_source.html
index b7984885..56bb5db5 100644
--- a/docs/3.1/chipsets_8h_source.html
+++ b/docs/3.1/chipsets_8h_source.html
@@ -92,535 +92,557 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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">// LPD8806 controller class - takes data/clock/select pin values (N.B. should take an SPI definition?)</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;FASTLED_NAMESPACE_BEGIN</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="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00017"></a><span class="lineno"> 17</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="l00018"></a><span class="lineno"><a class="line" href="class_l_p_d8806_controller.html"> 18</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="l00019"></a><span class="lineno"> 19</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="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">class </span>LPD8806_ADJUST {</div>
-<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">public</span>:</div>
-<div class="line"><a name="l00023"></a><span class="lineno"> 23</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="l00024"></a><span class="lineno"> 24</span>&#160; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00026"></a><span class="lineno"> 26</span>&#160; SPI::writeBytesValueRaw(0, ((len*3+63)&gt;&gt;6));</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;</div>
-<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; };</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</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="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="l00019"></a><span class="lineno"> 19</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="l00020"></a><span class="lineno"><a class="line" href="class_l_p_d8806_controller.html"> 20</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="l00021"></a><span class="lineno"> 21</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="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>LPD8806_ADJUST {</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; <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="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00028"></a><span class="lineno"> 28</span>&#160; SPI::writeBytesValueRaw(0, ((len*3+63)&gt;&gt;6));</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; SPI mSPI;</div>
-<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">int</span> mClearedLeds;</div>
-<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div>
-<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">void</span> checkClear(<span class="keywordtype">int</span> nLeds) {</div>
-<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">if</span>(nLeds &gt; mClearedLeds) {</div>
-<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; clearLine(nLeds);</div>
-<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; mClearedLeds = nLeds;</div>
-<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; }</div>
-<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div>
-<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
-<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> clearLine(<span class="keywordtype">int</span> nLeds) {</div>
-<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">int</span> n = ((nLeds*3 + 63) &gt;&gt; 6);</div>
-<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; mSPI.writeBytesValue(0, n);</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">public</span>:</div>
-<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="class_l_p_d8806_controller.html">LPD8806Controller</a>() {}</div>
-<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="class_l_p_d8806_controller.html#abe5be69b938d0709cfc77fcf57c75608"> 47</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_l_p_d8806_controller.html#abe5be69b938d0709cfc77fcf57c75608">init</a>() {</div>
-<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; mSPI.init();</div>
-<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; mClearedLeds = 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;</div>
-<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="class_l_p_d8806_controller.html#a7da0ecf67004256c83131406b2f4889e"> 52</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_l_p_d8806_controller.html#a7da0ecf67004256c83131406b2f4889e">clearLeds</a>(<span class="keywordtype">int</span> nLeds) {</div>
-<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; mSPI.select();</div>
-<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; mSPI.writeBytesValueRaw(0x80, nLeds * 3);</div>
-<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; mSPI.writeBytesValueRaw(0, ((nLeds*3+63)&gt;&gt;6));</div>
-<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; mSPI.release();</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">protected</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"><a class="line" href="class_l_p_d8806_controller.html#a4f6471eddcfe5445502b02f1f3179259"> 61</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_l_p_d8806_controller.html#a4f6471eddcfe5445502b02f1f3179259">showColor</a>(<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="l00062"></a><span class="lineno"> 62</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
-<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div>
-<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div>
-<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5"> 65</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5">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) {</div>
-<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="comment">// TODO rgb-ize scale</span></div>
-<div class="line"><a name="l00067"></a><span class="lineno"> 67</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</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="preprocessor">#ifdef SUPPORT_ARGB</span></div>
-<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5">show</a>(<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="l00072"></a><span class="lineno"> 72</span>&#160; checkClear(nLeds);</div>
-<div class="line"><a name="l00073"></a><span class="lineno"> 73</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
-<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
-<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#endif</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;</div>
-<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</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">// WS2801 definition - takes data/clock/select pin values (N.B. should take an SPI definition?)</span></div>
-<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00090"></a><span class="lineno"> 90</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="l00091"></a><span class="lineno"><a class="line" href="class_w_s2801_controller.html"> 91</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="l00092"></a><span class="lineno"> 92</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="l00093"></a><span class="lineno"> 93</span>&#160; SPI mSPI;</div>
-<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="class_c_min_wait.html">CMinWait&lt;1000&gt;</a> mWaitDelay;</div>
-<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="class_w_s2801_controller.html">WS2801Controller</a>() {}</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"><a class="line" href="class_w_s2801_controller.html#ad6187b68bccb831cd5cab3cffbd6bdb4"> 98</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_w_s2801_controller.html#ad6187b68bccb831cd5cab3cffbd6bdb4">init</a>() {</div>
-<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; mSPI.init();</div>
-<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; mWaitDelay.mark();</div>
-<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div>
-<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div>
-<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="class_w_s2801_controller.html#a867d4249b5921e0d717c6c21038bb11c"> 103</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_w_s2801_controller.html#a867d4249b5921e0d717c6c21038bb11c">clearLeds</a>(<span class="keywordtype">int</span> nLeds) {</div>
-<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; mWaitDelay.wait();</div>
-<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; mSPI.writeBytesValue(0, nLeds*3);</div>
-<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; mWaitDelay.mark();</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;</div>
-<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="keyword">protected</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"><a class="line" href="class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501"> 111</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501">showColor</a>(<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="l00112"></a><span class="lineno"> 112</span>&#160; mWaitDelay.wait();</div>
-<div class="line"><a name="l00113"></a><span class="lineno"> 113</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
-<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; mWaitDelay.mark();</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"><a class="line" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0"> 117</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0">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) {</div>
-<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; mWaitDelay.wait();</div>
-<div class="line"><a name="l00119"></a><span class="lineno"> 119</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
-<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; mWaitDelay.mark();</div>
-<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div>
-<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div>
-<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
-<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0"> 124</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0">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) {</div>
-<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; mWaitDelay.wait();</div>
-<div class="line"><a name="l00126"></a><span class="lineno"> 126</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
-<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; mWaitDelay.mark();</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;<span class="preprocessor">#endif</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;</div>
-<div class="line"><a name="l00132"></a><span class="lineno"> 132</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="l00133"></a><span class="lineno"><a class="line" href="class_w_s2803_controller.html"> 133</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="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; SPI mSPI;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">int</span> mClearedLeds;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">void</span> checkClear(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">if</span>(nLeds &gt; mClearedLeds) {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; clearLine(nLeds);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; mClearedLeds = nLeds;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">void</span> clearLine(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">int</span> n = ((nLeds*3 + 63) &gt;&gt; 6);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; mSPI.writeBytesValue(0, n);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="class_l_p_d8806_controller.html">LPD8806Controller</a>() {}</div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="class_l_p_d8806_controller.html#abe5be69b938d0709cfc77fcf57c75608"> 49</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_l_p_d8806_controller.html#abe5be69b938d0709cfc77fcf57c75608">init</a>() {</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; mSPI.init();</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; mClearedLeds = 0;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="class_l_p_d8806_controller.html#a7da0ecf67004256c83131406b2f4889e"> 54</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_l_p_d8806_controller.html#a7da0ecf67004256c83131406b2f4889e">clearLeds</a>(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; mSPI.select();</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; mSPI.writeBytesValueRaw(0x80, nLeds * 3);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; mSPI.writeBytesValueRaw(0, ((nLeds*3+63)&gt;&gt;6));</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; mSPI.waitFully();</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; mSPI.release();</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">protected</span>:</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="class_l_p_d8806_controller.html#a4f6471eddcfe5445502b02f1f3179259"> 64</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_l_p_d8806_controller.html#a4f6471eddcfe5445502b02f1f3179259">showColor</a>(<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="l00065"></a><span class="lineno"> 65</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5"> 68</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5">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) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// TODO rgb-ize scale</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5">show</a>(<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="l00075"></a><span class="lineno"> 75</span>&#160; checkClear(nLeds);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;};</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</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="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="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(1)&gt;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="class_w_s2801_controller.html"> 94</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="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; SPI mSPI;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="class_c_min_wait.html">CMinWait&lt;1000&gt;</a> mWaitDelay;</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; <a class="code" href="class_w_s2801_controller.html">WS2801Controller</a>() {}</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="class_w_s2801_controller.html#ad6187b68bccb831cd5cab3cffbd6bdb4"> 101</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_w_s2801_controller.html#ad6187b68bccb831cd5cab3cffbd6bdb4">init</a>() {</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; mSPI.init();</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; mWaitDelay.mark();</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"><a class="line" href="class_w_s2801_controller.html#a867d4249b5921e0d717c6c21038bb11c"> 106</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_w_s2801_controller.html#a867d4249b5921e0d717c6c21038bb11c">clearLeds</a>(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; mWaitDelay.wait();</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; mSPI.writeBytesValue(0, nLeds*3);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; mWaitDelay.mark();</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="keyword">protected</span>:</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501"> 114</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501">showColor</a>(<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="l00115"></a><span class="lineno"> 115</span>&#160; mWaitDelay.wait();</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; mWaitDelay.mark();</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0"> 120</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0">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) {</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; mWaitDelay.wait();</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; mWaitDelay.mark();</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;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0"> 127</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0">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) {</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; mWaitDelay.wait();</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; mWaitDelay.mark();</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="preprocessor">#endif</span></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="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00137"></a><span class="lineno"> 137</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="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment">//</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="l00146"></a><span class="lineno"> 146</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(24)&gt;</div>
-<div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="class_a_p_a102_controller.html"> 147</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="l00148"></a><span class="lineno"> 148</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="l00149"></a><span class="lineno"> 149</span>&#160; SPI mSPI;</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="keywordtype">void</span> startBoundary() { mSPI.writeWord(0); mSPI.writeWord(0); }</div>
-<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordtype">void</span> endBoundary(<span class="keywordtype">int</span> nLeds) { <span class="keywordtype">int</span> nBytes = (nLeds/16); <span class="keywordflow">do</span> { mSPI.writeByte(0xFF); } <span class="keywordflow">while</span>(nBytes--); }</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</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="l00136"></a><span class="lineno"><a class="line" href="class_w_s2803_controller.html"> 136</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="l00137"></a><span class="lineno"> 137</span>&#160;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment">// APA102 definition - takes data/clock/select pin values (N.B. should take an SPI definition?)</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</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(24)&gt;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="class_a_p_a102_controller.html"> 150</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="l00151"></a><span class="lineno"> 151</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="l00152"></a><span class="lineno"> 152</span>&#160; SPI mSPI;</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="keyword">inline</span> <span class="keywordtype">void</span> writeLed(uint8_t b0, uint8_t b1, uint8_t b2) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) {</div>
-<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; mSPI.writeByte(0xFF); mSPI.writeByte(b0); mSPI.writeByte(b1); mSPI.writeByte(b2);</div>
-<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
-<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div>
-<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="class_a_p_a102_controller.html">APA102Controller</a>() {}</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordtype">void</span> startBoundary() { mSPI.writeWord(0); mSPI.writeWord(0); }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordtype">void</span> endBoundary(<span class="keywordtype">int</span> nLeds) { <span class="keywordtype">int</span> nBytes = (nLeds/32); <span class="keywordflow">do</span> { mSPI.writeByte(0xFF); mSPI.writeByte(0x00); mSPI.writeByte(0x00); mSPI.writeByte(0x00); } <span class="keywordflow">while</span>(nBytes--); }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeLed(uint8_t b0, uint8_t b1, uint8_t b2) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) {</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; mSPI.writeByte(0xFF); mSPI.writeByte(b0); mSPI.writeByte(b1); mSPI.writeByte(b2);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div>
-<div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="class_a_p_a102_controller.html#a0e875981e076baf9cd1c5e7599b83cd0"> 161</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_a_p_a102_controller.html#a0e875981e076baf9cd1c5e7599b83cd0">init</a>() {</div>
-<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; mSPI.init();</div>
-<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div>
-<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;</div>
-<div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="class_a_p_a102_controller.html#aadcdde1b8fc6c680504fe9455ceff0fb"> 165</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_a_p_a102_controller.html#aadcdde1b8fc6c680504fe9455ceff0fb">clearLeds</a>(<span class="keywordtype">int</span> nLeds) {</div>
-<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428">showColor</a>(<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="l00167"></a><span class="lineno"> 167</span>&#160; }</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">protected</span>:</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"><a class="line" href="class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428"> 171</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428">showColor</a>(<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="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>());</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="class_a_p_a102_controller.html">APA102Controller</a>() {}</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="class_a_p_a102_controller.html#a0e875981e076baf9cd1c5e7599b83cd0"> 164</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_a_p_a102_controller.html#a0e875981e076baf9cd1c5e7599b83cd0">init</a>() {</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; mSPI.init();</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;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="class_a_p_a102_controller.html#aadcdde1b8fc6c680504fe9455ceff0fb"> 168</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_a_p_a102_controller.html#aadcdde1b8fc6c680504fe9455ceff0fb">clearLeds</a>(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428">showColor</a>(<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="l00170"></a><span class="lineno"> 170</span>&#160; }</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="keyword">protected</span>:</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div>
-<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; mSPI.select();</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; startBoundary();</div>
-<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
-<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
-<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; pixels.stepDithering();</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; endBoundary(nLeds);</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; mSPI.waitFully();</div>
-<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; mSPI.release();</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"><a class="line" href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332"> 187</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332">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) {</div>
-<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>());</div>
+<div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428"> 174</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428">showColor</a>(<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="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>());</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; mSPI.select();</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; startBoundary();</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; uint8_t b = pixels.loadAndScale0(); </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; mSPI.writeWord(0xFF00 | b); </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; uint16_t w = pixels.loadAndScale1() &lt;&lt; 8; </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; w |= pixels.loadAndScale2(); </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; mSPI.writeWord(w); </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; pixels.stepDithering();</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; endBoundary(nLeds);</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; mSPI.select();</div>
-<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div>
-<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; startBoundary();</div>
-<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
-<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
-<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; pixels.advanceData();</div>
-<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; pixels.stepDithering();</div>
-<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
-<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; endBoundary(nLeds);</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; mSPI.release();</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="preprocessor">#ifdef SUPPORT_ARGB</span></div>
-<div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332"> 204</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332">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) {</div>
-<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds,, scale, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>());</div>
-<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div>
-<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; mSPI.select();</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; startBoundary();</div>
-<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
-<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
-<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; pixels.advanceData();</div>
-<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; pixels.stepDithering();</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; endBoundary(nLeds);</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; mSPI.release();</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;<span class="preprocessor">#endif</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;</div>
-<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div>
-<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00225"></a><span class="lineno"> 225</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="l00226"></a><span class="lineno"> 226</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00234"></a><span class="lineno"> 234</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="l00235"></a><span class="lineno"><a class="line" href="class_p9813_controller.html"> 235</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="l00236"></a><span class="lineno"> 236</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="l00237"></a><span class="lineno"> 237</span>&#160; SPI mSPI;</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="keywordtype">void</span> writeBoundary() { mSPI.writeWord(0); mSPI.writeWord(0); }</div>
-<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div>
-<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> writeLed(uint8_t r, uint8_t g, uint8_t b) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) {</div>
-<div class="line"><a name="l00242"></a><span class="lineno"> 242</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="l00243"></a><span class="lineno"> 243</span>&#160; mSPI.writeByte(top); mSPI.writeByte(b); mSPI.writeByte(g); mSPI.writeByte(r);</div>
-<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; }</div>
-<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;</div>
-<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="class_p9813_controller.html">P9813Controller</a>() {}</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"><a class="line" href="class_p9813_controller.html#ad6fcb36b9378df660721ae24ed857b8a"> 249</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_p9813_controller.html#ad6fcb36b9378df660721ae24ed857b8a">init</a>() {</div>
-<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; mSPI.init();</div>
-<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; mSPI.waitFully();</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; mSPI.release();</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"><a class="line" href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332"> 194</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332">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) {</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>());</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; mSPI.select();</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; startBoundary();</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; uint16_t b = 0xFF00 | (uint16_t)pixels.loadAndScale0(); </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; mSPI.writeWord(b); </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; uint16_t w = pixels.loadAndScale1() &lt;&lt; 8; </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; w |= pixels.loadAndScale2(); </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; mSPI.writeWord(w); </div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; pixels.stepDithering();</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; endBoundary(nLeds);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; mSPI.waitFully();</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; mSPI.release();</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;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332"> 215</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332">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) {</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds,, scale, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>());</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; mSPI.select();</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; startBoundary();</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; mSPI.writeByte(0xFF); </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; uint8_t b = pixels.loadAndScale0(); mSPI.writeByte(b); </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; b = pixels.loadAndScale1(); mSPI.writeByte(b); </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; b = pixels.loadAndScale2(); mSPI.writeByte(b); </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; pixels.stepDithering();</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; }</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; endBoundary(nLeds);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; mSPI.waitFully();</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; mSPI.release();</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">#endif</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;};</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</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">// P9813 definition - takes data/clock/select pin values (N.B. should take an SPI definition?)</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</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="l00249"></a><span class="lineno"><a class="line" href="class_p9813_controller.html"> 249</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="l00250"></a><span class="lineno"> 250</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="l00251"></a><span class="lineno"> 251</span>&#160; SPI mSPI;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div>
-<div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="class_p9813_controller.html#ac2fddaa8ac8860649da9865b58dca13c"> 253</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_p9813_controller.html#ac2fddaa8ac8860649da9865b58dca13c">clearLeds</a>(<span class="keywordtype">int</span> nLeds) {</div>
-<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a">showColor</a>(<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="l00255"></a><span class="lineno"> 255</span>&#160; }</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="keyword">protected</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"><a class="line" href="class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a"> 259</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a">showColor</a>(<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="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>());</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; mSPI.select();</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; writeBoundary();</div>
-<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">while</span>(nLeds--) {</div>
-<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
-<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; pixels.stepDithering();</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; writeBoundary();</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordtype">void</span> writeBoundary() { mSPI.writeWord(0); mSPI.writeWord(0); }</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="keyword">inline</span> <span class="keywordtype">void</span> writeLed(uint8_t r, uint8_t g, uint8_t b) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) {</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</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="l00257"></a><span class="lineno"> 257</span>&#160; mSPI.writeByte(top); mSPI.writeByte(b); mSPI.writeByte(g); mSPI.writeByte(r);</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="keyword">public</span>:</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="class_p9813_controller.html">P9813Controller</a>() {}</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"><a class="line" href="class_p9813_controller.html#ad6fcb36b9378df660721ae24ed857b8a"> 263</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_p9813_controller.html#ad6fcb36b9378df660721ae24ed857b8a">init</a>() {</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; mSPI.init();</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;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="class_p9813_controller.html#ac2fddaa8ac8860649da9865b58dca13c"> 267</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_p9813_controller.html#ac2fddaa8ac8860649da9865b58dca13c">clearLeds</a>(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a">showColor</a>(<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="l00269"></a><span class="lineno"> 269</span>&#160; }</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; mSPI.waitFully();</div>
-<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; mSPI.release();</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"><a class="line" href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81"> 275</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81">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) {</div>
-<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>());</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="keyword">protected</span>:</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"><a class="line" href="class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a"> 273</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a">showColor</a>(<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="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>());</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; mSPI.select();</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; mSPI.select();</div>
-<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div>
-<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; writeBoundary();</div>
-<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
-<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
-<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; pixels.advanceData();</div>
-<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; pixels.stepDithering();</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; writeBoundary();</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; mSPI.release();</div>
-<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div>
-<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div>
-<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
-<div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81"> 292</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81">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) {</div>
-<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds,, scale, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>());</div>
-<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div>
-<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; mSPI.select();</div>
-<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;</div>
-<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; writeBoundary();</div>
-<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
-<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
-<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; pixels.advanceData();</div>
-<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; pixels.stepDithering();</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; writeBoundary();</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; mSPI.release();</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">#endif</span></div>
-<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;};</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; writeBoundary();</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">while</span>(nLeds--) {</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; pixels.stepDithering();</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; writeBoundary();</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; mSPI.waitFully();</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; mSPI.release();</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81"> 289</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81">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) {</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds, scale, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>());</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; mSPI.select();</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; writeBoundary();</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; pixels.stepDithering();</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; writeBoundary();</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; mSPI.waitFully();</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; mSPI.release();</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;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81"> 307</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81">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) {</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels(data, nLeds,, scale, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</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;</div>
-<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00313"></a><span class="lineno"> 313</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="l00314"></a><span class="lineno"> 314</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00322"></a><span class="lineno"> 322</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="l00323"></a><span class="lineno"><a class="line" href="class_s_m16716_controller.html"> 323</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="l00324"></a><span class="lineno"> 324</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="l00325"></a><span class="lineno"> 325</span>&#160; SPI mSPI;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; mSPI.select();</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; writeBoundary();</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; nLeds; i++) {</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; writeLed(pixels.loadAndScale0(), pixels.loadAndScale1(), pixels.loadAndScale2());</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; pixels.stepDithering();</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; writeBoundary();</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; mSPI.waitFully();</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; mSPI.release();</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="preprocessor">#endif</span></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;</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; <span class="keywordtype">void</span> writeHeader() {</div>
-<div class="line"><a name="l00328"></a><span class="lineno"> 328</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="l00329"></a><span class="lineno"> 329</span>&#160; mSPI.select();</div>
-<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; mSPI.writeBytesValueRaw(0, 6);</div>
-<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; mSPI.waitFully();</div>
-<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; mSPI.template writeBit&lt;0&gt;(0);</div>
-<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; mSPI.template writeBit&lt;0&gt;(0);</div>
-<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; mSPI.release();</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="keyword">public</span>:</div>
-<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="class_s_m16716_controller.html">SM16716Controller</a>() {}</div>
-<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;</div>
-<div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="class_s_m16716_controller.html#a1ba5a4e3f00b2235f278b9fb9aeb1591"> 340</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_s_m16716_controller.html#a1ba5a4e3f00b2235f278b9fb9aeb1591">init</a>() {</div>
-<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; mSPI.init();</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;</div>
-<div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="class_s_m16716_controller.html#a89d3d5ef2239a9d452bc2478b0549ad8"> 344</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_s_m16716_controller.html#a89d3d5ef2239a9d452bc2478b0549ad8">clearLeds</a>(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</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="l00330"></a><span class="lineno"> 330</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</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="l00339"></a><span class="lineno"><a class="line" href="class_s_m16716_controller.html"> 339</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="l00340"></a><span class="lineno"> 340</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="l00341"></a><span class="lineno"> 341</span>&#160; SPI mSPI;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordtype">void</span> writeHeader() {</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</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="l00345"></a><span class="lineno"> 345</span>&#160; mSPI.select();</div>
-<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">while</span>(nLeds--) {</div>
-<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; mSPI.template writeBit&lt;0&gt;(1);</div>
-<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; mSPI.writeByte(0);</div>
-<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; mSPI.writeByte(0);</div>
-<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; mSPI.writeByte(0);</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; mSPI.waitFully();</div>
-<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; mSPI.release();</div>
-<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; writeHeader();</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;</div>
-<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="keyword">protected</span>:</div>
-<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div>
-<div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="class_s_m16716_controller.html#a7df8b8a34e0dc067c69aa056deca9677"> 359</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_s_m16716_controller.html#a7df8b8a34e0dc067c69aa056deca9677">showColor</a>(<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="l00360"></a><span class="lineno"> 360</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
-<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; writeHeader();</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"><a class="line" href="class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d"> 364</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d">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) {</div>
-<div class="line"><a name="l00365"></a><span class="lineno"> 365</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="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">// of each triplet of bytes for rgb data</span></div>
-<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="comment">// writeHeader();</span></div>
-<div class="line"><a name="l00368"></a><span class="lineno"> 368</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
-<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; writeHeader();</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;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
-<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d">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) {</div>
-<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; mSPI.writeBytesValue(0, 6);</div>
-<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; mSPI.template writeBit&lt;0&gt;(0);</div>
-<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; mSPI.template writeBit&lt;0&gt;(0);</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; <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="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// of each triplet of bytes for rgb data</span></div>
-<div class="line"><a name="l00380"></a><span class="lineno"> 380</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
-<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; }</div>
-<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;<span class="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="l00386"></a><span class="lineno"> 386</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="comment">// Clockless template instantiations - see clockless.h for how the timing values are used</span></div>
-<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00394"></a><span class="lineno"> 394</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="l00395"></a><span class="lineno"> 395</span>&#160;<span class="comment">// need the more tightly defined timeframes.</span></div>
-<div class="line"><a name="l00396"></a><span class="lineno"> 396</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="l00397"></a><span class="lineno"> 397</span>&#160;<span class="preprocessor">#define FMUL (F_CPU/8000000)</span></div>
-<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<span class="comment">// LPD1886</span></div>
-<div class="line"><a name="l00399"></a><span class="lineno"> 399</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="l00400"></a><span class="lineno"><a class="line" href="class_l_p_d1886_controller1250_khz.html"> 400</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, 2 * FMUL, 3 * FMUL, 2 * FMUL, RGB_ORDER, 4&gt; {};</div>
-<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;</div>
-<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;<span class="comment">// WS2811@800khz 2 clocks, 5 clocks, 3 clocks</span></div>
-<div class="line"><a name="l00403"></a><span class="lineno"> 403</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="l00404"></a><span class="lineno"><a class="line" href="class_w_s2812_controller800_khz.html"> 404</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_w_s2812_controller800_khz.html">WS2812Controller800Khz</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="l00405"></a><span class="lineno"> 405</span>&#160;</div>
-<div class="line"><a name="l00406"></a><span class="lineno"> 406</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="l00407"></a><span class="lineno"><a class="line" href="class_w_s2811_controller800_khz.html"> 407</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, 3 * FMUL, 4 * FMUL, 3 * FMUL, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; mSPI.writeBytesValueRaw(0, 6);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; mSPI.waitFully();</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; mSPI.template writeBit&lt;0&gt;(0);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; mSPI.template writeBit&lt;0&gt;(0);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; mSPI.release();</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="keyword">public</span>:</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="class_s_m16716_controller.html">SM16716Controller</a>() {}</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="class_s_m16716_controller.html#a1ba5a4e3f00b2235f278b9fb9aeb1591"> 356</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_s_m16716_controller.html#a1ba5a4e3f00b2235f278b9fb9aeb1591">init</a>() {</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; mSPI.init();</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; }</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="class_s_m16716_controller.html#a89d3d5ef2239a9d452bc2478b0549ad8"> 360</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_s_m16716_controller.html#a89d3d5ef2239a9d452bc2478b0549ad8">clearLeds</a>(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; mSPI.select();</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">while</span>(nLeds--) {</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; mSPI.template writeBit&lt;0&gt;(1);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; mSPI.writeByte(0);</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; mSPI.writeByte(0);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; mSPI.writeByte(0);</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; mSPI.waitFully();</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; mSPI.release();</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; writeHeader();</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; }</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="class_s_m16716_controller.html#a7df8b8a34e0dc067c69aa056deca9677"> 375</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_s_m16716_controller.html#a7df8b8a34e0dc067c69aa056deca9677">showColor</a>(<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="l00376"></a><span class="lineno"> 376</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; writeHeader();</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; }</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d"> 380</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d">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) {</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</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="l00382"></a><span class="lineno"> 382</span>&#160; <span class="comment">// of each triplet of bytes for rgb data</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="comment">// writeHeader();</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; writeHeader();</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; }</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d">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) {</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; mSPI.writeBytesValue(0, 6);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; mSPI.template writeBit&lt;0&gt;(0);</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; mSPI.template writeBit&lt;0&gt;(0);</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; <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="l00395"></a><span class="lineno"> 395</span>&#160; <span class="comment">// of each triplet of bytes for rgb data</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</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, <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>()));</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<span class="preprocessor">#endif</span></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="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="comment">// Clockless template instantiations - see clockless.h for how the timing values are used</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;<span class="preprocessor">#ifdef FASTLED_HAS_CLOCKLESS</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="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="l00410"></a><span class="lineno"><a class="line" href="class_w_s2811_controller400_khz.html"> 410</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, 4 * FMUL, 10 * FMUL, 6 * FMUL, RGB_ORDER&gt; {};</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="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="l00413"></a><span class="lineno"><a class="line" href="class_u_c_s1903_controller400_khz.html"> 413</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, 4 * FMUL, 12 * FMUL, 4 * FMUL, RGB_ORDER&gt; {};</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">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
-<div class="line"><a name="l00416"></a><span class="lineno"><a class="line" href="class_u_c_s1903_b_controller800_khz.html"> 416</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, 2 * FMUL, 4 * FMUL, 4 * FMUL, RGB_ORDER&gt; {};</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="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="l00419"></a><span class="lineno"><a class="line" href="class_u_c_s1904_controller800_khz.html"> 419</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_u_c_s1904_controller800_khz.html">UCS1904Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, 3 * FMUL, 3 * FMUL, 4 * FMUL, RGB_ORDER&gt; {};</div>
-<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</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="l00413"></a><span class="lineno"> 413</span>&#160;<span class="comment">// need the more tightly defined timeframes.</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</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="l00415"></a><span class="lineno"> 415</span>&#160;<span class="preprocessor">#define FMUL (F_CPU/8000000)</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="comment">// LPD1886</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</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="l00418"></a><span class="lineno"><a class="line" href="class_l_p_d1886_controller1250_khz.html"> 418</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, 2 * FMUL, 3 * FMUL, 2 * FMUL, RGB_ORDER, 4&gt; {};</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="comment">// WS2811@800khz 2 clocks, 5 clocks, 3 clocks</span></div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</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="l00422"></a><span class="lineno"><a class="line" href="class_t_m1809_controller800_khz.html"> 422</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, 2 * FMUL, 5 * FMUL, 3 * FMUL, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="class_w_s2812_controller800_khz.html"> 422</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_w_s2812_controller800_khz.html">WS2812Controller800Khz</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="l00423"></a><span class="lineno"> 423</span>&#160;</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</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="l00425"></a><span class="lineno"><a class="line" href="class_t_m1803_controller400_khz.html"> 425</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, 6 * FMUL, 9 * FMUL, 6 * FMUL, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00425"></a><span class="lineno"><a class="line" href="class_w_s2811_controller800_khz.html"> 425</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, 3 * FMUL, 4 * FMUL, 3 * FMUL, RGB_ORDER&gt; {};</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">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
-<div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="class_t_m1829_controller800_khz.html"> 428</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, 2 * FMUL, 5 * FMUL, 3 * FMUL, RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="class_w_s2811_controller400_khz.html"> 428</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, 4 * FMUL, 10 * FMUL, 6 * FMUL, RGB_ORDER&gt; {};</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">template</span> &lt;u<span class="keywordtype">int</span>8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt;</div>
-<div class="line"><a name="l00431"></a><span class="lineno"><a class="line" href="class_g_w6205_controller400_khz.html"> 431</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, 6 * FMUL, 7 * FMUL, 6 * FMUL, RGB_ORDER, 4&gt; {};</div>
+<div class="line"><a name="l00431"></a><span class="lineno"><a class="line" href="class_u_c_s1903_controller400_khz.html"> 431</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, 4 * FMUL, 12 * FMUL, 4 * FMUL, RGB_ORDER&gt; {};</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</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="l00434"></a><span class="lineno"><a class="line" href="class_g_w6205_controller800_khz.html"> 434</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, 2 * FMUL, 4 * FMUL, 4 * FMUL, RGB_ORDER, 4&gt; {};</div>
+<div class="line"><a name="l00434"></a><span class="lineno"><a class="line" href="class_u_c_s1903_b_controller800_khz.html"> 434</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, 2 * FMUL, 4 * FMUL, 4 * FMUL, RGB_ORDER&gt; {};</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div>
-<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="comment">// GW6205@400khz - 800ns, 800ns, 800ns</span></div>
-<div class="line"><a name="l00438"></a><span class="lineno"> 438</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="l00439"></a><span class="lineno"> 439</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="l00440"></a><span class="lineno"> 440</span>&#160;<span class="preprocessor">#if NO_TIME(800, 800, 800)</span></div>
-<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the GW6205@400khz&quot;</span></div>
-<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;</div>
-<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="comment">// GW6205@400khz - 400ns, 400ns, 400ns</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</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="l00437"></a><span class="lineno"><a class="line" href="class_u_c_s1904_controller800_khz.html"> 437</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_u_c_s1904_controller800_khz.html">UCS1904Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, 3 * FMUL, 3 * FMUL, 4 * FMUL, RGB_ORDER&gt; {};</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;<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="l00440"></a><span class="lineno"><a class="line" href="class_t_m1809_controller800_khz.html"> 440</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, 2 * FMUL, 5 * FMUL, 3 * FMUL, RGB_ORDER&gt; {};</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;<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="l00443"></a><span class="lineno"><a class="line" href="class_t_m1803_controller400_khz.html"> 443</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, 6 * FMUL, 9 * FMUL, 6 * FMUL, RGB_ORDER&gt; {};</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;<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="l00446"></a><span class="lineno"> 446</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="l00447"></a><span class="lineno"> 447</span>&#160;<span class="preprocessor">#if NO_TIME(400, 400, 400)</span></div>
-<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the GW6205@400khz&quot;</span></div>
-<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="class_t_m1829_controller800_khz.html"> 446</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, 2 * FMUL, 5 * FMUL, 3 * FMUL, RGB_ORDER&gt; {};</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;<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="l00449"></a><span class="lineno"><a class="line" href="class_g_w6205_controller400_khz.html"> 449</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, 6 * FMUL, 7 * FMUL, 6 * FMUL, RGB_ORDER, 4&gt; {};</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">// UCS1903 - 500ns, 1500ns, 500ns</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_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="l00454"></a><span class="lineno"> 454</span>&#160;<span class="preprocessor">#if NO_TIME(500, 1500, 500)</span></div>
-<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the UCS1903@400khz&quot;</span></div>
-<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="preprocessor">#endif</span></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;<span class="comment">// UCS1903B - 400ns, 450ns, 450ns</span></div>
-<div class="line"><a name="l00459"></a><span class="lineno"> 459</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="l00460"></a><span class="lineno"> 460</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="l00461"></a><span class="lineno"> 461</span>&#160;<span class="preprocessor">#if NO_TIME(400, 450, 450)</span></div>
-<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the UCS1903B@800khz&quot;</span></div>
-<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;</div>
-<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="comment">// UCS1904 - 400ns, 400ns, 450ns</span></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_s1904_controller800_khz.html">UCS1904Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(400), NS(400), NS(450), RGB_ORDER&gt; {};</div>
-<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;<span class="preprocessor">#if NO_TIME(400, 400, 450)</span></div>
-<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the UCS1904@800khz&quot;</span></div>
-<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="preprocessor">#endif</span></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="comment">// TM1809 - 350ns, 350ns, 550ns</span></div>
-<div class="line"><a name="l00473"></a><span class="lineno"> 473</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="l00474"></a><span class="lineno"> 474</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="l00475"></a><span class="lineno"> 475</span>&#160;<span class="preprocessor">#if NO_TIME(350, 350, 550)</span></div>
-<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the TM1809&quot;</span></div>
-<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="preprocessor">#endif</span></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;<span class="comment">// WS2811 - 320ns, 320ns, 640ns</span></div>
-<div class="line"><a name="l00480"></a><span class="lineno"> 480</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="l00481"></a><span class="lineno"> 481</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="l00482"></a><span class="lineno"> 482</span>&#160;<span class="preprocessor">#if NO_TIME(320, 320, 640)</span></div>
-<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the WS2811 (800khz)&quot;</span></div>
-<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;</div>
-<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment">// WS2812 - 250ns, 625ns, 375ns</span></div>
-<div class="line"><a name="l00487"></a><span class="lineno"> 487</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="l00488"></a><span class="lineno"> 488</span>&#160;<span class="keyword">class </span><a class="code" href="class_w_s2812_controller800_khz.html">WS2812Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(250), NS(625), NS(375), RGB_ORDER&gt; {};</div>
-<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="preprocessor">#if NO_TIME(250, 625, 375)</span></div>
-<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the WS2812 (800khz)&quot;</span></div>
-<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="preprocessor">#endif</span></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;<span class="comment">// WS2811@400khz - 800ns, 800ns, 900ns</span></div>
-<div class="line"><a name="l00494"></a><span class="lineno"> 494</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="l00495"></a><span class="lineno"> 495</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="l00496"></a><span class="lineno"> 496</span>&#160;<span class="preprocessor">#if NO_TIME(800, 800, 900)</span></div>
-<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the WS2811 (400Khz)&quot;</span></div>
-<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;<span class="preprocessor">#endif</span></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">// 750NS, 750NS, 750NS</span></div>
-<div class="line"><a name="l00501"></a><span class="lineno"> 501</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="l00502"></a><span class="lineno"> 502</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="l00503"></a><span class="lineno"> 503</span>&#160;<span class="preprocessor">#if NO_TIME(750, 750, 750)</span></div>
-<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the TM1803&quot;</span></div>
-<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<span class="preprocessor">#endif</span></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="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"> 508</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="l00509"></a><span class="lineno"> 509</span>&#160;</div>
-<div class="line"><a name="l00510"></a><span class="lineno"> 510</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="l00511"></a><span class="lineno"><a class="line" href="class_t_m1829_controller1600_khz.html"> 511</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="l00512"></a><span class="lineno"> 512</span>&#160;<span class="preprocessor">#if NO_TIME(100, 300, 200)</span></div>
-<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for TM1829@1.6Mhz&quot;</span></div>
-<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="preprocessor">#endif</span></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="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="l00517"></a><span class="lineno"> 517</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="l00518"></a><span class="lineno"> 518</span>&#160;<span class="preprocessor">#if NO_TIME(200,400,200)</span></div>
-<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles for LPD1886&quot;</span></div>
-<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;<span class="preprocessor">#endif</span></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;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;</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="l00451"></a><span class="lineno"> 451</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="l00452"></a><span class="lineno"><a class="line" href="class_g_w6205_controller800_khz.html"> 452</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, 2 * FMUL, 4 * FMUL, 4 * FMUL, RGB_ORDER, 4&gt; {};</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;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="comment">// GW6205@400khz - 800ns, 800ns, 800ns</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_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="l00458"></a><span class="lineno"> 458</span>&#160;<span class="preprocessor">#if NO_TIME(800, 800, 800)</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the GW6205@400khz&quot;</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="comment">// GW6205@400khz - 400ns, 400ns, 400ns</span></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_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="l00465"></a><span class="lineno"> 465</span>&#160;<span class="preprocessor">#if NO_TIME(400, 400, 400)</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the GW6205@400khz&quot;</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="preprocessor">#endif</span></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="comment">// UCS1903 - 500ns, 1500ns, 500ns</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</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="l00471"></a><span class="lineno"> 471</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="l00472"></a><span class="lineno"> 472</span>&#160;<span class="preprocessor">#if NO_TIME(500, 1500, 500)</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the UCS1903@400khz&quot;</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="comment">// UCS1903B - 400ns, 450ns, 450ns</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</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="l00478"></a><span class="lineno"> 478</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="l00479"></a><span class="lineno"> 479</span>&#160;<span class="preprocessor">#if NO_TIME(400, 450, 450)</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the UCS1903B@800khz&quot;</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="preprocessor">#endif</span></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="comment">// UCS1904 - 400ns, 400ns, 450ns</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</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="l00485"></a><span class="lineno"> 485</span>&#160;<span class="keyword">class </span><a class="code" href="class_u_c_s1904_controller800_khz.html">UCS1904Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(400), NS(400), NS(450), RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="preprocessor">#if NO_TIME(400, 400, 450)</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the UCS1904@800khz&quot;</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="preprocessor">#endif</span></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">// TM1809 - 350ns, 350ns, 550ns</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</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="l00492"></a><span class="lineno"> 492</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="l00493"></a><span class="lineno"> 493</span>&#160;<span class="preprocessor">#if NO_TIME(350, 350, 550)</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the TM1809&quot;</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="preprocessor">#endif</span></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;<span class="comment">// WS2811 - 320ns, 320ns, 640ns</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</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="l00499"></a><span class="lineno"> 499</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="l00500"></a><span class="lineno"> 500</span>&#160;<span class="preprocessor">#if NO_TIME(320, 320, 640)</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the WS2811 (800khz)&quot;</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;<span class="preprocessor">#endif</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;<span class="comment">// WS2812 - 250ns, 625ns, 375ns</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</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="l00506"></a><span class="lineno"> 506</span>&#160;<span class="keyword">class </span><a class="code" href="class_w_s2812_controller800_khz.html">WS2812Controller800Khz</a> : <span class="keyword">public</span> ClocklessController&lt;DATA_PIN, NS(250), NS(625), NS(375), RGB_ORDER&gt; {};</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;<span class="preprocessor">#if NO_TIME(250, 625, 375)</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the WS2812 (800khz)&quot;</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;<span class="preprocessor">#endif</span></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="comment">// WS2811@400khz - 800ns, 800ns, 900ns</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</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="l00513"></a><span class="lineno"> 513</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="l00514"></a><span class="lineno"> 514</span>&#160;<span class="preprocessor">#if NO_TIME(800, 800, 900)</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the WS2811 (400Khz)&quot;</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;<span class="preprocessor">#endif</span></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="comment">// 750NS, 750NS, 750NS</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</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="l00520"></a><span class="lineno"> 520</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="l00521"></a><span class="lineno"> 521</span>&#160;<span class="preprocessor">#if NO_TIME(750, 750, 750)</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles available for the TM1803&quot;</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="preprocessor">#endif</span></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="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="l00526"></a><span class="lineno"> 526</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="l00527"></a><span class="lineno"> 527</span>&#160;</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_t_m1829_controller1600_khz.html"> 529</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="l00530"></a><span class="lineno"> 530</span>&#160;<span class="preprocessor">#if NO_TIME(100, 300, 200)</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 TM1829@1.6Mhz&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="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="l00535"></a><span class="lineno"> 535</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="l00536"></a><span class="lineno"> 536</span>&#160;<span class="preprocessor">#if NO_TIME(200,400,200)</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<span class="preprocessor">#warning &quot;Not enough clock cycles for LPD1886&quot;</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="preprocessor">#endif</span></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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;<span class="preprocessor">#endif</span></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;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</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:413</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_u_c_s1904_controller800_khz_html"><div class="ttname"><a href="class_u_c_s1904_controller800_khz.html">UCS1904Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:419</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="ttdoc">Base definition for an LED controller. </div><div class="ttdef"><b>Definition:</b> controller.h:32</div></div>
-<div class="ttc" id="class_w_s2801_controller_html_ad6187b68bccb831cd5cab3cffbd6bdb4"><div class="ttname"><a href="class_w_s2801_controller.html#ad6187b68bccb831cd5cab3cffbd6bdb4">WS2801Controller::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:98</div></div>
-<div class="ttc" id="class_l_p_d8806_controller_html_a4f6471eddcfe5445502b02f1f3179259"><div class="ttname"><a href="class_l_p_d8806_controller.html#a4f6471eddcfe5445502b02f1f3179259">LPD8806Controller::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> chipsets.h:61</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:407</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:511</div></div>
-<div class="ttc" id="class_l_p_d8806_controller_html_a7da0ecf67004256c83131406b2f4889e"><div class="ttname"><a href="class_l_p_d8806_controller.html#a7da0ecf67004256c83131406b2f4889e">LPD8806Controller::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> chipsets.h:52</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="ttdoc">LPD8806 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:18</div></div>
-<div class="ttc" id="class_a_p_a102_controller_html_a245148d2621eb73999ab673852c49332"><div class="ttname"><a href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332">APA102Controller::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:187</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:416</div></div>
-<div class="ttc" id="class_p9813_controller_html_ad6fcb36b9378df660721ae24ed857b8a"><div class="ttname"><a href="class_p9813_controller.html#ad6fcb36b9378df660721ae24ed857b8a">P9813Controller::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:249</div></div>
-<div class="ttc" id="class_s_m16716_controller_html_a1ba5a4e3f00b2235f278b9fb9aeb1591"><div class="ttname"><a href="class_s_m16716_controller.html#a1ba5a4e3f00b2235f278b9fb9aeb1591">SM16716Controller::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:340</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:434</div></div>
-<div class="ttc" id="class_a_p_a102_controller_html_a0e875981e076baf9cd1c5e7599b83cd0"><div class="ttname"><a href="class_a_p_a102_controller.html#a0e875981e076baf9cd1c5e7599b83cd0">APA102Controller::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:161</div></div>
-<div class="ttc" id="class_l_p_d8806_controller_html_abe5be69b938d0709cfc77fcf57c75608"><div class="ttname"><a href="class_l_p_d8806_controller.html#abe5be69b938d0709cfc77fcf57c75608">LPD8806Controller::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:47</div></div>
-<div class="ttc" id="class_p9813_controller_html_ae60dbfc4d27c62448032c61e7730ec8a"><div class="ttname"><a href="class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a">P9813Controller::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> chipsets.h:259</div></div>
-<div class="ttc" id="class_s_m16716_controller_html_a89d3d5ef2239a9d452bc2478b0549ad8"><div class="ttname"><a href="class_s_m16716_controller.html#a89d3d5ef2239a9d452bc2478b0549ad8">SM16716Controller::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> chipsets.h:344</div></div>
-<div class="ttc" id="struct_pixel_controller_html"><div class="ttname"><a href="struct_pixel_controller.html">PixelController</a></div><div class="ttdoc">Pixel controller class. </div><div class="ttdef"><b>Definition:</b> controller.h:177</div></div>
-<div class="ttc" id="class_w_s2812_controller800_khz_html"><div class="ttname"><a href="class_w_s2812_controller800_khz.html">WS2812Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:404</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:425</div></div>
-<div class="ttc" id="class_p9813_controller_html_aac4f48b0da93055c0da7285839c4ce81"><div class="ttname"><a href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81">P9813Controller::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:275</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:422</div></div>
-<div class="ttc" id="class_a_p_a102_controller_html_aadcdde1b8fc6c680504fe9455ceff0fb"><div class="ttname"><a href="class_a_p_a102_controller.html#aadcdde1b8fc6c680504fe9455ceff0fb">APA102Controller::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> chipsets.h:165</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="ttdoc">WS2801 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:91</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:400</div></div>
-<div class="ttc" id="class_w_s2801_controller_html_a867d4249b5921e0d717c6c21038bb11c"><div class="ttname"><a href="class_w_s2801_controller.html#a867d4249b5921e0d717c6c21038bb11c">WS2801Controller::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> chipsets.h:103</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:428</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:431</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:83</div></div>
+<div class="ttc" id="class_u_c_s1904_controller800_khz_html"><div class="ttname"><a href="class_u_c_s1904_controller800_khz.html">UCS1904Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:437</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="ttdoc">Base definition for an LED controller. </div><div class="ttdef"><b>Definition:</b> controller.h:34</div></div>
+<div class="ttc" id="class_w_s2801_controller_html_ad6187b68bccb831cd5cab3cffbd6bdb4"><div class="ttname"><a href="class_w_s2801_controller.html#ad6187b68bccb831cd5cab3cffbd6bdb4">WS2801Controller::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:101</div></div>
+<div class="ttc" id="class_l_p_d8806_controller_html_a4f6471eddcfe5445502b02f1f3179259"><div class="ttname"><a href="class_l_p_d8806_controller.html#a4f6471eddcfe5445502b02f1f3179259">LPD8806Controller::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> chipsets.h:64</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:425</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:529</div></div>
+<div class="ttc" id="class_l_p_d8806_controller_html_a7da0ecf67004256c83131406b2f4889e"><div class="ttname"><a href="class_l_p_d8806_controller.html#a7da0ecf67004256c83131406b2f4889e">LPD8806Controller::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> chipsets.h:54</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="ttdoc">LPD8806 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:20</div></div>
+<div class="ttc" id="class_a_p_a102_controller_html_a245148d2621eb73999ab673852c49332"><div class="ttname"><a href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332">APA102Controller::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:194</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:434</div></div>
+<div class="ttc" id="class_p9813_controller_html_ad6fcb36b9378df660721ae24ed857b8a"><div class="ttname"><a href="class_p9813_controller.html#ad6fcb36b9378df660721ae24ed857b8a">P9813Controller::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:263</div></div>
+<div class="ttc" id="class_s_m16716_controller_html_a1ba5a4e3f00b2235f278b9fb9aeb1591"><div class="ttname"><a href="class_s_m16716_controller.html#a1ba5a4e3f00b2235f278b9fb9aeb1591">SM16716Controller::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:356</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:452</div></div>
+<div class="ttc" id="class_a_p_a102_controller_html_a0e875981e076baf9cd1c5e7599b83cd0"><div class="ttname"><a href="class_a_p_a102_controller.html#a0e875981e076baf9cd1c5e7599b83cd0">APA102Controller::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:164</div></div>
+<div class="ttc" id="class_l_p_d8806_controller_html_abe5be69b938d0709cfc77fcf57c75608"><div class="ttname"><a href="class_l_p_d8806_controller.html#abe5be69b938d0709cfc77fcf57c75608">LPD8806Controller::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:49</div></div>
+<div class="ttc" id="class_p9813_controller_html_ae60dbfc4d27c62448032c61e7730ec8a"><div class="ttname"><a href="class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a">P9813Controller::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> chipsets.h:273</div></div>
+<div class="ttc" id="class_s_m16716_controller_html_a89d3d5ef2239a9d452bc2478b0549ad8"><div class="ttname"><a href="class_s_m16716_controller.html#a89d3d5ef2239a9d452bc2478b0549ad8">SM16716Controller::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> chipsets.h:360</div></div>
+<div class="ttc" id="struct_pixel_controller_html"><div class="ttname"><a href="struct_pixel_controller.html">PixelController</a></div><div class="ttdoc">Pixel controller class. </div><div class="ttdef"><b>Definition:</b> controller.h:181</div></div>
+<div class="ttc" id="class_w_s2812_controller800_khz_html"><div class="ttname"><a href="class_w_s2812_controller800_khz.html">WS2812Controller800Khz</a></div><div class="ttdef"><b>Definition:</b> chipsets.h:422</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:443</div></div>
+<div class="ttc" id="class_p9813_controller_html_aac4f48b0da93055c0da7285839c4ce81"><div class="ttname"><a href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81">P9813Controller::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:289</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:440</div></div>
+<div class="ttc" id="class_a_p_a102_controller_html_aadcdde1b8fc6c680504fe9455ceff0fb"><div class="ttname"><a href="class_a_p_a102_controller.html#aadcdde1b8fc6c680504fe9455ceff0fb">APA102Controller::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> chipsets.h:168</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="ttdoc">WS2801 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:94</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:418</div></div>
+<div class="ttc" id="class_w_s2801_controller_html_a867d4249b5921e0d717c6c21038bb11c"><div class="ttname"><a href="class_w_s2801_controller.html#a867d4249b5921e0d717c6c21038bb11c">WS2801Controller::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> chipsets.h:106</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:446</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_l_p_d8806_controller_html_a31d4e01a823682556e26748193f722e5"><div class="ttname"><a href="class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5">LPD8806Controller::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:65</div></div>
-<div class="ttc" id="class_w_s2801_controller_html_a615609bf16dd4c8fcc9ccf286ca52501"><div class="ttname"><a href="class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501">WS2801Controller::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> chipsets.h:111</div></div>
-<div class="ttc" id="class_p9813_controller_html_ac2fddaa8ac8860649da9865b58dca13c"><div class="ttname"><a href="class_p9813_controller.html#ac2fddaa8ac8860649da9865b58dca13c">P9813Controller::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> chipsets.h:253</div></div>
-<div class="ttc" id="class_p9813_controller_html"><div class="ttname"><a href="class_p9813_controller.html">P9813Controller</a></div><div class="ttdoc">P9813 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:235</div></div>
-<div class="ttc" id="class_s_m16716_controller_html_a3d720053186fd61d6ad90d48cac3d57d"><div class="ttname"><a href="class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d">SM16716Controller::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:364</div></div>
-<div class="ttc" id="class_a_p_a102_controller_html_a0aa9f2896fe8b23554623fd3de0d5428"><div class="ttname"><a href="class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428">APA102Controller::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> chipsets.h:171</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:431</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:410</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a676f705adf93898739a405b85150a3e7"><div class="ttname"><a href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">CLEDController::getDither</a></div><div class="ttdeci">uint8_t getDither()</div><div class="ttdoc">get the dithering option currently set for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:133</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="ttdoc">APA102 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:147</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:133</div></div>
-<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void swapbits8(bitswap_type in</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> delay.h:79</div></div>
-<div class="ttc" id="class_s_m16716_controller_html_a7df8b8a34e0dc067c69aa056deca9677"><div class="ttname"><a href="class_s_m16716_controller.html#a7df8b8a34e0dc067c69aa056deca9677">SM16716Controller::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> chipsets.h:359</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="ttdoc">SM16716 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:323</div></div>
-<div class="ttc" id="class_w_s2801_controller_html_a69fca4db95f5f60f27d7d1a8c7fa16a0"><div class="ttname"><a href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0">WS2801Controller::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:117</div></div>
+<div class="ttc" id="class_l_p_d8806_controller_html_a31d4e01a823682556e26748193f722e5"><div class="ttname"><a href="class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5">LPD8806Controller::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:68</div></div>
+<div class="ttc" id="class_w_s2801_controller_html_a615609bf16dd4c8fcc9ccf286ca52501"><div class="ttname"><a href="class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501">WS2801Controller::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> chipsets.h:114</div></div>
+<div class="ttc" id="class_p9813_controller_html_ac2fddaa8ac8860649da9865b58dca13c"><div class="ttname"><a href="class_p9813_controller.html#ac2fddaa8ac8860649da9865b58dca13c">P9813Controller::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> chipsets.h:267</div></div>
+<div class="ttc" id="class_p9813_controller_html"><div class="ttname"><a href="class_p9813_controller.html">P9813Controller</a></div><div class="ttdoc">P9813 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:249</div></div>
+<div class="ttc" id="class_s_m16716_controller_html_a3d720053186fd61d6ad90d48cac3d57d"><div class="ttname"><a href="class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d">SM16716Controller::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:380</div></div>
+<div class="ttc" id="class_a_p_a102_controller_html_a0aa9f2896fe8b23554623fd3de0d5428"><div class="ttname"><a href="class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428">APA102Controller::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> chipsets.h:174</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:449</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:428</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a676f705adf93898739a405b85150a3e7"><div class="ttname"><a href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">CLEDController::getDither</a></div><div class="ttdeci">uint8_t getDither()</div><div class="ttdoc">get the dithering option currently set for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:135</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="ttdoc">APA102 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:150</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:136</div></div>
+<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void swapbits8(bitswap_type in</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> fastled_delay.h:82</div></div>
+<div class="ttc" id="class_s_m16716_controller_html_a7df8b8a34e0dc067c69aa056deca9677"><div class="ttname"><a href="class_s_m16716_controller.html#a7df8b8a34e0dc067c69aa056deca9677">SM16716Controller::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> chipsets.h:375</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="ttdoc">SM16716 controller class. </div><div class="ttdef"><b>Definition:</b> chipsets.h:339</div></div>
+<div class="ttc" id="class_w_s2801_controller_html_a69fca4db95f5f60f27d7d1a8c7fa16a0"><div class="ttname"><a href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0">WS2801Controller::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> chipsets.h:120</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_a_p_a102_controller-members.html b/docs/3.1/class_a_p_a102_controller-members.html
index 9812774d..53f97d3a 100644
--- a/docs/3.1/class_a_p_a102_controller-members.html
+++ b/docs/3.1/class_a_p_a102_controller-members.html
@@ -99,40 +99,41 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<tr class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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><td class="entry"><a class="el" href="class_a_p_a102_controller.html#a0e875981e076baf9cd1c5e7599b83cd0">init</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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><td class="entry"><a class="el" href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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"><td class="entry"><b>getMaxRefreshRate</b>() const (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">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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 class="even"><td class="entry"><a class="el" href="class_a_p_a102_controller.html#a0e875981e076baf9cd1c5e7599b83cd0">init</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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 class="even"><td class="entry"><a class="el" href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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"><td class="entry"><b>show</b>(const struct CARGB *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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 CARGB *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 class="even"><td class="entry"><a class="el" href="class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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><td class="entry"><a class="el" href="class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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 CARGB *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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 CARGB *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><td class="entry"><a class="el" href="class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_a_p_a102_controller.html b/docs/3.1/class_a_p_a102_controller.html
index b57dc93a..9577db1f 100644
--- a/docs/3.1/class_a_p_a102_controller.html
+++ b/docs/3.1/class_a_p_a102_controller.html
@@ -207,6 +207,9 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="c
<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a> (uint8_t scale)</td></tr>
<tr class="memdesc:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the combined brightness/color adjustment for this controller. <br /></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="memitem:a3beb4aff15617bc781c1e49178dd9975 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3beb4aff15617bc781c1e49178dd9975"></a>
+virtual uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>getMaxRefreshRate</b> () const </td></tr>
+<tr class="separator:a3beb4aff15617bc781c1e49178dd9975 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>
@@ -441,7 +444,7 @@ template&lt;uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER = BGR, uint8_t
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_a_p_a104.html b/docs/3.1/class_a_p_a104.html
index 51f1efb6..10cc3596 100644
--- a/docs/3.1/class_a_p_a104.html
+++ b/docs/3.1/class_a_p_a104.html
@@ -109,7 +109,7 @@ Collaboration diagram for APA104&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index 9f673962..c6529435 100644
--- 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
@@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index e416f048..834559d1 100644
--- 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
@@ -140,7 +140,7 @@ static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeByte</b>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_c_every_n_time_periods-members.html b/docs/3.1/class_c_every_n_time_periods-members.html
index 993fdcca..53deec65 100644
--- a/docs/3.1/class_c_every_n_time_periods-members.html
+++ b/docs/3.1/class_c_every_n_time_periods-members.html
@@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_c_every_n_time_periods.html b/docs/3.1/class_c_every_n_time_periods.html
index 2e3a6b20..0eee0574 100644
--- a/docs/3.1/class_c_every_n_time_periods.html
+++ b/docs/3.1/class_c_every_n_time_periods.html
@@ -90,7 +90,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="class_c_every_n_time_periods-members.html">List of all members</a> </div>
<div class="headertitle">
-<div class="title">CEveryNTimePeriods&lt; timeType, timeGetter &gt; Class Template Reference</div> </div>
+<div class="title">CEveryNTimePeriods&lt; timeType, timeGetter &gt; Class Template Reference<div class="ingroups"><a class="el" href="group__lib8tion.html">Fast math functions</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
@@ -145,7 +145,7 @@ timeType&#160;</td><td class="memItemRight" valign="bottom"><b>mPeriod</b></td><
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index 46bff825..9506a35d 100644
--- a/docs/3.1/class_c_fast_l_e_d-members.html
+++ b/docs/3.1/class_c_fast_l_e_d-members.html
@@ -123,7 +123,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<tr class="even"><td class="entry"><a class="el" href="class_c_fast_l_e_d.html#a730ba7d967e882b4b893689cf333b2eb">setBrightness</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"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="class_c_fast_l_e_d.html#ad266c3e649cc12a6dc49a1e229acc282">setCorrection</a>(const struct CRGB &amp;correction)</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#a7ae5d3864df01101d82d242c123ffb36">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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#a09f4d61853d88482fa5824144c8127ed">setMaxRefreshRate</a>(uint16_t refresh)</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#a1f39e8404db214bbd6a776f52a77d8b1">setMaxRefreshRate</a>(uint16_t refresh, bool constrain=false)</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#a28c2dfb0ec592db03f3063ade135f19f">setTemperature</a>(const struct CRGB &amp;temp)</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#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 class="even"><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>
@@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_c_fast_l_e_d.html b/docs/3.1/class_c_fast_l_e_d.html
index a770f855..c9715ce1 100644
--- a/docs/3.1/class_c_fast_l_e_d.html
+++ b/docs/3.1/class_c_fast_l_e_d.html
@@ -139,9 +139,9 @@ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clas
<tr class="memitem:a7ae5d3864df01101d82d242c123ffb36"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_fast_l_e_d.html#a7ae5d3864df01101d82d242c123ffb36">setDither</a> (uint8_t ditherMode=BINARY_DITHER)</td></tr>
<tr class="memdesc:a7ae5d3864df01101d82d242c123ffb36"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the dithering mode. <a href="#a7ae5d3864df01101d82d242c123ffb36">More...</a><br /></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">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_fast_l_e_d.html#a09f4d61853d88482fa5824144c8127ed">setMaxRefreshRate</a> (uint16_t refresh)</td></tr>
-<tr class="memdesc:a09f4d61853d88482fa5824144c8127ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum refresh rate. <a href="#a09f4d61853d88482fa5824144c8127ed">More...</a><br /></td></tr>
-<tr class="separator:a09f4d61853d88482fa5824144c8127ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f39e8404db214bbd6a776f52a77d8b1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_fast_l_e_d.html#a1f39e8404db214bbd6a776f52a77d8b1">setMaxRefreshRate</a> (uint16_t refresh, bool constrain=false)</td></tr>
+<tr class="memdesc:a1f39e8404db214bbd6a776f52a77d8b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum refresh rate. <a href="#a1f39e8404db214bbd6a776f52a77d8b1">More...</a><br /></td></tr>
+<tr class="separator:a1f39e8404db214bbd6a776f52a77d8b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a61d27e179c9b68bde89d220aebc0de32"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_fast_l_e_d.html#a61d27e179c9b68bde89d220aebc0de32">countFPS</a> (int nFrames=25)</td></tr>
<tr class="memdesc:a61d27e179c9b68bde89d220aebc0de32"><td class="mdescLeft">&#160;</td><td class="mdescRight">for debugging, will keep track of time between calls to countFPS, and every nFrames calls, it will update an internal counter for the current FPS. <a href="#a61d27e179c9b68bde89d220aebc0de32">More...</a><br /></td></tr>
<tr class="separator:a61d27e179c9b68bde89d220aebc0de32"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -826,7 +826,7 @@ template&lt;EBlockChipsets CHIPSET, int NUM_LANES, EOrder RGB_ORDER&gt; </div>
</div>
</div>
-<a class="anchor" id="a09f4d61853d88482fa5824144c8127ed"></a>
+<a class="anchor" id="a1f39e8404db214bbd6a776f52a77d8b1"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
@@ -834,16 +834,27 @@ template&lt;EBlockChipsets CHIPSET, int NUM_LANES, EOrder RGB_ORDER&gt; </div>
<td class="memname">void CFastLED::setMaxRefreshRate </td>
<td>(</td>
<td class="paramtype">uint16_t&#160;</td>
- <td class="paramname"><em>refresh</em></td><td>)</td>
+ <td class="paramname"><em>refresh</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>constrain</em> = <code>false</code>&#160;</td>
+ </tr>
+ <tr>
<td></td>
+ <td>)</td>
+ <td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Set the maximum refresh rate. </p>
-<p>This is global for all leds. Attempts to call show faster than this rate will simply wait. Defaults to 400Hz. Set to 0 to have no maximum rate. </p><dl class="params"><dt>Parameters</dt><dd>
+<p>This is global for all leds. Attempts to call show faster than this rate will simply wait. Note that the refresh rate defaults to the slowest refresh rate of all the leds added through addLeds. If you wish to set/override this rate, be sure to call setMaxRefreshRate <em>after</em> adding all of your leds. </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">refresh</td><td>- maximum refresh rate in hz </td></tr>
+ <tr><td class="paramname">constrain</td><td>- constrain refresh rate to the slowest speed yet set </td></tr>
</table>
</dd>
</dl>
@@ -998,7 +1009,7 @@ template&lt;EBlockChipsets CHIPSET, int NUM_LANES, EOrder RGB_ORDER&gt; </div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index 4052d1ca..3b6987bc 100644
--- a/docs/3.1/class_c_h_s_v_palette16-members.html
+++ b/docs/3.1/class_c_h_s_v_palette16-members.html
@@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_c_h_s_v_palette16.html b/docs/3.1/class_c_h_s_v_palette16.html
index 62a0737c..1fbc5134 100644
--- a/docs/3.1/class_c_h_s_v_palette16.html
+++ b/docs/3.1/class_c_h_s_v_palette16.html
@@ -158,7 +158,7 @@ Public Attributes</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index 40f463aa..1051b9da 100644
--- a/docs/3.1/class_c_h_s_v_palette256-members.html
+++ b/docs/3.1/class_c_h_s_v_palette256-members.html
@@ -113,7 +113,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_c_h_s_v_palette256.html b/docs/3.1/class_c_h_s_v_palette256.html
index 144198e9..8fd6873a 100644
--- a/docs/3.1/class_c_h_s_v_palette256.html
+++ b/docs/3.1/class_c_h_s_v_palette256.html
@@ -164,7 +164,7 @@ Public Attributes</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index 31256762..b5ddac26 100644
--- a/docs/3.1/class_c_l_e_d_controller-members.html
+++ b/docs/3.1/class_c_l_e_d_controller-members.html
@@ -99,39 +99,40 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<tr class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af877a15a5ec452780fbd1d359b8a9913">init</a>()=0</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">show</a>(const struct CRGB *data, int nLeds, CRGB scale)=0</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 CARGB *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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 CARGB *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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a068fa50d8c7d31bd8537b731eea84c92">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)=0</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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>getMaxRefreshRate</b>() const (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">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af877a15a5ec452780fbd1d359b8a9913">init</a>()=0</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">show</a>(const struct CRGB *data, int nLeds, CRGB scale)=0</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"><td class="entry"><b>show</b>(const struct CARGB *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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 CARGB *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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a068fa50d8c7d31bd8537b731eea84c92">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)=0</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_c_l_e_d_controller.html b/docs/3.1/class_c_l_e_d_controller.html
index b36a41fc..0feffb63 100644
--- a/docs/3.1/class_c_l_e_d_controller.html
+++ b/docs/3.1/class_c_l_e_d_controller.html
@@ -210,6 +210,9 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="c
<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a> (uint8_t scale)</td></tr>
<tr class="memdesc:af6173cca91ee446766cc15102990d7bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the combined brightness/color adjustment for this controller. <br /></td></tr>
<tr class="separator:af6173cca91ee446766cc15102990d7bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3beb4aff15617bc781c1e49178dd9975"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3beb4aff15617bc781c1e49178dd9975"></a>
+virtual uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>getMaxRefreshRate</b> () const </td></tr>
+<tr class="separator:a3beb4aff15617bc781c1e49178dd9975"><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>
@@ -381,7 +384,7 @@ class&#160;</td><td class="memItemRight" valign="bottom"><b>CFastLED</b></td></t
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_c_min_wait-members.html b/docs/3.1/class_c_min_wait-members.html
index cfebe2a6..6245df91 100644
--- a/docs/3.1/class_c_min_wait-members.html
+++ b/docs/3.1/class_c_min_wait-members.html
@@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_c_min_wait.html b/docs/3.1/class_c_min_wait.html
index e0526d08..fed27a31 100644
--- a/docs/3.1/class_c_min_wait.html
+++ b/docs/3.1/class_c_min_wait.html
@@ -96,7 +96,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<p>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 this should make sure that chipsets that have.
<a href="class_c_min_wait.html#details">More...</a></p>
-<p><code>#include &lt;<a class="el" href="delay_8h_source.html">delay.h</a>&gt;</code></p>
+<p><code>#include &lt;<a class="el" href="fastled__delay_8h_source.html">fastled_delay.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
@@ -113,12 +113,12 @@ class CMinWait&lt; WAIT &gt;</h3>
<p>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 this should make sure that chipsets that have. </p>
</div><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>
+<li><a class="el" href="fastled__delay_8h_source.html">fastled_delay.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index f477c8ae..daa70544 100644
--- a/docs/3.1/class_c_r_g_b_palette16-members.html
+++ b/docs/3.1/class_c_r_g_b_palette16-members.html
@@ -105,19 +105,22 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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"><td class="entry"><b>CRGBPalette16</b>(TProgmemRGBGradientPalette_bytes progpal) (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>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"><td class="entry"><b>loadDynamicGradientPalette</b>(TDynamicRGBGradientPalette_bytes gpal) (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 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>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(TProgmemRGBGradientPalette_bytes progpal) (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) __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>(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"><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" class="even"><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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_c_r_g_b_palette16.html b/docs/3.1/class_c_r_g_b_palette16.html
index 184e6df0..489294a5 100644
--- a/docs/3.1/class_c_r_g_b_palette16.html
+++ b/docs/3.1/class_c_r_g_b_palette16.html
@@ -163,6 +163,15 @@ const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td clas
<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>
+<tr class="memitem:a727e466567e9e65ffd17eb6a71d56d1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a727e466567e9e65ffd17eb6a71d56d1f"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette16</b> (TProgmemRGBGradientPalette_bytes progpal)</td></tr>
+<tr class="separator:a727e466567e9e65ffd17eb6a71d56d1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a614663def062dcc371d4f14db88380c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a614663def062dcc371d4f14db88380c3"></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> (TProgmemRGBGradientPalette_bytes progpal)</td></tr>
+<tr class="separator:a614663def062dcc371d4f14db88380c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adae71292874671f029f4df818c0b2d70"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adae71292874671f029f4df818c0b2d70"></a>
+<a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>loadDynamicGradientPalette</b> (TDynamicRGBGradientPalette_bytes gpal)</td></tr>
+<tr class="separator:adae71292874671f029f4df818c0b2d70"><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>
@@ -176,7 +185,7 @@ Public Attributes</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index 282d5466..686c8795 100644
--- a/docs/3.1/class_c_r_g_b_palette256-members.html
+++ b/docs/3.1/class_c_r_g_b_palette256-members.html
@@ -106,20 +106,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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" class="even"><td class="entry"><b>CRGBPalette256</b>(TProgmemRGBGradientPalette_bytes progpal) (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>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" class="even"><td class="entry"><b>loadDynamicGradientPalette</b>(TDynamicRGBGradientPalette_bytes gpal) (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 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>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(TProgmemRGBGradientPalette_bytes progpal) (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) __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>(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"><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" class="even"><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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_c_r_g_b_palette256.html b/docs/3.1/class_c_r_g_b_palette256.html
index 47af74f8..352e37d0 100644
--- a/docs/3.1/class_c_r_g_b_palette256.html
+++ b/docs/3.1/class_c_r_g_b_palette256.html
@@ -169,6 +169,15 @@ const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td clas
<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>
+<tr class="memitem:ae306ab193417c951327d465d1f6575af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae306ab193417c951327d465d1f6575af"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CRGBPalette256</b> (TProgmemRGBGradientPalette_bytes progpal)</td></tr>
+<tr class="separator:ae306ab193417c951327d465d1f6575af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae388de7344da19c4168f2ceea1eb6e38"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae388de7344da19c4168f2ceea1eb6e38"></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> (TProgmemRGBGradientPalette_bytes progpal)</td></tr>
+<tr class="separator:ae388de7344da19c4168f2ceea1eb6e38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4769c68cfb248c340f9f80df444b49ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4769c68cfb248c340f9f80df444b49ce"></a>
+<a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>loadDynamicGradientPalette</b> (TDynamicRGBGradientPalette_bytes gpal)</td></tr>
+<tr class="separator:a4769c68cfb248c340f9f80df444b49ce"><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>
@@ -182,7 +191,7 @@ Public Attributes</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index cac779f3..88a00e56 100644
--- 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
@@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index 95806323..964950dd 100644
--- 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
@@ -114,7 +114,7 @@ static&#160;</td><td class="memItemRight" valign="bottom"><b>__attribute__</b> (
<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>
+static register uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>scale</b> { return <a class="el" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(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>
@@ -127,7 +127,7 @@ static register uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>sc
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_d_m_x_s_e_r_i_a_l-members.html b/docs/3.1/class_d_m_x_s_e_r_i_a_l-members.html
index c58378e8..e69a4263 100644
--- a/docs/3.1/class_d_m_x_s_e_r_i_a_l-members.html
+++ b/docs/3.1/class_d_m_x_s_e_r_i_a_l-members.html
@@ -98,39 +98,40 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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 class="even"><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html#a0cd937424d4f6eedb90acec81ca1fa27">init</a>()</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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 class="even"><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &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>show</b>(const struct CARGB *data, int nLeds, uint8_t scale=255)=0 (defined in <a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>show</b>(const struct CARGB *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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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>getMaxRefreshRate</b>() const (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">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html#a0cd937424d4f6eedb90acec81ca1fa27">init</a>()</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &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 CARGB *data, int nLeds, uint8_t scale=255)=0 (defined in <a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>show</b>(const struct CARGB *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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_d_m_x_s_e_r_i_a_l.html b/docs/3.1/class_d_m_x_s_e_r_i_a_l.html
index a570fa99..c3735eff 100644
--- a/docs/3.1/class_d_m_x_s_e_r_i_a_l.html
+++ b/docs/3.1/class_d_m_x_s_e_r_i_a_l.html
@@ -210,6 +210,9 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="c
<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a> (uint8_t scale)</td></tr>
<tr class="memdesc:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the combined brightness/color adjustment for this controller. <br /></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="memitem:a3beb4aff15617bc781c1e49178dd9975 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3beb4aff15617bc781c1e49178dd9975"></a>
+virtual uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>getMaxRefreshRate</b> () const </td></tr>
+<tr class="separator:a3beb4aff15617bc781c1e49178dd9975 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"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</a> ()</td></tr>
@@ -252,7 +255,7 @@ static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_d_m_x_s_i_m_p_l_e-members.html b/docs/3.1/class_d_m_x_s_i_m_p_l_e-members.html
index f593d525..1590ec76 100644
--- a/docs/3.1/class_d_m_x_s_i_m_p_l_e-members.html
+++ b/docs/3.1/class_d_m_x_s_i_m_p_l_e-members.html
@@ -98,39 +98,40 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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 class="even"><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html#a251c7d09383870337853c360996871c3">init</a>()</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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 class="even"><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &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 CARGB *data, int nLeds, uint8_t scale=255)=0 (defined in <a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</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 CARGB *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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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>getMaxRefreshRate</b>() const (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">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html#a251c7d09383870337853c360996871c3">init</a>()</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &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 CARGB *data, int nLeds, uint8_t scale=255)=0 (defined in <a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>show</b>(const struct CARGB *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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_d_m_x_s_i_m_p_l_e.html b/docs/3.1/class_d_m_x_s_i_m_p_l_e.html
index 67a4f977..7437ecf7 100644
--- a/docs/3.1/class_d_m_x_s_i_m_p_l_e.html
+++ b/docs/3.1/class_d_m_x_s_i_m_p_l_e.html
@@ -201,6 +201,9 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="c
<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a> (uint8_t scale)</td></tr>
<tr class="memdesc:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the combined brightness/color adjustment for this controller. <br /></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="memitem:a3beb4aff15617bc781c1e49178dd9975 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3beb4aff15617bc781c1e49178dd9975"></a>
+virtual uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>getMaxRefreshRate</b> () const </td></tr>
+<tr class="separator:a3beb4aff15617bc781c1e49178dd9975 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"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</a> ()</td></tr>
@@ -253,7 +256,7 @@ static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_d_m_x_serial_controller-members.html b/docs/3.1/class_d_m_x_serial_controller-members.html
index bc209b74..4251af3b 100644
--- a/docs/3.1/class_d_m_x_serial_controller-members.html
+++ b/docs/3.1/class_d_m_x_serial_controller-members.html
@@ -98,39 +98,40 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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 class="even"><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html#a0cd937424d4f6eedb90acec81ca1fa27">init</a>()</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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 class="even"><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &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>show</b>(const struct CARGB *data, int nLeds, uint8_t scale=255)=0 (defined in <a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
- <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>show</b>(const struct CARGB *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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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>getMaxRefreshRate</b>() const (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">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html#a0cd937424d4f6eedb90acec81ca1fa27">init</a>()</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &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 CARGB *data, int nLeds, uint8_t scale=255)=0 (defined in <a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>show</b>(const struct CARGB *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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_d_m_x_serial_controller.html b/docs/3.1/class_d_m_x_serial_controller.html
index 4dd7e9cb..dbb7b77d 100644
--- a/docs/3.1/class_d_m_x_serial_controller.html
+++ b/docs/3.1/class_d_m_x_serial_controller.html
@@ -210,6 +210,9 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="c
<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a> (uint8_t scale)</td></tr>
<tr class="memdesc:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the combined brightness/color adjustment for this controller. <br /></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="memitem:a3beb4aff15617bc781c1e49178dd9975 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3beb4aff15617bc781c1e49178dd9975"></a>
+virtual uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>getMaxRefreshRate</b> () const </td></tr>
+<tr class="separator:a3beb4aff15617bc781c1e49178dd9975 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>
@@ -364,7 +367,7 @@ template&lt;EOrder RGB_ORDER = RGB&gt; </div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_d_m_x_simple_controller-members.html b/docs/3.1/class_d_m_x_simple_controller-members.html
index 5d3dca27..df001f53 100644
--- a/docs/3.1/class_d_m_x_simple_controller-members.html
+++ b/docs/3.1/class_d_m_x_simple_controller-members.html
@@ -98,39 +98,40 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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 class="even"><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html#a251c7d09383870337853c360996871c3">init</a>()</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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 class="even"><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &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 CARGB *data, int nLeds, uint8_t scale=255)=0 (defined in <a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</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 CARGB *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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
- <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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>getMaxRefreshRate</b>() const (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">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html#a251c7d09383870337853c360996871c3">init</a>()</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &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 CARGB *data, int nLeds, uint8_t scale=255)=0 (defined in <a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a>)</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">protected</span><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>show</b>(const struct CARGB *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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</td><td class="entry"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_d_m_x_simple_controller.html b/docs/3.1/class_d_m_x_simple_controller.html
index af084a46..7146a801 100644
--- a/docs/3.1/class_d_m_x_simple_controller.html
+++ b/docs/3.1/class_d_m_x_simple_controller.html
@@ -202,6 +202,9 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="c
<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a> (uint8_t scale)</td></tr>
<tr class="memdesc:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the combined brightness/color adjustment for this controller. <br /></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="memitem:a3beb4aff15617bc781c1e49178dd9975 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3beb4aff15617bc781c1e49178dd9975"></a>
+virtual uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>getMaxRefreshRate</b> () const </td></tr>
+<tr class="separator:a3beb4aff15617bc781c1e49178dd9975 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>
@@ -368,7 +371,7 @@ template&lt;uint8_t DATA_PIN, EOrder RGB_ORDER = RGB&gt; </div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_fast_pin-members.html b/docs/3.1/class_fast_pin-members.html
index 323907bf..4f5185b6 100644
--- a/docs/3.1/class_fast_pin-members.html
+++ b/docs/3.1/class_fast_pin-members.html
@@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_fast_pin.html b/docs/3.1/class_fast_pin.html
index a7d8c366..609cf12c 100644
--- a/docs/3.1/class_fast_pin.html
+++ b/docs/3.1/class_fast_pin.html
@@ -175,7 +175,7 @@ class FastPin&lt; PIN &gt;</h3>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_fast_pin_b_b-members.html b/docs/3.1/class_fast_pin_b_b-members.html
index 9ac3a90f..f27d905b 100644
--- a/docs/3.1/class_fast_pin_b_b-members.html
+++ b/docs/3.1/class_fast_pin_b_b-members.html
@@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_fast_pin_b_b.html b/docs/3.1/class_fast_pin_b_b.html
index 2ed637a0..b04f76c1 100644
--- a/docs/3.1/class_fast_pin_b_b.html
+++ b/docs/3.1/class_fast_pin_b_b.html
@@ -165,7 +165,7 @@ static port_t&#160;</td><td class="memItemRight" valign="bottom"><b>mask</b> ()
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_g_w6205.html b/docs/3.1/class_g_w6205.html
index e6655832..5a38441e 100644
--- a/docs/3.1/class_g_w6205.html
+++ b/docs/3.1/class_g_w6205.html
@@ -109,7 +109,7 @@ Collaboration diagram for GW6205&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_g_w6205__400.html b/docs/3.1/class_g_w6205__400.html
index dab4470a..a1cbf9c7 100644
--- a/docs/3.1/class_g_w6205__400.html
+++ b/docs/3.1/class_g_w6205__400.html
@@ -109,7 +109,7 @@ Collaboration diagram for GW6205_400&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_g_w6205_controller400_khz.html b/docs/3.1/class_g_w6205_controller400_khz.html
index 154a8df0..26760921 100644
--- a/docs/3.1/class_g_w6205_controller400_khz.html
+++ b/docs/3.1/class_g_w6205_controller400_khz.html
@@ -107,7 +107,7 @@ Collaboration diagram for GW6205Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;:</
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_g_w6205_controller800_khz.html b/docs/3.1/class_g_w6205_controller800_khz.html
index f35ee442..2b239195 100644
--- a/docs/3.1/class_g_w6205_controller800_khz.html
+++ b/docs/3.1/class_g_w6205_controller800_khz.html
@@ -107,7 +107,7 @@ Collaboration diagram for GW6205Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;:</
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_input_pin-members.html b/docs/3.1/class_input_pin-members.html
index fd0cf9d0..0767c338 100644
--- a/docs/3.1/class_input_pin-members.html
+++ b/docs/3.1/class_input_pin-members.html
@@ -93,30 +93,52 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<p>This is the complete list of members for <a class="el" href="class_input_pin.html">InputPin</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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>hi</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hi</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>hi</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hi</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>hi</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hival</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>hival</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>InputPin</b>(int pin) (defined in <a class="el" href="class_input_pin.html">InputPin</a>)</td><td class="entry"><a class="el" href="class_input_pin.html">InputPin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>InputPin</b>(int pin) (defined in <a class="el" href="class_input_pin.html">InputPin</a>)</td><td class="entry"><a class="el" href="class_input_pin.html">InputPin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>isSelected</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>isSelected</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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>lo</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>lo</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lo</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>lo</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>loval</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>loval</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mask</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>mask</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Pin</b>(int pin) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Pin</b>(int pin) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>port</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>port</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>port_ptr_t</b> typedef (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>port_ptr_t</b> typedef (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>port_t</b> typedef (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>release</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>release</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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>select</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>select</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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>set</b>(register port_t val) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set</b>(register port_t val) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setInput</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>setInput</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setOutput</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setOutput</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setPin</b>(int pin) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>strobe</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>strobe</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toggle</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toggle</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_input_pin.html b/docs/3.1/class_input_pin.html
index 7cc1be1b..9de4f436 100644
--- a/docs/3.1/class_input_pin.html
+++ b/docs/3.1/class_input_pin.html
@@ -112,6 +112,9 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:acf74eef6677cb410c9f6534f8ec34005"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf74eef6677cb410c9f6534f8ec34005"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>InputPin</b> (int pin)</td></tr>
<tr class="separator:acf74eef6677cb410c9f6534f8ec34005"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf74eef6677cb410c9f6534f8ec34005"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acf74eef6677cb410c9f6534f8ec34005"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>InputPin</b> (int pin)</td></tr>
+<tr class="separator:acf74eef6677cb410c9f6534f8ec34005"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_class_pin"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_pin')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_pin.html">Pin</a></td></tr>
<tr class="memitem:acd4ade93d8a5831ea021e0fff857aad5 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd4ade93d8a5831ea021e0fff857aad5"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>Pin</b> (int pin)</td></tr>
@@ -167,6 +170,63 @@ virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>release</b> (
<tr class="memitem:a92a7f23de99162c63611556e346b1fcc inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92a7f23de99162c63611556e346b1fcc"></a>
virtual bool&#160;</td><td class="memItemRight" valign="bottom"><b>isSelected</b> ()</td></tr>
<tr class="separator:a92a7f23de99162c63611556e346b1fcc inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd4ade93d8a5831ea021e0fff857aad5 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd4ade93d8a5831ea021e0fff857aad5"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Pin</b> (int pin)</td></tr>
+<tr class="separator:acd4ade93d8a5831ea021e0fff857aad5 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeaddf413f38dd8e0cc6da9c84d372474 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeaddf413f38dd8e0cc6da9c84d372474"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setPin</b> (int pin)</td></tr>
+<tr class="separator:aeaddf413f38dd8e0cc6da9c84d372474 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2309200ff683097b1aa8679ae3dc1e30 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2309200ff683097b1aa8679ae3dc1e30"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setOutput</b> ()</td></tr>
+<tr class="separator:a2309200ff683097b1aa8679ae3dc1e30 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b1c3fa3480cd4a57c065f2e8811543a inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b1c3fa3480cd4a57c065f2e8811543a"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setInput</b> ()</td></tr>
+<tr class="separator:a3b1c3fa3480cd4a57c065f2e8811543a inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad3b2ecbaab2e22b18da807c7c5aa147a inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3b2ecbaab2e22b18da807c7c5aa147a"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>hi</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:ad3b2ecbaab2e22b18da807c7c5aa147a inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a575b9e3dbf144bb98fc14ee06e219f7d inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a575b9e3dbf144bb98fc14ee06e219f7d"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>lo</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a575b9e3dbf144bb98fc14ee06e219f7d inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aafa819baff64cf2a594a53fbff947f3e inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aafa819baff64cf2a594a53fbff947f3e"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>strobe</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:aafa819baff64cf2a594a53fbff947f3e inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a308662200bc1be2513c9ac65ddaa43b0 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a308662200bc1be2513c9ac65ddaa43b0"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>toggle</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a308662200bc1be2513c9ac65ddaa43b0 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a36d9f8ffbfb6547a076039fd1761200a inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36d9f8ffbfb6547a076039fd1761200a"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>hi</b> (register port_ptr_t port) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a36d9f8ffbfb6547a076039fd1761200a inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8453327e641cbdc1413d0f5acf9d5195 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8453327e641cbdc1413d0f5acf9d5195"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>lo</b> (register port_ptr_t port) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a8453327e641cbdc1413d0f5acf9d5195 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf67a98d2bca9b9d27a3c24b8cc1a58b inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf67a98d2bca9b9d27a3c24b8cc1a58b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>set</b> (register port_t val) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:abf67a98d2bca9b9d27a3c24b8cc1a58b inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a063487a763fe9a6fa795265480311c7c inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a063487a763fe9a6fa795265480311c7c"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>fastset</b> (register port_ptr_t port, register port_t val) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a063487a763fe9a6fa795265480311c7c inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a70597f67481a4368727ae7d692a6e434 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70597f67481a4368727ae7d692a6e434"></a>
+port_t&#160;</td><td class="memItemRight" valign="bottom"><b>hival</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a70597f67481a4368727ae7d692a6e434 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91f5a6b9d254eab57c6baa4f3bce6518 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91f5a6b9d254eab57c6baa4f3bce6518"></a>
+port_t&#160;</td><td class="memItemRight" valign="bottom"><b>loval</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a91f5a6b9d254eab57c6baa4f3bce6518 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab462ca53d0eda5e199e30886e6329142 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab462ca53d0eda5e199e30886e6329142"></a>
+port_ptr_t&#160;</td><td class="memItemRight" valign="bottom"><b>port</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:ab462ca53d0eda5e199e30886e6329142 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf184984e35f57f6f7f722736095f658 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf184984e35f57f6f7f722736095f658"></a>
+port_t&#160;</td><td class="memItemRight" valign="bottom"><b>mask</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:abf184984e35f57f6f7f722736095f658 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7135576a0f7cd2df8d49af5a001c59c1 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7135576a0f7cd2df8d49af5a001c59c1"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>select</b> ()</td></tr>
+<tr class="separator:a7135576a0f7cd2df8d49af5a001c59c1 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a20dd599177993607a9839d80bb0927d7 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20dd599177993607a9839d80bb0927d7"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
+<tr class="separator:a20dd599177993607a9839d80bb0927d7 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a92a7f23de99162c63611556e346b1fcc inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92a7f23de99162c63611556e346b1fcc"></a>
+virtual bool&#160;</td><td class="memItemRight" valign="bottom"><b>isSelected</b> ()</td></tr>
+<tr class="separator:a92a7f23de99162c63611556e346b1fcc inherit pub_methods_class_pin"><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>
@@ -177,6 +237,12 @@ typedef volatile RwReg *&#160;</td><td class="memItemRight" valign="bottom"><b>p
<tr class="memitem:aa0565bfc99cf3df826420f89304a7937 inherit pub_types_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0565bfc99cf3df826420f89304a7937"></a>
typedef RwReg&#160;</td><td class="memItemRight" valign="bottom"><b>port_t</b></td></tr>
<tr class="separator:aa0565bfc99cf3df826420f89304a7937 inherit pub_types_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f8b180aa16d5a9e9af48a38dc1dca03 inherit pub_types_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f8b180aa16d5a9e9af48a38dc1dca03"></a>
+typedef volatile RwReg *&#160;</td><td class="memItemRight" valign="bottom"><b>port_ptr_t</b></td></tr>
+<tr class="separator:a8f8b180aa16d5a9e9af48a38dc1dca03 inherit pub_types_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa0565bfc99cf3df826420f89304a7937 inherit pub_types_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0565bfc99cf3df826420f89304a7937"></a>
+typedef RwReg&#160;</td><td class="memItemRight" valign="bottom"><b>port_t</b></td></tr>
+<tr class="separator:aa0565bfc99cf3df826420f89304a7937 inherit pub_types_class_pin"><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>
@@ -184,7 +250,7 @@ typedef RwReg&#160;</td><td class="memItemRight" valign="bottom"><b>port_t</b></
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_input_pin__coll__graph.md5 b/docs/3.1/class_input_pin__coll__graph.md5
index d5d827fa..15ed3b66 100644
--- a/docs/3.1/class_input_pin__coll__graph.md5
+++ b/docs/3.1/class_input_pin__coll__graph.md5
@@ -1 +1 @@
-f52c43d7baa7c6705b968baaade9bc28 \ No newline at end of file
+306421b7b50d6823276bb8d836bc4a04 \ No newline at end of file
diff --git a/docs/3.1/class_input_pin__coll__graph.png b/docs/3.1/class_input_pin__coll__graph.png
index 003106e0..3c96864e 100644
--- a/docs/3.1/class_input_pin__coll__graph.png
+++ b/docs/3.1/class_input_pin__coll__graph.png
Binary files differ
diff --git a/docs/3.1/class_input_pin__inherit__graph.md5 b/docs/3.1/class_input_pin__inherit__graph.md5
index d5d827fa..15ed3b66 100644
--- a/docs/3.1/class_input_pin__inherit__graph.md5
+++ b/docs/3.1/class_input_pin__inherit__graph.md5
@@ -1 +1 @@
-f52c43d7baa7c6705b968baaade9bc28 \ No newline at end of file
+306421b7b50d6823276bb8d836bc4a04 \ No newline at end of file
diff --git a/docs/3.1/class_input_pin__inherit__graph.png b/docs/3.1/class_input_pin__inherit__graph.png
index 003106e0..3c96864e 100644
--- a/docs/3.1/class_input_pin__inherit__graph.png
+++ b/docs/3.1/class_input_pin__inherit__graph.png
Binary files differ
diff --git a/docs/3.1/class_l_p_d1886.html b/docs/3.1/class_l_p_d1886.html
index 0a0472c9..68e6f24b 100644
--- a/docs/3.1/class_l_p_d1886.html
+++ b/docs/3.1/class_l_p_d1886.html
@@ -109,7 +109,7 @@ Collaboration diagram for LPD1886&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_l_p_d1886_controller1250_khz.html b/docs/3.1/class_l_p_d1886_controller1250_khz.html
index a83251cd..eeb9eff2 100644
--- a/docs/3.1/class_l_p_d1886_controller1250_khz.html
+++ b/docs/3.1/class_l_p_d1886_controller1250_khz.html
@@ -107,7 +107,7 @@ Collaboration diagram for LPD1886Controller1250Khz&lt; DATA_PIN, RGB_ORDER &gt;:
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_l_p_d8806_controller-members.html b/docs/3.1/class_l_p_d8806_controller-members.html
index 974c86cb..cdc658fd 100644
--- a/docs/3.1/class_l_p_d8806_controller-members.html
+++ b/docs/3.1/class_l_p_d8806_controller-members.html
@@ -98,40 +98,41 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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 class="even"><td class="entry"><a class="el" href="class_l_p_d8806_controller.html#abe5be69b938d0709cfc77fcf57c75608">init</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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><td class="entry"><a class="el" href="class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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 CARGB *data, int nLeds, uint8_t 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"><td class="entry"><b>show</b>(const struct CARGB *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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_l_p_d8806_controller.html#a4f6471eddcfe5445502b02f1f3179259">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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>getMaxRefreshRate</b>() const (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">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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><td class="entry"><a class="el" href="class_l_p_d8806_controller.html#abe5be69b938d0709cfc77fcf57c75608">init</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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>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" 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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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 class="even"><td class="entry"><a class="el" href="class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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"><td class="entry"><b>show</b>(const struct CARGB *data, int nLeds, uint8_t 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 CARGB *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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_l_p_d8806_controller.html#a4f6471eddcfe5445502b02f1f3179259">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_l_p_d8806_controller.html b/docs/3.1/class_l_p_d8806_controller.html
index dbb1591d..fe965d4d 100644
--- a/docs/3.1/class_l_p_d8806_controller.html
+++ b/docs/3.1/class_l_p_d8806_controller.html
@@ -208,6 +208,9 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="c
<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a> (uint8_t scale)</td></tr>
<tr class="memdesc:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the combined brightness/color adjustment for this controller. <br /></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="memitem:a3beb4aff15617bc781c1e49178dd9975 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3beb4aff15617bc781c1e49178dd9975"></a>
+virtual uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>getMaxRefreshRate</b> () const </td></tr>
+<tr class="separator:a3beb4aff15617bc781c1e49178dd9975 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>
@@ -388,7 +391,7 @@ template&lt;uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, uint8_t
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index 38f25abe..914258c3 100644
--- 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
@@ -109,7 +109,7 @@ Collaboration diagram for NEOPIXEL&lt; DATA_PIN &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_output_pin-members.html b/docs/3.1/class_output_pin-members.html
index 6216a40b..b2d6e6c7 100644
--- a/docs/3.1/class_output_pin-members.html
+++ b/docs/3.1/class_output_pin-members.html
@@ -93,30 +93,52 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<p>This is the complete list of members for <a class="el" href="class_output_pin.html">OutputPin</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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>hi</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hi</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>hi</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hi</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>hi</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hival</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>hival</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>isSelected</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>lo</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>isSelected</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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>lo</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>lo</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lo</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>lo</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>loval</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>loval</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mask</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mask</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OutputPin</b>(int pin) (defined in <a class="el" href="class_output_pin.html">OutputPin</a>)</td><td class="entry"><a class="el" href="class_output_pin.html">OutputPin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>OutputPin</b>(int pin) (defined in <a class="el" href="class_output_pin.html">OutputPin</a>)</td><td class="entry"><a class="el" href="class_output_pin.html">OutputPin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Pin</b>(int pin) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Pin</b>(int pin) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>port</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>port</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>port_ptr_t</b> typedef (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>port_ptr_t</b> typedef (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>port_t</b> typedef (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>release</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>release</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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>select</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>select</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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>set</b>(register port_t val) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>set</b>(register port_t val) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setInput</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>setInput</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setOutput</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setOutput</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setPin</b>(int pin) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>strobe</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>strobe</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>toggle</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toggle</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_output_pin.html b/docs/3.1/class_output_pin.html
index 121bcf30..96432ce8 100644
--- a/docs/3.1/class_output_pin.html
+++ b/docs/3.1/class_output_pin.html
@@ -112,6 +112,9 @@ Public Member Functions</h2></td></tr>
<tr class="memitem:ad39cf32217852803ee3f1d410a93a1db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad39cf32217852803ee3f1d410a93a1db"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>OutputPin</b> (int pin)</td></tr>
<tr class="separator:ad39cf32217852803ee3f1d410a93a1db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad39cf32217852803ee3f1d410a93a1db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad39cf32217852803ee3f1d410a93a1db"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>OutputPin</b> (int pin)</td></tr>
+<tr class="separator:ad39cf32217852803ee3f1d410a93a1db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_class_pin"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_class_pin')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="class_pin.html">Pin</a></td></tr>
<tr class="memitem:acd4ade93d8a5831ea021e0fff857aad5 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd4ade93d8a5831ea021e0fff857aad5"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>Pin</b> (int pin)</td></tr>
@@ -167,6 +170,63 @@ virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>release</b> (
<tr class="memitem:a92a7f23de99162c63611556e346b1fcc inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92a7f23de99162c63611556e346b1fcc"></a>
virtual bool&#160;</td><td class="memItemRight" valign="bottom"><b>isSelected</b> ()</td></tr>
<tr class="separator:a92a7f23de99162c63611556e346b1fcc inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd4ade93d8a5831ea021e0fff857aad5 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd4ade93d8a5831ea021e0fff857aad5"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Pin</b> (int pin)</td></tr>
+<tr class="separator:acd4ade93d8a5831ea021e0fff857aad5 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeaddf413f38dd8e0cc6da9c84d372474 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeaddf413f38dd8e0cc6da9c84d372474"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setPin</b> (int pin)</td></tr>
+<tr class="separator:aeaddf413f38dd8e0cc6da9c84d372474 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2309200ff683097b1aa8679ae3dc1e30 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2309200ff683097b1aa8679ae3dc1e30"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setOutput</b> ()</td></tr>
+<tr class="separator:a2309200ff683097b1aa8679ae3dc1e30 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b1c3fa3480cd4a57c065f2e8811543a inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b1c3fa3480cd4a57c065f2e8811543a"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setInput</b> ()</td></tr>
+<tr class="separator:a3b1c3fa3480cd4a57c065f2e8811543a inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad3b2ecbaab2e22b18da807c7c5aa147a inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3b2ecbaab2e22b18da807c7c5aa147a"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>hi</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:ad3b2ecbaab2e22b18da807c7c5aa147a inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a575b9e3dbf144bb98fc14ee06e219f7d inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a575b9e3dbf144bb98fc14ee06e219f7d"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>lo</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a575b9e3dbf144bb98fc14ee06e219f7d inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aafa819baff64cf2a594a53fbff947f3e inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aafa819baff64cf2a594a53fbff947f3e"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>strobe</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:aafa819baff64cf2a594a53fbff947f3e inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a308662200bc1be2513c9ac65ddaa43b0 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a308662200bc1be2513c9ac65ddaa43b0"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>toggle</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a308662200bc1be2513c9ac65ddaa43b0 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a36d9f8ffbfb6547a076039fd1761200a inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36d9f8ffbfb6547a076039fd1761200a"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>hi</b> (register port_ptr_t port) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a36d9f8ffbfb6547a076039fd1761200a inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8453327e641cbdc1413d0f5acf9d5195 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8453327e641cbdc1413d0f5acf9d5195"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>lo</b> (register port_ptr_t port) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a8453327e641cbdc1413d0f5acf9d5195 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf67a98d2bca9b9d27a3c24b8cc1a58b inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf67a98d2bca9b9d27a3c24b8cc1a58b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>set</b> (register port_t val) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:abf67a98d2bca9b9d27a3c24b8cc1a58b inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a063487a763fe9a6fa795265480311c7c inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a063487a763fe9a6fa795265480311c7c"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>fastset</b> (register port_ptr_t port, register port_t val) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a063487a763fe9a6fa795265480311c7c inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a70597f67481a4368727ae7d692a6e434 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70597f67481a4368727ae7d692a6e434"></a>
+port_t&#160;</td><td class="memItemRight" valign="bottom"><b>hival</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a70597f67481a4368727ae7d692a6e434 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91f5a6b9d254eab57c6baa4f3bce6518 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91f5a6b9d254eab57c6baa4f3bce6518"></a>
+port_t&#160;</td><td class="memItemRight" valign="bottom"><b>loval</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a91f5a6b9d254eab57c6baa4f3bce6518 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab462ca53d0eda5e199e30886e6329142 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab462ca53d0eda5e199e30886e6329142"></a>
+port_ptr_t&#160;</td><td class="memItemRight" valign="bottom"><b>port</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:ab462ca53d0eda5e199e30886e6329142 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf184984e35f57f6f7f722736095f658 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf184984e35f57f6f7f722736095f658"></a>
+port_t&#160;</td><td class="memItemRight" valign="bottom"><b>mask</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:abf184984e35f57f6f7f722736095f658 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7135576a0f7cd2df8d49af5a001c59c1 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7135576a0f7cd2df8d49af5a001c59c1"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>select</b> ()</td></tr>
+<tr class="separator:a7135576a0f7cd2df8d49af5a001c59c1 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a20dd599177993607a9839d80bb0927d7 inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20dd599177993607a9839d80bb0927d7"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
+<tr class="separator:a20dd599177993607a9839d80bb0927d7 inherit pub_methods_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a92a7f23de99162c63611556e346b1fcc inherit pub_methods_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92a7f23de99162c63611556e346b1fcc"></a>
+virtual bool&#160;</td><td class="memItemRight" valign="bottom"><b>isSelected</b> ()</td></tr>
+<tr class="separator:a92a7f23de99162c63611556e346b1fcc inherit pub_methods_class_pin"><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>
@@ -177,6 +237,12 @@ typedef volatile RwReg *&#160;</td><td class="memItemRight" valign="bottom"><b>p
<tr class="memitem:aa0565bfc99cf3df826420f89304a7937 inherit pub_types_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0565bfc99cf3df826420f89304a7937"></a>
typedef RwReg&#160;</td><td class="memItemRight" valign="bottom"><b>port_t</b></td></tr>
<tr class="separator:aa0565bfc99cf3df826420f89304a7937 inherit pub_types_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f8b180aa16d5a9e9af48a38dc1dca03 inherit pub_types_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f8b180aa16d5a9e9af48a38dc1dca03"></a>
+typedef volatile RwReg *&#160;</td><td class="memItemRight" valign="bottom"><b>port_ptr_t</b></td></tr>
+<tr class="separator:a8f8b180aa16d5a9e9af48a38dc1dca03 inherit pub_types_class_pin"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa0565bfc99cf3df826420f89304a7937 inherit pub_types_class_pin"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0565bfc99cf3df826420f89304a7937"></a>
+typedef RwReg&#160;</td><td class="memItemRight" valign="bottom"><b>port_t</b></td></tr>
+<tr class="separator:aa0565bfc99cf3df826420f89304a7937 inherit pub_types_class_pin"><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>
@@ -184,7 +250,7 @@ typedef RwReg&#160;</td><td class="memItemRight" valign="bottom"><b>port_t</b></
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_output_pin__coll__graph.md5 b/docs/3.1/class_output_pin__coll__graph.md5
index cd98eb80..a26c1805 100644
--- a/docs/3.1/class_output_pin__coll__graph.md5
+++ b/docs/3.1/class_output_pin__coll__graph.md5
@@ -1 +1 @@
-e51e49ace2bf58573cde73f5bf6575f0 \ No newline at end of file
+bf3740ffdc48ba0fb67f1e0d8df963a2 \ No newline at end of file
diff --git a/docs/3.1/class_output_pin__coll__graph.png b/docs/3.1/class_output_pin__coll__graph.png
index be9900d7..8c5d557c 100644
--- a/docs/3.1/class_output_pin__coll__graph.png
+++ b/docs/3.1/class_output_pin__coll__graph.png
Binary files differ
diff --git a/docs/3.1/class_output_pin__inherit__graph.md5 b/docs/3.1/class_output_pin__inherit__graph.md5
index cd98eb80..a26c1805 100644
--- a/docs/3.1/class_output_pin__inherit__graph.md5
+++ b/docs/3.1/class_output_pin__inherit__graph.md5
@@ -1 +1 @@
-e51e49ace2bf58573cde73f5bf6575f0 \ No newline at end of file
+bf3740ffdc48ba0fb67f1e0d8df963a2 \ No newline at end of file
diff --git a/docs/3.1/class_output_pin__inherit__graph.png b/docs/3.1/class_output_pin__inherit__graph.png
index be9900d7..8c5d557c 100644
--- a/docs/3.1/class_output_pin__inherit__graph.png
+++ b/docs/3.1/class_output_pin__inherit__graph.png
Binary files differ
diff --git a/docs/3.1/class_p9813_controller-members.html b/docs/3.1/class_p9813_controller-members.html
index 65b87116..aced21aa 100644
--- a/docs/3.1/class_p9813_controller-members.html
+++ b/docs/3.1/class_p9813_controller-members.html
@@ -98,41 +98,42 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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 class="even"><td class="entry"><a class="el" href="class_p9813_controller.html#ad6fcb36b9378df660721ae24ed857b8a">init</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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><td class="entry"><a class="el" href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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>getMaxRefreshRate</b>() const (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">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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><td class="entry"><a class="el" href="class_p9813_controller.html#ad6fcb36b9378df660721ae24ed857b8a">init</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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>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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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 class="even"><td class="entry"><a class="el" href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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"><td class="entry"><b>show</b>(const struct CARGB *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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 CARGB *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 class="even"><td class="entry"><a class="el" href="class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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><td class="entry"><a class="el" href="class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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 CARGB *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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 CARGB *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><td class="entry"><a class="el" href="class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_p9813_controller.html b/docs/3.1/class_p9813_controller.html
index cb3c4c4f..36209692 100644
--- a/docs/3.1/class_p9813_controller.html
+++ b/docs/3.1/class_p9813_controller.html
@@ -207,6 +207,9 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="c
<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a> (uint8_t scale)</td></tr>
<tr class="memdesc:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the combined brightness/color adjustment for this controller. <br /></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="memitem:a3beb4aff15617bc781c1e49178dd9975 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3beb4aff15617bc781c1e49178dd9975"></a>
+virtual uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>getMaxRefreshRate</b> () const </td></tr>
+<tr class="separator:a3beb4aff15617bc781c1e49178dd9975 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>
@@ -441,7 +444,7 @@ template&lt;uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, uint8_t
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_pin-members.html b/docs/3.1/class_pin-members.html
index 42e03fd9..3b01c14c 100644
--- a/docs/3.1/class_pin-members.html
+++ b/docs/3.1/class_pin-members.html
@@ -93,29 +93,50 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<p>This is the complete list of members for <a class="el" href="class_pin.html">Pin</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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>hi</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hi</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>hi</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hi</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>hi</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>hival</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>hival</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>isSelected</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
- <tr bgcolor="#f0f0f0"><td class="entry"><b>lo</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>isSelected</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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>lo</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>lo</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>lo</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>lo</b>(register port_ptr_t port) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>loval</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>loval</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mask</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>mask</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Pin</b>(int pin) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>Pin</b>(int pin) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>port</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>port</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>port_ptr_t</b> typedef (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>port_ptr_t</b> typedef (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>port_t</b> typedef (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>release</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>release</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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>select</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>select</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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>set</b>(register port_t val) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>set</b>(register port_t val) __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setInput</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>setInput</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setOutput</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>setOutput</b>() (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>setPin</b>(int pin) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>strobe</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>strobe</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>toggle</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>toggle</b>() __attribute__((always_inline)) (defined in <a class="el" href="class_pin.html">Pin</a>)</td><td class="entry"><a class="el" href="class_pin.html">Pin</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_pin.html b/docs/3.1/class_pin.html
index a2aaef7a..1bdb6b4b 100644
--- a/docs/3.1/class_pin.html
+++ b/docs/3.1/class_pin.html
@@ -116,6 +116,12 @@ typedef volatile RwReg *&#160;</td><td class="memItemRight" valign="bottom"><b>p
<tr class="memitem:aa0565bfc99cf3df826420f89304a7937"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0565bfc99cf3df826420f89304a7937"></a>
typedef RwReg&#160;</td><td class="memItemRight" valign="bottom"><b>port_t</b></td></tr>
<tr class="separator:aa0565bfc99cf3df826420f89304a7937"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f8b180aa16d5a9e9af48a38dc1dca03"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8f8b180aa16d5a9e9af48a38dc1dca03"></a>
+typedef volatile RwReg *&#160;</td><td class="memItemRight" valign="bottom"><b>port_ptr_t</b></td></tr>
+<tr class="separator:a8f8b180aa16d5a9e9af48a38dc1dca03"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa0565bfc99cf3df826420f89304a7937"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0565bfc99cf3df826420f89304a7937"></a>
+typedef RwReg&#160;</td><td class="memItemRight" valign="bottom"><b>port_t</b></td></tr>
+<tr class="separator:aa0565bfc99cf3df826420f89304a7937"><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>
@@ -173,6 +179,63 @@ virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>release</b> (
<tr class="memitem:a92a7f23de99162c63611556e346b1fcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92a7f23de99162c63611556e346b1fcc"></a>
virtual bool&#160;</td><td class="memItemRight" valign="bottom"><b>isSelected</b> ()</td></tr>
<tr class="separator:a92a7f23de99162c63611556e346b1fcc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd4ade93d8a5831ea021e0fff857aad5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd4ade93d8a5831ea021e0fff857aad5"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Pin</b> (int pin)</td></tr>
+<tr class="separator:acd4ade93d8a5831ea021e0fff857aad5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeaddf413f38dd8e0cc6da9c84d372474"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeaddf413f38dd8e0cc6da9c84d372474"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setPin</b> (int pin)</td></tr>
+<tr class="separator:aeaddf413f38dd8e0cc6da9c84d372474"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2309200ff683097b1aa8679ae3dc1e30"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2309200ff683097b1aa8679ae3dc1e30"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setOutput</b> ()</td></tr>
+<tr class="separator:a2309200ff683097b1aa8679ae3dc1e30"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b1c3fa3480cd4a57c065f2e8811543a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b1c3fa3480cd4a57c065f2e8811543a"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>setInput</b> ()</td></tr>
+<tr class="separator:a3b1c3fa3480cd4a57c065f2e8811543a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad3b2ecbaab2e22b18da807c7c5aa147a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad3b2ecbaab2e22b18da807c7c5aa147a"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>hi</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:ad3b2ecbaab2e22b18da807c7c5aa147a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a575b9e3dbf144bb98fc14ee06e219f7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a575b9e3dbf144bb98fc14ee06e219f7d"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>lo</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a575b9e3dbf144bb98fc14ee06e219f7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aafa819baff64cf2a594a53fbff947f3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aafa819baff64cf2a594a53fbff947f3e"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>strobe</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:aafa819baff64cf2a594a53fbff947f3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a308662200bc1be2513c9ac65ddaa43b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a308662200bc1be2513c9ac65ddaa43b0"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>toggle</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a308662200bc1be2513c9ac65ddaa43b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a36d9f8ffbfb6547a076039fd1761200a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36d9f8ffbfb6547a076039fd1761200a"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>hi</b> (register port_ptr_t port) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a36d9f8ffbfb6547a076039fd1761200a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8453327e641cbdc1413d0f5acf9d5195"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8453327e641cbdc1413d0f5acf9d5195"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>lo</b> (register port_ptr_t port) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a8453327e641cbdc1413d0f5acf9d5195"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf67a98d2bca9b9d27a3c24b8cc1a58b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf67a98d2bca9b9d27a3c24b8cc1a58b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>set</b> (register port_t val) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:abf67a98d2bca9b9d27a3c24b8cc1a58b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a063487a763fe9a6fa795265480311c7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a063487a763fe9a6fa795265480311c7c"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>fastset</b> (register port_ptr_t port, register port_t val) <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a063487a763fe9a6fa795265480311c7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a70597f67481a4368727ae7d692a6e434"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a70597f67481a4368727ae7d692a6e434"></a>
+port_t&#160;</td><td class="memItemRight" valign="bottom"><b>hival</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a70597f67481a4368727ae7d692a6e434"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91f5a6b9d254eab57c6baa4f3bce6518"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91f5a6b9d254eab57c6baa4f3bce6518"></a>
+port_t&#160;</td><td class="memItemRight" valign="bottom"><b>loval</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:a91f5a6b9d254eab57c6baa4f3bce6518"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab462ca53d0eda5e199e30886e6329142"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab462ca53d0eda5e199e30886e6329142"></a>
+port_ptr_t&#160;</td><td class="memItemRight" valign="bottom"><b>port</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:ab462ca53d0eda5e199e30886e6329142"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf184984e35f57f6f7f722736095f658"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf184984e35f57f6f7f722736095f658"></a>
+port_t&#160;</td><td class="memItemRight" valign="bottom"><b>mask</b> () <a class="el" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</td></tr>
+<tr class="separator:abf184984e35f57f6f7f722736095f658"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7135576a0f7cd2df8d49af5a001c59c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7135576a0f7cd2df8d49af5a001c59c1"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>select</b> ()</td></tr>
+<tr class="separator:a7135576a0f7cd2df8d49af5a001c59c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a20dd599177993607a9839d80bb0927d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20dd599177993607a9839d80bb0927d7"></a>
+virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>release</b> ()</td></tr>
+<tr class="separator:a20dd599177993607a9839d80bb0927d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a92a7f23de99162c63611556e346b1fcc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92a7f23de99162c63611556e346b1fcc"></a>
+virtual bool&#160;</td><td class="memItemRight" valign="bottom"><b>isSelected</b> ()</td></tr>
+<tr class="separator:a92a7f23de99162c63611556e346b1fcc"><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>
@@ -180,7 +243,7 @@ virtual bool&#160;</td><td class="memItemRight" valign="bottom"><b>isSelected</b
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_pin__coll__graph.md5 b/docs/3.1/class_pin__coll__graph.md5
index 9f8160ef..ac0d5e98 100644
--- a/docs/3.1/class_pin__coll__graph.md5
+++ b/docs/3.1/class_pin__coll__graph.md5
@@ -1 +1 @@
-d8c2cbd953c94b91b5a4937ac3a6c306 \ No newline at end of file
+ecc635d68ab83cc531dea2d8e29abcea \ No newline at end of file
diff --git a/docs/3.1/class_pin__coll__graph.png b/docs/3.1/class_pin__coll__graph.png
index 1d6d154f..58095df6 100644
--- a/docs/3.1/class_pin__coll__graph.png
+++ b/docs/3.1/class_pin__coll__graph.png
Binary files differ
diff --git a/docs/3.1/class_pin__inherit__graph.md5 b/docs/3.1/class_pin__inherit__graph.md5
index 358b98c8..2234e89a 100644
--- a/docs/3.1/class_pin__inherit__graph.md5
+++ b/docs/3.1/class_pin__inherit__graph.md5
@@ -1 +1 @@
-2c2cda5faff5ca3093268c76402f07d3 \ No newline at end of file
+3a53fa0253a39e3530aabf74b4412127 \ No newline at end of file
diff --git a/docs/3.1/class_pin__inherit__graph.png b/docs/3.1/class_pin__inherit__graph.png
index 48ef3f2f..ec47aad7 100644
--- a/docs/3.1/class_pin__inherit__graph.png
+++ b/docs/3.1/class_pin__inherit__graph.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
index 24fc2446..e25a44cf 100644
--- a/docs/3.1/class_s_m16716_controller-members.html
+++ b/docs/3.1/class_s_m16716_controller-members.html
@@ -98,40 +98,41 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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 class="even"><td class="entry"><a class="el" href="class_s_m16716_controller.html#a1ba5a4e3f00b2235f278b9fb9aeb1591">init</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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 class="even"><td class="entry"><a class="el" href="class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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 CARGB *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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 CARGB *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 class="even"><td class="entry"><a class="el" href="class_s_m16716_controller.html#a7df8b8a34e0dc067c69aa056deca9677">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>getMaxRefreshRate</b>() const (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">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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><td class="entry"><a class="el" href="class_s_m16716_controller.html#a1ba5a4e3f00b2235f278b9fb9aeb1591">init</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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><td class="entry"><a class="el" href="class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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" class="even"><td class="entry"><b>show</b>(const struct CARGB *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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 CARGB *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><td class="entry"><a class="el" href="class_s_m16716_controller.html#a7df8b8a34e0dc067c69aa056deca9677">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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>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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_s_m16716_controller.html b/docs/3.1/class_s_m16716_controller.html
index 8d58f36e..d39f39cc 100644
--- a/docs/3.1/class_s_m16716_controller.html
+++ b/docs/3.1/class_s_m16716_controller.html
@@ -207,6 +207,9 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="c
<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a> (uint8_t scale)</td></tr>
<tr class="memdesc:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the combined brightness/color adjustment for this controller. <br /></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="memitem:a3beb4aff15617bc781c1e49178dd9975 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3beb4aff15617bc781c1e49178dd9975"></a>
+virtual uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>getMaxRefreshRate</b> () const </td></tr>
+<tr class="separator:a3beb4aff15617bc781c1e49178dd9975 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>
@@ -383,7 +386,7 @@ template&lt;uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, uint8_t
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_s_p_i_output-members.html b/docs/3.1/class_s_p_i_output-members.html
index 9cced30d..fe4eec91 100644
--- a/docs/3.1/class_s_p_i_output-members.html
+++ b/docs/3.1/class_s_p_i_output-members.html
@@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_s_p_i_output.html b/docs/3.1/class_s_p_i_output.html
index d9fc4460..f64298b2 100644
--- a/docs/3.1/class_s_p_i_output.html
+++ b/docs/3.1/class_s_p_i_output.html
@@ -150,7 +150,7 @@ static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeByte</b>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
index 4c212095..eeecf856 100644
--- a/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
@@ -105,7 +105,7 @@ Collaboration diagram for SPIOutput&lt; SPI2_DATA, SPI2_CLOCK, SPI_SPEED &gt;:</
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
index 8046be33..140f420e 100644
--- a/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
@@ -105,7 +105,7 @@ Collaboration diagram for SPIOutput&lt; SPI_DATA, SPI_CLOCK, SPI_SPEED &gt;:</di
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html b/docs/3.1/class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
index df3f6a05..611ae438 100644
--- a/docs/3.1/class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
@@ -105,7 +105,7 @@ Collaboration diagram for SPIOutput&lt; SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPE
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html b/docs/3.1/class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
index cd711b73..0ef5bab8 100644
--- a/docs/3.1/class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
+++ b/docs/3.1/class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html
@@ -105,7 +105,7 @@ Collaboration diagram for SPIOutput&lt; SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPE
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_selectable-members.html b/docs/3.1/class_selectable-members.html
index 15af71ec..dd0768ec 100644
--- a/docs/3.1/class_selectable-members.html
+++ b/docs/3.1/class_selectable-members.html
@@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_selectable.html b/docs/3.1/class_selectable.html
index c3eec5f0..3d49de7e 100644
--- a/docs/3.1/class_selectable.html
+++ b/docs/3.1/class_selectable.html
@@ -118,7 +118,7 @@ virtual bool&#160;</td><td class="memItemRight" valign="bottom"><b>isSelected</b
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_selectable__inherit__graph.md5 b/docs/3.1/class_selectable__inherit__graph.md5
index 8c4d8fff..3fd0fde0 100644
--- a/docs/3.1/class_selectable__inherit__graph.md5
+++ b/docs/3.1/class_selectable__inherit__graph.md5
@@ -1 +1 @@
-c5c8ba3ba9f03634e645a0285046499d \ No newline at end of file
+3973831c7b0ecccde5e1ca6970a1177f \ No newline at end of file
diff --git a/docs/3.1/class_selectable__inherit__graph.png b/docs/3.1/class_selectable__inherit__graph.png
index 2c44d936..ad255ecf 100644
--- a/docs/3.1/class_selectable__inherit__graph.png
+++ b/docs/3.1/class_selectable__inherit__graph.png
Binary files differ
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
index 943dea79..76907ae8 100644
--- a/docs/3.1/class_software_s_p_i_output-members.html
+++ b/docs/3.1/class_software_s_p_i_output-members.html
@@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_software_s_p_i_output.html b/docs/3.1/class_software_s_p_i_output.html
index 17c1d68c..3499a9bf 100644
--- a/docs/3.1/class_software_s_p_i_output.html
+++ b/docs/3.1/class_software_s_p_i_output.html
@@ -150,7 +150,7 @@ static void&#160;</td><td class="memItemRight" valign="bottom"><b>writeByte</b>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_t_m1803.html b/docs/3.1/class_t_m1803.html
index bb91cc51..5cc6221e 100644
--- a/docs/3.1/class_t_m1803.html
+++ b/docs/3.1/class_t_m1803.html
@@ -109,7 +109,7 @@ Collaboration diagram for TM1803&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_t_m1803_controller400_khz.html b/docs/3.1/class_t_m1803_controller400_khz.html
index a3bd4274..9ff70a06 100644
--- a/docs/3.1/class_t_m1803_controller400_khz.html
+++ b/docs/3.1/class_t_m1803_controller400_khz.html
@@ -107,7 +107,7 @@ Collaboration diagram for TM1803Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;:</
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_t_m1804.html b/docs/3.1/class_t_m1804.html
index 9a2f9a9a..61543cc6 100644
--- a/docs/3.1/class_t_m1804.html
+++ b/docs/3.1/class_t_m1804.html
@@ -109,7 +109,7 @@ Collaboration diagram for TM1804&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_t_m1809.html b/docs/3.1/class_t_m1809.html
index 03ca7b31..642ee69e 100644
--- a/docs/3.1/class_t_m1809.html
+++ b/docs/3.1/class_t_m1809.html
@@ -109,7 +109,7 @@ Collaboration diagram for TM1809&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_t_m1809_controller800_khz.html b/docs/3.1/class_t_m1809_controller800_khz.html
index f9da171e..97017df0 100644
--- a/docs/3.1/class_t_m1809_controller800_khz.html
+++ b/docs/3.1/class_t_m1809_controller800_khz.html
@@ -107,7 +107,7 @@ Collaboration diagram for TM1809Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;:</
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_t_m1829.html b/docs/3.1/class_t_m1829.html
index 77533a3b..261a2fc3 100644
--- a/docs/3.1/class_t_m1829.html
+++ b/docs/3.1/class_t_m1829.html
@@ -109,7 +109,7 @@ Collaboration diagram for TM1829&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_t_m1829_controller1600_khz.html b/docs/3.1/class_t_m1829_controller1600_khz.html
index 25378254..b2e6e074 100644
--- a/docs/3.1/class_t_m1829_controller1600_khz.html
+++ b/docs/3.1/class_t_m1829_controller1600_khz.html
@@ -105,7 +105,7 @@ Collaboration diagram for TM1829Controller1600Khz&lt; DATA_PIN, RGB_ORDER &gt;:<
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_t_m1829_controller800_khz.html b/docs/3.1/class_t_m1829_controller800_khz.html
index d81e4877..94ec3df3 100644
--- a/docs/3.1/class_t_m1829_controller800_khz.html
+++ b/docs/3.1/class_t_m1829_controller800_khz.html
@@ -107,7 +107,7 @@ Collaboration diagram for TM1829Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;:</
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_u_c_s1903.html b/docs/3.1/class_u_c_s1903.html
index 91b84593..0e27d1f4 100644
--- a/docs/3.1/class_u_c_s1903.html
+++ b/docs/3.1/class_u_c_s1903.html
@@ -109,7 +109,7 @@ Collaboration diagram for UCS1903&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_u_c_s1903_b.html b/docs/3.1/class_u_c_s1903_b.html
index db71c9a7..b7bbe68b 100644
--- a/docs/3.1/class_u_c_s1903_b.html
+++ b/docs/3.1/class_u_c_s1903_b.html
@@ -109,7 +109,7 @@ Collaboration diagram for UCS1903B&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index 597c33e9..6d65a3e6 100644
--- a/docs/3.1/class_u_c_s1903_b_controller800_khz.html
+++ b/docs/3.1/class_u_c_s1903_b_controller800_khz.html
@@ -107,7 +107,7 @@ Collaboration diagram for UCS1903BController800Khz&lt; DATA_PIN, RGB_ORDER &gt;:
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_u_c_s1903_controller400_khz.html b/docs/3.1/class_u_c_s1903_controller400_khz.html
index e6a60de2..467434d7 100644
--- a/docs/3.1/class_u_c_s1903_controller400_khz.html
+++ b/docs/3.1/class_u_c_s1903_controller400_khz.html
@@ -107,7 +107,7 @@ Collaboration diagram for UCS1903Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;:<
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_u_c_s1904.html b/docs/3.1/class_u_c_s1904.html
index d1413868..e558b75c 100644
--- a/docs/3.1/class_u_c_s1904.html
+++ b/docs/3.1/class_u_c_s1904.html
@@ -109,7 +109,7 @@ Collaboration diagram for UCS1904&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_u_c_s1904_controller800_khz.html b/docs/3.1/class_u_c_s1904_controller800_khz.html
index 62c41b7e..79e3c6b2 100644
--- a/docs/3.1/class_u_c_s1904_controller800_khz.html
+++ b/docs/3.1/class_u_c_s1904_controller800_khz.html
@@ -107,7 +107,7 @@ Collaboration diagram for UCS1904Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;:<
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_w_s2801_controller-members.html b/docs/3.1/class_w_s2801_controller-members.html
index fecb0078..040a6e8f 100644
--- a/docs/3.1/class_w_s2801_controller-members.html
+++ b/docs/3.1/class_w_s2801_controller-members.html
@@ -98,41 +98,42 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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 class="even"><td class="entry"><a class="el" href="class_w_s2801_controller.html#ad6187b68bccb831cd5cab3cffbd6bdb4">init</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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 class="even"><td class="entry"><a class="el" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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" class="even"><td class="entry"><b>getMaxRefreshRate</b>() const (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">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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><td class="entry"><a class="el" href="class_w_s2801_controller.html#ad6187b68bccb831cd5cab3cffbd6bdb4">init</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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><td class="entry"><a class="el" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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" class="even"><td class="entry"><b>show</b>(const struct CARGB *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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 CARGB *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><td class="entry"><a class="el" href="class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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>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>
+ <tr class="even"><td class="entry"><a class="el" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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 CARGB *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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 CARGB *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 class="even"><td class="entry"><a class="el" href="class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_w_s2801_controller.html b/docs/3.1/class_w_s2801_controller.html
index 31614d9c..48f9e840 100644
--- a/docs/3.1/class_w_s2801_controller.html
+++ b/docs/3.1/class_w_s2801_controller.html
@@ -207,6 +207,9 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="c
<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a> (uint8_t scale)</td></tr>
<tr class="memdesc:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the combined brightness/color adjustment for this controller. <br /></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="memitem:a3beb4aff15617bc781c1e49178dd9975 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3beb4aff15617bc781c1e49178dd9975"></a>
+virtual uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>getMaxRefreshRate</b> () const </td></tr>
+<tr class="separator:a3beb4aff15617bc781c1e49178dd9975 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>
@@ -441,7 +444,7 @@ template&lt;uint8_t DATA_PIN, uint8_t CLOCK_PIN, EOrder RGB_ORDER = RGB, uint8_t
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_w_s2803_controller-members.html b/docs/3.1/class_w_s2803_controller-members.html
index eda6fb75..944da572 100644
--- a/docs/3.1/class_w_s2803_controller-members.html
+++ b/docs/3.1/class_w_s2803_controller-members.html
@@ -98,41 +98,42 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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 class="even"><td class="entry"><a class="el" href="class_w_s2801_controller.html#ad6187b68bccb831cd5cab3cffbd6bdb4">init</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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 class="even"><td class="entry"><a class="el" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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" class="even"><td class="entry"><b>getMaxRefreshRate</b>() const (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">virtual</span></td></tr>
+ <tr><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</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><td class="entry"><a class="el" href="class_w_s2801_controller.html#ad6187b68bccb831cd5cab3cffbd6bdb4">init</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(int x)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(CRGB correction)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(LEDColorCorrection correction)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode=BINARY_DITHER)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(CRGB *data, int nLeds)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(CRGB temperature)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(ColorTemperature temperature)</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><td class="entry"><a class="el" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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" class="even"><td class="entry"><b>show</b>(const struct CARGB *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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 CARGB *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><td class="entry"><a class="el" href="class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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>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>
+ <tr class="even"><td class="entry"><a class="el" href="class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0">show</a>(const struct CRGB *data, int nLeds, CRGB scale)</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 CARGB *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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a>(const struct CRGB *data, int nLeds, uint8_t brightness)</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 CARGB *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 class="even"><td class="entry"><a class="el" href="class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501">showColor</a>(const struct CRGB &amp;data, int nLeds, CRGB scale)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a>(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a>(const struct CRGB &amp;data, uint8_t brightness=255)</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><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255)</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 class="even"><td class="entry"><a class="el" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_w_s2803_controller.html b/docs/3.1/class_w_s2803_controller.html
index 2c60d207..8ab01223 100644
--- a/docs/3.1/class_w_s2803_controller.html
+++ b/docs/3.1/class_w_s2803_controller.html
@@ -201,6 +201,9 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="c
<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a> (uint8_t scale)</td></tr>
<tr class="memdesc:af6173cca91ee446766cc15102990d7bb inherit pub_methods_class_c_l_e_d_controller"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the combined brightness/color adjustment for this controller. <br /></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="memitem:a3beb4aff15617bc781c1e49178dd9975 inherit pub_methods_class_c_l_e_d_controller"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3beb4aff15617bc781c1e49178dd9975"></a>
+virtual uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>getMaxRefreshRate</b> () const </td></tr>
+<tr class="separator:a3beb4aff15617bc781c1e49178dd9975 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"><a class="el" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</a> ()</td></tr>
@@ -253,7 +256,7 @@ static <a class="el" href="class_c_l_e_d_controller.html">CLEDController</a> *&#
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_w_s2811.html b/docs/3.1/class_w_s2811.html
index 89df53db..6e8b8aa1 100644
--- a/docs/3.1/class_w_s2811.html
+++ b/docs/3.1/class_w_s2811.html
@@ -109,7 +109,7 @@ Collaboration diagram for WS2811&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_w_s2811__400.html b/docs/3.1/class_w_s2811__400.html
index 3ad4ee4b..17dceb94 100644
--- a/docs/3.1/class_w_s2811__400.html
+++ b/docs/3.1/class_w_s2811__400.html
@@ -109,7 +109,7 @@ Collaboration diagram for WS2811_400&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_w_s2811_controller400_khz.html b/docs/3.1/class_w_s2811_controller400_khz.html
index 998c03b5..4b213430 100644
--- a/docs/3.1/class_w_s2811_controller400_khz.html
+++ b/docs/3.1/class_w_s2811_controller400_khz.html
@@ -107,7 +107,7 @@ Collaboration diagram for WS2811Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;:</
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_w_s2811_controller800_khz.html b/docs/3.1/class_w_s2811_controller800_khz.html
index f731d7d6..6684c4dd 100644
--- a/docs/3.1/class_w_s2811_controller800_khz.html
+++ b/docs/3.1/class_w_s2811_controller800_khz.html
@@ -107,7 +107,7 @@ Collaboration diagram for WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;:</
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_w_s2812.html b/docs/3.1/class_w_s2812.html
index 5b741570..5b3a160e 100644
--- a/docs/3.1/class_w_s2812.html
+++ b/docs/3.1/class_w_s2812.html
@@ -109,7 +109,7 @@ Collaboration diagram for WS2812&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_w_s2812_b.html b/docs/3.1/class_w_s2812_b.html
index 240ca439..75c62f6a 100644
--- a/docs/3.1/class_w_s2812_b.html
+++ b/docs/3.1/class_w_s2812_b.html
@@ -109,7 +109,7 @@ Collaboration diagram for WS2812B&lt; DATA_PIN, RGB_ORDER &gt;:</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/class_w_s2812_controller800_khz.html b/docs/3.1/class_w_s2812_controller800_khz.html
index 7246b367..452ceaa0 100644
--- a/docs/3.1/class_w_s2812_controller800_khz.html
+++ b/docs/3.1/class_w_s2812_controller800_khz.html
@@ -107,7 +107,7 @@ Collaboration diagram for WS2812Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;:</
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/classes.html b/docs/3.1/classes.html
index 8a4c288c..78d3e9cd 100644
--- a/docs/3.1/classes.html
+++ b/docs/3.1/classes.html
@@ -89,60 +89,59 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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_B">B</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_F">F</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_J">J</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_O">O</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 class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_B">B</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_F">F</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_J">J</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_O">O</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></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_d_m_x_s_i_m_p_l_e.html">DMXSIMPLE</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_m1803_controller400_khz.html">TM1803Controller400Khz</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_d_m_x_simple_controller.html">DMXSimpleController</a>&#160;&#160;&#160;</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_s2812.html">WS2812</a>&#160;&#160;&#160;</td></tr>
+</td><td valign="top"><a class="el" href="class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html">SPIOutput&lt; SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED &gt;</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2803_controller.html">WS2803Controller</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="class_d_m_x_simple_controller.html">DMXSimpleController</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 valign="top"><a class="el" href="class_w_s2811.html">WS2811</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 rowspan="2" valign="bottom"><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;F&#160;&#160;</div></td></tr></table>
-</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.html">TM1809</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2812_b.html">WS2812B</a>&#160;&#160;&#160;</td></tr>
+</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_w_s2811__400.html">WS2811_400</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 rowspan="2" valign="bottom"><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;O&#160;&#160;</div></td></tr></table>
-</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_s2812_controller800_khz.html">WS2812Controller800Khz</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_fast_pin.html">FastPin</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_t_m1829.html">TM1829</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>
+</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_s2811_controller400_khz.html">WS2811Controller400Khz</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_fast_pin.html">FastPin</a>&#160;&#160;&#160;</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_controller800_khz.html">WS2811Controller800Khz</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_fast_pin_b_b.html">FastPinBB</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_output_pin.html">OutputPin</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_t_m1829_controller1600_khz.html">TM1829Controller1600Khz</a>&#160;&#160;&#160;</td></tr>
+</td><td valign="top"><a class="el" href="class_fast_pin_b_b.html">FastPinBB</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_output_pin.html">OutputPin</a>&#160;&#160;&#160;</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_s2812.html">WS2812</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 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_controller800_khz.html">TM1829Controller800Khz</a>&#160;&#160;&#160;</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="class_c_every_n_time_periods.html">CEveryNTimePeriods</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><td rowspan="2" valign="bottom"><a name="letter_b"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;b&#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 valign="top"><a class="el" href="class_g_w6205.html">GW6205</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_p9813_controller.html">P9813Controller</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_g_w6205__400.html">GW6205_400</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_pin.html">Pin</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_u_c_s1903.html">UCS1903</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="unionbitswap__type.html">bitswap_type</a>&#160;&#160;&#160;</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="class_g_w6205_controller400_khz.html">GW6205Controller400Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_pixel_controller.html">PixelController</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_u_c_s1903_b.html">UCS1903B</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_j"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;j&#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_s2812_b.html">WS2812B</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="class_c_every_n_time_periods.html">CEveryNTimePeriods</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_s2812_controller800_khz.html">WS2812Controller800Khz</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="class_c_fast_l_e_d.html">CFastLED</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_g_w6205.html">GW6205</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.html">TM1829</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_b"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;b&#160;&#160;</div></td></tr></table>
</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_g_w6205__400.html">GW6205_400</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_pin.html">Pin</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_t_m1829_controller1600_khz.html">TM1829Controller1600Khz</a>&#160;&#160;&#160;</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="class_g_w6205_controller400_khz.html">GW6205Controller400Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_pixel_controller.html">PixelController</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 valign="top"><a class="el" href="unionbitswap__type.html">bitswap_type</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 valign="top"><a class="el" href="class_g_w6205_controller800_khz.html">GW6205Controller800Khz</a>&#160;&#160;&#160;</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_u_c_s1903_b_controller800_khz.html">UCS1903BController800Khz</a>&#160;&#160;&#160;</td></tr>
+</td><td valign="top"><a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_j"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;j&#160;&#160;</div></td></tr></table>
+</td></tr>
<tr><td valign="top"><a class="el" href="class_c_l_e_d_controller.html">CLEDController</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 valign="top"><a class="el" href="class_u_c_s1903_controller400_khz.html">UCS1903Controller400Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="unionjust8bits.html">just8bits</a>&#160;&#160;&#160;</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_selectable.html">Selectable</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_u_c_s1904.html">UCS1904</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><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="struct_c_r_g_b.html">CRGB</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_s_m16716_controller.html">SM16716Controller</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_u_c_s1904_controller800_khz.html">UCS1904Controller800Khz</a>&#160;&#160;&#160;</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_input_pin.html">InputPin</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 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 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_r_g_b_palette256.html">CRGBPalette256</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_p_i_output.html">SPIOutput</a>&#160;&#160;&#160;</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>
+<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_selectable.html">Selectable</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="unionjust8bits.html">just8bits</a>&#160;&#160;&#160;</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="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>&#160;&#160;&#160;</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.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_r_g_b_palette16.html">CRGBPalette16</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_input_pin.html">InputPin</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_b.html">UCS1903B</a>&#160;&#160;&#160;</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_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_p_i_output.html">SPIOutput</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 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_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html">SPIOutput&lt; SPI2_DATA, SPI2_CLOCK, SPI_SPEED &gt;</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2801_controller.html">WS2801Controller</a>&#160;&#160;&#160;</td></tr>
-<tr><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_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html">SPIOutput&lt; SPI_DATA, SPI_CLOCK, SPI_SPEED &gt;</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2803_controller.html">WS2803Controller</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsub4.html">sub4</a>&#160;&#160;&#160;</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 valign="top"><a class="el" href="class_l_p_d1886_controller1250_khz.html">LPD1886Controller1250Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html">SPIOutput&lt; SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED &gt;</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_w_s2811.html">WS2811</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 valign="top"><a class="el" href="class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html">SPIOutput&lt; SPI2_DATA, SPI2_CLOCK, SPI_SPEED &gt;</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 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></tr>
+<tr><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_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html">SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt;</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_u_c_s1904.html">UCS1904</a>&#160;&#160;&#160;</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 valign="top"><a class="el" href="class_l_p_d1886_controller1250_khz.html">LPD1886Controller1250Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html">SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt;</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_u_c_s1904_controller800_khz.html">UCS1904Controller800Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structsub4.html">sub4</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="class_d_m_x_s_e_r_i_a_l.html">DMXSERIAL</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_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html">SPIOutput&lt; SPI_DATA, SPI_CLOCK, SPI_SPEED &gt;</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 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></tr>
-<tr><td valign="top"><a class="el" href="class_d_m_x_s_e_r_i_a_l.html">DMXSERIAL</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_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html">SPIOutput&lt; SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED &gt;</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 valign="top"><a class="el" href="class_d_m_x_serial_controller.html">DMXSerialController</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 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 valign="top"><a class="el" href="class_w_s2811_controller400_khz.html">WS2811Controller400Khz</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="uniont_bytes_for_long.html">tBytesForLong</a>&#160;&#160;&#160;</td></tr>
-<tr><td></td><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a class="el" href="struct_multi_pixel_controller.html">MultiPixelController</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_t_m1803.html">TM1803</a>&#160;&#160;&#160;</td><td></td><td></td></tr>
+</td><td valign="top"><a class="el" href="class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html">SPIOutput&lt; SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED &gt;</a>&#160;&#160;&#160;</td></tr>
+<tr><td></td><td></td><td valign="top"><a class="el" href="class_w_s2801_controller.html">WS2801Controller</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="uniont_bytes_for_long.html">tBytesForLong</a>&#160;&#160;&#160;</td></tr>
+<tr><td></td><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></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_B">B</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_F">F</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_J">J</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_O">O</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 class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_B">B</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_F">F</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_J">J</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_O">O</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></div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/classq-members.html b/docs/3.1/classq-members.html
index 43345cb0..349bf9f9 100644
--- a/docs/3.1/classq-members.html
+++ b/docs/3.1/classq-members.html
@@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/classq.html b/docs/3.1/classq.html
index 6a861f88..ef5d1f53 100644
--- a/docs/3.1/classq.html
+++ b/docs/3.1/classq.html
@@ -89,7 +89,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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 class="title">q&lt; T, F, I &gt; Class Template Reference<div class="ingroups"><a class="el" href="group__lib8tion.html">Fast math functions</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
@@ -123,7 +123,7 @@ int&#160;</td><td class="memItemRight" valign="bottom"><b>operator*</b> (int v)<
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/color_8h_source.html b/docs/3.1/color_8h_source.html
index ff941f15..35d482f3 100644
--- a/docs/3.1/color_8h_source.html
+++ b/docs/3.1/color_8h_source.html
@@ -90,63 +90,68 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="l00007"></a><span class="lineno"><a class="line" href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8"> 7</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
-<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; <span class="comment">// Color correction starting points</span></div>
-<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;</div>
-<div class="line"><a name="l00012"></a><span class="lineno"><a class="line" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8ac52fe8e181ff3c39128664fba835eae3"> 12</a></span>&#160; <a class="code" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8ac52fe8e181ff3c39128664fba835eae3">TypicalSMD5050</a>=0xFFB0F0 <span class="comment">/* 255, 176, 240 */</span>,</div>
-<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; TypicalLEDStrip=0xFFB0F0 <span class="comment">/* 255, 176, 240 */</span>,</div>
-<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;</div>
-<div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af617057397c2a4f89b4bf2783cdac24b"> 19</a></span>&#160; <a class="code" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af617057397c2a4f89b4bf2783cdac24b">Typical8mmPixel</a>=0xFFE08C <span class="comment">/* 255, 224, 140 */</span>,</div>
-<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; TypicalPixelString=0xFFE08C <span class="comment">/* 255, 224, 140 */</span>,</div>
-<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div>
-<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368"> 24</a></span>&#160; <a class="code" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368">UncorrectedColor</a>=0xFFFFFF</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;} <a class="code" href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8">LEDColorCorrection</a>;</div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;FASTLED_NAMESPACE_BEGIN</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
+<div class="line"><a name="l00009"></a><span class="lineno"><a class="line" href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8"> 9</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; <span class="comment">// Color correction starting points</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div>
+<div class="line"><a name="l00014"></a><span class="lineno"><a class="line" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8ac52fe8e181ff3c39128664fba835eae3"> 14</a></span>&#160; <a class="code" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8ac52fe8e181ff3c39128664fba835eae3">TypicalSMD5050</a>=0xFFB0F0 <span class="comment">/* 255, 176, 240 */</span>,</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; TypicalLEDStrip=0xFFB0F0 <span class="comment">/* 255, 176, 240 */</span>,</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af617057397c2a4f89b4bf2783cdac24b"> 21</a></span>&#160; <a class="code" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af617057397c2a4f89b4bf2783cdac24b">Typical8mmPixel</a>=0xFFE08C <span class="comment">/* 255, 224, 140 */</span>,</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; TypicalPixelString=0xFFE08C <span class="comment">/* 255, 224, 140 */</span>,</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368"> 26</a></span>&#160; <a class="code" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368">UncorrectedColor</a>=0xFFFFFF</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;</div>
-<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9"> 29</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
-<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; Candle=0xFF9329 <span class="comment">/* 1900 K, 255, 147, 41 */</span>,</div>
-<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a8f4ad60002c8856dc1f153e2eaa2de91"> 37</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a8f4ad60002c8856dc1f153e2eaa2de91">Tungsten40W</a>=0xFFC58F <span class="comment">/* 2600 K, 255, 197, 143 */</span>,</div>
-<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a631a1e96b10db9220ab27d70a320ac48"> 39</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a631a1e96b10db9220ab27d70a320ac48">Tungsten100W</a>=0xFFD6AA <span class="comment">/* 2850 K, 255, 214, 170 */</span>,</div>
-<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae5ec76aa869b51e645e9f226dfee4b79"> 41</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae5ec76aa869b51e645e9f226dfee4b79">Halogen</a>=0xFFF1E0 <span class="comment">/* 3200 K, 255, 241, 224 */</span>,</div>
-<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9aa9dab8ea30eb2a41c48956480b7014d1"> 43</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9aa9dab8ea30eb2a41c48956480b7014d1">CarbonArc</a>=0xFFFAF4 <span class="comment">/* 5200 K, 255, 250, 244 */</span>,</div>
-<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ac9a2b02351fcc9ad08ef4e2748530e76"> 45</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ac9a2b02351fcc9ad08ef4e2748530e76">HighNoonSun</a>=0xFFFFFB <span class="comment">/* 5400 K, 255, 255, 251 */</span>,</div>
-<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a890e0555ad95071fa4391a5775a38621"> 47</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a890e0555ad95071fa4391a5775a38621">DirectSunlight</a>=0xFFFFFF <span class="comment">/* 6000 K, 255, 255, 255 */</span>,</div>
-<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ad0aebf757f0aa8fc45ba282bd25006f7"> 49</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ad0aebf757f0aa8fc45ba282bd25006f7">OvercastSky</a>=0xC9E2FF <span class="comment">/* 7000 K, 201, 226, 255 */</span>,</div>
-<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9acb80944aa5bed3031b19f1e1101f6a9a"> 51</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9acb80944aa5bed3031b19f1e1101f6a9a">ClearBlueSky</a>=0x409CFF <span class="comment">/* 20000 K, 64, 156, 255 */</span>,</div>
-<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div>
-<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; WarmFluorescent=0xFFF4E5 <span class="comment">/* 0 K, 255, 244, 229 */</span>,</div>
-<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; StandardFluorescent=0xF4FFFA <span class="comment">/* 0 K, 244, 255, 250 */</span>,</div>
-<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; CoolWhiteFluorescent=0xD4EBFF <span class="comment">/* 0 K, 212, 235, 255 */</span>,</div>
-<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; FullSpectrumFluorescent=0xFFF4F2 <span class="comment">/* 0 K, 255, 244, 242 */</span>,</div>
-<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; GrowLightFluorescent=0xFFEFF7 <span class="comment">/* 0 K, 255, 239, 247 */</span>,</div>
-<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; BlackLightFluorescent=0xA700FF <span class="comment">/* 0 K, 167, 0, 255 */</span>,</div>
-<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; MercuryVapor=0xD8F7FF <span class="comment">/* 0 K, 216, 247, 255 */</span>,</div>
-<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; SodiumVapor=0xFFD1B2 <span class="comment">/* 0 K, 255, 209, 178 */</span>,</div>
-<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; MetalHalide=0xF2FCFF <span class="comment">/* 0 K, 242, 252, 255 */</span>,</div>
-<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; HighPressureSodium=0xFFB74C <span class="comment">/* 0 K, 255, 183, 76 */</span>,</div>
-<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div>
-<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f"> 72</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f">UncorrectedTemperature</a>=0xFFFFFF</div>
-<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;} <a class="code" href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9">ColorTemperature</a>;</div>
-<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="ttc" id="group___color_enums_html_ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368"><div class="ttname"><a href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368">UncorrectedColor</a></div><div class="ttdoc">uncorrected color </div><div class="ttdef"><b>Definition:</b> color.h:24</div></div>
-<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9ac9a2b02351fcc9ad08ef4e2748530e76"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ac9a2b02351fcc9ad08ef4e2748530e76">HighNoonSun</a></div><div class="ttdoc">5400 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:45</div></div>
-<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9ae5ec76aa869b51e645e9f226dfee4b79"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae5ec76aa869b51e645e9f226dfee4b79">Halogen</a></div><div class="ttdoc">3200 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:41</div></div>
-<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9a8f4ad60002c8856dc1f153e2eaa2de91"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a8f4ad60002c8856dc1f153e2eaa2de91">Tungsten40W</a></div><div class="ttdoc">2600 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:37</div></div>
-<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9a631a1e96b10db9220ab27d70a320ac48"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a631a1e96b10db9220ab27d70a320ac48">Tungsten100W</a></div><div class="ttdoc">2850 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:39</div></div>
-<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f">UncorrectedTemperature</a></div><div class="ttdoc">Uncorrected temperature 0xFFFFFF. </div><div class="ttdef"><b>Definition:</b> color.h:72</div></div>
-<div class="ttc" id="group___color_enums_html_ggadf6bcba67c9573665af20788c4431ae8ac52fe8e181ff3c39128664fba835eae3"><div class="ttname"><a href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8ac52fe8e181ff3c39128664fba835eae3">TypicalSMD5050</a></div><div class="ttdoc">typical values for SMD5050 LEDs </div><div class="ttdef"><b>Definition:</b> color.h:12</div></div>
-<div class="ttc" id="group___color_enums_html_gadf6bcba67c9573665af20788c4431ae8"><div class="ttname"><a href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8">LEDColorCorrection</a></div><div class="ttdeci">LEDColorCorrection</div><div class="ttdef"><b>Definition:</b> color.h:7</div></div>
-<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9aa9dab8ea30eb2a41c48956480b7014d1"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9aa9dab8ea30eb2a41c48956480b7014d1">CarbonArc</a></div><div class="ttdoc">5200 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:43</div></div>
-<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9a890e0555ad95071fa4391a5775a38621"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a890e0555ad95071fa4391a5775a38621">DirectSunlight</a></div><div class="ttdoc">6000 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:47</div></div>
-<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9acb80944aa5bed3031b19f1e1101f6a9a"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9acb80944aa5bed3031b19f1e1101f6a9a">ClearBlueSky</a></div><div class="ttdoc">20000 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:51</div></div>
-<div class="ttc" id="group___color_enums_html_ga251e9e8dc2c7b981786b71706522b2a9"><div class="ttname"><a href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9">ColorTemperature</a></div><div class="ttdeci">ColorTemperature</div><div class="ttdef"><b>Definition:</b> color.h:29</div></div>
-<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9ad0aebf757f0aa8fc45ba282bd25006f7"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ad0aebf757f0aa8fc45ba282bd25006f7">OvercastSky</a></div><div class="ttdoc">7000 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:49</div></div>
-<div class="ttc" id="group___color_enums_html_ggadf6bcba67c9573665af20788c4431ae8af617057397c2a4f89b4bf2783cdac24b"><div class="ttname"><a href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af617057397c2a4f89b4bf2783cdac24b">Typical8mmPixel</a></div><div class="ttdoc">typical values for 8mm "pixels on a string" also for many through-hole &#39;T&#39; package LEDs ...</div><div class="ttdef"><b>Definition:</b> color.h:19</div></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;} <a class="code" href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8">LEDColorCorrection</a>;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9"> 31</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; Candle=0xFF9329 <span class="comment">/* 1900 K, 255, 147, 41 */</span>,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a8f4ad60002c8856dc1f153e2eaa2de91"> 39</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a8f4ad60002c8856dc1f153e2eaa2de91">Tungsten40W</a>=0xFFC58F <span class="comment">/* 2600 K, 255, 197, 143 */</span>,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a631a1e96b10db9220ab27d70a320ac48"> 41</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a631a1e96b10db9220ab27d70a320ac48">Tungsten100W</a>=0xFFD6AA <span class="comment">/* 2850 K, 255, 214, 170 */</span>,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae5ec76aa869b51e645e9f226dfee4b79"> 43</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae5ec76aa869b51e645e9f226dfee4b79">Halogen</a>=0xFFF1E0 <span class="comment">/* 3200 K, 255, 241, 224 */</span>,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9aa9dab8ea30eb2a41c48956480b7014d1"> 45</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9aa9dab8ea30eb2a41c48956480b7014d1">CarbonArc</a>=0xFFFAF4 <span class="comment">/* 5200 K, 255, 250, 244 */</span>,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ac9a2b02351fcc9ad08ef4e2748530e76"> 47</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ac9a2b02351fcc9ad08ef4e2748530e76">HighNoonSun</a>=0xFFFFFB <span class="comment">/* 5400 K, 255, 255, 251 */</span>,</div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a890e0555ad95071fa4391a5775a38621"> 49</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a890e0555ad95071fa4391a5775a38621">DirectSunlight</a>=0xFFFFFF <span class="comment">/* 6000 K, 255, 255, 255 */</span>,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ad0aebf757f0aa8fc45ba282bd25006f7"> 51</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ad0aebf757f0aa8fc45ba282bd25006f7">OvercastSky</a>=0xC9E2FF <span class="comment">/* 7000 K, 201, 226, 255 */</span>,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9acb80944aa5bed3031b19f1e1101f6a9a"> 53</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9acb80944aa5bed3031b19f1e1101f6a9a">ClearBlueSky</a>=0x409CFF <span class="comment">/* 20000 K, 64, 156, 255 */</span>,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; WarmFluorescent=0xFFF4E5 <span class="comment">/* 0 K, 255, 244, 229 */</span>,</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; StandardFluorescent=0xF4FFFA <span class="comment">/* 0 K, 244, 255, 250 */</span>,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; CoolWhiteFluorescent=0xD4EBFF <span class="comment">/* 0 K, 212, 235, 255 */</span>,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; FullSpectrumFluorescent=0xFFF4F2 <span class="comment">/* 0 K, 255, 244, 242 */</span>,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; GrowLightFluorescent=0xFFEFF7 <span class="comment">/* 0 K, 255, 239, 247 */</span>,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; BlackLightFluorescent=0xA700FF <span class="comment">/* 0 K, 167, 0, 255 */</span>,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; MercuryVapor=0xD8F7FF <span class="comment">/* 0 K, 216, 247, 255 */</span>,</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; SodiumVapor=0xFFD1B2 <span class="comment">/* 0 K, 255, 209, 178 */</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; MetalHalide=0xF2FCFF <span class="comment">/* 0 K, 242, 252, 255 */</span>,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; HighPressureSodium=0xFFB74C <span class="comment">/* 0 K, 255, 183, 76 */</span>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f"> 74</a></span>&#160; <a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f">UncorrectedTemperature</a>=0xFFFFFF</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;} <a class="code" href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9">ColorTemperature</a>;</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;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="group___color_enums_html_ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368"><div class="ttname"><a href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368">UncorrectedColor</a></div><div class="ttdoc">uncorrected color </div><div class="ttdef"><b>Definition:</b> color.h:26</div></div>
+<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9ac9a2b02351fcc9ad08ef4e2748530e76"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ac9a2b02351fcc9ad08ef4e2748530e76">HighNoonSun</a></div><div class="ttdoc">5400 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:47</div></div>
+<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9ae5ec76aa869b51e645e9f226dfee4b79"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae5ec76aa869b51e645e9f226dfee4b79">Halogen</a></div><div class="ttdoc">3200 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:43</div></div>
+<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9a8f4ad60002c8856dc1f153e2eaa2de91"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a8f4ad60002c8856dc1f153e2eaa2de91">Tungsten40W</a></div><div class="ttdoc">2600 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:39</div></div>
+<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9a631a1e96b10db9220ab27d70a320ac48"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a631a1e96b10db9220ab27d70a320ac48">Tungsten100W</a></div><div class="ttdoc">2850 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:41</div></div>
+<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f">UncorrectedTemperature</a></div><div class="ttdoc">Uncorrected temperature 0xFFFFFF. </div><div class="ttdef"><b>Definition:</b> color.h:74</div></div>
+<div class="ttc" id="group___color_enums_html_ggadf6bcba67c9573665af20788c4431ae8ac52fe8e181ff3c39128664fba835eae3"><div class="ttname"><a href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8ac52fe8e181ff3c39128664fba835eae3">TypicalSMD5050</a></div><div class="ttdoc">typical values for SMD5050 LEDs </div><div class="ttdef"><b>Definition:</b> color.h:14</div></div>
+<div class="ttc" id="group___color_enums_html_gadf6bcba67c9573665af20788c4431ae8"><div class="ttname"><a href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8">LEDColorCorrection</a></div><div class="ttdeci">LEDColorCorrection</div><div class="ttdef"><b>Definition:</b> color.h:9</div></div>
+<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9aa9dab8ea30eb2a41c48956480b7014d1"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9aa9dab8ea30eb2a41c48956480b7014d1">CarbonArc</a></div><div class="ttdoc">5200 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:45</div></div>
+<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9a890e0555ad95071fa4391a5775a38621"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a890e0555ad95071fa4391a5775a38621">DirectSunlight</a></div><div class="ttdoc">6000 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:49</div></div>
+<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9acb80944aa5bed3031b19f1e1101f6a9a"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9acb80944aa5bed3031b19f1e1101f6a9a">ClearBlueSky</a></div><div class="ttdoc">20000 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:53</div></div>
+<div class="ttc" id="group___color_enums_html_ga251e9e8dc2c7b981786b71706522b2a9"><div class="ttname"><a href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9">ColorTemperature</a></div><div class="ttdeci">ColorTemperature</div><div class="ttdef"><b>Definition:</b> color.h:31</div></div>
+<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9ad0aebf757f0aa8fc45ba282bd25006f7"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ad0aebf757f0aa8fc45ba282bd25006f7">OvercastSky</a></div><div class="ttdoc">7000 Kelvin </div><div class="ttdef"><b>Definition:</b> color.h:51</div></div>
+<div class="ttc" id="group___color_enums_html_ggadf6bcba67c9573665af20788c4431ae8af617057397c2a4f89b4bf2783cdac24b"><div class="ttname"><a href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af617057397c2a4f89b4bf2783cdac24b">Typical8mmPixel</a></div><div class="ttdoc">typical values for 8mm "pixels on a string" also for many through-hole &#39;T&#39; package LEDs ...</div><div class="ttdef"><b>Definition:</b> color.h:21</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/colorpalettes_8h_source.html b/docs/3.1/colorpalettes_8h_source.html
index b2447f57..b74e57e8 100644
--- a/docs/3.1/colorpalettes_8h_source.html
+++ b/docs/3.1/colorpalettes_8h_source.html
@@ -92,27 +92,32 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="l00012"></a><span class="lineno"> 12</span>&#160;</div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;FASTLED_NAMESPACE_BEGIN</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</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 <a class="code" href="group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119">PROGMEM</a>;</div>
-<div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119"> 18</a></span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 LavaColors_p <a class="code" href="group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119">PROGMEM</a>;</div>
-<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 OceanColors_p <a class="code" href="group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119">PROGMEM</a>;</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 ForestColors_p <a class="code" href="group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119">PROGMEM</a>;</div>
-<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div>
-<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 RainbowColors_p <a class="code" href="group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119">PROGMEM</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="preprocessor">#define RainbowStripesColors_p RainbowStripeColors_p</span></div>
-<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 RainbowStripeColors_p <a class="code" href="group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119">PROGMEM</a>;</div>
-<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
-<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 PartyColors_p <a class="code" href="group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119">PROGMEM</a>;</div>
-<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
-<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 HeatColors_p <a class="code" href="group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119">PROGMEM</a>;</div>
-<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="ttc" id="group___colorpalletes_html_ga550b5245a7c2e0554d1d5af179903119"><div class="ttname"><a href="group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119">PROGMEM</a></div><div class="ttdeci">const TProgmemRGBPalette16 CloudColors_p PROGMEM</div><div class="ttdoc">Cloudy color pallete. </div><div class="ttdef"><b>Definition:</b> colorpalettes.h:18</div></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="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 CloudColors_p <a class="code" href="group___colorpalletes.html#ga57a38373661043f74b292976e83c687b">FL_PROGMEM</a>;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="group___colorpalletes.html#ga57a38373661043f74b292976e83c687b"> 20</a></span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 LavaColors_p <a class="code" href="group___colorpalletes.html#ga57a38373661043f74b292976e83c687b">FL_PROGMEM</a>;</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 OceanColors_p <a class="code" href="group___colorpalletes.html#ga57a38373661043f74b292976e83c687b">FL_PROGMEM</a>;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 ForestColors_p <a class="code" href="group___colorpalletes.html#ga57a38373661043f74b292976e83c687b">FL_PROGMEM</a>;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 RainbowColors_p <a class="code" href="group___colorpalletes.html#ga57a38373661043f74b292976e83c687b">FL_PROGMEM</a>;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#define RainbowStripesColors_p RainbowStripeColors_p</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 RainbowStripeColors_p <a class="code" href="group___colorpalletes.html#ga57a38373661043f74b292976e83c687b">FL_PROGMEM</a>;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 PartyColors_p <a class="code" href="group___colorpalletes.html#ga57a38373661043f74b292976e83c687b">FL_PROGMEM</a>;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">extern</span> <span class="keyword">const</span> TProgmemRGBPalette16 HeatColors_p <a class="code" href="group___colorpalletes.html#ga57a38373661043f74b292976e83c687b">FL_PROGMEM</a>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="group___colorpalletes_html_ga57a38373661043f74b292976e83c687b"><div class="ttname"><a href="group___colorpalletes.html#ga57a38373661043f74b292976e83c687b">FL_PROGMEM</a></div><div class="ttdeci">const TProgmemRGBPalette16 CloudColors_p FL_PROGMEM</div><div class="ttdoc">Cloudy color pallete. </div><div class="ttdef"><b>Definition:</b> colorpalettes.h:20</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/colorutils_8h_source.html b/docs/3.1/colorutils_8h_source.html
index eae39d13..957028ff 100644
--- a/docs/3.1/colorutils_8h_source.html
+++ b/docs/3.1/colorutils_8h_source.html
@@ -90,868 +90,1081 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="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">#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;fastled_progmem.h&quot;</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div>
-<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div>
-<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( <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="l00015"></a><span class="lineno"> 15</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="l00016"></a><span class="lineno"> 16</span>&#160;</div>
-<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( <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="l00020"></a><span class="lineno"> 20</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="l00021"></a><span class="lineno"> 21</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;FASTLED_NAMESPACE_BEGIN</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( <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="l00016"></a><span class="lineno"> 16</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="l00017"></a><span class="lineno"> 17</span>&#160;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( <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="l00021"></a><span class="lineno"> 21</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="l00022"></a><span class="lineno"> 22</span>&#160;</div>
-<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#gafcc7dac88e25736ebc49a9faf2a1c2e2">fill_rainbow</a>( <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="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="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#gafcc7dac88e25736ebc49a9faf2a1c2e2">fill_rainbow</a>( <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="l00032"></a><span class="lineno"> 32</span>&#160; uint8_t initialhue,</div>
-<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; uint8_t deltahue = 5);</div>
-<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#gafcc7dac88e25736ebc49a9faf2a1c2e2">fill_rainbow</a>( <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="l00027"></a><span class="lineno"> 27</span>&#160; uint8_t initialhue,</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; uint8_t deltahue = 5);</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#gafcc7dac88e25736ebc49a9faf2a1c2e2">fill_rainbow</a>( <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="l00033"></a><span class="lineno"> 33</span>&#160; uint8_t initialhue,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; uint8_t deltahue = 5);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div>
-<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> { FORWARD_HUES, BACKWARD_HUES, SHORTEST_HUES, LONGEST_HUES } TGradientDirectionCode;</div>
-<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div>
-<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
-<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div>
-<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#define saccum87 int16_t</span></div>
-<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
-<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
-<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98"> 65</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( T* targetArray,</div>
-<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; uint16_t startpos, <a class="code" href="struct_c_h_s_v.html">CHSV</a> startcolor,</div>
-<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; uint16_t endpos, <a class="code" href="struct_c_h_s_v.html">CHSV</a> endcolor,</div>
-<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES )</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">// if the points are in the wrong order, straighten them</span></div>
-<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span>( endpos &lt; startpos ) {</div>
-<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; uint16_t t = endpos;</div>
-<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="struct_c_h_s_v.html">CHSV</a> tc = endcolor;</div>
-<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; startpos = t;</div>
-<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; startcolor = tc;</div>
-<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; endcolor = startcolor;</div>
-<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; endpos = startpos;</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;</div>
-<div class="line"><a name="l00080"></a><span class="lineno"> 80</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="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">// then set the endhue to the starthue.</span></div>
-<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">// This lets us ramp smoothly to black or white, regardless</span></div>
-<div class="line"><a name="l00083"></a><span class="lineno"> 83</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="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span>( endcolor.value == 0 || endcolor.saturation == 0) {</div>
-<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; endcolor.hue = startcolor.hue;</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">// Similarly, if we&#39;re fading in from black (val=0) or white (sat=0)</span></div>
-<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// then set the starthue to the endhue.</span></div>
-<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// This lets us ramp smoothly up from black or white, regardless</span></div>
-<div class="line"><a name="l00091"></a><span class="lineno"> 91</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="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">if</span>( startcolor.value == 0 || startcolor.saturation == 0) {</div>
-<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; startcolor.hue = endcolor.hue;</div>
-<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
-<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
-<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; saccum87 huedistance87;</div>
-<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; saccum87 satdistance87;</div>
-<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; saccum87 valdistance87;</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; satdistance87 = (endcolor.sat - startcolor.sat) &lt;&lt; 7;</div>
-<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; valdistance87 = (endcolor.val - startcolor.val) &lt;&lt; 7;</div>
-<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div>
-<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; uint8_t huedelta8 = endcolor.hue - startcolor.hue;</div>
-<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div>
-<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">if</span>( directionCode == SHORTEST_HUES ) {</div>
-<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; directionCode = FORWARD_HUES;</div>
-<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span>( huedelta8 &gt; 127) {</div>
-<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; directionCode = BACKWARD_HUES;</div>
-<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment">// fill_gradient - fill an array of colors with a smooth HSV gradient</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">// between two specified HSV colors.</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">// Since &#39;hue&#39; is a value around a color wheel,</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">// there are always two ways to sweep from one hue</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment">// to another.</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">// This function lets you specify which way you want</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment">// the hue gradient to sweep around the color wheel:</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment">// FORWARD_HUES: hue always goes clockwise</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment">// BACKWARD_HUES: hue always goes counter-clockwise</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">// SHORTEST_HUES: hue goes whichever way is shortest</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment">// LONGEST_HUES: hue goes whichever way is longest</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">// The default is SHORTEST_HUES, as this is nearly</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment">// always what is wanted.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">// fill_gradient can write the gradient colors EITHER</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</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="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">// OR</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">// (2) into an array of CHSVs (e.g. an HSV Palette).</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment">// In the case of writing into a CRGB array, the gradient is</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">// computed in HSV space, and then HSV values are converted to RGB</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">// as they&#39;re written into the RGB array.</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;<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="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;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="preprocessor">#define saccum87 int16_t</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98"> 89</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( T* targetArray,</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; uint16_t startpos, <a class="code" href="struct_c_h_s_v.html">CHSV</a> startcolor,</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; uint16_t endpos, <a class="code" href="struct_c_h_s_v.html">CHSV</a> endcolor,</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES )</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="comment">// if the points are in the wrong order, straighten them</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">if</span>( endpos &lt; startpos ) {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; uint16_t t = endpos;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="struct_c_h_s_v.html">CHSV</a> tc = endcolor;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; startpos = t;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; startcolor = tc;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; endcolor = startcolor;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; endpos = startpos;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">// If we&#39;re fading toward black (val=0) or white (sat=0),</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// then set the endhue to the starthue.</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// This lets us ramp smoothly to black or white, regardless</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</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="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">if</span>( endcolor.value == 0 || endcolor.saturation == 0) {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; endcolor.hue = startcolor.hue;</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="keywordflow">if</span>( directionCode == LONGEST_HUES ) {</div>
-<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; directionCode = FORWARD_HUES;</div>
-<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">if</span>( huedelta8 &lt; 128) {</div>
-<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; directionCode = BACKWARD_HUES;</div>
-<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
-<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div>
-<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div>
-<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span>( directionCode == FORWARD_HUES) {</div>
-<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; huedistance87 = huedelta8 &lt;&lt; 7;</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; <span class="keywordflow">else</span> <span class="comment">/* directionCode == BACKWARD_HUES */</span></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; huedistance87 = (uint8_t)(256 - huedelta8) &lt;&lt; 7;</div>
-<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; huedistance87 = -huedistance87;</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; uint16_t pixeldistance = endpos - startpos;</div>
-<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; int16_t divisor = pixeldistance ? pixeldistance : 1;</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; saccum87 huedelta87 = huedistance87 / divisor;</div>
-<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; saccum87 satdelta87 = satdistance87 / divisor;</div>
-<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; saccum87 valdelta87 = valdistance87 / divisor;</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; huedelta87 *= 2;</div>
-<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; satdelta87 *= 2;</div>
-<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; valdelta87 *= 2;</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; accum88 hue88 = startcolor.hue &lt;&lt; 8;</div>
-<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; accum88 sat88 = startcolor.sat &lt;&lt; 8;</div>
-<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; accum88 val88 = startcolor.val &lt;&lt; 8;</div>
-<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">for</span>( uint16_t i = startpos; i &lt;= endpos; i++) {</div>
-<div class="line"><a name="l00143"></a><span class="lineno"> 143</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="l00144"></a><span class="lineno"> 144</span>&#160; hue88 += huedelta87;</div>
-<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; sat88 += satdelta87;</div>
-<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; val88 += valdelta87;</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;</div>
-<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment">// Convenience functions to fill an array of colors with a</span></div>
-<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment">// two-color, three-color, or four-color gradient</span></div>
-<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
-<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( 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="l00155"></a><span class="lineno"> 155</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES )</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; uint16_t last = numLeds - 1;</div>
-<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( targetArray, 0, c1, last, c2, directionCode);</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="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
-<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( T* targetArray, uint16_t numLeds,</div>
-<div class="line"><a name="l00163"></a><span class="lineno"> 163</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="l00164"></a><span class="lineno"> 164</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES )</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; uint16_t half = (numLeds / 2);</div>
-<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; uint16_t last = numLeds - 1;</div>
-<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( targetArray, 0, c1, half, c2, directionCode);</div>
-<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( targetArray, half, c2, last, c3, directionCode);</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;</div>
-<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
-<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( T* targetArray, uint16_t numLeds,</div>
-<div class="line"><a name="l00174"></a><span class="lineno"> 174</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="l00175"></a><span class="lineno"> 175</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES )</div>
-<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;{</div>
-<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; uint16_t onethird = (numLeds / 3);</div>
-<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; uint16_t twothirds = ((numLeds * 2) / 3);</div>
-<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; uint16_t last = numLeds - 1;</div>
-<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( targetArray, 0, c1, onethird, c2, directionCode);</div>
-<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( targetArray, onethird, c2, twothirds, c3, directionCode);</div>
-<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( targetArray, twothirds, c3, last, c4, directionCode);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</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="l00113"></a><span class="lineno"> 113</span>&#160; <span class="comment">// then set the starthue to the endhue.</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// This lets us ramp smoothly up from black or white, regardless</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</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="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span>( startcolor.value == 0 || startcolor.saturation == 0) {</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; startcolor.hue = endcolor.hue;</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; saccum87 huedistance87;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; saccum87 satdistance87;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; saccum87 valdistance87;</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; satdistance87 = (endcolor.sat - startcolor.sat) &lt;&lt; 7;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; valdistance87 = (endcolor.val - startcolor.val) &lt;&lt; 7;</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; uint8_t huedelta8 = endcolor.hue - startcolor.hue;</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; <span class="keywordflow">if</span>( directionCode == SHORTEST_HUES ) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; directionCode = FORWARD_HUES;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span>( huedelta8 &gt; 127) {</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; directionCode = BACKWARD_HUES;</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="keywordflow">if</span>( directionCode == LONGEST_HUES ) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; directionCode = FORWARD_HUES;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span>( huedelta8 &lt; 128) {</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; directionCode = BACKWARD_HUES;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">if</span>( directionCode == FORWARD_HUES) {</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; huedistance87 = huedelta8 &lt;&lt; 7;</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="keywordflow">else</span> <span class="comment">/* directionCode == BACKWARD_HUES */</span></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; huedistance87 = (uint8_t)(256 - huedelta8) &lt;&lt; 7;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; huedistance87 = -huedistance87;</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;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; uint16_t pixeldistance = endpos - startpos;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; int16_t divisor = pixeldistance ? pixeldistance : 1;</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; saccum87 huedelta87 = huedistance87 / divisor;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; saccum87 satdelta87 = satdistance87 / divisor;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; saccum87 valdelta87 = valdistance87 / divisor;</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; huedelta87 *= 2;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; satdelta87 *= 2;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; valdelta87 *= 2;</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; accum88 hue88 = startcolor.hue &lt;&lt; 8;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; accum88 sat88 = startcolor.sat &lt;&lt; 8;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; accum88 val88 = startcolor.val &lt;&lt; 8;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">for</span>( uint16_t i = startpos; i &lt;= endpos; i++) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</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="l00168"></a><span class="lineno"> 168</span>&#160; hue88 += huedelta87;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; sat88 += satdelta87;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; val88 += valdelta87;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;}</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment">// Convenience functions to fill an array of colors with a</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment">// two-color, three-color, or four-color gradient</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( 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="l00179"></a><span class="lineno"> 179</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES )</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; uint16_t last = numLeds - 1;</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( targetArray, 0, c1, last, c2, directionCode);</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">// convenience synonym</span></div>
-<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="preprocessor">#define fill_gradient_HSV fill_gradient</span></div>
-<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;</div>
-<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div>
-<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="comment">// fill_gradient_RGB - fill a range of LEDs with a smooth RGB gradient</span></div>
-<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment">// between two specified RGB colors.</span></div>
-<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment">// Unlike HSV, there is no &#39;color wheel&#39; in RGB space,</span></div>
-<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment">// and therefore there&#39;s only one &#39;direction&#39; for the</span></div>
-<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment">// gradient to go, and no &#39;direction code&#39; is needed.</span></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,</div>
-<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; uint16_t startpos, <a class="code" href="struct_c_r_g_b.html">CRGB</a> startcolor,</div>
-<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; uint16_t endpos, <a class="code" href="struct_c_r_g_b.html">CRGB</a> endcolor );</div>
-<div class="line"><a name="l00197"></a><span class="lineno"> 197</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="l00198"></a><span class="lineno"> 198</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="l00199"></a><span class="lineno"> 199</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="l00200"></a><span class="lineno"> 200</span>&#160;</div>
-<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div>
-<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment">// fadeLightBy and fade_video - reduce the brightness of an array</span></div>
-<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment">// of pixels all at once. Guaranteed</span></div>
-<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment">// to never fade all the way to black.</span></div>
-<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="comment">// (The two names are synonyms.)</span></div>
-<div class="line"><a name="l00206"></a><span class="lineno"> 206</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="l00207"></a><span class="lineno"> 207</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="l00185"></a><span class="lineno"> 185</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( T* targetArray, uint16_t numLeds,</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</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="l00188"></a><span class="lineno"> 188</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES )</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; uint16_t half = (numLeds / 2);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; uint16_t last = numLeds - 1;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( targetArray, 0, c1, half, c2, directionCode);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( targetArray, half, c2, last, c3, directionCode);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;}</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="keywordtype">void</span> <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( T* targetArray, uint16_t numLeds,</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</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="l00199"></a><span class="lineno"> 199</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES )</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; uint16_t onethird = (numLeds / 3);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; uint16_t twothirds = ((numLeds * 2) / 3);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; uint16_t last = numLeds - 1;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( targetArray, 0, c1, onethird, c2, directionCode);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( targetArray, onethird, c2, twothirds, c3, directionCode);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( targetArray, twothirds, c3, last, c4, directionCode);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;}</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div>
-<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="comment">// nscale8_video - scale down the brightness of an array of pixels</span></div>
-<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="comment">// all at once. Guaranteed to never scale a pixel</span></div>
-<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="comment">// all the way down to black, unless &#39;scale&#39; is zero.</span></div>
-<div class="line"><a name="l00212"></a><span class="lineno"> 212</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="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">// fadeToBlackBy and fade_raw - reduce the brightness of an array</span></div>
-<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="comment">// of pixels all at once. These</span></div>
-<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="comment">// functions will eventually fade all</span></div>
-<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="comment">// the way to black.</span></div>
-<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="comment">// (The two names are synonyms.)</span></div>
-<div class="line"><a name="l00219"></a><span class="lineno"> 219</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="l00220"></a><span class="lineno"> 220</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="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">// nscale8 - 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">// all at once. This function can scale pixels all the</span></div>
-<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="comment">// way down to black even if &#39;scale&#39; is not zero.</span></div>
-<div class="line"><a name="l00225"></a><span class="lineno"> 225</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="l00226"></a><span class="lineno"> 226</span>&#160;</div>
-<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="comment">// fadeUsingColor - scale down the brightness of an array of pixels,</span></div>
-<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="comment">// as though it were seen through a transparent</span></div>
-<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="comment">// filter with the specified color.</span></div>
-<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="comment">// For example, if the colormask is</span></div>
-<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="comment">// CRGB( 200, 100, 50)</span></div>
-<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="comment">// then the pixels&#39; red will be faded to 200/256ths,</span></div>
-<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="comment">// their green to 100/256ths, and their blue to 50/256ths.</span></div>
-<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="comment">// This particular example give a &#39;hot fade&#39; look,</span></div>
-<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="comment">// with white fading to yellow, then red, then black.</span></div>
-<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="comment">// You can also use colormasks like CRGB::Blue to</span></div>
-<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="comment">// zero out the red and green elements, leaving blue</span></div>
-<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="comment">// (largely) the same.</span></div>
-<div class="line"><a name="l00239"></a><span class="lineno"> 239</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="l00240"></a><span class="lineno"> 240</span>&#160;</div>
-<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div>
-<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="comment">// Pixel blending</span></div>
-<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="comment">// blend - computes a new color blended some fraction of the way</span></div>
-<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="comment">// between two other colors.</span></div>
-<div class="line"><a name="l00246"></a><span class="lineno"> 246</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="l00247"></a><span class="lineno"> 247</span>&#160;</div>
-<div class="line"><a name="l00248"></a><span class="lineno"> 248</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="l00249"></a><span class="lineno"> 249</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES );</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="comment">// convenience synonym</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="preprocessor">#define fill_gradient_HSV fill_gradient</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;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</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="l00214"></a><span class="lineno"> 214</span>&#160;<span class="comment">// between two specified RGB colors.</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="comment">// Unlike HSV, there is no &#39;color wheel&#39; in RGB space,</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="comment">// and therefore there&#39;s only one &#39;direction&#39; for the</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="comment">// gradient to go, and no &#39;direction code&#39; is needed.</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</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="l00219"></a><span class="lineno"> 219</span>&#160; uint16_t startpos, <a class="code" href="struct_c_r_g_b.html">CRGB</a> startcolor,</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; uint16_t endpos, <a class="code" href="struct_c_r_g_b.html">CRGB</a> endcolor );</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</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="l00222"></a><span class="lineno"> 222</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="l00223"></a><span class="lineno"> 223</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="l00224"></a><span class="lineno"> 224</span>&#160;</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;<span class="comment">// fadeLightBy and fade_video - reduce the brightness of an array</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="comment">// of pixels all at once. Guaranteed</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="comment">// to never fade all the way to black.</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="comment">// (The two names are synonyms.)</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</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="l00231"></a><span class="lineno"> 231</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="l00232"></a><span class="lineno"> 232</span>&#160;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="comment">// nscale8_video - scale down the brightness of an array of pixels</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="comment">// all at once. Guaranteed to never scale a pixel</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="comment">// all the way down to black, unless &#39;scale&#39; is zero.</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</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="l00237"></a><span class="lineno"> 237</span>&#160;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="comment">// fadeToBlackBy and fade_raw - reduce the brightness of an array</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment">// of pixels all at once. These</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="comment">// functions will eventually fade all</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="comment">// the way to black.</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="comment">// (The two names are synonyms.)</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</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="l00244"></a><span class="lineno"> 244</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="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">// nscale8 - scale down the brightness of an array of pixels</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="comment">// all at once. This function can scale pixels all the</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="comment">// way down to black even if &#39;scale&#39; is not zero.</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</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="l00250"></a><span class="lineno"> 250</span>&#160;</div>
-<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="comment">// blend - computes a new color blended array of colors, each</span></div>
-<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="comment">// a given fraction of the way between corresponding</span></div>
-<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="comment">// elements of two source arrays of colors.</span></div>
-<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="comment">// Useful for blending palettes.</span></div>
-<div class="line"><a name="l00255"></a><span class="lineno"> 255</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="l00256"></a><span class="lineno"> 256</span>&#160; uint16_t count, fract8 amountOfsrc2 );</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;<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="l00259"></a><span class="lineno"> 259</span>&#160; uint16_t count, fract8 amountOfsrc2,</div>
-<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES );</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="comment">// nblend - destructively modifies one color, blending</span></div>
-<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="comment">// in a given fraction of an overlay color</span></div>
-<div class="line"><a name="l00264"></a><span class="lineno"> 264</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="l00251"></a><span class="lineno"> 251</span>&#160;<span class="comment">// fadeUsingColor - scale down the brightness of an array of pixels,</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="comment">// as though it were seen through a transparent</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="comment">// filter with the specified color.</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="comment">// For example, if the colormask is</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment">// CRGB( 200, 100, 50)</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="comment">// then the pixels&#39; red will be faded to 200/256ths,</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment">// their green to 100/256ths, and their blue to 50/256ths.</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="comment">// This particular example give a &#39;hot fade&#39; look,</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="comment">// with white fading to yellow, then red, then black.</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="comment">// You can also use colormasks like CRGB::Blue to</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="comment">// zero out the red and green elements, leaving blue</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="comment">// (largely) the same.</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</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="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;<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="l00267"></a><span class="lineno"> 267</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES );</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="comment">// nblend - destructively blends a given fraction of</span></div>
-<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="comment">// a new color array into an existing color array</span></div>
-<div class="line"><a name="l00271"></a><span class="lineno"> 271</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="l00272"></a><span class="lineno"> 272</span>&#160;</div>
-<div class="line"><a name="l00273"></a><span class="lineno"> 273</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="l00274"></a><span class="lineno"> 274</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES);</div>
-<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div>
-<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div>
-<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="comment">// blur1d: one-dimensional blur filter. Spreads light to 2 line neighbors.</span></div>
-<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="comment">// blur2d: two-dimensional blur filter. Spreads light to 8 XY neighbors.</span></div>
-<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="comment">// 0 = no spread at all</span></div>
-<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;<span class="comment">// 64 = moderate spreading</span></div>
-<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="comment">// 172 = maximum smooth, even spreading</span></div>
-<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="comment">// 173..255 = wider spreading, but increasing flicker</span></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">// Total light is NOT entirely conserved, so many repeated</span></div>
-<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="comment">// calls to &#39;blur&#39; will also result in the light fading,</span></div>
-<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="comment">// eventually all the way to black; this is by design so that</span></div>
-<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="comment">// it can be used to (slowly) clear the LEDs to black.</span></div>
-<div class="line"><a name="l00290"></a><span class="lineno"> 290</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="l00291"></a><span class="lineno"> 291</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="l00266"></a><span class="lineno"> 266</span>&#160;<span class="comment">// Pixel blending</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="comment">// blend - computes a new color blended some fraction of the way</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="comment">// between two other colors.</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</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="l00271"></a><span class="lineno"> 271</span>&#160;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</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="l00273"></a><span class="lineno"> 273</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES );</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">// blend - computes a new color blended array of colors, each</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="comment">// a given fraction of the way between corresponding</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="comment">// elements of two source arrays of colors.</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="comment">// Useful for blending palettes.</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</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="l00280"></a><span class="lineno"> 280</span>&#160; uint16_t count, fract8 amountOfsrc2 );</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;<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="l00283"></a><span class="lineno"> 283</span>&#160; uint16_t count, fract8 amountOfsrc2,</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES );</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;<span class="comment">// nblend - destructively modifies one color, blending</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="comment">// in a given fraction of an overlay color</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</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="l00289"></a><span class="lineno"> 289</span>&#160;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</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="l00291"></a><span class="lineno"> 291</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES );</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div>
-<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment">// blurRows: perform a blur1d on every row of a rectangular matrix</span></div>
-<div class="line"><a name="l00294"></a><span class="lineno"> 294</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="l00295"></a><span class="lineno"> 295</span>&#160;<span class="comment">// blurColumns: perform a blur1d on each column of a rectangular matrix</span></div>
-<div class="line"><a name="l00296"></a><span class="lineno"> 296</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="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;<span class="comment">// CRGB HeatColor( uint8_t temperature)</span></div>
-<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;<span class="comment">// Approximates a &#39;black body radiation&#39; spectrum for</span></div>
-<div class="line"><a name="l00302"></a><span class="lineno"> 302</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="l00303"></a><span class="lineno"> 303</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="l00304"></a><span class="lineno"> 304</span>&#160;<span class="comment">// This is NOT a chromatically correct &#39;black body radiation&#39;</span></div>
-<div class="line"><a name="l00305"></a><span class="lineno"> 305</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="l00306"></a><span class="lineno"> 306</span>&#160;<a class="code" href="struct_c_r_g_b.html">CRGB</a> HeatColor( uint8_t temperature);</div>
-<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div>
-<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div>
-<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment">// Palettes</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">// RGB Palettes map an 8-bit value (0..255) to an RGB color.</span></div>
-<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="comment">// You can create any color palette you wish; a couple of starters</span></div>
-<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="comment">// are provided: Forest, Clouds, Lava, Ocean, Rainbow, and Rainbow Stripes.</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">// Palettes come in the traditional 256-entry variety, which take</span></div>
-<div class="line"><a name="l00317"></a><span class="lineno"> 317</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="l00318"></a><span class="lineno"> 318</span>&#160;<span class="comment">// variety automatically interpolates between its entries to produce</span></div>
-<div class="line"><a name="l00319"></a><span class="lineno"> 319</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="l00320"></a><span class="lineno"> 320</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;<span class="comment">// Basic operation is like this: (example shows the 16-entry variety)</span></div>
-<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="comment">// 1. Declare your palette storage:</span></div>
-<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="comment">// CRGBPalette16 myPalette;</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment">// nblend - destructively blends a given fraction of</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment">// a new color array into an existing color array</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</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="l00296"></a><span class="lineno"> 296</span>&#160;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</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="l00298"></a><span class="lineno"> 298</span>&#160; TGradientDirectionCode directionCode = SHORTEST_HUES);</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">// blur1d: one-dimensional blur filter. Spreads light to 2 line neighbors.</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="comment">// blur2d: two-dimensional blur filter. Spreads light to 8 XY neighbors.</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="comment">// 0 = no spread at all</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;<span class="comment">// 64 = moderate spreading</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="comment">// 172 = maximum smooth, even spreading</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">// 173..255 = wider spreading, but increasing flicker</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="comment">// Total light is NOT entirely conserved, so many repeated</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="comment">// calls to &#39;blur&#39; will also result in the light fading,</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="comment">// eventually all the way to black; this is by design so that</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="comment">// it can be used to (slowly) clear the LEDs to black.</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</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="l00315"></a><span class="lineno"> 315</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="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">// blurRows: perform a blur1d on every row of a rectangular matrix</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</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="l00319"></a><span class="lineno"> 319</span>&#160;<span class="comment">// blurColumns: perform a blur1d on each column of a rectangular matrix</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</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="l00321"></a><span class="lineno"> 321</span>&#160;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="comment">// CRGB HeatColor( uint8_t temperature)</span></div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00325"></a><span class="lineno"> 325</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="l00326"></a><span class="lineno"> 326</span>&#160;<span class="comment">// You can specify your 16 colors a variety of ways:</span></div>
-<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="comment">// CRGBPalette16 myPalette(</span></div>
-<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="comment">// CRGB::Black,</span></div>
-<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="comment">// CRGB::Black,</span></div>
-<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="comment">// CRGB::Red,</span></div>
-<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="comment">// CRGB::Yellow,</span></div>
-<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="comment">// CRGB::Green,</span></div>
-<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment">// CRGB::Blue,</span></div>
-<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment">// CRGB::Purple,</span></div>
-<div class="line"><a name="l00335"></a><span class="lineno"> 335</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">// Approximates a &#39;black body radiation&#39; spectrum for</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</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="l00327"></a><span class="lineno"> 327</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="l00328"></a><span class="lineno"> 328</span>&#160;<span class="comment">// This is NOT a chromatically correct &#39;black body radiation&#39;</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</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="l00330"></a><span class="lineno"> 330</span>&#160;<a class="code" href="struct_c_r_g_b.html">CRGB</a> HeatColor( uint8_t temperature);</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;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment">// Palettes</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</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="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">// 0x100000,</span></div>
-<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment">// 0x200000,</span></div>
-<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="comment">// 0x400000,</span></div>
-<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="comment">// 0x800000,</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">// CHSV( 30,255,255),</span></div>
-<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="comment">// CHSV( 50,255,255),</span></div>
-<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;<span class="comment">// CHSV( 70,255,255),</span></div>
-<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;<span class="comment">// CHSV( 90,255,255)</span></div>
-<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;<span class="comment">// );</span></div>
-<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;<span class="comment">// Or you can initiaize your palette with a preset color scheme:</span></div>
-<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;<span class="comment">// myPalette = RainbowStripesColors_p;</span></div>
-<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00351"></a><span class="lineno"> 351</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="l00352"></a><span class="lineno"> 352</span>&#160;<span class="comment">// &quot;ColorFromPalette(...)&quot; as shown:</span></div>
-<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="comment">// uint8_t index = /* any value 0..255 */;</span></div>
-<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="comment">// leds[i] = ColorFromPalette( myPalette, index);</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">// Even though your palette has only 16 explicily defined entries, you</span></div>
-<div class="line"><a name="l00358"></a><span class="lineno"> 358</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="l00359"></a><span class="lineno"> 359</span>&#160;<span class="comment">// be spread evenly across the 0..255 range, and the intermedate values</span></div>
-<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="comment">// will be RGB-interpolated between adjacent explicit entries.</span></div>
-<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;<span class="comment">// It&#39;s easier to use than it sounds.</span></div>
-<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;</div>
-<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="keyword">class </span><a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>;</div>
-<div class="line"><a name="l00366"></a><span class="lineno"> 366</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="l00367"></a><span class="lineno"> 367</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="l00368"></a><span class="lineno"> 368</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="l00369"></a><span class="lineno"> 369</span>&#160;<span class="keyword">typedef</span> uint32_t TProgmemRGBPalette16[16];</div>
-<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="keyword">typedef</span> uint32_t TProgmemHSVPalette16[16];</div>
-<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="preprocessor">#define TProgmemPalette16 TProgmemRGBPalette16</span></div>
-<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;</div>
-<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="comment">// Convert a 16-entry palette to a 256-entry palette</span></div>
-<div class="line"><a name="l00374"></a><span class="lineno"> 374</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="l00375"></a><span class="lineno"> 375</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="l00376"></a><span class="lineno"> 376</span>&#160;</div>
-<div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="class_c_h_s_v_palette16.html"> 377</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="l00378"></a><span class="lineno"> 378</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <a class="code" href="struct_c_h_s_v.html">CHSV</a> entries[16];</div>
-<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>() {};</div>
-<div class="line"><a name="l00381"></a><span class="lineno"> 381</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="l00382"></a><span class="lineno"> 382</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="l00383"></a><span class="lineno"> 383</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="l00384"></a><span class="lineno"> 384</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="l00385"></a><span class="lineno"> 385</span>&#160; {</div>
-<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; entries[0]=c00; entries[1]=c01; entries[2]=c02; entries[3]=c03;</div>
-<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; entries[4]=c04; entries[5]=c05; entries[6]=c06; entries[7]=c07;</div>
-<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; entries[8]=c08; entries[9]=c09; entries[10]=c10; entries[11]=c11;</div>
-<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; entries[12]=c12; entries[13]=c13; entries[14]=c14; entries[15]=c15;</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;</div>
-<div class="line"><a name="l00392"></a><span class="lineno"> 392</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="l00393"></a><span class="lineno"> 393</span>&#160; {</div>
-<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</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; <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="l00397"></a><span class="lineno"> 397</span>&#160; {</div>
-<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
-<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div>
-<div class="line"><a name="l00402"></a><span class="lineno"> 402</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="l00403"></a><span class="lineno"> 403</span>&#160; {</div>
-<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
-<div class="line"><a name="l00405"></a><span class="lineno"> 405</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="l00406"></a><span class="lineno"> 406</span>&#160; entries[i].hue = xyz.red;</div>
-<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; entries[i].sat = xyz.green;</div>
-<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; entries[i].val = xyz.blue;</div>
-<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div>
-<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; }</div>
-<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <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="l00412"></a><span class="lineno"> 412</span>&#160; {</div>
-<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
-<div class="line"><a name="l00414"></a><span class="lineno"> 414</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="l00415"></a><span class="lineno"> 415</span>&#160; entries[i].hue = xyz.red;</div>
-<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; entries[i].sat = xyz.green;</div>
-<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; entries[i].val = xyz.blue;</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> *<span class="keyword">this</span>;</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> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator[] (uint8_t x) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
-<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; {</div>
-<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> entries[x];</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> <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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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[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;</div>
-<div class="line"><a name="l00431"></a><span class="lineno"> 431</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
-<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; {</div>
-<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</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">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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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> entries[(uint8_t)x];</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; <span class="keyword">operator</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>*()</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="comment">// You can create any color palette you wish; a couple of starters</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment">// are provided: Forest, Clouds, Lava, Ocean, Rainbow, and Rainbow Stripes.</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="comment">// Palettes come in the traditional 256-entry variety, which take</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</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="l00342"></a><span class="lineno"> 342</span>&#160;<span class="comment">// variety automatically interpolates between its entries to produce</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</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="l00344"></a><span class="lineno"> 344</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;<span class="comment">// Basic operation is like this: (example shows the 16-entry variety)</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;<span class="comment">// 1. Declare your palette storage:</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="comment">// CRGBPalette16 myPalette;</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">// 2. Fill myPalette with your own 16 colors, or with a preset color scheme.</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="comment">// You can specify your 16 colors a variety of ways:</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="comment">// CRGBPalette16 myPalette(</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="comment">// CRGB::Black,</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="comment">// CRGB::Black,</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="comment">// CRGB::Red,</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="comment">// CRGB::Yellow,</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="comment">// CRGB::Green,</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="comment">// CRGB::Blue,</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="comment">// CRGB::Purple,</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;<span class="comment">// CRGB::Black,</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="comment">// 0x100000,</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;<span class="comment">// 0x200000,</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;<span class="comment">// 0x400000,</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="comment">// 0x800000,</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="comment">// CHSV( 30,255,255),</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;<span class="comment">// CHSV( 50,255,255),</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="comment">// CHSV( 70,255,255),</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="comment">// CHSV( 90,255,255)</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="comment">//</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="comment">// Or you can initiaize your palette with a preset color scheme:</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="comment">// myPalette = RainbowStripesColors_p;</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="comment">// 3. Any time you want to set a pixel to a color from your palette, use</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;<span class="comment">// &quot;ColorFromPalette(...)&quot; as shown:</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="comment">// uint8_t index = /* any value 0..255 */;</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="comment">// leds[i] = ColorFromPalette( myPalette, index);</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="comment">// Even though your palette has only 16 explicily defined entries, you</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</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="l00383"></a><span class="lineno"> 383</span>&#160;<span class="comment">// be spread evenly across the 0..255 range, and the intermedate values</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="comment">// will be RGB-interpolated between adjacent explicit entries.</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="comment">// It&#39;s easier to use than it sounds.</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="keyword">class </span><a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</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="l00391"></a><span class="lineno"> 391</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="l00392"></a><span class="lineno"> 392</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="l00393"></a><span class="lineno"> 393</span>&#160;<span class="keyword">typedef</span> uint32_t TProgmemRGBPalette16[16];</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="keyword">typedef</span> uint32_t TProgmemHSVPalette16[16];</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;<span class="preprocessor">#define TProgmemPalette16 TProgmemRGBPalette16</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;<span class="keyword">typedef</span> <span class="keyword">const</span> uint8_t TProgmemRGBGradientPalette_byte ;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<span class="keyword">typedef</span> <span class="keyword">const</span> TProgmemRGBGradientPalette_byte *TProgmemRGBGradientPalette_bytes;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;<span class="keyword">typedef</span> TProgmemRGBGradientPalette_bytes TProgmemRGBGradientPalettePtr;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="union_t_r_g_b_gradient_palette_entry_union.html"> 400</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; uint8_t index;</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; uint8_t r;</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; uint8_t g;</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; uint8_t b;</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; uint32_t dword;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; uint8_t bytes[4];</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;} <a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>;</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">typedef</span> uint8_t TDynamicRGBGradientPalette_byte ;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;<span class="keyword">typedef</span> <span class="keyword">const</span> TDynamicRGBGradientPalette_byte *TDynamicRGBGradientPalette_bytes;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;<span class="keyword">typedef</span> TDynamicRGBGradientPalette_bytes TDynamicRGBGradientPalettePtr;</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;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="comment">// Convert a 16-entry palette to a 256-entry palette</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</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="l00418"></a><span class="lineno"> 418</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="l00419"></a><span class="lineno"> 419</span>&#160;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="class_c_h_s_v_palette16.html"> 421</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="l00422"></a><span class="lineno"> 422</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <a class="code" href="struct_c_h_s_v.html">CHSV</a> entries[16];</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a>() {};</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</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="l00426"></a><span class="lineno"> 426</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="l00427"></a><span class="lineno"> 427</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="l00428"></a><span class="lineno"> 428</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="l00429"></a><span class="lineno"> 429</span>&#160; {</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; entries[0]=c00; entries[1]=c01; entries[2]=c02; entries[3]=c03;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; entries[4]=c04; entries[5]=c05; entries[6]=c06; entries[7]=c07;</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; entries[8]=c08; entries[9]=c09; entries[10]=c10; entries[11]=c11;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; entries[12]=c12; entries[13]=c13; entries[14]=c14; entries[15]=c15;</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;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</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="l00437"></a><span class="lineno"> 437</span>&#160; {</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</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>&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="l00441"></a><span class="lineno"> 441</span>&#160; {</div>
-<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">return</span> &amp;(entries[0]);</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;</div>
-<div class="line"><a name="l00445"></a><span class="lineno"> 445</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="l00446"></a><span class="lineno"> 446</span>&#160; {</div>
-<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( &amp;(entries[0]), 16, c1);</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; <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="l00450"></a><span class="lineno"> 450</span>&#160; {</div>
-<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 16, c1, c2);</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; <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="l00454"></a><span class="lineno"> 454</span>&#160; {</div>
-<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 16, c1, c2, c3);</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; <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="l00458"></a><span class="lineno"> 458</span>&#160; {</div>
-<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 16, c1, c2, c3, c4);</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;</div>
-<div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="class_c_h_s_v_palette256.html"> 464</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="l00465"></a><span class="lineno"> 465</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="struct_c_h_s_v.html">CHSV</a> entries[256];</div>
-<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>() {};</div>
-<div class="line"><a name="l00468"></a><span class="lineno"> 468</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="l00469"></a><span class="lineno"> 469</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="l00470"></a><span class="lineno"> 470</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="l00471"></a><span class="lineno"> 471</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="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_palette16.html">CHSVPalette16</a> p16(c00,c01,c02,c03,c04,c05,c06,c07,</div>
-<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; c08,c09,c10,c11,c12,c13,c14,c15);</div>
-<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; *<span class="keyword">this</span> = p16;</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; <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="l00479"></a><span class="lineno"> 479</span>&#160; {</div>
-<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</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; <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="l00483"></a><span class="lineno"> 483</span>&#160; {</div>
-<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
-<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">return</span> *<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;</div>
-<div class="line"><a name="l00488"></a><span class="lineno"> 488</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="l00489"></a><span class="lineno"> 489</span>&#160; {</div>
-<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; UpscalePalette( rhs16, *<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; <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="l00493"></a><span class="lineno"> 493</span>&#160; {</div>
-<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; UpscalePalette( rhs16, *<span class="keyword">this</span>);</div>
-<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</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="l00447"></a><span class="lineno"> 447</span>&#160; {</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> xyz = FL_PGM_READ_DWORD_NEAR( rhs + i);</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; entries[i].hue = xyz.red;</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; entries[i].sat = xyz.green;</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; entries[i].val = xyz.blue;</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; }</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</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="l00456"></a><span class="lineno"> 456</span>&#160; {</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> xyz = FL_PGM_READ_DWORD_NEAR( rhs + i);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; entries[i].hue = xyz.red;</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; entries[i].sat = xyz.green;</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; entries[i].val = xyz.blue;</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="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; }</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator[] (uint8_t x) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; {</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">return</span> entries[x];</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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="keywordflow">return</span> entries[x];</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; {</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</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; <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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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="keywordflow">return</span> entries[(uint8_t)x];</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; }</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</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="l00485"></a><span class="lineno"> 485</span>&#160; {</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">return</span> &amp;(entries[0]);</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; }</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</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="l00490"></a><span class="lineno"> 490</span>&#160; {</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( &amp;(entries[0]), 16, c1);</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_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="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="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 16, c1, c2);</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; <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="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; }</div>
-<div class="line"><a name="l00503"></a><span class="lineno"> 503</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="l00504"></a><span class="lineno"> 504</span>&#160; {</div>
-<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> p16(rhs);</div>
-<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; *<span class="keyword">this</span> = p16;</div>
-<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div>
-<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator[] (uint8_t x) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; <span class="keywordflow">return</span> entries[x];</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> <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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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[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;</div>
-<div class="line"><a name="l00519"></a><span class="lineno"> 519</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; <span class="keywordflow">return</span> entries[(uint8_t)x];</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">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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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> entries[(uint8_t)x];</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; <span class="keyword">operator</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>*()</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="keywordflow">return</span> &amp;(entries[0]);</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;</div>
-<div class="line"><a name="l00533"></a><span class="lineno"> 533</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="l00534"></a><span class="lineno"> 534</span>&#160; {</div>
-<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( &amp;(entries[0]), 256, c1);</div>
-<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div>
-<div class="line"><a name="l00537"></a><span class="lineno"> 537</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="l00538"></a><span class="lineno"> 538</span>&#160; {</div>
-<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 256, c1, c2);</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</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="l00498"></a><span class="lineno"> 498</span>&#160; {</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 16, c1, c2, c3);</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; <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="l00502"></a><span class="lineno"> 502</span>&#160; {</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 16, c1, c2, c3, c4);</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; }</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;};</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;</div>
+<div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="class_c_h_s_v_palette256.html"> 508</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="l00509"></a><span class="lineno"> 509</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <a class="code" href="struct_c_h_s_v.html">CHSV</a> entries[256];</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <a class="code" href="class_c_h_s_v_palette256.html">CHSVPalette256</a>() {};</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</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="l00513"></a><span class="lineno"> 513</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="l00514"></a><span class="lineno"> 514</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="l00515"></a><span class="lineno"> 515</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="l00516"></a><span class="lineno"> 516</span>&#160; {</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</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="l00518"></a><span class="lineno"> 518</span>&#160; c08,c09,c10,c11,c12,c13,c14,c15);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; *<span class="keyword">this</span> = p16;</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; <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="l00523"></a><span class="lineno"> 523</span>&#160; {</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <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="l00527"></a><span class="lineno"> 527</span>&#160; {</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; }</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;</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="class_c_h_s_v_palette16.html">CHSVPalette16</a>&amp; rhs16)</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; UpscalePalette( rhs16, *<span class="keyword">this</span>);</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>&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="l00537"></a><span class="lineno"> 537</span>&#160; {</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; UpscalePalette( rhs16, *<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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; <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="l00542"></a><span class="lineno"> 542</span>&#160; {</div>
-<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 256, c1, c2, c3);</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; <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="l00546"></a><span class="lineno"> 546</span>&#160; {</div>
-<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 256, c1, c2, c3, c4);</div>
-<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; }</div>
-<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;};</div>
-<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;</div>
-<div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="class_c_r_g_b_palette16.html"> 551</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="l00552"></a><span class="lineno"> 552</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> entries[16];</div>
-<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>() {};</div>
-<div class="line"><a name="l00555"></a><span class="lineno"> 555</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="l00556"></a><span class="lineno"> 556</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="l00557"></a><span class="lineno"> 557</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="l00558"></a><span class="lineno"> 558</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="l00541"></a><span class="lineno"> 541</span>&#160;</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</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="l00543"></a><span class="lineno"> 543</span>&#160; {</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> p16(rhs);</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; *<span class="keyword">this</span> = p16;</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; }</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</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="l00548"></a><span class="lineno"> 548</span>&#160; {</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> p16(rhs);</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; *<span class="keyword">this</span> = p16;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>&amp; operator[] (uint8_t x) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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="keywordflow">return</span> entries[x];</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="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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; entries[0]=c00; entries[1]=c01; entries[2]=c02; entries[3]=c03;</div>
-<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; entries[4]=c04; entries[5]=c05; entries[6]=c06; entries[7]=c07;</div>
-<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; entries[8]=c08; entries[9]=c09; entries[10]=c10; entries[11]=c11;</div>
-<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; entries[12]=c12; entries[13]=c13; entries[14]=c14; entries[15]=c15;</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;</div>
-<div class="line"><a name="l00566"></a><span class="lineno"> 566</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="l00567"></a><span class="lineno"> 567</span>&#160; {</div>
-<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</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; <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="l00571"></a><span class="lineno"> 571</span>&#160; {</div>
-<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
-<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div>
-<div class="line"><a name="l00576"></a><span class="lineno"> 576</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="l00577"></a><span class="lineno"> 577</span>&#160; {</div>
-<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
-<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; entries[i] = rhs.entries[i]; <span class="comment">// implicit HSV-to-RGB conversion</span></div>
-<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; }</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; <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="l00583"></a><span class="lineno"> 583</span>&#160; {</div>
-<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
-<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; entries[i] = rhs.entries[i]; <span class="comment">// implicit HSV-to-RGB conversion</span></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">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordflow">return</span> entries[x];</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;</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; {</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</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; <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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; {</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</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;</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</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="l00573"></a><span class="lineno"> 573</span>&#160; {</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">return</span> &amp;(entries[0]);</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_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="l00578"></a><span class="lineno"> 578</span>&#160; {</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( &amp;(entries[0]), 256, c1);</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; }</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</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="l00582"></a><span class="lineno"> 582</span>&#160; {</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 256, c1, c2);</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_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="l00586"></a><span class="lineno"> 586</span>&#160; {</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 256, c1, c2, c3);</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; }</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; <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="l00591"></a><span class="lineno"> 591</span>&#160; {</div>
-<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
-<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; entries[i] = pgm_read_dword_near( rhs + i);</div>
-<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div>
-<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; }</div>
-<div class="line"><a name="l00596"></a><span class="lineno"> 596</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="l00597"></a><span class="lineno"> 597</span>&#160; {</div>
-<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
-<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; entries[i] = pgm_read_dword_near( rhs + i);</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> *<span class="keyword">this</span>;</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;</div>
-<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator[] (uint8_t x) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
-<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; {</div>
-<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">return</span> entries[x];</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> <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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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[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;</div>
-<div class="line"><a name="l00613"></a><span class="lineno"> 613</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; <span class="keywordflow">return</span> entries[(uint8_t)x];</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> <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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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> entries[(uint8_t)x];</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">operator</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>*()</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> &amp;(entries[0]);</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</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="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="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 256, c1, c2, c3, c4);</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;};</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;</div>
+<div class="line"><a name="l00595"></a><span class="lineno"><a class="line" href="class_c_r_g_b_palette16.html"> 595</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="l00596"></a><span class="lineno"> 596</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> entries[16];</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>() {};</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</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="l00600"></a><span class="lineno"> 600</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="l00601"></a><span class="lineno"> 601</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="l00602"></a><span class="lineno"> 602</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="l00603"></a><span class="lineno"> 603</span>&#160; {</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; entries[0]=c00; entries[1]=c01; entries[2]=c02; entries[3]=c03;</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; entries[4]=c04; entries[5]=c05; entries[6]=c06; entries[7]=c07;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; entries[8]=c08; entries[9]=c09; entries[10]=c10; entries[11]=c11;</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; entries[12]=c12; entries[13]=c13; entries[14]=c14; entries[15]=c15;</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; };</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</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="l00611"></a><span class="lineno"> 611</span>&#160; {</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</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; <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="l00615"></a><span class="lineno"> 615</span>&#160; {</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; }</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</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="l00621"></a><span class="lineno"> 621</span>&#160; {</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; entries[i] = rhs.entries[i]; <span class="comment">// implicit HSV-to-RGB conversion</span></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; }</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; <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="l00628"></a><span class="lineno"> 628</span>&#160; {</div>
-<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( &amp;(entries[0]), 16, c1);</div>
-<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; }</div>
-<div class="line"><a name="l00631"></a><span class="lineno"> 631</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="l00632"></a><span class="lineno"> 632</span>&#160; {</div>
-<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 16, c1, c2);</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; <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="l00636"></a><span class="lineno"> 636</span>&#160; {</div>
-<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 16, c1, c2, c3);</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_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="l00640"></a><span class="lineno"> 640</span>&#160; {</div>
-<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 16, c1, c2, c3, c4);</div>
-<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; }</div>
-<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;</div>
-<div class="line"><a name="l00644"></a><span class="lineno"> 644</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="l00645"></a><span class="lineno"> 645</span>&#160; {</div>
-<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( &amp;(entries[0]), 16, c1);</div>
-<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; }</div>
-<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <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="l00626"></a><span class="lineno"> 626</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="l00627"></a><span class="lineno"> 627</span>&#160; {</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; entries[i] = rhs.entries[i]; <span class="comment">// implicit HSV-to-RGB conversion</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; }</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; }</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> TProgmemRGBPalette16&amp; rhs)</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; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; entries[i] = FL_PGM_READ_DWORD_NEAR( rhs + i);</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; }</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; }</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <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="l00641"></a><span class="lineno"> 641</span>&#160; {</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">for</span>( uint8_t i = 0; i &lt; 16; i++) {</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; entries[i] = FL_PGM_READ_DWORD_NEAR( rhs + i);</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="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator[] (uint8_t x) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; fill_gradient_RGB( &amp;(entries[0]), 16, c1, c2);</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">return</span> entries[x];</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; <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="l00652"></a><span class="lineno"> 652</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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; fill_gradient_RGB( &amp;(entries[0]), 16, c1, c2, c3);</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">return</span> entries[x];</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; <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="l00657"></a><span class="lineno"> 657</span>&#160; {</div>
-<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 16, c1, c2, c3, c4);</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;</div>
-<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;</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;</div>
-<div class="line"><a name="l00664"></a><span class="lineno"><a class="line" href="class_c_r_g_b_palette256.html"> 664</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="l00665"></a><span class="lineno"> 665</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> entries[256];</div>
-<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>() {};</div>
-<div class="line"><a name="l00668"></a><span class="lineno"> 668</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="l00669"></a><span class="lineno"> 669</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="l00670"></a><span class="lineno"> 670</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="l00671"></a><span class="lineno"> 671</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="l00656"></a><span class="lineno"> 656</span>&#160;</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; {</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; }</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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> entries[(uint8_t)x];</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keyword">operator</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>*()</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; <span class="keywordflow">return</span> &amp;(entries[0]);</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</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; <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="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_palette16.html">CRGBPalette16</a> p16(c00,c01,c02,c03,c04,c05,c06,c07,</div>
-<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; c08,c09,c10,c11,c12,c13,c14,c15);</div>
-<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; *<span class="keyword">this</span> = p16;</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;</div>
-<div class="line"><a name="l00678"></a><span class="lineno"> 678</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="l00679"></a><span class="lineno"> 679</span>&#160; {</div>
-<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</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; <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="l00683"></a><span class="lineno"> 683</span>&#160; {</div>
-<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
-<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( &amp;(entries[0]), 16, c1);</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; <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="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="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 16, c1, c2);</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; <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="l00680"></a><span class="lineno"> 680</span>&#160; {</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 16, c1, c2, c3);</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_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="l00684"></a><span class="lineno"> 684</span>&#160; {</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 16, c1, c2, c3, c4);</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; }</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;</div>
-<div class="line"><a name="l00688"></a><span class="lineno"> 688</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="l00688"></a><span class="lineno"> 688</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="l00689"></a><span class="lineno"> 689</span>&#160; {</div>
-<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; 256; i++) {</div>
-<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; entries[i] = rhs.entries[i]; <span class="comment">// implicit HSV-to-RGB conversion</span></div>
-<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; }</div>
-<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; }</div>
-<div class="line"><a name="l00694"></a><span class="lineno"> 694</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="l00695"></a><span class="lineno"> 695</span>&#160; {</div>
-<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; 256; i++) {</div>
-<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; entries[i] = rhs.entries[i]; <span class="comment">// implicit HSV-to-RGB conversion</span></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; <span class="keywordflow">return</span> *<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;</div>
-<div class="line"><a name="l00702"></a><span class="lineno"> 702</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="l00703"></a><span class="lineno"> 703</span>&#160; {</div>
-<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; UpscalePalette( rhs16, *<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; <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="l00707"></a><span class="lineno"> 707</span>&#160; {</div>
-<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; UpscalePalette( rhs16, *<span class="keyword">this</span>);</div>
-<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
-<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; }</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>( <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; }</div>
-<div class="line"><a name="l00717"></a><span class="lineno"> 717</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="l00718"></a><span class="lineno"> 718</span>&#160; {</div>
-<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> p16(rhs);</div>
-<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; *<span class="keyword">this</span> = p16;</div>
-<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
-<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; }</div>
-<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;</div>
-<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator[] (uint8_t x) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; <span class="keywordflow">return</span> entries[x];</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> <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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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[x];</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( &amp;(entries[0]), 16, c1);</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; }</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <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="l00693"></a><span class="lineno"> 693</span>&#160; {</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 16, c1, c2);</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; <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="l00697"></a><span class="lineno"> 697</span>&#160; {</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 16, c1, c2, c3);</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; }</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</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="l00701"></a><span class="lineno"> 701</span>&#160; {</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 16, c1, c2, c3, c4);</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; }</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>( TProgmemRGBGradientPalette_bytes progpal )</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; {</div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; *<span class="keyword">this</span> = progpal;</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>&amp; operator=( TProgmemRGBGradientPalette_bytes progpal )</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; {</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>* progent = (<a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>*)(progpal);</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a> u;</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; u.dword = FL_PGM_READ_DWORD_NEAR( progent);</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> rgbstart( u.r, u.g, u.b);</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; <span class="keywordtype">int</span> indexstart = 0;</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; uint8_t istart8 = 0;</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; uint8_t iend8 = 0;</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">while</span>( indexstart &lt; 255) {</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; progent++;</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; u.dword = FL_PGM_READ_DWORD_NEAR( progent);</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordtype">int</span> indexend = u.index;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> rgbend( u.r, u.g, u.b);</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; istart8 = indexstart / 16;</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; iend8 = indexend / 16;</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; fill_gradient_RGB( &amp;(entries[0]), istart8, rgbstart, iend8, rgbend);</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; indexstart = indexend;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; rgbstart = rgbend;</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> *<span class="keyword">this</span>;</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;</div>
-<div class="line"><a name="l00733"></a><span class="lineno"> 733</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
-<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; {</div>
-<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</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">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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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> entries[(uint8_t)x];</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; <span class="keyword">operator</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>*()</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="keywordflow">return</span> &amp;(entries[0]);</div>
-<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; }</div>
-<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;</div>
-<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <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="l00748"></a><span class="lineno"> 748</span>&#160; {</div>
-<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( &amp;(entries[0]), 256, c1);</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; <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="l00752"></a><span class="lineno"> 752</span>&#160; {</div>
-<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 256, c1, c2);</div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; loadDynamicGradientPalette( TDynamicRGBGradientPalette_bytes gpal )</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; <a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>* ent = (<a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>*)(gpal);</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a> u;</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; u = *ent;</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> rgbstart( u.r, u.g, u.b);</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="keywordtype">int</span> indexstart = 0;</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; uint8_t istart8 = 0;</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; uint8_t iend8 = 0;</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordflow">while</span>( indexstart &lt; 255) {</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; ent++;</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; u = *ent;</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordtype">int</span> indexend = u.index;</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> rgbend( u.r, u.g, u.b);</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; istart8 = indexstart / 16;</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; iend8 = indexend / 16;</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; fill_gradient_RGB( &amp;(entries[0]), istart8, rgbstart, iend8, rgbend);</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; indexstart = indexend;</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; rgbstart = rgbend;</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; }</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; }</div>
-<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <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="l00756"></a><span class="lineno"> 756</span>&#160; {</div>
-<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 256, c1, c2, c3);</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_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="l00760"></a><span class="lineno"> 760</span>&#160; {</div>
-<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 256, c1, c2, c3, c4);</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;</div>
-<div class="line"><a name="l00764"></a><span class="lineno"> 764</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="l00765"></a><span class="lineno"> 765</span>&#160; {</div>
-<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( &amp;(entries[0]), 256, c1);</div>
-<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; }</div>
-<div class="line"><a name="l00768"></a><span class="lineno"> 768</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="l00769"></a><span class="lineno"> 769</span>&#160; {</div>
-<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 256, c1, c2);</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; <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="l00755"></a><span class="lineno"> 755</span>&#160;</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;</div>
+<div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="class_c_r_g_b_palette256.html"> 758</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="l00759"></a><span class="lineno"> 759</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> entries[256];</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>() {};</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</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="l00763"></a><span class="lineno"> 763</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="l00764"></a><span class="lineno"> 764</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="l00765"></a><span class="lineno"> 765</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="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_palette16.html">CRGBPalette16</a> p16(c00,c01,c02,c03,c04,c05,c06,c07,</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; c08,c09,c10,c11,c12,c13,c14,c15);</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; *<span class="keyword">this</span> = p16;</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; };</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</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="l00773"></a><span class="lineno"> 773</span>&#160; {</div>
-<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 256, c1, c2, c3);</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</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; <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="l00776"></a><span class="lineno"> 776</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="l00777"></a><span class="lineno"> 777</span>&#160; {</div>
-<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 256, c1, c2, c3, c4);</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;};</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;</div>
-<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;</div>
-<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;</div>
-<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> { NOBLEND=0, BLEND=1 } TBlendType;</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_palette16.html">CRGBPalette16</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=BLEND);</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_r_g_b.html">CRGB</a> ColorFromPalette( <span class="keyword">const</span> TProgmemRGBPalette16&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_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="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;<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="l00804"></a><span class="lineno"> 804</span>&#160; uint8_t index,</div>
-<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; uint8_t brightness=255,</div>
-<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; TBlendType blendType=BLEND);</div>
-<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;</div>
-<div class="line"><a name="l00808"></a><span class="lineno"> 808</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="l00809"></a><span class="lineno"> 809</span>&#160; uint8_t index,</div>
-<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; uint8_t brightness=255,</div>
-<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; TBlendType blendType=NOBLEND );</div>
-<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;</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="comment">// Fill a range of LEDs with a sequece of entryies from a palette</span></div>
-<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> PALETTE&gt;</div>
-<div class="line"><a name="l00816"></a><span class="lineno"> 816</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="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keyword">const</span> PALETTE&amp; pal, uint8_t brightness, TBlendType blendType)</div>
-<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;{</div>
-<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; uint8_t colorIndex = startIndex;</div>
-<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordflow">for</span>( uint16_t i = 0; i &lt; N; i++) {</div>
-<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; L[i] = ColorFromPalette( pal, colorIndex, brightness, blendType);</div>
-<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; colorIndex += incIndex;</div>
-<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; }</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;</div>
-<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> PALETTE&gt;</div>
-<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;<span class="keywordtype">void</span> map_data_into_colors_through_palette(</div>
-<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; uint8_t *dataArray, uint16_t dataCount,</div>
-<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a>* targetColorArray,</div>
-<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keyword">const</span> PALETTE&amp; pal,</div>
-<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; uint8_t brightness=255,</div>
-<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; uint8_t opacity=255,</div>
-<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; TBlendType blendType=BLEND)</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; <span class="keywordflow">for</span>( uint16_t i = 0; i &lt; dataCount; i++) {</div>
-<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; uint8_t d = dataArray[i];</div>
-<div class="line"><a name="l00837"></a><span class="lineno"> 837</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="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">if</span>( opacity == 255 ) {</div>
-<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; targetColorArray[i] = rgb;</div>
-<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; targetColorArray[i].nscale8( 256 - opacity);</div>
-<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; rgb.nscale8_video( opacity);</div>
-<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; targetColorArray[i] += rgb;</div>
-<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; }</div>
-<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; }</div>
-<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;}</div>
-<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160;</div>
-<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;<span class="comment">// nblendPaletteTowardPalette:</span></div>
-<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160;<span class="comment">// Alter one palette by making it slightly more like</span></div>
-<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160;<span class="comment">// a &#39;target palette&#39;, used for palette cross-fades.</span></div>
-<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;<span class="comment">// It does this by comparing each of the R, G, and B channels</span></div>
-<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160;<span class="comment">// of each entry in the current palette to the corresponding</span></div>
-<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160;<span class="comment">// entry in the target palette and making small adjustments:</span></div>
-<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160;<span class="comment">// If the Red channel is too low, it will be increased.</span></div>
-<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;<span class="comment">// If the Red channel is too high, it will be slightly reduced.</span></div>
-<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;<span class="comment">// ... and likewise for Green and Blue channels.</span></div>
-<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160;<span class="comment">// Additionally, there are two significant visual improvements</span></div>
-<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;<span class="comment">// to this algorithm implemented here. First is this:</span></div>
-<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160;<span class="comment">// When increasing a channel, it is stepped up by ONE.</span></div>
-<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;<span class="comment">// When decreasing a channel, it is stepped down by TWO.</span></div>
-<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;<span class="comment">// Due to the way the eye perceives light, and the way colors</span></div>
-<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;<span class="comment">// are represented in RGB, this produces a more uniform apparent</span></div>
-<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;<span class="comment">// brightness when cross-fading between most palette colors.</span></div>
-<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160;<span class="comment">// The second visual tweak is limiting the number of changes</span></div>
-<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;<span class="comment">// that will be made to the palette at once. If all the palette</span></div>
-<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;<span class="comment">// entries are changed at once, it can give a muddled appearance.</span></div>
-<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;<span class="comment">// However, if only a few palette entries are changed at once,</span></div>
-<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160;<span class="comment">// you get a visually smoother transition: in the middle of the</span></div>
-<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160;<span class="comment">// cross-fade your current palette will actually contain some</span></div>
-<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160;<span class="comment">// colors from the old palette, a few blended colors, and some</span></div>
-<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160;<span class="comment">// colors from the new palette.</span></div>
-<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;<span class="comment">// The maximum number of possible palette changes per call</span></div>
-<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;<span class="comment">// is 48 (sixteen color entries time three channels each).</span></div>
-<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160;<span class="comment">// The default &#39;maximim number of changes&#39; here is 12, meaning</span></div>
-<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160;<span class="comment">// that only approximately a quarter of the palette entries</span></div>
-<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160;<span class="comment">// will be changed per call.</span></div>
-<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160;<span class="keywordtype">void</span> nblendPaletteTowardPalette( <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; currentPalette,</div>
-<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; targetPalette,</div>
-<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; uint8_t maxChanges=24);</div>
-<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160;</div>
-<div class="line"><a name="l00885"></a><span class="lineno"> 885</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:464</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:551</div></div>
-<div class="ttc" id="group___colorutils_html_gafcc7dac88e25736ebc49a9faf2a1c2e2"><div class="ttname"><a href="group___colorutils.html#gafcc7dac88e25736ebc49a9faf2a1c2e2">fill_rainbow</a></div><div class="ttdeci">void fill_rainbow(struct CRGB *pFirstLED, int numToFill, uint8_t initialhue, uint8_t deltahue=5)</div><div class="ttdoc">fill_rainbow - fill a range of LEDs with a rainbow of colors, at full saturation and full value (brig...</div><div class="ttdef"><b>Definition:</b> colorutils.cpp:34</div></div>
-<div class="ttc" id="group___colorutils_html_ga3144bb2bb66aeed33e20f4fdd6cc1a98"><div class="ttname"><a href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a></div><div class="ttdeci">void fill_gradient(T *targetArray, uint16_t startpos, CHSV startcolor, uint16_t endpos, CHSV endcolor, TGradientDirectionCode directionCode=SHORTEST_HUES)</div><div class="ttdoc">fill_gradient - fill an array of colors with a smooth HSV gradient between two specified HSV colors...</div><div class="ttdef"><b>Definition:</b> colorutils.h:65</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:377</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:664</div></div>
-<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void swapbits8(bitswap_type in</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> delay.h:79</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 class="ttc" id="group___colorutils_html_gac84d8820fd175567ba66413dfb8bc63b"><div class="ttname"><a href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a></div><div class="ttdeci">void fill_solid(struct CRGB *leds, int numToFill, const struct CRGB &amp;color)</div><div class="ttdoc">fill_solid - fill a range of LEDs with a solid color Example: fill_solid( leds, NUM_LEDS, CRGB(50,0,200)); </div><div class="ttdef"><b>Definition:</b> colorutils.cpp:11</div></div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; memmove8( &amp;(entries[0]), &amp;(rhs.entries[0]), <span class="keyword">sizeof</span>( entries));</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</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="l00783"></a><span class="lineno"> 783</span>&#160; {</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; 256; i++) {</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; entries[i] = rhs.entries[i]; <span class="comment">// implicit HSV-to-RGB conversion</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; }</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; }</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</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="l00789"></a><span class="lineno"> 789</span>&#160; {</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i = 0; i &lt; 256; i++) {</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; entries[i] = rhs.entries[i]; <span class="comment">// implicit HSV-to-RGB conversion</span></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; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; }</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</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="l00797"></a><span class="lineno"> 797</span>&#160; {</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; UpscalePalette( rhs16, *<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; }</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</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="l00801"></a><span class="lineno"> 801</span>&#160; {</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; UpscalePalette( rhs16, *<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; }</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</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="l00807"></a><span class="lineno"> 807</span>&#160; {</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> p16(rhs);</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; *<span class="keyword">this</span> = p16;</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; <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="l00812"></a><span class="lineno"> 812</span>&#160; {</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> p16(rhs);</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; *<span class="keyword">this</span> = p16;</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; }</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator[] (uint8_t x) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; {</div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordflow">return</span> entries[x];</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; }</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; {</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keywordflow">return</span> entries[x];</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; <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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; {</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; }</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; {</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="keywordflow">return</span> entries[(uint8_t)x];</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; <span class="keyword">operator</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>*()</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="keywordflow">return</span> &amp;(entries[0]);</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; }</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160;</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</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="l00842"></a><span class="lineno"> 842</span>&#160; {</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( &amp;(entries[0]), 256, c1);</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; }</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</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="l00846"></a><span class="lineno"> 846</span>&#160; {</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 256, c1, c2);</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; <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="l00850"></a><span class="lineno"> 850</span>&#160; {</div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 256, c1, c2, c3);</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; }</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</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="l00854"></a><span class="lineno"> 854</span>&#160; {</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <a class="code" href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a>( &amp;(entries[0]), 256, c1, c2, c3, c4);</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;</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</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="l00859"></a><span class="lineno"> 859</span>&#160; {</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <a class="code" href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a>( &amp;(entries[0]), 256, c1);</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; }</div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</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="l00863"></a><span class="lineno"> 863</span>&#160; {</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 256, c1, c2);</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; }</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</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="l00867"></a><span class="lineno"> 867</span>&#160; {</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 256, c1, c2, c3);</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; }</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</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="l00871"></a><span class="lineno"> 871</span>&#160; {</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; fill_gradient_RGB( &amp;(entries[0]), 256, c1, c2, c3, c4);</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;</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>( TProgmemRGBGradientPalette_bytes progpal )</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; {</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; *<span class="keyword">this</span> = progpal;</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; }</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>&amp; operator=( TProgmemRGBGradientPalette_bytes progpal )</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; {</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>* progent = (<a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>*)(progpal);</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a> u;</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; u.dword = FL_PGM_READ_DWORD_NEAR( progent);</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> rgbstart( u.r, u.g, u.b);</div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; </div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordtype">int</span> indexstart = 0;</div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="keywordflow">while</span>( indexstart &lt; 255) {</div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; progent++;</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; u.dword = FL_PGM_READ_DWORD_NEAR( progent);</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="keywordtype">int</span> indexend = u.index;</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> rgbend( u.r, u.g, u.b);</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; fill_gradient_RGB( &amp;(entries[0]), indexstart, rgbstart, indexend, rgbend);</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; indexstart = indexend;</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; rgbstart = rgbend;</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; }</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; }</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <a class="code" href="class_c_r_g_b_palette256.html">CRGBPalette256</a>&amp; loadDynamicGradientPalette( TDynamicRGBGradientPalette_bytes gpal )</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; <a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>* ent = (<a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a>*)(gpal);</div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <a class="code" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a> u;</div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; u = *ent;</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> rgbstart( u.r, u.g, u.b);</div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; </div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="keywordtype">int</span> indexstart = 0;</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; <span class="keywordflow">while</span>( indexstart &lt; 255) {</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; ent++;</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; u = *ent;</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="keywordtype">int</span> indexend = u.index;</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> rgbend( u.r, u.g, u.b);</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; fill_gradient_RGB( &amp;(entries[0]), indexstart, rgbstart, indexend, rgbend);</div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; indexstart = indexend;</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; rgbstart = rgbend;</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; }</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; }</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;};</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160;</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;</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160;</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> { NOBLEND=0, LINEARBLEND=1 } TBlendType;</div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160;</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</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="l00925"></a><span class="lineno"> 925</span>&#160; uint8_t index,</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; uint8_t brightness=255,</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; TBlendType blendType=LINEARBLEND);</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;<a class="code" href="struct_c_r_g_b.html">CRGB</a> ColorFromPalette( <span class="keyword">const</span> TProgmemRGBPalette16&amp; pal,</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; uint8_t index,</div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; uint8_t brightness=255,</div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; TBlendType blendType=LINEARBLEND);</div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160;</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</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="l00935"></a><span class="lineno"> 935</span>&#160; uint8_t index,</div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; uint8_t brightness=255,</div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; TBlendType blendType=NOBLEND );</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160;</div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</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="l00940"></a><span class="lineno"> 940</span>&#160; uint8_t index,</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; uint8_t brightness=255,</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; TBlendType blendType=LINEARBLEND);</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;</div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</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="l00945"></a><span class="lineno"> 945</span>&#160; uint8_t index,</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; uint8_t brightness=255,</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; TBlendType blendType=NOBLEND );</div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160;</div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160;</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</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="l00951"></a><span class="lineno"> 951</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> PALETTE&gt;</div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</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="l00953"></a><span class="lineno"> 953</span>&#160; <span class="keyword">const</span> PALETTE&amp; pal, uint8_t brightness, TBlendType blendType)</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; uint8_t colorIndex = startIndex;</div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="keywordflow">for</span>( uint16_t i = 0; i &lt; N; i++) {</div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; L[i] = ColorFromPalette( pal, colorIndex, brightness, blendType);</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; colorIndex += incIndex;</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="keyword">template</span> &lt;<span class="keyword">typename</span> PALETTE&gt;</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;<span class="keywordtype">void</span> map_data_into_colors_through_palette(</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; uint8_t *dataArray, uint16_t dataCount,</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a>* targetColorArray,</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keyword">const</span> PALETTE&amp; pal,</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; uint8_t brightness=255,</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; uint8_t opacity=255,</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; TBlendType blendType=LINEARBLEND)</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160;{</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="keywordflow">for</span>( uint16_t i = 0; i &lt; dataCount; i++) {</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; uint8_t d = dataArray[i];</div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</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="l00974"></a><span class="lineno"> 974</span>&#160; <span class="keywordflow">if</span>( opacity == 255 ) {</div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; targetColorArray[i] = rgb;</div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; targetColorArray[i].nscale8( 256 - opacity);</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; rgb.nscale8_video( opacity);</div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; targetColorArray[i] += rgb;</div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; }</div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; }</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160;}</div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;</div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160;<span class="comment">// nblendPaletteTowardPalette:</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160;<span class="comment">// Alter one palette by making it slightly more like</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160;<span class="comment">// a &#39;target palette&#39;, used for palette cross-fades.</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160;<span class="comment">// It does this by comparing each of the R, G, and B channels</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160;<span class="comment">// of each entry in the current palette to the corresponding</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160;<span class="comment">// entry in the target palette and making small adjustments:</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160;<span class="comment">// If the Red channel is too low, it will be increased.</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160;<span class="comment">// If the Red channel is too high, it will be slightly reduced.</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;<span class="comment">// ... and likewise for Green and Blue channels.</span></div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160;<span class="comment">// Additionally, there are two significant visual improvements</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160;<span class="comment">// to this algorithm implemented here. First is this:</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160;<span class="comment">// When increasing a channel, it is stepped up by ONE.</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;<span class="comment">// When decreasing a channel, it is stepped down by TWO.</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;<span class="comment">// Due to the way the eye perceives light, and the way colors</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;<span class="comment">// are represented in RGB, this produces a more uniform apparent</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="comment">// brightness when cross-fading between most palette colors.</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;<span class="comment">// The second visual tweak is limiting the number of changes</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;<span class="comment">// that will be made to the palette at once. If all the palette</span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;<span class="comment">// entries are changed at once, it can give a muddled appearance.</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;<span class="comment">// However, if only a few palette entries are changed at once,</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;<span class="comment">// you get a visually smoother transition: in the middle of the</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;<span class="comment">// cross-fade your current palette will actually contain some</span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="comment">// colors from the old palette, a few blended colors, and some</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;<span class="comment">// colors from the new palette.</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;<span class="comment">// The maximum number of possible palette changes per call</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;<span class="comment">// is 48 (sixteen color entries time three channels each).</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;<span class="comment">// The default &#39;maximim number of changes&#39; here is 12, meaning</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;<span class="comment">// that only approximately a quarter of the palette entries</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="comment">// will be changed per call.</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;<span class="keywordtype">void</span> nblendPaletteTowardPalette( <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; currentPalette,</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <a class="code" href="class_c_r_g_b_palette16.html">CRGBPalette16</a>&amp; targetPalette,</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; uint8_t maxChanges=24);</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;<span class="comment">// You can also define a static RGB palette very compactly in terms of a series</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;<span class="comment">// of connected color gradients.</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;<span class="comment">// For example, if you want the first 3/4ths of the palette to be a slow</span></div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;<span class="comment">// gradient ramping from black to red, and then the remaining 1/4 of the</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;<span class="comment">// palette to be a quicker ramp to white, you specify just three points: the</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;<span class="comment">// starting black point (at index 0), the red midpoint (at index 192),</span></div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;<span class="comment">// and the final white point (at index 255). It looks like this:</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">// index: 0 192 255</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;<span class="comment">// |----------r-r-r-rrrrrrrrRrRrRrRrRRRR-|-RRWRWWRWWW-|</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;<span class="comment">// color: (0,0,0) (255,0,0) (255,255,255)</span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;<span class="comment">// Here&#39;s how you&#39;d define that gradient palette:</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;<span class="comment">// DEFINE_GRADIENT_PALETTE( black_to_red_to_white_p ) {</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;<span class="comment">// 0, 0, 0, 0, /* at index 0, black(0,0,0) */</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;<span class="comment">// 192, 255, 0, 0, /* at index 192, red(255,0,0) */</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;<span class="comment">// 255, 255,255,255 /* at index 255, white(255,255,255) */</span></div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;<span class="comment">// };</span></div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;<span class="comment">// This format is designed for compact storage. The example palette here</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;<span class="comment">// takes up just 12 bytes of PROGMEM (flash) storage, and zero bytes</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;<span class="comment">// of SRAM when not currently in use.</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;<span class="comment">// To use one of these gradient palettes, simply assign it into a</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;<span class="comment">// CRGBPalette16 or a CRGBPalette256, like this:</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;<span class="comment">// CRGBPalette16 pal = black_to_red_to_white_p;</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">// When the assignment is made, the gradients are expanded out into</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;<span class="comment">// either 16 or 256 palette entries, depending on the kind of palette</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;<span class="comment">// object they&#39;re assigned to.</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">// IMPORTANT NOTES &amp; CAVEATS:</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;<span class="comment">// - The last &#39;index&#39; position MUST BE 255! Failure to end with</span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;<span class="comment">// index 255 will result in program hangs or crashes.</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;<span class="comment">// - At this point, these gradient palette definitions MUST BE</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;<span class="comment">// stored in PROGMEM on AVR-based Arduinos. If you use the</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;<span class="comment">// DEFINE_GRADIENT_PALETTE macro, this is taken care of automatically.</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;<span class="comment">//</span></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;<span class="preprocessor">#define DEFINE_GRADIENT_PALETTE(X) \</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;<span class="preprocessor"> extern const TProgmemRGBGradientPalette_byte X[] FL_PROGMEM =</span></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;</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="comment">// Functions to apply gamma adjustments, either:</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;<span class="comment">// - a single gamma adjustment to a single scalar value,</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="comment">// - a single gamma adjustment to each channel of a CRGB color, or</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="comment">// - different gamma adjustments for each channel of a CRFB color.</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;<span class="comment">// Note that the gamma is specified as a traditional floating point value</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;<span class="comment">// e.g., &quot;2.5&quot;, and as such these functions should not be called in</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="comment">// your innermost pixel loops, or in animations that are extremely</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;<span class="comment">// low on program storage space. Nevertheless, if you need these</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;<span class="comment">// functions, here they are.</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;<span class="comment">// Furthermore, bear in mind that CRGB leds have only eight bits</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;<span class="comment">// per channel of color resolution, and that very small, subtle shadings</span></div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;<span class="comment">// may not be visible.</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;uint8_t applyGamma_video( uint8_t brightness, <span class="keywordtype">float</span> gamma);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;<a class="code" href="struct_c_r_g_b.html">CRGB</a> applyGamma_video( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; orig, <span class="keywordtype">float</span> gamma);</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;<a class="code" href="struct_c_r_g_b.html">CRGB</a> applyGamma_video( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; orig, <span class="keywordtype">float</span> gammaR, <span class="keywordtype">float</span> gammaG, <span class="keywordtype">float</span> gammaB);</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;<span class="comment">// The &quot;n&quot; versions below modify their arguments in-place.</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;<a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; napplyGamma_video( <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rgb, <span class="keywordtype">float</span> gamma);</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;<a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; napplyGamma_video( <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rgb, <span class="keywordtype">float</span> gammaR, <span class="keywordtype">float</span> gammaG, <span class="keywordtype">float</span> gammaB);</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;<span class="keywordtype">void</span> napplyGamma_video( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* rgbarray, uint16_t count, <span class="keywordtype">float</span> gamma);</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;<span class="keywordtype">void</span> napplyGamma_video( <a class="code" href="struct_c_r_g_b.html">CRGB</a>* rgbarray, uint16_t count, <span class="keywordtype">float</span> gammaR, <span class="keywordtype">float</span> gammaG, <span class="keywordtype">float</span> gammaB);</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;</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;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</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:83</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:508</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:595</div></div>
+<div class="ttc" id="group___colorutils_html_gafcc7dac88e25736ebc49a9faf2a1c2e2"><div class="ttname"><a href="group___colorutils.html#gafcc7dac88e25736ebc49a9faf2a1c2e2">fill_rainbow</a></div><div class="ttdeci">void fill_rainbow(struct CRGB *pFirstLED, int numToFill, uint8_t initialhue, uint8_t deltahue=5)</div><div class="ttdoc">fill_rainbow - fill a range of LEDs with a rainbow of colors, at full saturation and full value (brig...</div><div class="ttdef"><b>Definition:</b> colorutils.cpp:35</div></div>
+<div class="ttc" id="group___colorutils_html_ga3144bb2bb66aeed33e20f4fdd6cc1a98"><div class="ttname"><a href="group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98">fill_gradient</a></div><div class="ttdeci">void fill_gradient(T *targetArray, uint16_t startpos, CHSV startcolor, uint16_t endpos, CHSV endcolor, TGradientDirectionCode directionCode=SHORTEST_HUES)</div><div class="ttdoc">fill_gradient - fill an array of colors with a smooth HSV gradient between two specified HSV colors...</div><div class="ttdef"><b>Definition:</b> colorutils.h:89</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:421</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:758</div></div>
+<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void swapbits8(bitswap_type in</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> fastled_delay.h:82</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:18</div></div>
+<div class="ttc" id="group___colorutils_html_gac84d8820fd175567ba66413dfb8bc63b"><div class="ttname"><a href="group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b">fill_solid</a></div><div class="ttdeci">void fill_solid(struct CRGB *leds, int numToFill, const struct CRGB &amp;color)</div><div class="ttdoc">fill_solid - fill a range of LEDs with a solid color Example: fill_solid( leds, NUM_LEDS, CRGB(50,0,200)); </div><div class="ttdef"><b>Definition:</b> colorutils.cpp:12</div></div>
+<div class="ttc" id="union_t_r_g_b_gradient_palette_entry_union_html"><div class="ttname"><a href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a></div><div class="ttdef"><b>Definition:</b> colorutils.h:400</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/controller_8h_source.html b/docs/3.1/controller_8h_source.html
index 544ea622..64f5b51d 100644
--- a/docs/3.1/controller_8h_source.html
+++ b/docs/3.1/controller_8h_source.html
@@ -94,563 +94,570 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="l00008"></a><span class="lineno"> 8</span>&#160;FASTLED_NAMESPACE_BEGIN</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 RO(X) RGB_BYTE(RGB_ORDER, X)</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</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="l00012"></a><span class="lineno"> 12</span>&#160;</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#define RGB_BYTE0(RO) ((RO&gt;&gt;6) &amp; 0x3)</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#define RGB_BYTE1(RO) ((RO&gt;&gt;3) &amp; 0x3)</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#define RGB_BYTE2(RO) ((RO) &amp; 0x3)</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="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">// operator byte *(struct CRGB[] arr) { return (byte*)arr; }</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">#define DISABLE_DITHER 0x00</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#define BINARY_DITHER 0x01</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">typedef</span> uint8_t EDitherMode;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</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="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#a068fa50d8c7d31bd8537b731eea84c92">showColor</a>(<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="l00049"></a><span class="lineno"> 49</span>&#160;</div>
-<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">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="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">#ifdef SUPPORT_ARGB</span></div>
-<div class="line"><a name="l00057"></a><span class="lineno"> 57</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="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">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="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;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a8c560c6d171f117dfd19c0f2ec780a32"> 62</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html#a8c560c6d171f117dfd19c0f2ec780a32">CLEDController</a>() : m_Data(NULL), m_ColorCorrection(<a class="code" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368">UncorrectedColor</a>), m_ColorTemperature(<a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f">UncorrectedTemperature</a>), m_DitherMode(BINARY_DITHER), m_nLeds(0) {</div>
-<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; m_pNext = NULL;</div>
-<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">if</span>(m_pHead==NULL) { m_pHead = <span class="keyword">this</span>; }</div>
-<div class="line"><a name="l00065"></a><span class="lineno"> 65</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="l00066"></a><span class="lineno"> 66</span>&#160; m_pTail = <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="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#af877a15a5ec452780fbd1d359b8a9913">init</a>() = 0;</div>
-<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
-<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#adfa6601c84fefd733904b32ac98b6dae">clearLeds</a>(<span class="keywordtype">int</span> nLeds) = 0;</div>
-<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div>
-<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb"> 76</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">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="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">show</a>(data, nLeds, <a class="code" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(brightness));</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;</div>
-<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b"> 81</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">showColor</a>(<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="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="class_c_l_e_d_controller.html#a068fa50d8c7d31bd8537b731eea84c92">showColor</a>(data, nLeds, <a class="code" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(brightness));</div>
-<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
-<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div>
-<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076"> 86</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255) {</div>
-<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">show</a>(m_Data, m_nLeds, <a class="code" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(brightness));</div>
-<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
-<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div>
-<div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4"> 91</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">showColor</a>(<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="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="class_c_l_e_d_controller.html#a068fa50d8c7d31bd8537b731eea84c92">showColor</a>(data, m_nLeds, <a class="code" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(brightness));</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;</div>
-<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0"> 96</a></span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> *<a class="code" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</a>() { <span class="keywordflow">return</span> m_pHead; }</div>
-<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565"> 98</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> *<a class="code" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</a>() { <span class="keywordflow">return</span> m_pNext; }</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"> #ifdef SUPPORT_ARGB</span></div>
-<div class="line"><a name="l00101"></a><span class="lineno"> 101</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="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">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="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">show</a>(data, nLeds, <a class="code" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(brightness))</div>
-<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
-<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div>
-<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037"> 108</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(<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="l00109"></a><span class="lineno"> 109</span>&#160; m_Data = data;</div>
-<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; m_nLeds = nLeds;</div>
-<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
-<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div>
-<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div>
-<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a7b61c81e004c96ff670a2742057a5a52"> 115</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#a7b61c81e004c96ff670a2742057a5a52">clearLedData</a>() {</div>
-<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span>(m_Data) {</div>
-<div class="line"><a name="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</span>&#160; }</div>
-<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
-<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div>
-<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08"> 122</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</a>() { <span class="keywordflow">return</span> m_nLeds; }</div>
-<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;</div>
-<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399"> 125</a></span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a>* <a class="code" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</a>() { <span class="keywordflow">return</span> m_Data; }</div>
-<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div>
-<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a"> 128</a></span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp;<a class="code" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(<span class="keywordtype">int</span> x) { <span class="keywordflow">return</span> m_Data[x]; }</div>
-<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div>
-<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517"> 131</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode = BINARY_DITHER) { m_DitherMode = ditherMode; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
-<div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7"> 133</a></span>&#160; <span class="keyword">inline</span> uint8_t <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>() { <span class="keywordflow">return</span> m_DitherMode; }</div>
-<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div>
-<div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8"> 136</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(<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="l00138"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9"> 138</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(<a class="code" href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8">LEDColorCorrection</a> correction) { m_ColorCorrection = correction; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
-<div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c"> 140</a></span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> <a class="code" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</a>() { <span class="keywordflow">return</span> m_ColorCorrection; }</div>
-<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div>
-<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883"> 143</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(<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="l00145"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4"> 145</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(<a class="code" href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9">ColorTemperature</a> temperature) { m_ColorTemperature = temperature; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
-<div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d"> 147</a></span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> <a class="code" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</a>() { <span class="keywordflow">return</span> m_ColorTemperature; }</div>
-<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div>
-<div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb"> 150</a></span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> <a class="code" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale) {</div>
-<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="preprocessor">#if defined(NO_CORRECTION) &amp;&amp; (NO_CORRECTION==1)</span></div>
-<div class="line"><a name="l00152"></a><span class="lineno"> 152</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="l00153"></a><span class="lineno"> 153</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> adj(0,0,0);</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="keywordflow">if</span>(scale &gt; 0) {</div>
-<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 3; i++) {</div>
-<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; uint8_t cc = m_ColorCorrection.raw[i];</div>
-<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; uint8_t ct = m_ColorTemperature.raw[i];</div>
-<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">if</span>(cc &gt; 0 &amp;&amp; ct &gt; 0) {</div>
-<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; uint32_t work = (((uint32_t)cc)+1) * (((uint32_t)ct)+1) * scale;</div>
-<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; work /= 0x10000L;</div>
-<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; adj.raw[i] = work &amp; 0xFF;</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; }</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="keywordflow">return</span> adj;</div>
-<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="preprocessor">#endif</span></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;};</div>
-<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div>
-<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="keyword">template</span>&lt;EOrder RGB_ORDER&gt;</div>
-<div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html"> 177</a></span>&#160;<span class="keyword">struct </span><a class="code" href="struct_pixel_controller.html">PixelController</a> {</div>
-<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keyword">const</span> uint8_t *mData;</div>
-<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordtype">int</span> mLen;</div>
-<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; uint8_t d[3];</div>
-<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; uint8_t e[3];</div>
-<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> mScale;</div>
-<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; uint8_t mAdvance;</div>
-<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div>
-<div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71"> 186</a></span>&#160; <a class="code" href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71">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="l00187"></a><span class="lineno"> 187</span>&#160; d[0] = other.d[0];</div>
-<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; d[1] = other.d[1];</div>
-<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; d[2] = other.d[2];</div>
-<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; e[0] = other.e[0];</div>
-<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; e[1] = other.e[1];</div>
-<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; e[2] = other.e[2];</div>
-<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; mData = other.mData;</div>
-<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; mScale = other.mScale;</div>
-<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; mAdvance = other.mAdvance;</div>
-<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; mLen = other.mLen;</div>
-<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
-<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div>
-<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div>
-<div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#a81403c8810658d3c41cb210703bbfc00"> 208</a></span>&#160; <a class="code" href="struct_pixel_controller.html#a81403c8810658d3c41cb210703bbfc00">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="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">enable_dithering</a>(dither);</div>
-<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; mData += skip;</div>
-<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; mAdvance = (advance) ? 3+skip : 0;</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; <a class="code" href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71">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((const uint8_t*)d), mLen(len), mScale(s) {</div>
-<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">enable_dithering</a>(dither);</div>
-<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; mAdvance = 3;</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;</div>
-<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71">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((const uint8_t*)&amp;d), mLen(len), mScale(s) {</div>
-<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">enable_dithering</a>(dither);</div>
-<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; mAdvance = 0;</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="preprocessor">#ifdef SUPPORT_ARGB</span></div>
-<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71">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((const uint8_t*)&amp;d), mLen(len), mScale(s) {</div>
-<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">enable_dithering</a>(dither);</div>
-<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// skip the A in CARGB</span></div>
-<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; mData += 1;</div>
-<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; mAdvance = 0;</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; <a class="code" href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71">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((const uint8_t*)d), mLen(len), mScale(s) {</div>
-<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">enable_dithering</a>(dither);</div>
-<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// skip the A in CARGB</span></div>
-<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; mData += 1;</div>
-<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; mAdvance = 4;</div>
-<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div>
-<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; </div>
-<div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#accb48b27c47c742a8b13f97ae1d82d32"> 242</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="struct_pixel_controller.html#accb48b27c47c742a8b13f97ae1d82d32">init_binary_dithering</a>() {</div>
-<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="preprocessor">#if !defined(NO_DITHERING) || (NO_DITHERING != 1)</span></div>
-<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div>
-<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// Set &#39;virtual bits&#39; of dithering to the highest level</span></div>
-<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// that is not likely to cause excessive flickering at</span></div>
-<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// low brightness levels + low update rates.</span></div>
-<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// These pre-set values are a little ambitious, since</span></div>
-<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// a 400Hz update rate for WS2811-family LEDs is only</span></div>
-<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// possible with 85 pixels or fewer.</span></div>
-<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="comment">// Once we have a &#39;number of milliseconds since last update&#39;</span></div>
-<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// value available here, we can quickly calculate the correct</span></div>
-<div class="line"><a name="l00253"></a><span class="lineno"> 253</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="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// statements -- no division required. At this point,</span></div>
-<div class="line"><a name="l00255"></a><span class="lineno"> 255</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="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// cost, but the values are still hard-coded.</span></div>
-<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="preprocessor">#define MAX_LIKELY_UPDATE_RATE_HZ 400</span></div>
-<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="preprocessor">#define MIN_ACCEPTABLE_DITHER_RATE_HZ 50</span></div>
-<div class="line"><a name="l00259"></a><span class="lineno"> 259</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="l00260"></a><span class="lineno"> 260</span>&#160;<span class="preprocessor">#define RECOMMENDED_VIRTUAL_BITS ((UPDATES_PER_FULL_DITHER_CYCLE&gt;1) + \</span></div>
-<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;2) + \</span></div>
-<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;4) + \</span></div>
-<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;8) + \</span></div>
-<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;16) + \</span></div>
-<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;32) + \</span></div>
-<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;64) + \</span></div>
-<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;128) )</span></div>
-<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="preprocessor">#define VIRTUAL_BITS RECOMMENDED_VIRTUAL_BITS</span></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="comment">// R is the digther signal &#39;counter&#39;.</span></div>
-<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">static</span> byte R = 0;</div>
-<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; R++;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">// LED Controller interface definition</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="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html"> 34</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="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</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="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> *m_Data;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> *m_pNext;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> m_ColorCorrection;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> m_ColorTemperature;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; EDitherMode m_DitherMode;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">int</span> m_nLeds;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</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="l00044"></a><span class="lineno"> 44</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="l00045"></a><span class="lineno"> 45</span>&#160;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#a068fa50d8c7d31bd8537b731eea84c92">showColor</a>(<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="l00051"></a><span class="lineno"> 51</span>&#160;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">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="l00057"></a><span class="lineno"> 57</span>&#160;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</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="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">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="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a8c560c6d171f117dfd19c0f2ec780a32"> 64</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html#a8c560c6d171f117dfd19c0f2ec780a32">CLEDController</a>() : m_Data(NULL), m_ColorCorrection(<a class="code" href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368">UncorrectedColor</a>), m_ColorTemperature(<a class="code" href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f">UncorrectedTemperature</a>), m_DitherMode(BINARY_DITHER), m_nLeds(0) {</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; m_pNext = NULL;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">if</span>(m_pHead==NULL) { m_pHead = <span class="keyword">this</span>; }</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</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="l00068"></a><span class="lineno"> 68</span>&#160; m_pTail = <span class="keyword">this</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;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#af877a15a5ec452780fbd1d359b8a9913">init</a>() = 0;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#adfa6601c84fefd733904b32ac98b6dae">clearLeds</a>(<span class="keywordtype">int</span> nLeds) = 0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb"> 78</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">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="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">show</a>(data, nLeds, <a class="code" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(brightness));</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b"> 83</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">showColor</a>(<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="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="class_c_l_e_d_controller.html#a068fa50d8c7d31bd8537b731eea84c92">showColor</a>(data, nLeds, <a class="code" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(brightness));</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"><a class="line" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076"> 88</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">showLeds</a>(uint8_t brightness=255) {</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">show</a>(m_Data, m_nLeds, <a class="code" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(brightness));</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="l00093"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4"> 93</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">showColor</a>(<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="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="class_c_l_e_d_controller.html#a068fa50d8c7d31bd8537b731eea84c92">showColor</a>(data, m_nLeds, <a class="code" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(brightness));</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="l00098"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0"> 98</a></span>&#160; <span class="keyword">static</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> *<a class="code" href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">head</a>() { <span class="keywordflow">return</span> m_pHead; }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565"> 100</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> *<a class="code" href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">next</a>() { <span class="keywordflow">return</span> m_pNext; }</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="preprocessor"> #ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</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="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">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="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">show</a>(data, nLeds, <a class="code" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(brightness))</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="preprocessor">#endif</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037"> 110</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">setLeds</a>(<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="l00111"></a><span class="lineno"> 111</span>&#160; m_Data = data;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; m_nLeds = nLeds;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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="l00117"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a7b61c81e004c96ff670a2742057a5a52"> 117</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="class_c_l_e_d_controller.html#a7b61c81e004c96ff670a2742057a5a52">clearLedData</a>() {</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span>(m_Data) {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</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="l00120"></a><span class="lineno"> 120</span>&#160; }</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="l00124"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08"> 124</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">size</a>() { <span class="keywordflow">return</span> m_nLeds; }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399"> 127</a></span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a>* <a class="code" href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">leds</a>() { <span class="keywordflow">return</span> m_Data; }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a"> 130</a></span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> &amp;<a class="code" href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">operator[]</a>(<span class="keywordtype">int</span> x) { <span class="keywordflow">return</span> m_Data[x]; }</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517"> 133</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">setDither</a>(uint8_t ditherMode = BINARY_DITHER) { m_DitherMode = ditherMode; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
+<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7"> 135</a></span>&#160; <span class="keyword">inline</span> uint8_t <a class="code" href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">getDither</a>() { <span class="keywordflow">return</span> m_DitherMode; }</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8"> 138</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">setCorrection</a>(<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="l00140"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9"> 140</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">setCorrection</a>(<a class="code" href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8">LEDColorCorrection</a> correction) { m_ColorCorrection = correction; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c"> 142</a></span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> <a class="code" href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">getCorrection</a>() { <span class="keywordflow">return</span> m_ColorCorrection; }</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883"> 145</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">setTemperature</a>(<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="l00147"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4"> 147</a></span>&#160; <a class="code" href="class_c_l_e_d_controller.html">CLEDController</a> &amp; <a class="code" href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">setTemperature</a>(<a class="code" href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9">ColorTemperature</a> temperature) { m_ColorTemperature = temperature; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
+<div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d"> 149</a></span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> <a class="code" href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">getTemperature</a>() { <span class="keywordflow">return</span> m_ColorTemperature; }</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb"> 152</a></span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> <a class="code" href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">getAdjustment</a>(uint8_t scale) {</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="preprocessor">#if defined(NO_CORRECTION) &amp;&amp; (NO_CORRECTION==1)</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</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="l00155"></a><span class="lineno"> 155</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> adj(0,0,0);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span>(scale &gt; 0) {</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 3; i++) {</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; uint8_t cc = m_ColorCorrection.raw[i];</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; uint8_t ct = m_ColorTemperature.raw[i];</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">if</span>(cc &gt; 0 &amp;&amp; ct &gt; 0) {</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; uint32_t work = (((uint32_t)cc)+1) * (((uint32_t)ct)+1) * scale;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; work /= 0x10000L;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; adj.raw[i] = work &amp; 0xFF;</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; }</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="keywordflow">return</span> adj;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="preprocessor">#endif</span></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> uint16_t getMaxRefreshRate()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 0; }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;};</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="keyword">template</span>&lt;EOrder RGB_ORDER&gt;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html"> 181</a></span>&#160;<span class="keyword">struct </span><a class="code" href="struct_pixel_controller.html">PixelController</a> {</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">const</span> uint8_t *mData;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordtype">int</span> mLen;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; uint8_t d[3];</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; uint8_t e[3];</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> mScale;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; uint8_t mAdvance;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71"> 190</a></span>&#160; <a class="code" href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71">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="l00191"></a><span class="lineno"> 191</span>&#160; d[0] = other.d[0];</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; d[1] = other.d[1];</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; d[2] = other.d[2];</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; e[0] = other.e[0];</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; e[1] = other.e[1];</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; e[2] = other.e[2];</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; mData = other.mData;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; mScale = other.mScale;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; mAdvance = other.mAdvance;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; mLen = other.mLen;</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;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#a81403c8810658d3c41cb210703bbfc00"> 212</a></span>&#160; <a class="code" href="struct_pixel_controller.html#a81403c8810658d3c41cb210703bbfc00">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="l00213"></a><span class="lineno"> 213</span>&#160; <a class="code" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">enable_dithering</a>(dither);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; mData += skip;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; mAdvance = (advance) ? 3+skip : 0;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <a class="code" href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71">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((const uint8_t*)d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">enable_dithering</a>(dither);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; mAdvance = 3;</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; <a class="code" href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71">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((const uint8_t*)&amp;d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">enable_dithering</a>(dither);</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; mAdvance = 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;</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <a class="code" href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71">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((const uint8_t*)&amp;d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <a class="code" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">enable_dithering</a>(dither);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="comment">// skip the A in CARGB</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; mData += 1;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; mAdvance = 0;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71">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((const uint8_t*)d), mLen(len), mScale(s) {</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">enable_dithering</a>(dither);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">// skip the A in CARGB</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; mData += 1;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; mAdvance = 4;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; </div>
+<div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#accb48b27c47c742a8b13f97ae1d82d32"> 246</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="struct_pixel_controller.html#accb48b27c47c742a8b13f97ae1d82d32">init_binary_dithering</a>() {</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="preprocessor">#if !defined(NO_DITHERING) || (NO_DITHERING != 1)</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// Set &#39;virtual bits&#39; of dithering to the highest level</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// that is not likely to cause excessive flickering at</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="comment">// low brightness levels + low update rates.</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// These pre-set values are a little ambitious, since</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// a 400Hz update rate for WS2811-family LEDs is only</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// possible with 85 pixels or fewer.</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="comment">// Once we have a &#39;number of milliseconds since last update&#39;</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// value available here, we can quickly calculate the correct</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</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="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// statements -- no division required. At this point,</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</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="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// cost, but the values are still hard-coded.</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="preprocessor">#define MAX_LIKELY_UPDATE_RATE_HZ 400</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="preprocessor">#define MIN_ACCEPTABLE_DITHER_RATE_HZ 50</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</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="l00264"></a><span class="lineno"> 264</span>&#160;<span class="preprocessor">#define RECOMMENDED_VIRTUAL_BITS ((UPDATES_PER_FULL_DITHER_CYCLE&gt;1) + \</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;2) + \</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;4) + \</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;8) + \</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;16) + \</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;32) + \</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;64) + \</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;128) )</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="preprocessor">#define VIRTUAL_BITS RECOMMENDED_VIRTUAL_BITS</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; <span class="comment">// R is wrapped around at 2^ditherBits,</span></div>
-<div class="line"><a name="l00275"></a><span class="lineno"> 275</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="l00276"></a><span class="lineno"> 276</span>&#160; byte ditherBits = VIRTUAL_BITS;</div>
-<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; R &amp;= (0x01 &lt;&lt; ditherBits) - 1;</div>
-<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div>
-<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="comment">// Q is the &quot;unscaled dither signal&quot; itself.</span></div>
-<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="comment">// It&#39;s initialized to the reversed bits of R.</span></div>
-<div class="line"><a name="l00281"></a><span class="lineno"> 281</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="l00282"></a><span class="lineno"> 282</span>&#160; byte Q = 0;</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="comment">// Reverse bits in a byte</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; <span class="keywordflow">if</span>(R &amp; 0x01) { Q |= 0x80; }</div>
-<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x02) { Q |= 0x40; }</div>
-<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x04) { Q |= 0x20; }</div>
-<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x08) { Q |= 0x10; }</div>
-<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x10) { Q |= 0x08; }</div>
-<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x20) { Q |= 0x04; }</div>
-<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x40) { Q |= 0x02; }</div>
-<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x80) { Q |= 0x01; }</div>
-<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div>
-<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div>
-<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// Now we adjust Q to fall in the center of each range,</span></div>
-<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="comment">// instead of at the start of the range.</span></div>
-<div class="line"><a name="l00298"></a><span class="lineno"> 298</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="l00299"></a><span class="lineno"> 299</span>&#160; <span class="comment">// and this adjustment makes it (31, 159, 95, 223).</span></div>
-<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span>( ditherBits &lt; 8) {</div>
-<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; Q += 0x01 &lt;&lt; (7 - ditherBits);</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">// D and E form the &quot;scaled dither signal&quot;</span></div>
-<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// which is added to pixel values to affect the</span></div>
-<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">// actual dithering.</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// R is the digther signal &#39;counter&#39;.</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">static</span> byte R = 0;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; R++;</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="comment">// R is wrapped around at 2^ditherBits,</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</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="l00280"></a><span class="lineno"> 280</span>&#160; byte ditherBits = VIRTUAL_BITS;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; R &amp;= (0x01 &lt;&lt; ditherBits) - 1;</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">// Q is the &quot;unscaled dither signal&quot; itself.</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="comment">// It&#39;s initialized to the reversed bits of R.</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</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="l00286"></a><span class="lineno"> 286</span>&#160; byte Q = 0;</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">// Reverse bits in a byte</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; {</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x01) { Q |= 0x80; }</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x02) { Q |= 0x40; }</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x04) { Q |= 0x20; }</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x08) { Q |= 0x10; }</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x10) { Q |= 0x08; }</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x20) { Q |= 0x04; }</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x40) { Q |= 0x02; }</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x80) { Q |= 0x01; }</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">// Now we adjust Q to fall in the center of each range,</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// instead of at the start of the range.</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</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="l00303"></a><span class="lineno"> 303</span>&#160; <span class="comment">// and this adjustment makes it (31, 159, 95, 223).</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span>( ditherBits &lt; 8) {</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; Q += 0x01 &lt;&lt; (7 - ditherBits);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div>
-<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="comment">// Setup the initial D and E values</span></div>
-<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; 3; i++) {</div>
-<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; byte s = mScale.raw[i];</div>
-<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; e[i] = s ? (256/s) + 1 : 0;</div>
-<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; d[i] = scale8(Q, e[i]);</div>
-<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">if</span>(e[i]) e[i]--;</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="preprocessor">#endif</span></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="l00319"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b"> 319</a></span>&#160; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline <span class="keywordtype">bool</span> has(<span class="keywordtype">int</span> n) {</div>
-<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">return</span> mLen &gt;= n;</div>
-<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; }</div>
-<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;</div>
-<div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3"> 324</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">enable_dithering</a>(EDitherMode dither) {</div>
-<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">switch</span>(dither) {</div>
-<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">case</span> BINARY_DITHER: <a class="code" href="struct_pixel_controller.html#accb48b27c47c742a8b13f97ae1d82d32">init_binary_dithering</a>(); <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l00327"></a><span class="lineno"> 327</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="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;</div>
-<div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#afbe76a814e6bec02854dd4df167567b4"> 332</a></span>&#160; <a class="code" href="struct_pixel_controller.html#afbe76a814e6bec02854dd4df167567b4">__attribute__</a>((always_inline)) inline <span class="keywordtype">int</span> advanceBy() { <span class="keywordflow">return</span> mAdvance; }</div>
-<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;</div>
-<div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#a404558c7da7f3f6fae768bc45af9dc03"> 335</a></span>&#160; <a class="code" href="struct_pixel_controller.html#a404558c7da7f3f6fae768bc45af9dc03">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> advanceData() { mData += mAdvance; mLen--;}</div>
-<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div>
-<div class="line"><a name="l00338"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#a900493d7e9e345d0cb6e602186151e73"> 338</a></span>&#160; <a class="code" href="struct_pixel_controller.html#a900493d7e9e345d0cb6e602186151e73">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> stepDithering() {</div>
-<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="comment">// IF UPDATING HERE, BE SURE TO UPDATE THE ASM VERSION IN</span></div>
-<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="comment">// clockless_trinket.h!</span></div>
-<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; d[0] = e[0] - d[0];</div>
-<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; d[1] = e[1] - d[1];</div>
-<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; d[2] = e[2] - d[2];</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="l00347"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#a9b0bc80097821046dbda7bbbf38dd7df"> 347</a></span>&#160; <a class="code" href="struct_pixel_controller.html#a9b0bc80097821046dbda7bbbf38dd7df">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> preStepFirstByteDithering() {</div>
-<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; d[RO(0)] = e[RO(0)] - d[RO(0)];</div>
-<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div>
-<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div>
-<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline static 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="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline static 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="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline static 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="l00308"></a><span class="lineno"> 308</span>&#160; <span class="comment">// D and E form the &quot;scaled dither signal&quot;</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="comment">// which is added to pixel values to affect the</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="comment">// actual dithering.</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// Setup the initial D and E values</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; 3; i++) {</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; byte s = mScale.raw[i];</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; e[i] = s ? (256/s) + 1 : 0;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; d[i] = <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(Q, e[i]);</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">if</span>(e[i]) e[i]--;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="preprocessor">#endif</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="l00323"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b"> 323</a></span>&#160; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline <span class="keywordtype">bool</span> has(<span class="keywordtype">int</span> n) {</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">return</span> mLen &gt;= n;</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;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3"> 328</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">enable_dithering</a>(EDitherMode dither) {</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">switch</span>(dither) {</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordflow">case</span> BINARY_DITHER: <a class="code" href="struct_pixel_controller.html#accb48b27c47c742a8b13f97ae1d82d32">init_binary_dithering</a>(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</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="l00332"></a><span class="lineno"> 332</span>&#160; }</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#afbe76a814e6bec02854dd4df167567b4"> 336</a></span>&#160; <a class="code" href="struct_pixel_controller.html#afbe76a814e6bec02854dd4df167567b4">__attribute__</a>((always_inline)) inline <span class="keywordtype">int</span> advanceBy() { <span class="keywordflow">return</span> mAdvance; }</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#a404558c7da7f3f6fae768bc45af9dc03"> 339</a></span>&#160; <a class="code" href="struct_pixel_controller.html#a404558c7da7f3f6fae768bc45af9dc03">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> advanceData() { mData += mAdvance; mLen--;}</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#a900493d7e9e345d0cb6e602186151e73"> 342</a></span>&#160; <a class="code" href="struct_pixel_controller.html#a900493d7e9e345d0cb6e602186151e73">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> stepDithering() {</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="comment">// IF UPDATING HERE, BE SURE TO UPDATE THE ASM VERSION IN</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="comment">// clockless_trinket.h!</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; d[0] = e[0] - d[0];</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; d[1] = e[1] - d[1];</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; d[2] = e[2] - d[2];</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="l00351"></a><span class="lineno"><a class="line" href="struct_pixel_controller.html#a9b0bc80097821046dbda7bbbf38dd7df"> 351</a></span>&#160; <a class="code" href="struct_pixel_controller.html#a9b0bc80097821046dbda7bbbf38dd7df">__attribute__</a>((always_inline)) inline <span class="keywordtype">void</span> preStepFirstByteDithering() {</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; d[RO(0)] = e[RO(0)] - d[RO(0)];</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; <span class="comment">// composite shortcut functions for loading, dithering, and scaling</span></div>
-<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline static 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="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline static 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="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline static 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="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline static 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="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline static uint8_t scale(<a class="code" href="struct_pixel_controller.html">PixelController</a> &amp; pc, uint8_t b) { <span class="keywordflow">return</span> <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(b, pc.mScale.raw[RO(SLOT)]); }</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div>
-<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">// Helper functions to get around gcc stupidities</span></div>
-<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline uint8_t loadAndScale0() { <span class="keywordflow">return</span> loadAndScale&lt;0&gt;(*this); }</div>
-<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline uint8_t loadAndScale1() { <span class="keywordflow">return</span> loadAndScale&lt;1&gt;(*this); }</div>
-<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline uint8_t loadAndScale2() { <span class="keywordflow">return</span> loadAndScale&lt;2&gt;(*this); }</div>
-<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline uint8_t advanceAndLoadAndScale0() { <span class="keywordflow">return</span> advanceAndLoadAndScale&lt;0&gt;(*this); }</div>
-<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline uint8_t stepAdvanceAndLoadAndScale0() { stepDithering(); <span class="keywordflow">return</span> advanceAndLoadAndScale&lt;0&gt;(*this); }</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;</div>
-<div class="line"><a name="l00367"></a><span class="lineno"> 367</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="l00368"></a><span class="lineno"> 368</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="l00369"></a><span class="lineno"> 369</span>&#160;<span class="comment">// centralize 8/12/16 conversions here as well.</span></div>
-<div class="line"><a name="l00370"></a><span class="lineno"> 370</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="l00371"></a><span class="lineno"><a class="line" href="struct_multi_pixel_controller.html"> 371</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="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keyword">const</span> uint8_t *mData;</div>
-<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordtype">int</span> mLen;</div>
-<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; uint8_t d[3];</div>
-<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; uint8_t e[3];</div>
-<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> mScale;</div>
-<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; int8_t mAdvance;</div>
-<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordtype">int</span> mOffsets[LANES];</div>
-<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div>
-<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <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="l00381"></a><span class="lineno"> 381</span>&#160; d[0] = other.d[0];</div>
-<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; d[1] = other.d[1];</div>
-<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; d[2] = other.d[2];</div>
-<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; e[0] = other.e[0];</div>
-<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; e[1] = other.e[1];</div>
-<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; e[2] = other.e[2];</div>
-<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; mData = other.mData;</div>
-<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; mScale = other.mScale;</div>
-<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; mAdvance = other.mAdvance;</div>
-<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; mLen = other.mLen;</div>
-<div class="line"><a name="l00391"></a><span class="lineno"> 391</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="l00392"></a><span class="lineno"> 392</span>&#160;</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;</div>
-<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordtype">void</span> initOffsets(<span class="keywordtype">int</span> len) {</div>
-<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordtype">int</span> nOffset = 0;</div>
-<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; LANES; i++) {</div>
-<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; mOffsets[i] = nOffset;</div>
-<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">if</span>((1&lt;&lt;i) &amp; MASK) { nOffset += (len * mAdvance); }</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; }</div>
-<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div>
-<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <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="l00404"></a><span class="lineno"> 404</span>&#160; enable_dithering(dither);</div>
-<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; mData += skip;</div>
-<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; mAdvance = (advance) ? 3+skip : 0;</div>
-<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; initOffsets(len);</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;</div>
-<div class="line"><a name="l00410"></a><span class="lineno"> 410</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="l00411"></a><span class="lineno"> 411</span>&#160; enable_dithering(dither);</div>
-<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; mAdvance = 3;</div>
-<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; initOffsets(len);</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;</div>
-<div class="line"><a name="l00416"></a><span class="lineno"> 416</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="l00417"></a><span class="lineno"> 417</span>&#160; enable_dithering(dither);</div>
-<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; mAdvance = 0;</div>
-<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; initOffsets(len);</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="preprocessor">#ifdef SUPPORT_ARGB</span></div>
-<div class="line"><a name="l00423"></a><span class="lineno"> 423</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="l00424"></a><span class="lineno"> 424</span>&#160; enable_dithering(dither);</div>
-<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="comment">// skip the A in CARGB</span></div>
-<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; mData += 1;</div>
-<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; mAdvance = 0;</div>
-<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; initOffsets(len);</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; <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="l00432"></a><span class="lineno"> 432</span>&#160; enable_dithering(dither);</div>
-<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="comment">// skip the A in CARGB</span></div>
-<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; mData += 1;</div>
-<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; mAdvance = 4;</div>
-<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; initOffsets(len);</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; <span class="keywordtype">void</span> init_binary_dithering() {</div>
-<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;<span class="preprocessor">#if !defined(NO_DITHERING) || (NO_DITHERING != 1)</span></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; <span class="comment">// Set &#39;virtual bits&#39; of dithering to the highest level</span></div>
-<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">// that is not likely to cause excessive flickering at</span></div>
-<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="comment">// low brightness levels + low update rates.</span></div>
-<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="comment">// These pre-set values are a little ambitious, since</span></div>
-<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="comment">// a 400Hz update rate for WS2811-family LEDs is only</span></div>
-<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// possible with 85 pixels or fewer.</span></div>
-<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="comment">// Once we have a &#39;number of milliseconds since last update&#39;</span></div>
-<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">// value available here, we can quickly calculate the correct</span></div>
-<div class="line"><a name="l00451"></a><span class="lineno"> 451</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="l00452"></a><span class="lineno"> 452</span>&#160; <span class="comment">// statements -- no division required. At this point,</span></div>
-<div class="line"><a name="l00453"></a><span class="lineno"> 453</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="l00454"></a><span class="lineno"> 454</span>&#160; <span class="comment">// cost, but the values are still hard-coded.</span></div>
-<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="preprocessor">#define MAX_LIKELY_UPDATE_RATE_HZ 400</span></div>
-<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="preprocessor">#define MIN_ACCEPTABLE_DITHER_RATE_HZ 50</span></div>
-<div class="line"><a name="l00457"></a><span class="lineno"> 457</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="l00458"></a><span class="lineno"> 458</span>&#160;<span class="preprocessor">#define RECOMMENDED_VIRTUAL_BITS ((UPDATES_PER_FULL_DITHER_CYCLE&gt;1) + \</span></div>
-<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;2) + \</span></div>
-<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;4) + \</span></div>
-<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;8) + \</span></div>
-<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;16) + \</span></div>
-<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;32) + \</span></div>
-<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;64) + \</span></div>
-<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;128) )</span></div>
-<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="preprocessor">#define VIRTUAL_BITS RECOMMENDED_VIRTUAL_BITS</span></div>
-<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;</div>
-<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="comment">// R is the digther signal &#39;counter&#39;.</span></div>
-<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keyword">static</span> byte R = 0;</div>
-<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; R++;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">// composite shortcut functions for loading, dithering, and scaling</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline static 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="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keyword">template</span>&lt;<span class="keywordtype">int</span> SLOT&gt; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline static 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="l00362"></a><span class="lineno"> 362</span>&#160;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="comment">// Helper functions to get around gcc stupidities</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline uint8_t loadAndScale0() { <span class="keywordflow">return</span> loadAndScale&lt;0&gt;(*this); }</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline uint8_t loadAndScale1() { <span class="keywordflow">return</span> loadAndScale&lt;1&gt;(*this); }</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline uint8_t loadAndScale2() { <span class="keywordflow">return</span> loadAndScale&lt;2&gt;(*this); }</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline uint8_t advanceAndLoadAndScale0() { <span class="keywordflow">return</span> advanceAndLoadAndScale&lt;0&gt;(*this); }</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">__attribute__</a>((always_inline)) inline uint8_t stepAdvanceAndLoadAndScale0() { stepDithering(); <span class="keywordflow">return</span> advanceAndLoadAndScale&lt;0&gt;(*this); }</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;<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="l00372"></a><span class="lineno"> 372</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="l00373"></a><span class="lineno"> 373</span>&#160;<span class="comment">// centralize 8/12/16 conversions here as well.</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</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="l00375"></a><span class="lineno"><a class="line" href="struct_multi_pixel_controller.html"> 375</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="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keyword">const</span> uint8_t *mData;</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordtype">int</span> mLen;</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; uint8_t d[3];</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; uint8_t e[3];</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> mScale;</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; int8_t mAdvance;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordtype">int</span> mOffsets[LANES];</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; <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="l00385"></a><span class="lineno"> 385</span>&#160; d[0] = other.d[0];</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; d[1] = other.d[1];</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; d[2] = other.d[2];</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; e[0] = other.e[0];</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; e[1] = other.e[1];</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; e[2] = other.e[2];</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; mData = other.mData;</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; mScale = other.mScale;</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; mAdvance = other.mAdvance;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; mLen = other.mLen;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</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="l00396"></a><span class="lineno"> 396</span>&#160;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordtype">void</span> initOffsets(<span class="keywordtype">int</span> len) {</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordtype">int</span> nOffset = 0;</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; LANES; i++) {</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; mOffsets[i] = nOffset;</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">if</span>((1&lt;&lt;i) &amp; MASK) { nOffset += (len * mAdvance); }</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;</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</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="l00408"></a><span class="lineno"> 408</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; mData += skip;</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; mAdvance = (advance) ? 3+skip : 0;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; initOffsets(len);</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;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</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="l00415"></a><span class="lineno"> 415</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; mAdvance = 3;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; initOffsets(len);</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; <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="l00421"></a><span class="lineno"> 421</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; mAdvance = 0;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; initOffsets(len);</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="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</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="l00428"></a><span class="lineno"> 428</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="comment">// skip the A in CARGB</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; mData += 1;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; mAdvance = 0;</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; initOffsets(len);</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; <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="l00436"></a><span class="lineno"> 436</span>&#160; enable_dithering(dither);</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="comment">// skip the A in CARGB</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; mData += 1;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; mAdvance = 4;</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; initOffsets(len);</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordtype">void</span> init_binary_dithering() {</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;<span class="preprocessor">#if !defined(NO_DITHERING) || (NO_DITHERING != 1)</span></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">// Set &#39;virtual bits&#39; of dithering to the highest level</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// that is not likely to cause excessive flickering at</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="comment">// low brightness levels + low update rates.</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">// These pre-set values are a little ambitious, since</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="comment">// a 400Hz update rate for WS2811-family LEDs is only</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="comment">// possible with 85 pixels or fewer.</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="comment">// Once we have a &#39;number of milliseconds since last update&#39;</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="comment">// value available here, we can quickly calculate the correct</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</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="l00456"></a><span class="lineno"> 456</span>&#160; <span class="comment">// statements -- no division required. At this point,</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</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="l00458"></a><span class="lineno"> 458</span>&#160; <span class="comment">// cost, but the values are still hard-coded.</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="preprocessor">#define MAX_LIKELY_UPDATE_RATE_HZ 400</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="preprocessor">#define MIN_ACCEPTABLE_DITHER_RATE_HZ 50</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</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="l00462"></a><span class="lineno"> 462</span>&#160;<span class="preprocessor">#define RECOMMENDED_VIRTUAL_BITS ((UPDATES_PER_FULL_DITHER_CYCLE&gt;1) + \</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;2) + \</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;4) + \</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;8) + \</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;16) + \</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;32) + \</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;64) + \</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;<span class="preprocessor"> (UPDATES_PER_FULL_DITHER_CYCLE&gt;128) )</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="preprocessor">#define VIRTUAL_BITS RECOMMENDED_VIRTUAL_BITS</span></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="comment">// R is wrapped around at 2^ditherBits,</span></div>
-<div class="line"><a name="l00473"></a><span class="lineno"> 473</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="l00474"></a><span class="lineno"> 474</span>&#160; byte ditherBits = VIRTUAL_BITS;</div>
-<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; R &amp;= (0x01 &lt;&lt; ditherBits) - 1;</div>
-<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;</div>
-<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="comment">// Q is the &quot;unscaled dither signal&quot; itself.</span></div>
-<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="comment">// It&#39;s initialized to the reversed bits of R.</span></div>
-<div class="line"><a name="l00479"></a><span class="lineno"> 479</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="l00480"></a><span class="lineno"> 480</span>&#160; byte Q = 0;</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="comment">// Reverse bits in a byte</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; <span class="keywordflow">if</span>(R &amp; 0x01) { Q |= 0x80; }</div>
-<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x02) { Q |= 0x40; }</div>
-<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x04) { Q |= 0x20; }</div>
-<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x08) { Q |= 0x10; }</div>
-<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x10) { Q |= 0x08; }</div>
-<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x20) { Q |= 0x04; }</div>
-<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x40) { Q |= 0x02; }</div>
-<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x80) { Q |= 0x01; }</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;</div>
-<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="comment">// Now we adjust Q to fall in the center of each range,</span></div>
-<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="comment">// instead of at the start of the range.</span></div>
-<div class="line"><a name="l00496"></a><span class="lineno"> 496</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="l00497"></a><span class="lineno"> 497</span>&#160; <span class="comment">// and this adjustment makes it (31, 159, 95, 223).</span></div>
-<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">if</span>( ditherBits &lt; 8) {</div>
-<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; Q += 0x01 &lt;&lt; (7 - ditherBits);</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;</div>
-<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="comment">// D and E form the &quot;scaled dither signal&quot;</span></div>
-<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="comment">// which is added to pixel values to affect the</span></div>
-<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="comment">// actual dithering.</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="comment">// R is the digther signal &#39;counter&#39;.</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keyword">static</span> byte R = 0;</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; R++;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="comment">// R is wrapped around at 2^ditherBits,</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</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="l00478"></a><span class="lineno"> 478</span>&#160; byte ditherBits = VIRTUAL_BITS;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; R &amp;= (0x01 &lt;&lt; ditherBits) - 1;</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="comment">// Q is the &quot;unscaled dither signal&quot; itself.</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="comment">// It&#39;s initialized to the reversed bits of R.</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</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="l00484"></a><span class="lineno"> 484</span>&#160; byte Q = 0;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="comment">// Reverse bits in a byte</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; {</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x01) { Q |= 0x80; }</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x02) { Q |= 0x40; }</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x04) { Q |= 0x20; }</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x08) { Q |= 0x10; }</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x10) { Q |= 0x08; }</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x20) { Q |= 0x04; }</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x40) { Q |= 0x02; }</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">if</span>(R &amp; 0x80) { Q |= 0x01; }</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">// Now we adjust Q to fall in the center of each range,</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="comment">// instead of at the start of the range.</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</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="l00501"></a><span class="lineno"> 501</span>&#160; <span class="comment">// and this adjustment makes it (31, 159, 95, 223).</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">if</span>( ditherBits &lt; 8) {</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; Q += 0x01 &lt;&lt; (7 - ditherBits);</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; }</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;</div>
-<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="comment">// Setup the initial D and E values</span></div>
-<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; 3; i++) {</div>
-<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; byte s = mScale.raw[i];</div>
-<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; e[i] = s ? (256/s) + 1 : 0;</div>
-<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; d[i] = scale8(Q, e[i]);</div>
-<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">if</span>(e[i]) e[i]--;</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="preprocessor">#endif</span></div>
-<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; }</div>
-<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;</div>
-<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="comment">// Do we have n pixels left to process?</span></div>
-<div class="line"><a name="l00517"></a><span class="lineno"> 517</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="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">return</span> mLen &gt;= n;</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; <span class="comment">// toggle dithering enable</span></div>
-<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordtype">void</span> enable_dithering(EDitherMode dither) {</div>
-<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">switch</span>(dither) {</div>
-<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">case</span> BINARY_DITHER: init_binary_dithering(); <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l00525"></a><span class="lineno"> 525</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="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;</div>
-<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="comment">// get the amount to advance the pointer by</span></div>
-<div class="line"><a name="l00530"></a><span class="lineno"> 530</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="l00531"></a><span class="lineno"> 531</span>&#160;</div>
-<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="comment">// advance the data pointer forward, adjust position counter</span></div>
-<div class="line"><a name="l00533"></a><span class="lineno"> 533</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="l00534"></a><span class="lineno"> 534</span>&#160;</div>
-<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="comment">// step the dithering forward</span></div>
-<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">void</span> stepDithering() {</div>
-<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="comment">// IF UPDATING HERE, BE SURE TO UPDATE THE ASM VERSION IN</span></div>
-<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="comment">// clockless_trinket.h!</span></div>
-<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; d[0] = e[0] - d[0];</div>
-<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; d[1] = e[1] - d[1];</div>
-<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; d[2] = e[2] - d[2];</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="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="l00545"></a><span class="lineno"> 545</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">void</span> preStepFirstByteDithering() {</div>
-<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; d[RO(0)] = e[RO(0)] - d[RO(0)];</div>
-<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; }</div>
-<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;</div>
-<div class="line"><a name="l00549"></a><span class="lineno"> 549</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="l00550"></a><span class="lineno"> 550</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="l00551"></a><span class="lineno"> 551</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="l00552"></a><span class="lineno"> 552</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="l00553"></a><span class="lineno"> 553</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="l00554"></a><span class="lineno"> 554</span>&#160;</div>
-<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="comment">// composite shortcut functions for loading, dithering, and scaling</span></div>
-<div class="line"><a name="l00556"></a><span class="lineno"> 556</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="l00557"></a><span class="lineno"> 557</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="l00558"></a><span class="lineno"> 558</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="l00559"></a><span class="lineno"> 559</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="l00560"></a><span class="lineno"> 560</span>&#160;</div>
-<div class="line"><a name="l00561"></a><span class="lineno"> 561</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="l00562"></a><span class="lineno"> 562</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="l00563"></a><span class="lineno"> 563</span>&#160;</div>
-<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="comment">// Helper functions to get around gcc stupidities</span></div>
-<div class="line"><a name="l00565"></a><span class="lineno"> 565</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="l00566"></a><span class="lineno"> 566</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="l00567"></a><span class="lineno"> 567</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="l00568"></a><span class="lineno"> 568</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="l00569"></a><span class="lineno"> 569</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="l00570"></a><span class="lineno"> 570</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="l00571"></a><span class="lineno"> 571</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="l00572"></a><span class="lineno"> 572</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="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="preprocessor">#endif</span></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_af6173cca91ee446766cc15102990d7bb"><div class="ttname"><a href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">CLEDController::getAdjustment</a></div><div class="ttdeci">CRGB getAdjustment(uint8_t scale)</div><div class="ttdoc">Get the combined brightness/color adjustment for this controller. </div><div class="ttdef"><b>Definition:</b> controller.h:150</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_aa4124b1cf5546ad028166e7884276076"><div class="ttname"><a href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">CLEDController::showLeds</a></div><div class="ttdeci">void showLeds(uint8_t brightness=255)</div><div class="ttdoc">show function using the "attached to this controller" led data </div><div class="ttdef"><b>Definition:</b> controller.h:86</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_a168c661bb9b4a5dfc797b69d3900b26c"><div class="ttname"><a href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">CLEDController::getCorrection</a></div><div class="ttdeci">CRGB getCorrection()</div><div class="ttdoc">get the correction value used by this controller </div><div class="ttdef"><b>Definition:</b> controller.h:140</div></div>
-<div class="ttc" id="group___color_enums_html_ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368"><div class="ttname"><a href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368">UncorrectedColor</a></div><div class="ttdoc">uncorrected color </div><div class="ttdef"><b>Definition:</b> color.h:24</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="ttdoc">Base definition for an LED controller. </div><div class="ttdef"><b>Definition:</b> controller.h:32</div></div>
-<div class="ttc" id="struct_pixel_controller_html_a900493d7e9e345d0cb6e602186151e73"><div class="ttname"><a href="struct_pixel_controller.html#a900493d7e9e345d0cb6e602186151e73">PixelController::__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void stepDithering()</div><div class="ttdoc">step the dithering forward </div><div class="ttdef"><b>Definition:</b> controller.h:338</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a7b61c81e004c96ff670a2742057a5a52"><div class="ttname"><a href="class_c_l_e_d_controller.html#a7b61c81e004c96ff670a2742057a5a52">CLEDController::clearLedData</a></div><div class="ttdeci">void clearLedData()</div><div class="ttdoc">zero out the led data managed by this controller </div><div class="ttdef"><b>Definition:</b> controller.h:115</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a69ac4a882bdc4a813ae957ddedb5a883"><div class="ttname"><a href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">CLEDController::setTemperature</a></div><div class="ttdeci">CLEDController &amp; setTemperature(CRGB temperature)</div><div class="ttdoc">set the color temperature, aka white point, for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:143</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a5b08378b29f92c5def65175ec5334037"><div class="ttname"><a href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">CLEDController::setLeds</a></div><div class="ttdeci">CLEDController &amp; setLeds(CRGB *data, int nLeds)</div><div class="ttdoc">set the default array of leds to be used by this controller </div><div class="ttdef"><b>Definition:</b> controller.h:108</div></div>
-<div class="ttc" id="struct_pixel_controller_html_a9b0bc80097821046dbda7bbbf38dd7df"><div class="ttname"><a href="struct_pixel_controller.html#a9b0bc80097821046dbda7bbbf38dd7df">PixelController::__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void preStepFirstByteDithering()</div><div class="ttdoc">Some chipsets pre-cycle the first byte, which means we want to cycle byte 0&#39;s dithering separately...</div><div class="ttdef"><b>Definition:</b> controller.h:347</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:371</div></div>
-<div class="ttc" id="struct_pixel_controller_html_aec44f7bfc391ebf4874f678a994eff71"><div class="ttname"><a href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71">PixelController::PixelController</a></div><div class="ttdeci">PixelController(const PixelController &amp;other)</div><div class="ttdoc">copy constructor for the pixel controller object </div><div class="ttdef"><b>Definition:</b> controller.h:186</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a8840496d231f1fe0fa640970dc14db08"><div class="ttname"><a href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">CLEDController::size</a></div><div class="ttdeci">int size()</div><div class="ttdoc">How many leds does this controller manage? </div><div class="ttdef"><b>Definition:</b> controller.h:122</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="ttdoc">High level controller interface for FastLED. </div><div class="ttdef"><b>Definition:</b> FastLED.h:125</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a253069a734075b298da65d59d6efbb3b"><div class="ttname"><a href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a></div><div class="ttdeci">void showColor(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</div><div class="ttdoc">show function w/integer brightness, will scale for color correction and temperature ...</div><div class="ttdef"><b>Definition:</b> controller.h:81</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a9620d0a629a6a3294c71f5f8dbfe91b8"><div class="ttname"><a href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">CLEDController::setCorrection</a></div><div class="ttdeci">CLEDController &amp; setCorrection(CRGB correction)</div><div class="ttdoc">the the color corrction to use for this controller, expressed as an rgb object </div><div class="ttdef"><b>Definition:</b> controller.h:136</div></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="comment">// D and E form the &quot;scaled dither signal&quot;</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="comment">// which is added to pixel values to affect the</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="comment">// actual dithering.</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="comment">// Setup the initial D and E values</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; 3; i++) {</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; byte s = mScale.raw[i];</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; e[i] = s ? (256/s) + 1 : 0;</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; d[i] = <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(Q, e[i]);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">if</span>(e[i]) e[i]--;</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</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">// Do we have n pixels left to process?</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</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="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">return</span> mLen &gt;= n;</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;</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">// toggle dithering enable</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordtype">void</span> enable_dithering(EDitherMode dither) {</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">switch</span>(dither) {</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">case</span> BINARY_DITHER: init_binary_dithering(); <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</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="l00530"></a><span class="lineno"> 530</span>&#160; }</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;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">// get the amount to advance the pointer by</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</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="l00535"></a><span class="lineno"> 535</span>&#160;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="comment">// advance the data pointer forward, adjust position counter</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</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="l00538"></a><span class="lineno"> 538</span>&#160;</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="comment">// step the dithering forward</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">void</span> stepDithering() {</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="comment">// IF UPDATING HERE, BE SURE TO UPDATE THE ASM VERSION IN</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="comment">// clockless_trinket.h!</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; d[0] = e[0] - d[0];</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; d[1] = e[1] - d[1];</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; d[2] = e[2] - d[2];</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; }</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</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="l00549"></a><span class="lineno"> 549</span>&#160; __attribute__((always_inline)) <span class="keyword">inline</span> <span class="keywordtype">void</span> preStepFirstByteDithering() {</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; d[RO(0)] = e[RO(0)] - d[RO(0)];</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;</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</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="l00554"></a><span class="lineno"> 554</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="l00555"></a><span class="lineno"> 555</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="l00556"></a><span class="lineno"> 556</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> <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(b, pc.mScale.raw[RO(SLOT)]); }</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</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> <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(b, scale); }</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="comment">// composite shortcut functions for loading, dithering, and scaling</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</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="l00561"></a><span class="lineno"> 561</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> <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(pc.dither&lt;SLOT&gt;(pc, pc.loadByte&lt;SLOT&gt;(pc, lane), d), scale); }</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</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> <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(pc.loadByte&lt;SLOT&gt;(pc, lane), scale); }</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</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="l00564"></a><span class="lineno"> 564</span>&#160;</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</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="l00566"></a><span class="lineno"> 566</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="l00567"></a><span class="lineno"> 567</span>&#160;</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="comment">// Helper functions to get around gcc stupidities</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</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="l00570"></a><span class="lineno"> 570</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="l00571"></a><span class="lineno"> 571</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="l00572"></a><span class="lineno"> 572</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="l00573"></a><span class="lineno"> 573</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="l00574"></a><span class="lineno"> 574</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="l00575"></a><span class="lineno"> 575</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="l00576"></a><span class="lineno"> 576</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="l00577"></a><span class="lineno"> 577</span>&#160;};</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;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_af6173cca91ee446766cc15102990d7bb"><div class="ttname"><a href="class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb">CLEDController::getAdjustment</a></div><div class="ttdeci">CRGB getAdjustment(uint8_t scale)</div><div class="ttdoc">Get the combined brightness/color adjustment for this controller. </div><div class="ttdef"><b>Definition:</b> controller.h:152</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_aa4124b1cf5546ad028166e7884276076"><div class="ttname"><a href="class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076">CLEDController::showLeds</a></div><div class="ttdeci">void showLeds(uint8_t brightness=255)</div><div class="ttdoc">show function using the "attached to this controller" led data </div><div class="ttdef"><b>Definition:</b> controller.h:88</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:83</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a168c661bb9b4a5dfc797b69d3900b26c"><div class="ttname"><a href="class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c">CLEDController::getCorrection</a></div><div class="ttdeci">CRGB getCorrection()</div><div class="ttdoc">get the correction value used by this controller </div><div class="ttdef"><b>Definition:</b> controller.h:142</div></div>
+<div class="ttc" id="group___color_enums_html_ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368"><div class="ttname"><a href="group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af964ffff5f2977a60a83aa3f9f8b4368">UncorrectedColor</a></div><div class="ttdoc">uncorrected color </div><div class="ttdef"><b>Definition:</b> color.h:26</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="ttdoc">Base definition for an LED controller. </div><div class="ttdef"><b>Definition:</b> controller.h:34</div></div>
+<div class="ttc" id="struct_pixel_controller_html_a900493d7e9e345d0cb6e602186151e73"><div class="ttname"><a href="struct_pixel_controller.html#a900493d7e9e345d0cb6e602186151e73">PixelController::__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void stepDithering()</div><div class="ttdoc">step the dithering forward </div><div class="ttdef"><b>Definition:</b> controller.h:342</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a7b61c81e004c96ff670a2742057a5a52"><div class="ttname"><a href="class_c_l_e_d_controller.html#a7b61c81e004c96ff670a2742057a5a52">CLEDController::clearLedData</a></div><div class="ttdeci">void clearLedData()</div><div class="ttdoc">zero out the led data managed by this controller </div><div class="ttdef"><b>Definition:</b> controller.h:117</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a69ac4a882bdc4a813ae957ddedb5a883"><div class="ttname"><a href="class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883">CLEDController::setTemperature</a></div><div class="ttdeci">CLEDController &amp; setTemperature(CRGB temperature)</div><div class="ttdoc">set the color temperature, aka white point, for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:145</div></div>
+<div class="ttc" id="group___scaling_html_ga6c160f8c36ce9b3c5eda68e4992010af"><div class="ttname"><a href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8(uint8_t i, fract8 scale)</div><div class="ttdoc">scale one byte by a second one, which is treated as the numerator of a fraction whose denominator is ...</div><div class="ttdef"><b>Definition:</b> scale8.h:14</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a5b08378b29f92c5def65175ec5334037"><div class="ttname"><a href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">CLEDController::setLeds</a></div><div class="ttdeci">CLEDController &amp; setLeds(CRGB *data, int nLeds)</div><div class="ttdoc">set the default array of leds to be used by this controller </div><div class="ttdef"><b>Definition:</b> controller.h:110</div></div>
+<div class="ttc" id="struct_pixel_controller_html_a9b0bc80097821046dbda7bbbf38dd7df"><div class="ttname"><a href="struct_pixel_controller.html#a9b0bc80097821046dbda7bbbf38dd7df">PixelController::__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void preStepFirstByteDithering()</div><div class="ttdoc">Some chipsets pre-cycle the first byte, which means we want to cycle byte 0&#39;s dithering separately...</div><div class="ttdef"><b>Definition:</b> controller.h:351</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:375</div></div>
+<div class="ttc" id="struct_pixel_controller_html_aec44f7bfc391ebf4874f678a994eff71"><div class="ttname"><a href="struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71">PixelController::PixelController</a></div><div class="ttdeci">PixelController(const PixelController &amp;other)</div><div class="ttdoc">copy constructor for the pixel controller object </div><div class="ttdef"><b>Definition:</b> controller.h:190</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a8840496d231f1fe0fa640970dc14db08"><div class="ttname"><a href="class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08">CLEDController::size</a></div><div class="ttdeci">int size()</div><div class="ttdoc">How many leds does this controller manage? </div><div class="ttdef"><b>Definition:</b> controller.h:124</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="ttdoc">High level controller interface for FastLED. </div><div class="ttdef"><b>Definition:</b> FastLED.h:130</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a253069a734075b298da65d59d6efbb3b"><div class="ttname"><a href="class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b">CLEDController::showColor</a></div><div class="ttdeci">void showColor(const struct CRGB &amp;data, int nLeds, uint8_t brightness)</div><div class="ttdoc">show function w/integer brightness, will scale for color correction and temperature ...</div><div class="ttdef"><b>Definition:</b> controller.h:83</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a9620d0a629a6a3294c71f5f8dbfe91b8"><div class="ttname"><a href="class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8">CLEDController::setCorrection</a></div><div class="ttdeci">CLEDController &amp; setCorrection(CRGB correction)</div><div class="ttdoc">the the color corrction to use for this controller, expressed as an rgb object </div><div class="ttdef"><b>Definition:</b> controller.h:138</div></div>
<div class="ttc" id="class_c_l_e_d_controller_html_af877a15a5ec452780fbd1d359b8a9913"><div class="ttname"><a href="class_c_l_e_d_controller.html#af877a15a5ec452780fbd1d359b8a9913">CLEDController::init</a></div><div class="ttdeci">virtual void init()=0</div><div class="ttdoc">initialize the LED controller </div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_afc94e9d029d7e59f56a4ab845f3de32d"><div class="ttname"><a href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">CLEDController::getTemperature</a></div><div class="ttdeci">CRGB getTemperature()</div><div class="ttdoc">get the color temperature, aka whipe point, for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:147</div></div>
-<div class="ttc" id="struct_pixel_controller_html"><div class="ttname"><a href="struct_pixel_controller.html">PixelController</a></div><div class="ttdoc">Pixel controller class. </div><div class="ttdef"><b>Definition:</b> controller.h:177</div></div>
-<div class="ttc" id="struct_pixel_controller_html_a404558c7da7f3f6fae768bc45af9dc03"><div class="ttname"><a href="struct_pixel_controller.html#a404558c7da7f3f6fae768bc45af9dc03">PixelController::__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void advanceData()</div><div class="ttdoc">advance the data pointer forward, adjust position counter </div><div class="ttdef"><b>Definition:</b> controller.h:335</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a4ccd149ab7282817041a1ae4e586a9d4"><div class="ttname"><a href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a></div><div class="ttdeci">void showColor(const struct CRGB &amp;data, uint8_t brightness=255)</div><div class="ttdoc">show the given color on the led strip </div><div class="ttdef"><b>Definition:</b> controller.h:91</div></div>
-<div class="ttc" id="struct_pixel_controller_html_a81403c8810658d3c41cb210703bbfc00"><div class="ttname"><a href="struct_pixel_controller.html#a81403c8810658d3c41cb210703bbfc00">PixelController::PixelController</a></div><div class="ttdeci">PixelController(const uint8_t *d, int len, CRGB &amp;s, EDitherMode dither=BINARY_DITHER, bool advance=true, uint8_t skip=0)</div><div class="ttdoc">create a pixel controller for managing led data as it is being written out </div><div class="ttdef"><b>Definition:</b> controller.h:208</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a1e6d35be39f9f67aacdb4709ea914ab4"><div class="ttname"><a href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">CLEDController::setTemperature</a></div><div class="ttdeci">CLEDController &amp; setTemperature(ColorTemperature temperature)</div><div class="ttdoc">set the color temperature, aka white point, for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:145</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a06cfb05ad6e0f7982328928051f3f565"><div class="ttname"><a href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">CLEDController::next</a></div><div class="ttdeci">CLEDController * next()</div><div class="ttdoc">get the next controller in the chain after this one. will return NULL at the end of the chain ...</div><div class="ttdef"><b>Definition:</b> controller.h:98</div></div>
-<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f">UncorrectedTemperature</a></div><div class="ttdoc">Uncorrected temperature 0xFFFFFF. </div><div class="ttdef"><b>Definition:</b> color.h:72</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a0703d15ea35deaf94eed59ae27bc3517"><div class="ttname"><a href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">CLEDController::setDither</a></div><div class="ttdeci">CLEDController &amp; setDither(uint8_t ditherMode=BINARY_DITHER)</div><div class="ttdoc">set the dithering mode for this controller to use </div><div class="ttdef"><b>Definition:</b> controller.h:131</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a5e86c45c89ebfb7b21f9045790302399"><div class="ttname"><a href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">CLEDController::leds</a></div><div class="ttdeci">CRGB * leds()</div><div class="ttdoc">Pointer to the CRGB array for this controller. </div><div class="ttdef"><b>Definition:</b> controller.h:125</div></div>
-<div class="ttc" id="group___color_enums_html_gadf6bcba67c9573665af20788c4431ae8"><div class="ttname"><a href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8">LEDColorCorrection</a></div><div class="ttdeci">LEDColorCorrection</div><div class="ttdef"><b>Definition:</b> color.h:7</div></div>
-<div class="ttc" id="struct_pixel_controller_html_a3e923be6212346c5ae98f7731d74c2e3"><div class="ttname"><a href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">PixelController::enable_dithering</a></div><div class="ttdeci">void enable_dithering(EDitherMode dither)</div><div class="ttdoc">toggle dithering enable </div><div class="ttdef"><b>Definition:</b> controller.h:324</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_afc94e9d029d7e59f56a4ab845f3de32d"><div class="ttname"><a href="class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d">CLEDController::getTemperature</a></div><div class="ttdeci">CRGB getTemperature()</div><div class="ttdoc">get the color temperature, aka whipe point, for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:149</div></div>
+<div class="ttc" id="struct_pixel_controller_html"><div class="ttname"><a href="struct_pixel_controller.html">PixelController</a></div><div class="ttdoc">Pixel controller class. </div><div class="ttdef"><b>Definition:</b> controller.h:181</div></div>
+<div class="ttc" id="struct_pixel_controller_html_a404558c7da7f3f6fae768bc45af9dc03"><div class="ttname"><a href="struct_pixel_controller.html#a404558c7da7f3f6fae768bc45af9dc03">PixelController::__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void advanceData()</div><div class="ttdoc">advance the data pointer forward, adjust position counter </div><div class="ttdef"><b>Definition:</b> controller.h:339</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a4ccd149ab7282817041a1ae4e586a9d4"><div class="ttname"><a href="class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4">CLEDController::showColor</a></div><div class="ttdeci">void showColor(const struct CRGB &amp;data, uint8_t brightness=255)</div><div class="ttdoc">show the given color on the led strip </div><div class="ttdef"><b>Definition:</b> controller.h:93</div></div>
+<div class="ttc" id="struct_pixel_controller_html_a81403c8810658d3c41cb210703bbfc00"><div class="ttname"><a href="struct_pixel_controller.html#a81403c8810658d3c41cb210703bbfc00">PixelController::PixelController</a></div><div class="ttdeci">PixelController(const uint8_t *d, int len, CRGB &amp;s, EDitherMode dither=BINARY_DITHER, bool advance=true, uint8_t skip=0)</div><div class="ttdoc">create a pixel controller for managing led data as it is being written out </div><div class="ttdef"><b>Definition:</b> controller.h:212</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a1e6d35be39f9f67aacdb4709ea914ab4"><div class="ttname"><a href="class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4">CLEDController::setTemperature</a></div><div class="ttdeci">CLEDController &amp; setTemperature(ColorTemperature temperature)</div><div class="ttdoc">set the color temperature, aka white point, for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:147</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a06cfb05ad6e0f7982328928051f3f565"><div class="ttname"><a href="class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565">CLEDController::next</a></div><div class="ttdeci">CLEDController * next()</div><div class="ttdoc">get the next controller in the chain after this one. will return NULL at the end of the chain ...</div><div class="ttdef"><b>Definition:</b> controller.h:100</div></div>
+<div class="ttc" id="group___color_enums_html_gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f"><div class="ttname"><a href="group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9ae3d35275ab8c374612bcfbcce732b39f">UncorrectedTemperature</a></div><div class="ttdoc">Uncorrected temperature 0xFFFFFF. </div><div class="ttdef"><b>Definition:</b> color.h:74</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a0703d15ea35deaf94eed59ae27bc3517"><div class="ttname"><a href="class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517">CLEDController::setDither</a></div><div class="ttdeci">CLEDController &amp; setDither(uint8_t ditherMode=BINARY_DITHER)</div><div class="ttdoc">set the dithering mode for this controller to use </div><div class="ttdef"><b>Definition:</b> controller.h:133</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a5e86c45c89ebfb7b21f9045790302399"><div class="ttname"><a href="class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399">CLEDController::leds</a></div><div class="ttdeci">CRGB * leds()</div><div class="ttdoc">Pointer to the CRGB array for this controller. </div><div class="ttdef"><b>Definition:</b> controller.h:127</div></div>
+<div class="ttc" id="group___color_enums_html_gadf6bcba67c9573665af20788c4431ae8"><div class="ttname"><a href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8">LEDColorCorrection</a></div><div class="ttdeci">LEDColorCorrection</div><div class="ttdef"><b>Definition:</b> color.h:9</div></div>
+<div class="ttc" id="struct_pixel_controller_html_a3e923be6212346c5ae98f7731d74c2e3"><div class="ttname"><a href="struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3">PixelController::enable_dithering</a></div><div class="ttdeci">void enable_dithering(EDitherMode dither)</div><div class="ttdoc">toggle dithering enable </div><div class="ttdef"><b>Definition:</b> controller.h:328</div></div>
<div class="ttc" id="class_c_l_e_d_controller_html_add284627121ffab140e083e84fadc37f"><div class="ttname"><a href="class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f">CLEDController::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)=0</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div></div>
-<div class="ttc" id="struct_pixel_controller_html_a11aef85a0ef8a9276cd2e729d57aa49b"><div class="ttname"><a href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">PixelController::__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline bool has(int n)</div><div class="ttdoc">Do we have n pixels left to process? </div><div class="ttdef"><b>Definition:</b> controller.h:319</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a8c560c6d171f117dfd19c0f2ec780a32"><div class="ttname"><a href="class_c_l_e_d_controller.html#a8c560c6d171f117dfd19c0f2ec780a32">CLEDController::CLEDController</a></div><div class="ttdeci">CLEDController()</div><div class="ttdoc">create an led controller object, add it to the chain of controllers </div><div class="ttdef"><b>Definition:</b> controller.h:62</div></div>
+<div class="ttc" id="struct_pixel_controller_html_a11aef85a0ef8a9276cd2e729d57aa49b"><div class="ttname"><a href="struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b">PixelController::__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline bool has(int n)</div><div class="ttdoc">Do we have n pixels left to process? </div><div class="ttdef"><b>Definition:</b> controller.h:323</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a8c560c6d171f117dfd19c0f2ec780a32"><div class="ttname"><a href="class_c_l_e_d_controller.html#a8c560c6d171f117dfd19c0f2ec780a32">CLEDController::CLEDController</a></div><div class="ttdeci">CLEDController()</div><div class="ttdoc">create an led controller object, add it to the chain of controllers </div><div class="ttdef"><b>Definition:</b> controller.h:64</div></div>
<div class="ttc" id="class_c_l_e_d_controller_html_a068fa50d8c7d31bd8537b731eea84c92"><div class="ttname"><a href="class_c_l_e_d_controller.html#a068fa50d8c7d31bd8537b731eea84c92">CLEDController::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)=0</div><div class="ttdoc">set all the leds on the controller to a given color </div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a676f705adf93898739a405b85150a3e7"><div class="ttname"><a href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">CLEDController::getDither</a></div><div class="ttdeci">uint8_t getDither()</div><div class="ttdoc">get the dithering option currently set for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:133</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a74c43977660742e8185fd666e5d66bf9"><div class="ttname"><a href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">CLEDController::setCorrection</a></div><div class="ttdeci">CLEDController &amp; setCorrection(LEDColorCorrection correction)</div><div class="ttdoc">set the color correction to use for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:138</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a676f705adf93898739a405b85150a3e7"><div class="ttname"><a href="class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7">CLEDController::getDither</a></div><div class="ttdeci">uint8_t getDither()</div><div class="ttdoc">get the dithering option currently set for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:135</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a74c43977660742e8185fd666e5d66bf9"><div class="ttname"><a href="class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9">CLEDController::setCorrection</a></div><div class="ttdeci">CLEDController &amp; setCorrection(LEDColorCorrection correction)</div><div class="ttdoc">set the color correction to use for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:140</div></div>
<div class="ttc" id="class_c_l_e_d_controller_html_adfa6601c84fefd733904b32ac98b6dae"><div class="ttname"><a href="class_c_l_e_d_controller.html#adfa6601c84fefd733904b32ac98b6dae">CLEDController::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)=0</div><div class="ttdoc">clear out/zero out the given number of leds. </div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_abe990b9a65f5bff1f391cc5c28752abb"><div class="ttname"><a href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a></div><div class="ttdeci">void show(const struct CRGB *data, int nLeds, uint8_t brightness)</div><div class="ttdoc">show function w/integer brightness, will scale for color correction and temperature ...</div><div class="ttdef"><b>Definition:</b> controller.h:76</div></div>
-<div class="ttc" id="struct_pixel_controller_html_accb48b27c47c742a8b13f97ae1d82d32"><div class="ttname"><a href="struct_pixel_controller.html#accb48b27c47c742a8b13f97ae1d82d32">PixelController::init_binary_dithering</a></div><div class="ttdeci">void init_binary_dithering()</div><div class="ttdoc">initialize the binary dithering for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:242</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a278a429964bec69b3c91486665e61c0a"><div class="ttname"><a href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">CLEDController::operator[]</a></div><div class="ttdeci">CRGB &amp; operator[](int x)</div><div class="ttdoc">Reference to the n&#39;th item in the controller. </div><div class="ttdef"><b>Definition:</b> controller.h:128</div></div>
-<div class="ttc" id="group___color_enums_html_ga251e9e8dc2c7b981786b71706522b2a9"><div class="ttname"><a href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9">ColorTemperature</a></div><div class="ttdeci">ColorTemperature</div><div class="ttdef"><b>Definition:</b> color.h:29</div></div>
-<div class="ttc" id="class_c_l_e_d_controller_html_a75a5a6ea50899409d875d72393323ca0"><div class="ttname"><a href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">CLEDController::head</a></div><div class="ttdeci">static CLEDController * head()</div><div class="ttdoc">get the first led controller in the chain of controllers </div><div class="ttdef"><b>Definition:</b> controller.h:96</div></div>
-<div class="ttc" id="struct_pixel_controller_html_afbe76a814e6bec02854dd4df167567b4"><div class="ttname"><a href="struct_pixel_controller.html#afbe76a814e6bec02854dd4df167567b4">PixelController::__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline int advanceBy()</div><div class="ttdoc">get the amount to advance the pointer by </div><div class="ttdef"><b>Definition:</b> controller.h:332</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_abe990b9a65f5bff1f391cc5c28752abb"><div class="ttname"><a href="class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb">CLEDController::show</a></div><div class="ttdeci">void show(const struct CRGB *data, int nLeds, uint8_t brightness)</div><div class="ttdoc">show function w/integer brightness, will scale for color correction and temperature ...</div><div class="ttdef"><b>Definition:</b> controller.h:78</div></div>
+<div class="ttc" id="struct_pixel_controller_html_accb48b27c47c742a8b13f97ae1d82d32"><div class="ttname"><a href="struct_pixel_controller.html#accb48b27c47c742a8b13f97ae1d82d32">PixelController::init_binary_dithering</a></div><div class="ttdeci">void init_binary_dithering()</div><div class="ttdoc">initialize the binary dithering for this controller </div><div class="ttdef"><b>Definition:</b> controller.h:246</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a278a429964bec69b3c91486665e61c0a"><div class="ttname"><a href="class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a">CLEDController::operator[]</a></div><div class="ttdeci">CRGB &amp; operator[](int x)</div><div class="ttdoc">Reference to the n&#39;th item in the controller. </div><div class="ttdef"><b>Definition:</b> controller.h:130</div></div>
+<div class="ttc" id="group___color_enums_html_ga251e9e8dc2c7b981786b71706522b2a9"><div class="ttname"><a href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9">ColorTemperature</a></div><div class="ttdeci">ColorTemperature</div><div class="ttdef"><b>Definition:</b> color.h:31</div></div>
+<div class="ttc" id="class_c_l_e_d_controller_html_a75a5a6ea50899409d875d72393323ca0"><div class="ttname"><a href="class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0">CLEDController::head</a></div><div class="ttdeci">static CLEDController * head()</div><div class="ttdoc">get the first led controller in the chain of controllers </div><div class="ttdef"><b>Definition:</b> controller.h:98</div></div>
+<div class="ttc" id="struct_pixel_controller_html_afbe76a814e6bec02854dd4df167567b4"><div class="ttname"><a href="struct_pixel_controller.html#afbe76a814e6bec02854dd4df167567b4">PixelController::__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline int advanceBy()</div><div class="ttdoc">get the amount to advance the pointer by </div><div class="ttdef"><b>Definition:</b> controller.h:336</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/dmx_8h_source.html b/docs/3.1/dmx_8h_source.html
index 3bc3941b..17c94605 100644
--- a/docs/3.1/dmx_8h_source.html
+++ b/docs/3.1/dmx_8h_source.html
@@ -95,114 +95,124 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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"><a class="line" href="class_d_m_x_simple_controller.html"> 10</a></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><a class="code" href="class_d_m_x_simple_controller.html">DMXSimpleController</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="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"><a class="line" href="class_d_m_x_simple_controller.html#a251c7d09383870337853c360996871c3"> 13</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_simple_controller.html#a251c7d09383870337853c360996871c3">init</a>() { 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"><a class="line" href="class_d_m_x_simple_controller.html#a66deae70caf1d43a8692fff6540d1f1e"> 16</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_simple_controller.html#a66deae70caf1d43a8692fff6540d1f1e">clearLeds</a>(<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"><a class="line" href="class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1"> 23</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1">showColor</a>(<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"><a class="line" href="class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186"> 35</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186">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) {</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="l00009"></a><span class="lineno"> 9</span>&#160;FASTLED_NAMESPACE_BEGIN</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">// note - dmx simple must be included before FastSPI for this code to be enabled</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"><a class="line" href="class_d_m_x_simple_controller.html"> 12</a></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><a class="code" href="class_d_m_x_simple_controller.html">DMXSimpleController</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="l00013"></a><span class="lineno"> 13</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; <span class="comment">// initialize the LED controller</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="class_d_m_x_simple_controller.html#a251c7d09383870337853c360996871c3"> 15</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_simple_controller.html#a251c7d09383870337853c360996871c3">init</a>() { DmxSimple.usePin(DATA_PIN); }</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">// clear out/zero out the given number of leds.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="class_d_m_x_simple_controller.html#a66deae70caf1d43a8692fff6540d1f1e"> 18</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_simple_controller.html#a66deae70caf1d43a8692fff6540d1f1e">clearLeds</a>(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordtype">int</span> count = min(nLeds * 3, DMX_SIZE);</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</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="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="keyword">protected</span>:</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="comment">// set all the leds on the controller to a given color</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1"> 25</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1">showColor</a>(<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="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordtype">int</span> count = min(nLeds, DMX_SIZE / 3);</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordtype">int</span> iChannel = 1;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; count; i++) {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; DmxSimple.write(iChannel++, <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data[RGB_BYTE0(RGB_ORDER)], scale.raw[RGB_BYTE0(RGB_ORDER)]));</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; DmxSimple.write(iChannel++, <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data[RGB_BYTE1(RGB_ORDER)], scale.raw[RGB_BYTE1(RGB_ORDER)]));</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; DmxSimple.write(iChannel++, <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data[RGB_BYTE2(RGB_ORDER)], scale.raw[RGB_BYTE2(RGB_ORDER)]));</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;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</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="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// nLeds is the number of RGB leds being written to</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186"> 37</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186">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) {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">int</span> count = min(nLeds, DMX_SIZE / 3);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">int</span> iChannel = 1;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; count; i++) {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; DmxSimple.write(iChannel++, <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data[i][RGB_BYTE0(RGB_ORDER)], scale.raw[RGB_BYTE0(RGB_ORDER)]));</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; DmxSimple.write(iChannel++, <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data[i][RGB_BYTE1(RGB_ORDER)], scale.raw[RGB_BYTE1(RGB_ORDER)]));</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; DmxSimple.write(iChannel++, <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data[i][RGB_BYTE2(RGB_ORDER)], scale.raw[RGB_BYTE2(RGB_ORDER)]));</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> <a class="code" href="class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186">show</a>(<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="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</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="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186">show</a>(<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="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#endif</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;</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"><a class="line" href="class_d_m_x_serial_controller.html"> 57</a></span>&#160;<span class="keyword">template</span> &lt;EOrder RGB_ORDER = RGB&gt; <span class="keyword">class </span><a class="code" href="class_d_m_x_serial_controller.html">DMXSerialController</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="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"><a class="line" href="class_d_m_x_serial_controller.html#a0cd937424d4f6eedb90acec81ca1fa27"> 60</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_serial_controller.html#a0cd937424d4f6eedb90acec81ca1fa27">init</a>() { 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"><a class="line" href="class_d_m_x_serial_controller.html#a04689efea1c1daf74905f87692caa129"> 63</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_serial_controller.html#a04689efea1c1daf74905f87692caa129">clearLeds</a>(<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="l00054"></a><span class="lineno"> 54</span>&#160;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#ifdef DmxSerial_h</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#include&lt;DMXSerial.h&gt;</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;FASTLED_NAMESPACE_BEGIN</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"><a class="line" href="class_d_m_x_serial_controller.html"> 63</a></span>&#160;<span class="keyword">template</span> &lt;EOrder RGB_ORDER = RGB&gt; <span class="keyword">class </span><a class="code" href="class_d_m_x_serial_controller.html">DMXSerialController</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="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// initialize the LED controller</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="class_d_m_x_serial_controller.html#a0cd937424d4f6eedb90acec81ca1fa27"> 66</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_serial_controller.html#a0cd937424d4f6eedb90acec81ca1fa27">init</a>() { DMXSerial.init(DMXController); }</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"><a class="line" href="class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b"> 69</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b">showColor</a>(<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"><a class="line" href="class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1"> 81</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1">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) {</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> <a class="code" href="class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1">show</a>(<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="class_d_m_x_simple_controller_html_a66deae70caf1d43a8692fff6540d1f1e"><div class="ttname"><a href="class_d_m_x_simple_controller.html#a66deae70caf1d43a8692fff6540d1f1e">DMXSimpleController::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> dmx.h:16</div></div>
-<div class="ttc" id="class_d_m_x_serial_controller_html_a04689efea1c1daf74905f87692caa129"><div class="ttname"><a href="class_d_m_x_serial_controller.html#a04689efea1c1daf74905f87692caa129">DMXSerialController::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> dmx.h:63</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_d_m_x_serial_controller_html_a0cd937424d4f6eedb90acec81ca1fa27"><div class="ttname"><a href="class_d_m_x_serial_controller.html#a0cd937424d4f6eedb90acec81ca1fa27">DMXSerialController::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> dmx.h:60</div></div>
-<div class="ttc" id="class_d_m_x_serial_controller_html_a3f3f3e606e495fd1bdcfd25c6bed7fe1"><div class="ttname"><a href="class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1">DMXSerialController::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> dmx.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="ttdoc">Base definition for an LED controller. </div><div class="ttdef"><b>Definition:</b> controller.h:32</div></div>
-<div class="ttc" id="class_d_m_x_simple_controller_html_a251c7d09383870337853c360996871c3"><div class="ttname"><a href="class_d_m_x_simple_controller.html#a251c7d09383870337853c360996871c3">DMXSimpleController::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> dmx.h:13</div></div>
-<div class="ttc" id="class_d_m_x_simple_controller_html"><div class="ttname"><a href="class_d_m_x_simple_controller.html">DMXSimpleController</a></div><div class="ttdef"><b>Definition:</b> dmx.h:10</div></div>
-<div class="ttc" id="class_d_m_x_simple_controller_html_a3fb3a0501aae1d7a6aefb89f77168bd1"><div class="ttname"><a href="class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1">DMXSimpleController::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> dmx.h:23</div></div>
-<div class="ttc" id="class_d_m_x_serial_controller_html"><div class="ttname"><a href="class_d_m_x_serial_controller.html">DMXSerialController</a></div><div class="ttdef"><b>Definition:</b> dmx.h:57</div></div>
-<div class="ttc" id="class_d_m_x_serial_controller_html_a3d6285e65af8862eb4b0d36d6d3df22b"><div class="ttname"><a href="class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b">DMXSerialController::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> dmx.h:69</div></div>
-<div class="ttc" id="class_d_m_x_simple_controller_html_a29df92ccb41090893fa3c49f22b47186"><div class="ttname"><a href="class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186">DMXSimpleController::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> dmx.h:35</div></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// clear out/zero out the given number of leds.</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="class_d_m_x_serial_controller.html#a04689efea1c1daf74905f87692caa129"> 69</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_serial_controller.html#a04689efea1c1daf74905f87692caa129">clearLeds</a>(<span class="keywordtype">int</span> nLeds) {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">int</span> count = min(nLeds * 3, DMXSERIAL_MAX);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</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="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">// set all the leds on the controller to a given color</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b"> 75</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b">showColor</a>(<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="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">int</span> count = min(nLeds, DMXSERIAL_MAX / 3);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">int</span> iChannel = 0;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; count; i++) {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; DMXSerial.write(iChannel++, <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data[RGB_BYTE0(RGB_ORDER)], scale.raw[RGB_BYTE0(RGB_ORDER)]));</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; DMXSerial.write(iChannel++, <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data[RGB_BYTE1(RGB_ORDER)], scale.raw[RGB_BYTE1(RGB_ORDER)]));</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; DMXSerial.write(iChannel++, <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data[RGB_BYTE2(RGB_ORDER)], scale.raw[RGB_BYTE2(RGB_ORDER)]));</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;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</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="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">// nLeds is the number of RGB leds being written to</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1"> 87</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1">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) {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">int</span> count = min(nLeds, DMXSERIAL_MAX / 3);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">int</span> iChannel = 0;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; count; i++) {</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; DMXSerial.write(iChannel++, <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data[i][RGB_BYTE0(RGB_ORDER)], scale.raw[RGB_BYTE0(RGB_ORDER)]));</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; DMXSerial.write(iChannel++, <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data[i][RGB_BYTE1(RGB_ORDER)], scale.raw[RGB_BYTE1(RGB_ORDER)]));</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; DMXSerial.write(iChannel++, <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data[i][RGB_BYTE2(RGB_ORDER)], scale.raw[RGB_BYTE2(RGB_ORDER)]));</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</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">#ifdef SUPPORT_ARGB</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</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="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1">show</a>(<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="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;};</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">#define HAS_DMX_SERIAL</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="class_d_m_x_simple_controller_html_a66deae70caf1d43a8692fff6540d1f1e"><div class="ttname"><a href="class_d_m_x_simple_controller.html#a66deae70caf1d43a8692fff6540d1f1e">DMXSimpleController::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> dmx.h:18</div></div>
+<div class="ttc" id="class_d_m_x_serial_controller_html_a04689efea1c1daf74905f87692caa129"><div class="ttname"><a href="class_d_m_x_serial_controller.html#a04689efea1c1daf74905f87692caa129">DMXSerialController::clearLeds</a></div><div class="ttdeci">virtual void clearLeds(int nLeds)</div><div class="ttdoc">clear out/zero out the given number of leds. </div><div class="ttdef"><b>Definition:</b> dmx.h:69</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:83</div></div>
+<div class="ttc" id="class_d_m_x_serial_controller_html_a0cd937424d4f6eedb90acec81ca1fa27"><div class="ttname"><a href="class_d_m_x_serial_controller.html#a0cd937424d4f6eedb90acec81ca1fa27">DMXSerialController::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> dmx.h:66</div></div>
+<div class="ttc" id="class_d_m_x_serial_controller_html_a3f3f3e606e495fd1bdcfd25c6bed7fe1"><div class="ttname"><a href="class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1">DMXSerialController::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> dmx.h:87</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="ttdoc">Base definition for an LED controller. </div><div class="ttdef"><b>Definition:</b> controller.h:34</div></div>
+<div class="ttc" id="group___scaling_html_ga6c160f8c36ce9b3c5eda68e4992010af"><div class="ttname"><a href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8(uint8_t i, fract8 scale)</div><div class="ttdoc">scale one byte by a second one, which is treated as the numerator of a fraction whose denominator is ...</div><div class="ttdef"><b>Definition:</b> scale8.h:14</div></div>
+<div class="ttc" id="class_d_m_x_simple_controller_html_a251c7d09383870337853c360996871c3"><div class="ttname"><a href="class_d_m_x_simple_controller.html#a251c7d09383870337853c360996871c3">DMXSimpleController::init</a></div><div class="ttdeci">virtual void init()</div><div class="ttdoc">initialize the LED controller </div><div class="ttdef"><b>Definition:</b> dmx.h:15</div></div>
+<div class="ttc" id="class_d_m_x_simple_controller_html"><div class="ttname"><a href="class_d_m_x_simple_controller.html">DMXSimpleController</a></div><div class="ttdef"><b>Definition:</b> dmx.h:12</div></div>
+<div class="ttc" id="class_d_m_x_simple_controller_html_a3fb3a0501aae1d7a6aefb89f77168bd1"><div class="ttname"><a href="class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1">DMXSimpleController::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> dmx.h:25</div></div>
+<div class="ttc" id="class_d_m_x_serial_controller_html"><div class="ttname"><a href="class_d_m_x_serial_controller.html">DMXSerialController</a></div><div class="ttdef"><b>Definition:</b> dmx.h:63</div></div>
+<div class="ttc" id="class_d_m_x_serial_controller_html_a3d6285e65af8862eb4b0d36d6d3df22b"><div class="ttname"><a href="class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b">DMXSerialController::showColor</a></div><div class="ttdeci">virtual void showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)</div><div class="ttdoc">set all the leds on the controller to a given color </div><div class="ttdef"><b>Definition:</b> dmx.h:75</div></div>
+<div class="ttc" id="class_d_m_x_simple_controller_html_a29df92ccb41090893fa3c49f22b47186"><div class="ttname"><a href="class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186">DMXSimpleController::show</a></div><div class="ttdeci">virtual void show(const struct CRGB *data, int nLeds, CRGB scale)</div><div class="ttdoc">write the passed in rgb data out to the leds managed by this controller </div><div class="ttdef"><b>Definition:</b> dmx.h:37</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/fastled__config_8h_source.html b/docs/3.1/fastled__config_8h_source.html
index 5bb944ea..c1f4d1fb 100644
--- a/docs/3.1/fastled__config_8h_source.html
+++ b/docs/3.1/fastled__config_8h_source.html
@@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#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>
@@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/fastpin_8h_source.html b/docs/3.1/fastpin_8h_source.html
index 70cd2a39..a17ab94e 100644
--- a/docs/3.1/fastpin_8h_source.html
+++ b/docs/3.1/fastpin_8h_source.html
@@ -92,132 +92,195 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="l00006"></a><span class="lineno"> 6</span>&#160;FASTLED_NAMESPACE_BEGIN</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="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#define NO_PIN 255</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;</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="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// Pin access class - needs to tune for various platforms (naive fallback solution?)</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="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="class_selectable.html"> 16</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_selectable.html">Selectable</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">virtual</span> <span class="keywordtype">void</span> select() = 0;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> release() = 0;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isSelected() = 0;</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"><a class="line" href="class_pin.html"> 23</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_pin.html">Pin</a> : <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; <a class="code" href="class_pin.html">Pin</a>(<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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *port = val; }</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#if !defined(FASTLED_NO_PINMAP)</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="class_pin.html"> 25</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_pin.html">Pin</a> : <span class="keyword">public</span> <a class="code" href="class_selectable.html">Selectable</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">volatile</span> RwReg *mPort;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">volatile</span> RoReg *mInPort;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; RwReg mPinMask;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; uint8_t mPin;</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="keywordtype">void</span> _init() {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; mPinMask = digitalPinToBitMask(mPin);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; mPort = portOutputRegister(digitalPinToPort(mPin));</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; mInPort = portInputRegister(digitalPinToPort(mPin));</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; }</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="class_pin.html">Pin</a>(<span class="keywordtype">int</span> pin) : mPin(pin) { _init(); }</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">typedef</span> <span class="keyword">volatile</span> RwReg * port_ptr_t;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">typedef</span> RwReg port_t;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> setOutput() { pinMode(mPin, OUTPUT); }</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> setInput() { pinMode(mPin, INPUT); }</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">inline</span> <span class="keywordtype">void</span> hi() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *mPort |= mPinMask; }</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> lo() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *mPort &amp;= ~mPinMask; }</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">inline</span> <span class="keywordtype">void</span> strobe() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { toggle(); toggle(); }</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> toggle() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *mInPort = mPinMask; }</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">inline</span> <span class="keywordtype">void</span> hi(<span class="keyword">register</span> port_ptr_t port) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *port |= mPinMask; }</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> lo(<span class="keyword">register</span> port_ptr_t port) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *port &amp;= ~mPinMask; }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> set(<span class="keyword">register</span> port_t val) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *mPort = 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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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"><a class="line" href="class_output_pin.html"> 65</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_output_pin.html">OutputPin</a> : <span class="keyword">public</span> <a class="code" href="class_pin.html">Pin</a> {</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; <a class="code" href="class_output_pin.html">OutputPin</a>(<span class="keywordtype">int</span> pin) : <a class="code" href="class_pin.html">Pin</a>(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"><a class="line" href="class_input_pin.html"> 70</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_input_pin.html">InputPin</a> : <span class="keyword">public</span> <a class="code" href="class_pin.html">Pin</a> {</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; <a class="code" href="class_input_pin.html">InputPin</a>(<span class="keywordtype">int</span> pin) : <a class="code" href="class_pin.html">Pin</a>(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"><a class="line" href="class_fast_pin.html"> 89</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t PIN&gt; <span class="keyword">class </span><a class="code" href="class_fast_pin.html">FastPin</a> {</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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((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 <a class="code" href="class_fast_pin.html">FastPin&lt;PIN&gt;::sPinMask</a>;</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 *<a class="code" href="class_fast_pin.html">FastPin&lt;PIN&gt;::sPort</a>;</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 *<a class="code" href="class_fast_pin.html">FastPin&lt;PIN&gt;::sInPort</a>;</div>
-<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div>
-<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="class_fast_pin_b_b.html"> 128</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t PIN&gt; <span class="keyword">class </span><a class="code" href="class_fast_pin_b_b.html">FastPinBB</a> : <span class="keyword">public</span> <a class="code" href="class_fast_pin.html">FastPin</a>&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="l00055"></a><span class="lineno"> 55</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *port = val; }</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; port_t hival() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { <span class="keywordflow">return</span> *mPort | mPinMask; }</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; port_t loval() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { <span class="keywordflow">return</span> *mPort &amp; ~mPinMask; }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; port_ptr_t port() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { <span class="keywordflow">return</span> mPort; }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; port_t mask() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { <span class="keywordflow">return</span> mPinMask; }</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">virtual</span> <span class="keywordtype">void</span> select() { hi(); }</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> release() { lo(); }</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</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="l00065"></a><span class="lineno"> 65</span>&#160;};</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="class_output_pin.html"> 67</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_output_pin.html">OutputPin</a> : <span class="keyword">public</span> <a class="code" href="class_pin.html">Pin</a> {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="class_output_pin.html">OutputPin</a>(<span class="keywordtype">int</span> pin) : <a class="code" href="class_pin.html">Pin</a>(pin) { setOutput(); }</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;};</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="class_input_pin.html"> 72</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_input_pin.html">InputPin</a> : <span class="keyword">public</span> <a class="code" href="class_pin.html">Pin</a> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="class_input_pin.html">InputPin</a>(<span class="keywordtype">int</span> pin) : <a class="code" href="class_pin.html">Pin</a>(pin) { setInput(); }</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;};</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">// This is the empty code version of the raw pin class, method bodies should be filled in to Do The Right Thing[tm] when making this</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">// available on a new platform</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="keyword">class </span><a class="code" href="class_pin.html">Pin</a> : <span class="keyword">public</span> <a class="code" href="class_selectable.html">Selectable</a> {</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">volatile</span> RwReg *mPort;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">volatile</span> RoReg *mInPort;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; RwReg mPinMask;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; uint8_t mPin;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">void</span> _init() {</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">// TODO: fill in init on a new platform</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; mPinMask = 0;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; mPort = NULL;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; mInPort = NULL;</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">public</span>:</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="class_pin.html">Pin</a>(<span class="keywordtype">int</span> pin) : mPin(pin) { _init(); }</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">void</span> setPin(<span class="keywordtype">int</span> pin) { mPin = pin; _init(); }</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">typedef</span> <span class="keyword">volatile</span> RwReg * port_ptr_t;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">typedef</span> RwReg port_t;</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> <span class="keywordtype">void</span> setOutput() { <span class="comment">/* TODO: Set pin output */</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> setInput() { <span class="comment">/* TODO: Set pin input */</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> hi() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *mPort |= mPinMask; }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> lo() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *mPort &amp;= ~mPinMask; }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> strobe() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { toggle(); toggle(); }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> toggle() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *mInPort = mPinMask; }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> hi(<span class="keyword">register</span> port_ptr_t port) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *port |= mPinMask; }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> lo(<span class="keyword">register</span> port_ptr_t port) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *port &amp;= ~mPinMask; }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> set(<span class="keyword">register</span> port_t val) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *mPort = val; }</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *port = val; }</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; port_t hival() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { <span class="keywordflow">return</span> *mPort | mPinMask; }</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; port_t loval() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { <span class="keywordflow">return</span> *mPort &amp; ~mPinMask; }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; port_ptr_t port() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { <span class="keywordflow">return</span> mPort; }</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; port_t mask() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { <span class="keywordflow">return</span> mPinMask; }</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">virtual</span> <span class="keywordtype">void</span> select() { hi(); }</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> release() { lo(); }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</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="l00123"></a><span class="lineno"> 123</span>&#160;};</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="keyword">class </span><a class="code" href="class_output_pin.html">OutputPin</a> : <span class="keyword">public</span> <a class="code" href="class_pin.html">Pin</a> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="class_output_pin.html">OutputPin</a>(<span class="keywordtype">int</span> pin) : <a class="code" href="class_pin.html">Pin</a>(pin) { setOutput(); }</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;};</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="keyword">class </span><a class="code" href="class_input_pin.html">InputPin</a> : <span class="keyword">public</span> <a class="code" href="class_pin.html">Pin</a> {</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="class_input_pin.html">InputPin</a>(<span class="keywordtype">int</span> pin) : <a class="code" href="class_pin.html">Pin</a>(pin) { setInput(); }</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_pin_html"><div class="ttname"><a href="class_pin.html">Pin</a></div><div class="ttdef"><b>Definition:</b> fastpin.h:23</div></div>
-<div class="ttc" id="class_output_pin_html"><div class="ttname"><a href="class_output_pin.html">OutputPin</a></div><div class="ttdef"><b>Definition:</b> fastpin.h:65</div></div>
-<div class="ttc" id="class_fast_pin_b_b_html"><div class="ttname"><a href="class_fast_pin_b_b.html">FastPinBB</a></div><div class="ttdef"><b>Definition:</b> fastpin.h:128</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_fast_pin_html"><div class="ttname"><a href="class_fast_pin.html">FastPin</a></div><div class="ttdoc">The simplest level of Pin class. </div><div class="ttdef"><b>Definition:</b> fastpin.h:89</div></div>
-<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void swapbits8(bitswap_type in</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> delay.h:79</div></div>
-<div class="ttc" id="class_input_pin_html"><div class="ttname"><a href="class_input_pin.html">InputPin</a></div><div class="ttdef"><b>Definition:</b> fastpin.h:70</div></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="class_fast_pin.html"> 151</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t PIN&gt; <span class="keyword">class </span><a class="code" href="class_fast_pin.html">FastPin</a> {</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">static</span> RwReg sPinMask;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keyword">static</span> <span class="keyword">volatile</span> RwReg *sPort;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keyword">static</span> <span class="keyword">volatile</span> RoReg *sInPort;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> _init() {</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="preprocessor">#if !defined(FASTLED_NO_PINMAP)</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; sPinMask = digitalPinToBitMask(PIN);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; sPort = portOutputRegister(digitalPinToPort(PIN));</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; sInPort = portInputRegister(digitalPinToPort(PIN));</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="preprocessor">#endif</span></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="keyword">public</span>:</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keyword">typedef</span> <span class="keyword">volatile</span> RwReg * port_ptr_t;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">typedef</span> RwReg port_t;</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">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> setOutput() { _init(); pinMode(PIN, OUTPUT); }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</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="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">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> hi() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *sPort |= sPinMask; }</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> lo() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *sPort &amp;= ~sPinMask; }</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="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> strobe() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { toggle(); toggle(); }</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">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> toggle() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *sInPort = sPinMask; }</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">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> hi(<span class="keyword">register</span> port_ptr_t port) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *port |= sPinMask; }</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *port &amp;= ~sPinMask; }</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *sPort = val; }</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">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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { *port = val; }</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">static</span> port_t hival() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { <span class="keywordflow">return</span> *sPort | sPinMask; }</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">static</span> port_t loval() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { <span class="keywordflow">return</span> *sPort &amp; ~sPinMask; }</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">static</span> port_ptr_t port() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { <span class="keywordflow">return</span> sPort; }</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keyword">static</span> port_t mask() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((always_inline)) { <span class="keywordflow">return</span> sPinMask; }</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;u<span class="keywordtype">int</span>8_t PIN&gt; RwReg <a class="code" href="class_fast_pin.html">FastPin&lt;PIN&gt;::sPinMask</a>;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t PIN&gt; <span class="keyword">volatile</span> RwReg *<a class="code" href="class_fast_pin.html">FastPin&lt;PIN&gt;::sPort</a>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t PIN&gt; <span class="keyword">volatile</span> RoReg *<a class="code" href="class_fast_pin.html">FastPin&lt;PIN&gt;::sInPort</a>;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="class_fast_pin_b_b.html"> 192</a></span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t PIN&gt; <span class="keyword">class </span><a class="code" href="class_fast_pin_b_b.html">FastPinBB</a> : <span class="keyword">public</span> <a class="code" href="class_fast_pin.html">FastPin</a>&lt;PIN&gt; {};</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">typedef</span> <span class="keyword">volatile</span> uint32_t &amp; reg32_t;</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="keyword">typedef</span> <span class="keyword">volatile</span> uint32_t * ptr_reg32_t;</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;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="preprocessor">#endif // __INC_FASTPIN_H</span></div>
+<div class="ttc" id="class_pin_html"><div class="ttname"><a href="class_pin.html">Pin</a></div><div class="ttdef"><b>Definition:</b> fastpin.h:25</div></div>
+<div class="ttc" id="class_output_pin_html"><div class="ttname"><a href="class_output_pin.html">OutputPin</a></div><div class="ttdef"><b>Definition:</b> fastpin.h:67</div></div>
+<div class="ttc" id="class_fast_pin_b_b_html"><div class="ttname"><a href="class_fast_pin_b_b.html">FastPinBB</a></div><div class="ttdef"><b>Definition:</b> fastpin.h:192</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:16</div></div>
+<div class="ttc" id="class_fast_pin_html"><div class="ttname"><a href="class_fast_pin.html">FastPin</a></div><div class="ttdoc">The simplest level of Pin class. </div><div class="ttdef"><b>Definition:</b> fastpin.h:151</div></div>
+<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void swapbits8(bitswap_type in</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> fastled_delay.h:82</div></div>
+<div class="ttc" id="class_input_pin_html"><div class="ttname"><a href="class_input_pin.html">InputPin</a></div><div class="ttdef"><b>Definition:</b> fastpin.h:72</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/fastspi_8h_source.html b/docs/3.1/fastspi_8h_source.html
index ccd6080e..dd7fa524 100644
--- a/docs/3.1/fastspi_8h_source.html
+++ b/docs/3.1/fastspi_8h_source.html
@@ -95,87 +95,116 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="l00009"></a><span class="lineno"> 9</span>&#160;FASTLED_NAMESPACE_BEGIN</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">#if defined(FASTLED_TEENSY3) &amp;&amp; (F_CPU &gt; 48000000)</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#define DATA_RATE_MHZ(X) (((48000000L / 1000000L) / X))</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#define DATA_RATE_KHZ(X) (((48000000L / 1000L) / X))</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#define DATA_RATE_MHZ(X) ((F_CPU / 1000000L) / X)</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define DATA_RATE_KHZ(X) ((F_CPU / 1000L) / X)</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="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">// 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="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">// mappings are known at compile time.</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="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="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="l00027"></a><span class="lineno"><a class="line" href="class_s_p_i_output.html"> 27</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="l00028"></a><span class="lineno"> 28</span>&#160;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">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="l00030"></a><span class="lineno"><a class="line" href="class_software_s_p_i_output.html"> 30</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="l00031"></a><span class="lineno"> 31</span>&#160;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#ifndef FASTLED_FORCE_SOFTWARE_SPI</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#if defined(SPI_DATA) &amp;&amp; defined(SPI_CLOCK)</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"><a class="line" href="class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html"> 36</a></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="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#if defined(FASTLED_TEENSY3) &amp;&amp; defined(ARM_HARDWARE_SPI)</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="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html"> 38</a></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="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"><a class="line" href="class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html"> 41</a></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="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#if defined(SPI2_DATA)</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="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html"> 43</a></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="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">template</span>&lt;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html"> 46</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_s_p_i_output.html">SPIOutput</a>&lt;SPI_DATA, SPI2_CLOCK, SPI_SPEED&gt; : <span class="keyword">public</span> ARMHardwareSPIOutput&lt;SPI_DATA, SPI2_CLOCK, SPI_SPEED, 0x4002C000&gt; {};</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">template</span>&lt;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html"> 49</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_s_p_i_output.html">SPIOutput</a>&lt;SPI2_DATA, SPI_CLOCK, SPI_SPEED&gt; : <span class="keyword">public</span> ARMHardwareSPIOutput&lt;SPI2_DATA, SPI_CLOCK, SPI_SPEED, 0x4002C000&gt; {};</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#endif</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">#elif defined(FASTLED_TEENSYLC) &amp;&amp; defined(ARM_HARDWARE_SPI)</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">#if defined(SPI_UART0_DATA)</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="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
-<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html"> 57</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_s_p_i_output.html">SPIOutput</a>&lt;SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED&gt; : <span class="keyword">public</span> AVRUSART0SPIOutput&lt;SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED&gt; {};</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#define DECLARE_SPI0(__DATA,__CLOCK) template&lt;uint8_t SPI_SPEED&gt;\</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor"> class SPIOutput&lt;__DATA, __CLOCK, SPI_SPEED&gt; : public ARMHardwareSPIOutput&lt;__DATA, __CLOCK, SPI_SPEED, 0x40076000&gt; {};</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor"> #define DECLARE_SPI1(__DATA,__CLOCK) template&lt;uint8_t SPI_SPEED&gt;\</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor"> class SPIOutput&lt;__DATA, __CLOCK, SPI_SPEED&gt; : public ARMHardwareSPIOutput&lt;__DATA, __CLOCK, SPI_SPEED, 0x40077000&gt; {};</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="preprocessor">#if defined(SPI_UART1_DATA)</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="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
-<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html"> 64</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_s_p_i_output.html">SPIOutput</a>&lt;SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED&gt; : <span class="keyword">public</span> AVRUSART1SPIOutput&lt;SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED&gt; {};</div>
-<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
-<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div>
-<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#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">#else</span></div>
-<div class="line"><a name="l00071"></a><span class="lineno"> 71</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="l00059"></a><span class="lineno"> 59</span>&#160;DECLARE_SPI0(7,13);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;DECLARE_SPI0(8,13);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;DECLARE_SPI0(11,13);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;DECLARE_SPI0(12,13);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;DECLARE_SPI0(7,14);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;DECLARE_SPI0(8,14);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;DECLARE_SPI0(11,14);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;DECLARE_SPI0(12,14);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;DECLARE_SPI1(0,20);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;DECLARE_SPI1(1,20);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;DECLARE_SPI1(21,20);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="preprocessor">#elif defined(__SAM3X8E__)</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div>
-<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#endif</span></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 defined(USART_DATA) &amp;&amp; defined(USART_CLOCK)</span></div>
-<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">// template&lt;uint8_t SPI_SPEED&gt;</span></div>
-<div class="line"><a name="l00077"></a><span class="lineno"> 77</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="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">// #endif</span></div>
-<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div>
-<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#warning &quot;Forcing software SPI - no hardware SPI for you!&quot;</span></div>
-<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div>
-<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<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 class="line"><a name="l00073"></a><span class="lineno"> 73</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="l00074"></a><span class="lineno"> 74</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="l00075"></a><span class="lineno"> 75</span>&#160;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="preprocessor">#elif defined(AVR_HARDWARE_SPI)</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</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="l00080"></a><span class="lineno"> 80</span>&#160;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#if defined(SPI_UART0_DATA)</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="keyword">template</span>&lt;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html"> 84</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_s_p_i_output.html">SPIOutput</a>&lt;SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED&gt; : <span class="keyword">public</span> AVRUSART0SPIOutput&lt;SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED&gt; {};</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="preprocessor">#if defined(SPI_UART1_DATA)</span></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;u<span class="keywordtype">int</span>8_t SPI_SPEED&gt;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html"> 91</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_s_p_i_output.html">SPIOutput</a>&lt;SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED&gt; : <span class="keyword">public</span> AVRUSART1SPIOutput&lt;SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED&gt; {};</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="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">#else</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</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="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="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">// #if defined(USART_DATA) &amp;&amp; defined(USART_CLOCK)</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment">// template&lt;uint8_t SPI_SPEED&gt;</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</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="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment">// #endif</span></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="preprocessor">#else</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="preprocessor">#warning &quot;Forcing software SPI - no hardware SPI for you!&quot;</span></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;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="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:27</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:30</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:17</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/fastspi__bitbang_8h_source.html b/docs/3.1/fastspi__bitbang_8h_source.html
index d66a17c0..a227d803 100644
--- a/docs/3.1/fastspi__bitbang_8h_source.html
+++ b/docs/3.1/fastspi__bitbang_8h_source.html
@@ -90,357 +90,363 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="l00004"></a><span class="lineno"> 4</span>&#160;<span class="preprocessor">#include &quot;fastled_delay.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;FASTLED_NAMESPACE_BEGIN</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="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> <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port_ptr_t</a> 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> <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port_t</a> 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; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::setOutput</a>();</div>
-<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::setOutput</a>();</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="l00010"></a><span class="lineno"> 10</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="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="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="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</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="l00017"></a><span class="lineno"><a class="line" href="class_a_v_r_software_s_p_i_output.html"> 17</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="l00018"></a><span class="lineno"> 18</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="l00019"></a><span class="lineno"> 19</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="l00020"></a><span class="lineno"> 20</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="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port_ptr_t</a> clock_ptr_t;</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">// 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="l00024"></a><span class="lineno"> 24</span>&#160; <span class="comment">// are 8 bits wide while on arm they are 32.</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</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="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port_t</a> clock_t;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="class_selectable.html">Selectable</a> *m_pSelect;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</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="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</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="l00033"></a><span class="lineno"> 33</span>&#160;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">void</span> init() {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</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="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// confusing to me)</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::setOutput</a>();</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::setOutput</a>();</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; release();</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="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="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> stop() { }</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="l00045"></a><span class="lineno"> 45</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="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> wait() __attribute__((always_inline)) { }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> waitFully() __attribute__((always_inline)) { wait(); }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeByteNoWait(uint8_t b) __attribute__((always_inline)) { writeByte(b); }</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</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="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">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="l00053"></a><span class="lineno"> 53</span>&#160;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</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="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeByte(uint8_t b) {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; writeBit&lt;7&gt;(b);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; writeBit&lt;6&gt;(b);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; writeBit&lt;5&gt;(b);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; writeBit&lt;4&gt;(b);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; writeBit&lt;3&gt;(b);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; writeBit&lt;2&gt;(b);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; writeBit&lt;1&gt;(b);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; writeBit&lt;0&gt;(b);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="comment">// writeByte implementation with data/clock registers passed in.</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</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="l00069"></a><span class="lineno"> 69</span>&#160; writeBit&lt;7&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; writeBit&lt;6&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; writeBit&lt;5&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; writeBit&lt;4&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; writeBit&lt;3&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; writeBit&lt;2&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; writeBit&lt;1&gt;(b, clockpin, datapin);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; writeBit&lt;0&gt;(b, clockpin, datapin);</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">// 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="l00080"></a><span class="lineno"> 80</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="l00081"></a><span class="lineno"> 81</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="l00082"></a><span class="lineno"> 82</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="l00083"></a><span class="lineno"> 83</span>&#160; data_t hival, data_t loval,</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; clock_t hiclock, clock_t loclock) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; writeBit&lt;7&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; writeBit&lt;6&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; writeBit&lt;5&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; writeBit&lt;4&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; writeBit&lt;3&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; writeBit&lt;2&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; writeBit&lt;1&gt;(b, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; writeBit&lt;0&gt;(b, datapin, hival, loval, hiclock, loclock);</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;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</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="l00096"></a><span class="lineno"> 96</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="l00097"></a><span class="lineno"> 97</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="l00098"></a><span class="lineno"> 98</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="l00099"></a><span class="lineno"> 99</span>&#160; data_t hival, data_t loval,</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; clock_t hiclock, clock_t loclock) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; writeBit&lt;7&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; writeBit&lt;6&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; writeBit&lt;5&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; writeBit&lt;4&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; writeBit&lt;3&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; writeBit&lt;2&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; writeBit&lt;1&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; writeBit&lt;0&gt;(b, clockpin, datapin, hival, loval, hiclock, loclock);</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">// 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; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hi</a>();</div>
-<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::hi</a>(); SPI_DELAY;</div>
-<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::lo</a>(); SPI_DELAY;</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; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::lo</a>();</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="preprocessor"> #define SPI_DELAY delaycycles&lt;1+((SPI_SPEED-2) / 2)&gt;();</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="preprocessor"> #define SPI_DELAY_HALF delaycycles&lt;1+ ((SPI_SPEED-4) / 4)&gt;();</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="comment">// write the BIT&#39;th bit out via spi, setting the data pin then strobing the clcok</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</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="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span>(b &amp; (1 &lt;&lt; BIT)) {</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hi</a>();</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::hi</a>(); SPI_DELAY;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::lo</a>(); SPI_DELAY;</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;</div>
-<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="keyword">private</span>:</div>
-<div class="line"><a name="l00125"></a><span class="lineno"> 125</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="l00126"></a><span class="lineno"> 126</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="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span>(b &amp; (1 &lt;&lt; BIT)) {</div>
-<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hi</a>(datapin);</div>
-<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::hi</a>(clockpin); SPI_DELAY;</div>
-<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::lo</a>(clockpin); SPI_DELAY;</div>
-<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::lo</a>(datapin);</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; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::lo</a>();</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::hi</a>(); SPI_DELAY;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::lo</a>(); SPI_DELAY;</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;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</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="l00130"></a><span class="lineno"> 130</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="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span>(b &amp; (1 &lt;&lt; BIT)) {</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hi</a>(datapin);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::hi</a>(clockpin); SPI_DELAY;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::lo</a>(clockpin); SPI_DELAY;</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">// 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="l00140"></a><span class="lineno"> 140</span>&#160; <span class="comment">// the clock and data pins</span></div>
-<div class="line"><a name="l00141"></a><span class="lineno"> 141</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="l00142"></a><span class="lineno"> 142</span>&#160; data_t hival, data_t loval, clock_t hiclock, clock_t loclock) {</div>
-<div class="line"><a name="l00143"></a><span class="lineno"> 143</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="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">if</span>(b &amp; (1 &lt;&lt; BIT)) {</div>
-<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(datapin, hival);</div>
-<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::fastset</a>(clockpin, hiclock); SPI_DELAY;</div>
-<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::fastset</a>(clockpin, loclock); SPI_DELAY;</div>
-<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// NOP;</span></div>
-<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(datapin, loval);</div>
-<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::fastset</a>(clockpin, hiclock); SPI_DELAY;</div>
-<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::fastset</a>(clockpin, loclock); SPI_DELAY;</div>
-<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
-<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div>
-<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div>
-<div class="line"><a name="l00156"></a><span class="lineno"> 156</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="l00157"></a><span class="lineno"> 157</span>&#160; <span class="comment">// combinations</span></div>
-<div class="line"><a name="l00158"></a><span class="lineno"> 158</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="l00159"></a><span class="lineno"> 159</span>&#160; data_t datahiclockhi, data_t dataloclockhi,</div>
-<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; data_t datahiclocklo, data_t dataloclocklo) {</div>
-<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="preprocessor">#if 0</span></div>
-<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; writeBit&lt;BIT&gt;(b);</div>
-<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">if</span>(b &amp; (1 &lt;&lt; BIT)) {</div>
-<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(clockdatapin, datahiclocklo); SPI_DELAY_HALF;</div>
-<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(clockdatapin, datahiclockhi); SPI_DELAY;</div>
-<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(clockdatapin, datahiclocklo); SPI_DELAY_HALF;</div>
-<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// NOP;</span></div>
-<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(clockdatapin, dataloclocklo); SPI_DELAY_HALF;</div>
-<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(clockdatapin, dataloclockhi); SPI_DELAY;</div>
-<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(clockdatapin, dataloclocklo); SPI_DELAY_HALF;</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">public</span>:</div>
-<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;</div>
-<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <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="l00179"></a><span class="lineno"> 179</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="l00180"></a><span class="lineno"> 180</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="l00135"></a><span class="lineno"> 135</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::lo</a>(datapin);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::hi</a>(clockpin); SPI_DELAY;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::lo</a>(clockpin); SPI_DELAY;</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; }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// 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="l00144"></a><span class="lineno"> 144</span>&#160; <span class="comment">// the clock and data pins</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</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="l00146"></a><span class="lineno"> 146</span>&#160; data_t hival, data_t loval, clock_t hiclock, clock_t loclock) {</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</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="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span>(b &amp; (1 &lt;&lt; BIT)) {</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(datapin, hival);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::fastset</a>(clockpin, hiclock); SPI_DELAY;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::fastset</a>(clockpin, loclock); SPI_DELAY;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="comment">// NOP;</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(datapin, loval);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::fastset</a>(clockpin, hiclock); SPI_DELAY;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::fastset</a>(clockpin, loclock); SPI_DELAY;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; }</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</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="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">// combinations</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</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="l00163"></a><span class="lineno"> 163</span>&#160; data_t datahiclockhi, data_t dataloclockhi,</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; data_t datahiclocklo, data_t dataloclocklo) {</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="preprocessor">#if 0</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; writeBit&lt;BIT&gt;(b);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span>(b &amp; (1 &lt;&lt; BIT)) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(clockdatapin, datahiclocklo); SPI_DELAY_HALF;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(clockdatapin, datahiclockhi); SPI_DELAY;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(clockdatapin, datahiclocklo); SPI_DELAY_HALF;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// NOP;</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(clockdatapin, dataloclocklo); SPI_DELAY_HALF;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(clockdatapin, dataloclockhi); SPI_DELAY;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::fastset</a>(clockdatapin, dataloclocklo); SPI_DELAY_HALF;</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;<span class="preprocessor">#endif</span></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">public</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="comment">// release the SPI line</span></div>
-<div class="line"><a name="l00183"></a><span class="lineno"> 183</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="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">// 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="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordtype">void</span> writeBytesValue(uint8_t value, <span class="keywordtype">int</span> len) {</div>
-<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; select();</div>
-<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; writeBytesValueRaw(value, len);</div>
-<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; release();</div>
-<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div>
-<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div>
-<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> writeBytesValueRaw(uint8_t value, <span class="keywordtype">int</span> len) {</div>
-<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="preprocessor">#ifdef FAST_SPI_INTERRUPTS_WRITE_PINS</span></div>
-<div class="line"><a name="l00194"></a><span class="lineno"> 194</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="l00195"></a><span class="lineno"> 195</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="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">// back to the degenerative code below</span></div>
-<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">while</span>(len--) {</div>
-<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; writeByte(value);</div>
-<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div>
-<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">register</span> data_ptr_t datapin = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::port</a>();</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="keywordflow">if</span>(<a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::port</a>() != <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port</a>()) {</div>
-<div class="line"><a name="l00204"></a><span class="lineno"> 204</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="l00205"></a><span class="lineno"> 205</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="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keyword">register</span> clock_ptr_t clockpin = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port</a>();</div>
-<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keyword">register</span> data_t datahi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>();</div>
-<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keyword">register</span> data_t datalo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>();</div>
-<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keyword">register</span> clock_t clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::hival</a>();</div>
-<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">register</span> clock_t clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::loval</a>();</div>
-<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">while</span>(len--) {</div>
-<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; writeByte(value, clockpin, datapin, datahi, datalo, clockhi, clocklo);</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="keywordflow">else</span> {</div>
-<div class="line"><a name="l00216"></a><span class="lineno"> 216</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="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keyword">register</span> data_t datahi_clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>() | <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
-<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keyword">register</span> data_t datalo_clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>() | <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
-<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keyword">register</span> data_t datahi_clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>() &amp; ~<a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
-<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keyword">register</span> data_t datalo_clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>() &amp; ~<a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
-<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div>
-<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">while</span>(len--) {</div>
-<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; writeByte(value, datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</div>
-<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div>
-<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
-<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div>
-<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div>
-<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <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="l00230"></a><span class="lineno"> 230</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="l00231"></a><span class="lineno"> 231</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="l00232"></a><span class="lineno"> 232</span>&#160; select();</div>
-<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="preprocessor">#ifdef FAST_SPI_INTERRUPTS_WRITE_PINS</span></div>
-<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; uint8_t *end = data + len;</div>
-<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">while</span>(data != end) {</div>
-<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; writeByte(D::adjust(*data++));</div>
-<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div>
-<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keyword">register</span> clock_ptr_t clockpin = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port</a>();</div>
-<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keyword">register</span> data_ptr_t datapin = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::port</a>();</div>
-<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div>
-<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::port</a>() != <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port</a>()) {</div>
-<div class="line"><a name="l00243"></a><span class="lineno"> 243</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="l00244"></a><span class="lineno"> 244</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="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keyword">register</span> data_t datahi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>();</div>
-<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keyword">register</span> data_t datalo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>();</div>
-<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keyword">register</span> clock_t clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::hival</a>();</div>
-<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keyword">register</span> clock_t clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::loval</a>();</div>
-<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; uint8_t *end = data + len;</div>
-<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;</div>
-<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">while</span>(data != end) {</div>
-<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; writeByte(D::adjust(*data++), clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
-<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; }</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</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="l00183"></a><span class="lineno"> 183</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="l00184"></a><span class="lineno"> 184</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="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">// release the SPI line</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</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="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">// 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="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordtype">void</span> writeBytesValue(uint8_t value, <span class="keywordtype">int</span> len) {</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; select();</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; writeBytesValueRaw(value, len);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; release();</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <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="l00197"></a><span class="lineno"> 197</span>&#160;<span class="preprocessor">#ifdef FAST_SPI_INTERRUPTS_WRITE_PINS</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</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="l00199"></a><span class="lineno"> 199</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="l00200"></a><span class="lineno"> 200</span>&#160; <span class="comment">// back to the degenerative code below</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">while</span>(len--) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; writeByte(value);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">register</span> data_ptr_t datapin = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::port</a>();</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::port</a>() != <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port</a>()) {</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</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="l00209"></a><span class="lineno"> 209</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="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">register</span> clock_ptr_t clockpin = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port</a>();</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">register</span> data_t datahi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>();</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">register</span> data_t datalo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>();</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keyword">register</span> clock_t clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::hival</a>();</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">register</span> clock_t clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::loval</a>();</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">while</span>(len--) {</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; writeByte(value, clockpin, datapin, datahi, datalo, clockhi, clocklo);</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;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</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="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keyword">register</span> data_t datahi_clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>() | <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keyword">register</span> data_t datalo_clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>() | <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keyword">register</span> data_t datahi_clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>() &amp; ~<a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keyword">register</span> data_t datalo_clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>() &amp; ~<a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</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; <span class="keywordflow">while</span>(len--) {</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; writeByte(value, datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; }</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</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="l00234"></a><span class="lineno"> 234</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="l00235"></a><span class="lineno"> 235</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="l00236"></a><span class="lineno"> 236</span>&#160; select();</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="preprocessor">#ifdef FAST_SPI_INTERRUPTS_WRITE_PINS</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; uint8_t *end = data + len;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">while</span>(data != end) {</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; writeByte(D::adjust(*data++));</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keyword">register</span> clock_ptr_t clockpin = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port</a>();</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keyword">register</span> data_ptr_t datapin = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::port</a>();</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="keywordflow">if</span>(<a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::port</a>() != <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port</a>()) {</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</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="l00248"></a><span class="lineno"> 248</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="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keyword">register</span> data_t datahi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>();</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keyword">register</span> data_t datalo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>();</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keyword">register</span> clock_t clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::hival</a>();</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keyword">register</span> clock_t clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::loval</a>();</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; uint8_t *end = data + len;</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">else</span> {</div>
-<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// FastPin&lt;CLOCK_PIN&gt;::hi();</span></div>
-<div class="line"><a name="l00257"></a><span class="lineno"> 257</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="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">register</span> data_t datahi_clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>() | <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
-<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">register</span> data_t datalo_clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>() | <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
-<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keyword">register</span> data_t datahi_clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>() &amp; ~<a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
-<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">register</span> data_t datalo_clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>() &amp; ~<a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</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; uint8_t *end = data + len;</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="keywordflow">while</span>(data != end) {</div>
-<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; writeByte(D::adjust(*data++), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</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">// FastPin&lt;CLOCK_PIN&gt;::lo();</span></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; D::postBlock(len);</div>
-<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; release();</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">// 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="l00276"></a><span class="lineno"> 276</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="l00277"></a><span class="lineno"> 277</span>&#160;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">while</span>(data != end) {</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; writeByte(D::adjust(*data++), clockpin, datapin, datahi, datalo, clockhi, clocklo);</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;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// FastPin&lt;CLOCK_PIN&gt;::hi();</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</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="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keyword">register</span> data_t datahi_clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>() | <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">register</span> data_t datalo_clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>() | <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keyword">register</span> data_t datahi_clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>() &amp; ~<a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keyword">register</span> data_t datalo_clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>() &amp; ~<a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</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; uint8_t *end = data + len;</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="keywordflow">while</span>(data != end) {</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; writeByte(D::adjust(*data++), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</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">// FastPin&lt;CLOCK_PIN&gt;::lo();</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; D::postBlock(len);</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; release();</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div>
-<div class="line"><a name="l00279"></a><span class="lineno"> 279</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="l00280"></a><span class="lineno"> 280</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="l00281"></a><span class="lineno"> 281</span>&#160; <span class="comment">// byte of data modification to be made. (See DATA_NOP above)</span></div>
-<div class="line"><a name="l00282"></a><span class="lineno"> 282</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="l00283"></a><span class="lineno"> 283</span>&#160; select();</div>
-<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordtype">int</span> len = pixels.mLen;</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;<span class="preprocessor">#ifdef FAST_SPI_INTERRUPTS_WRITE_PINS</span></div>
-<div class="line"><a name="l00287"></a><span class="lineno"> 287</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="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// to use this block</span></div>
-<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">while</span>(pixels.has(1)) {</div>
-<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span>(FLAGS &amp; FLAG_START_BIT) {</div>
-<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; writeBit&lt;0&gt;(1);</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; writeByte(D::adjust(pixels.loadAndScale0()));</div>
-<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; writeByte(D::adjust(pixels.loadAndScale1()));</div>
-<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; writeByte(D::adjust(pixels.loadAndScale2()));</div>
-<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; pixels.advanceData();</div>
-<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; pixels.stepDithering();</div>
-<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div>
-<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00300"></a><span class="lineno"> 300</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="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// then we can use a bunch of optimizations in here</span></div>
-<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keyword">register</span> data_ptr_t datapin = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::port</a>();</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="keywordflow">if</span>(<a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::port</a>() != <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port</a>()) {</div>
-<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">register</span> clock_ptr_t clockpin = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port</a>();</div>
-<div class="line"><a name="l00306"></a><span class="lineno"> 306</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="l00307"></a><span class="lineno"> 307</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="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">register</span> data_t datahi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>();</div>
-<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">register</span> data_t datalo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>();</div>
-<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keyword">register</span> clock_t clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::hival</a>();</div>
-<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keyword">register</span> clock_t clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::loval</a>();</div>
-<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div>
-<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">while</span>(pixels.has(1)) {</div>
-<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span>(FLAGS &amp; FLAG_START_BIT) {</div>
-<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; writeBit&lt;0&gt;(1, clockpin, datapin, datahi, datalo, clockhi, clocklo);</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; writeByte(D::adjust(pixels.loadAndScale0()), clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
-<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; writeByte(D::adjust(pixels.loadAndScale1()), clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
-<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; writeByte(D::adjust(pixels.loadAndScale2()), clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
-<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; pixels.advanceData();</div>
-<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; pixels.stepDithering();</div>
-<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div>
-<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div>
-<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00325"></a><span class="lineno"> 325</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="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keyword">register</span> data_t datahi_clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>() | <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
-<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keyword">register</span> data_t datalo_clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>() | <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
-<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keyword">register</span> data_t datahi_clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>() &amp; ~<a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
-<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keyword">register</span> data_t datalo_clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>() &amp; ~<a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</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; <span class="keywordflow">while</span>(pixels.has(1)) {</div>
-<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span>(FLAGS &amp; FLAG_START_BIT) {</div>
-<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; writeBit&lt;0&gt;(1, datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</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; writeByte(D::adjust(pixels.loadAndScale0()), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</div>
-<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; writeByte(D::adjust(pixels.loadAndScale1()), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</div>
-<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; writeByte(D::adjust(pixels.loadAndScale2()), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</div>
-<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; pixels.advanceData();</div>
-<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; pixels.stepDithering();</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; }</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; D::postBlock(len);</div>
-<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; release();</div>
-<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; }</div>
-<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;};</div>
-<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div>
-<div class="line"><a name="l00348"></a><span class="lineno"> 348</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="ttdoc">Pixel controller class. </div><div class="ttdef"><b>Definition:</b> controller.h:177</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 class="ttc" id="class_fast_pin_html"><div class="ttname"><a href="class_fast_pin.html">FastPin</a></div><div class="ttdoc">The simplest level of Pin class. </div><div class="ttdef"><b>Definition:</b> fastpin.h:89</div></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</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="l00280"></a><span class="lineno"> 280</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="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">// 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="l00284"></a><span class="lineno"> 284</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="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// byte of data modification to be made. (See DATA_NOP above)</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</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="l00287"></a><span class="lineno"> 287</span>&#160; select();</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordtype">int</span> len = pixels.mLen;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="preprocessor">#ifdef FAST_SPI_INTERRUPTS_WRITE_PINS</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</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="l00292"></a><span class="lineno"> 292</span>&#160; <span class="comment">// to use this block</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">while</span>(pixels.has(1)) {</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span>(FLAGS &amp; FLAG_START_BIT) {</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; writeBit&lt;0&gt;(1);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; writeByte(D::adjust(pixels.loadAndScale0()));</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; writeByte(D::adjust(pixels.loadAndScale1()));</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; writeByte(D::adjust(pixels.loadAndScale2()));</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; pixels.stepDithering();</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="preprocessor">#else</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</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="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// then we can use a bunch of optimizations in here</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keyword">register</span> data_ptr_t datapin = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::port</a>();</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::port</a>() != <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port</a>()) {</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keyword">register</span> clock_ptr_t clockpin = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::port</a>();</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</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="l00311"></a><span class="lineno"> 311</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="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keyword">register</span> data_t datahi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>();</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keyword">register</span> data_t datalo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>();</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">register</span> clock_t clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::hival</a>();</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">register</span> clock_t clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::loval</a>();</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">while</span>(pixels.has(1)) {</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">if</span>(FLAGS &amp; FLAG_START_BIT) {</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; writeBit&lt;0&gt;(1, clockpin, datapin, datahi, datalo, clockhi, clocklo);</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; writeByte(D::adjust(pixels.loadAndScale0()), clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; writeByte(D::adjust(pixels.loadAndScale1()), clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; writeByte(D::adjust(pixels.loadAndScale2()), clockpin, datapin, datahi, datalo, clockhi, clocklo);</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; pixels.stepDithering();</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="keywordflow">else</span> {</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</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="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">register</span> data_t datahi_clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>() | <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keyword">register</span> data_t datalo_clockhi = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>() | <a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keyword">register</span> data_t datahi_clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::hival</a>() &amp; ~<a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keyword">register</span> data_t datalo_clocklo = <a class="code" href="class_fast_pin.html">FastPin&lt;DATA_PIN&gt;::loval</a>() &amp; ~<a class="code" href="class_fast_pin.html">FastPin&lt;CLOCK_PIN&gt;::mask</a>();</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">while</span>(pixels.has(1)) {</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span>(FLAGS &amp; FLAG_START_BIT) {</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; writeBit&lt;0&gt;(1, datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</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; writeByte(D::adjust(pixels.loadAndScale0()), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; writeByte(D::adjust(pixels.loadAndScale1()), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; writeByte(D::adjust(pixels.loadAndScale2()), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; pixels.advanceData();</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; pixels.stepDithering();</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="preprocessor">#endif</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; D::postBlock(len);</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; release();</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;};</div>
+<div class="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;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="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="ttdoc">Pixel controller class. </div><div class="ttdef"><b>Definition:</b> controller.h:181</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:16</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:17</div></div>
+<div class="ttc" id="class_fast_pin_html"><div class="ttname"><a href="class_fast_pin.html">FastPin</a></div><div class="ttdoc">The simplest level of Pin class. </div><div class="ttdef"><b>Definition:</b> fastpin.h:151</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/fastspi__dma_8h_source.html b/docs/3.1/fastspi__dma_8h_source.html
index 830270de..5fa57ac2 100644
--- a/docs/3.1/fastspi__dma_8h_source.html
+++ b/docs/3.1/fastspi__dma_8h_source.html
@@ -90,7 +90,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="fragment"></div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/fastspi__nop_8h_source.html b/docs/3.1/fastspi__nop_8h_source.html
index 75c5b5d7..248deaff 100644
--- a/docs/3.1/fastspi__nop_8h_source.html
+++ b/docs/3.1/fastspi__nop_8h_source.html
@@ -90,71 +90,67 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="l00004"></a><span class="lineno"> 4</span>&#160;FASTLED_NAMESPACE_BEGIN</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// 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="l00007"></a><span class="lineno"> 7</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="l00008"></a><span class="lineno"> 8</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="l00009"></a><span class="lineno"> 9</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="l00010"></a><span class="lineno"> 10</span>&#160;<span class="keyword">class </span>NOPSPIOutput {</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; <a class="code" href="class_selectable.html">Selectable</a> *m_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="keyword">public</span>:</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; NOPSPIOutput() { m_pSelect = NULL; }</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; NOPSPIOutput(<a class="code" href="class_selectable.html">Selectable</a> *pSelect) { m_pSelect = pSelect; }</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="l00017"></a><span class="lineno"> 17</span>&#160; <span class="comment">// set the object representing the selectable</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</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="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="l00020"></a><span class="lineno"> 20</span>&#160; <span class="comment">// initialize the SPI subssytem</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keywordtype">void</span> init() { <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="l00023"></a><span class="lineno"> 23</span>&#160; <span class="comment">// latch the CS select</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordtype">void</span> select() { <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="l00026"></a><span class="lineno"> 26</span>&#160; <span class="comment">// release the CS select</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordtype">void</span> release() { <span class="comment">/* TODO */</span> }</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="comment">// wait until all queued up data has been written</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordtype">void</span> waitFully();</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">// not the most efficient mechanism in the world - but should be enough for sm16716 and friends</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</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="l00034"></a><span class="lineno"> 34</span>&#160;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="comment">// write a byte out via SPI (returns immediately on writing register)</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">void</span> writeByte(uint8_t b) { <span class="comment">/* TODO */</span> }</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="comment">// write a word out via SPI (returns immediately on writing register)</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> writeWord(uint16_t w) { <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="l00040"></a><span class="lineno"> 40</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="l00041"></a><span class="lineno"> 41</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="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="l00043"></a><span class="lineno"> 43</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="l00044"></a><span class="lineno"> 44</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="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 class="line"><a name="l00046"></a><span class="lineno"> 46</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="l00047"></a><span class="lineno"> 47</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="l00048"></a><span class="lineno"> 48</span>&#160;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</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="l00050"></a><span class="lineno"> 50</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="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;u<span class="keywordtype">int</span>8_t FLAGS, <span class="keyword">class</span> D, EOrder RGB_ORDER&gt; <span class="keywordtype">void</span> writePixels(<a class="code" href="struct_pixel_controller.html">PixelController&lt;RGB_ORDER&gt;</a> pixels) { <span class="comment">/* TODO */</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;};</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;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="struct_pixel_controller_html"><div class="ttname"><a href="struct_pixel_controller.html">PixelController</a></div><div class="ttdoc">Pixel controller class. </div><div class="ttdef"><b>Definition:</b> controller.h:181</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:16</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/fastspi__ref_8h_source.html b/docs/3.1/fastspi__ref_8h_source.html
index 61ed3aaa..e5f0be22 100644
--- a/docs/3.1/fastspi__ref_8h_source.html
+++ b/docs/3.1/fastspi__ref_8h_source.html
@@ -90,108 +90,112 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00004"></a><span class="lineno"> 4</span>&#160;FASTLED_NAMESPACE_BEGIN</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// 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="l00007"></a><span class="lineno"> 7</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="l00008"></a><span class="lineno"> 8</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="l00009"></a><span class="lineno"> 9</span>&#160;<span class="keyword">class </span>REFHardwareSPIOutput {</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; <a class="code" href="class_selectable.html">Selectable</a> *m_pSelect;</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; SAMHardwareSPIOutput() { m_pSelect = NULL; }</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; SAMHArdwareSPIOutput(<a class="code" href="class_selectable.html">Selectable</a> *pSelect) { m_pSelect = pSelect; }</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">// set the object representing the selectable</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</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="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">// initialize the SPI subssytem</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keywordtype">void</span> init() { <span class="comment">/* TODO */</span> }</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">// latch the CS select</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordtype">void</span> <span class="keyword">inline</span> select() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) { <span class="keywordflow">if</span>(m_pSelect != NULL) { m_pSelect-&gt;select(); } } </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">// release the CS select </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordtype">void</span> <span class="keyword">inline</span> release() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline)) { <span class="keywordflow">if</span>(m_pSelect != NULL) { m_pSelect-&gt;release(); } } </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="comment">// wait until all queued up data has been written</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> waitFully() { <span class="comment">/* TODO */</span> }</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="comment">// write a byte out via SPI (returns immediately on writing register)</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</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="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">// write a word out via SPI (returns immediately on writing register)</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</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="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">// A raw set of writing byte values, assumes setup/init/waiting done elsewhere</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</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="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">while</span>(len--) { writeByte(value); }</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; } </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</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="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> writeBytesValue(uint8_t value, <span class="keywordtype">int</span> len) {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; select(); writeBytesValueRaw(value, len); release();</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="comment">// A full cycle of writing a value for len bytes, including select, release, and waiting</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</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="l00048"></a><span class="lineno"> 48</span>&#160; uint8_t *end = data + len;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; select();</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// could be optimized to write 16bit words out instead of 8bit bytes</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">while</span>(data != end) { </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; writeByte(D::adjust(*data++));</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; D::postBlock(len);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; waitFully();</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; release(); </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="comment">// A full cycle of writing a value for len bytes, including select, release, and waiting</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</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="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">// write a single bit out, which bit from the passed in byte is determined by template parameter</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</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="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">// 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="l00066"></a><span class="lineno"> 66</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="l00067"></a><span class="lineno"> 67</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="l00068"></a><span class="lineno"> 68</span>&#160; select();</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">while</span>(data != end) { </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span>(FLAGS &amp; FLAG_START_BIT) { </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; writeBit&lt;0&gt;(1);</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; writeByte(D::adjust(pixels.loadAndScale0()));</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; writeByte(D::adjust(pixels.loadAndScale1()));</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; writeByte(D::adjust(pixels.loadAndScale2()));</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; pixels.advanceData();</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; pixels.stepDithering();</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; data += (3+skip);</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; D::postBlock(len);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; release();</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">// template instantiations for writeBytes 3</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</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="l00087"></a><span class="lineno"> 87</span>&#160; writeBytes3&lt;FLAGS, DATA_NOP, RGB_ORDER&gt;(data, len, scale, advance, skip); </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">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="l00090"></a><span class="lineno"> 90</span>&#160; writeBytes3&lt;0, D, RGB_ORDER&gt;(data, len, scale, advance, skip); </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">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="l00093"></a><span class="lineno"> 93</span>&#160; writeBytes3&lt;0, DATA_NOP, RGB_ORDER&gt;(data, len, scale, advance, skip); </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">void</span> 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="l00096"></a><span class="lineno"> 96</span>&#160; writeBytes3&lt;0, DATA_NOP, RGB&gt;(data, len, scale, advance, skip); </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 class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void swapbits8(bitswap_type in</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> delay.h:79</div></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;FASTLED_NAMESPACE_END</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="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:83</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:16</div></div>
+<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void swapbits8(bitswap_type in</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> fastled_delay.h:82</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/fastspi__types_8h_source.html b/docs/3.1/fastspi__types_8h_source.html
index cd9f02d1..39284c85 100644
--- a/docs/3.1/fastspi__types_8h_source.html
+++ b/docs/3.1/fastspi__types_8h_source.html
@@ -90,39 +90,44 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="l00004"></a><span class="lineno"> 4</span>&#160;FASTLED_NAMESPACE_BEGIN</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// Some helper macros for getting at mis-ordered byte values</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#define SPI_B0 (RGB_BYTE0(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_B1 (RGB_BYTE1(RGB_ORDER) + (MASK_SKIP_BITS &amp; SKIP))</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#define SPI_B2 (RGB_BYTE2(RGB_ORDER) + (MASK_SKIP_BITS &amp; SKIP))</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define SPI_ADVANCE (3 + (MASK_SKIP_BITS &amp; SKIP))</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="class_d_a_t_a___n_o_p.html"> 18</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="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">public</span>:</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> uint8_t adjust(<span class="keyword">register</span> uint8_t data) { <span class="keywordflow">return</span> data; }</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</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> <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(data, scale); }</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</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="l00023"></a><span class="lineno"> 23</span>&#160;};</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#define FLAG_START_BIT 0x80</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#define MASK_SKIP_BITS 0x3F</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">// Clock speed dividers</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#define SPEED_DIV_2 2</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#define SPEED_DIV_4 4</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define SPEED_DIV_8 8</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#define SPEED_DIV_16 16</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#define SPEED_DIV_32 32</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#define SPEED_DIV_64 64</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#define SPEED_DIV_128 128</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="ttdoc">Some of the SPI controllers will need to perform a transform on each byte before doing anyting with i...</div><div class="ttdef"><b>Definition:</b> fastspi_types.h:16</div></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#define MAX_DATA_RATE 0</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="group___scaling_html_ga6c160f8c36ce9b3c5eda68e4992010af"><div class="ttname"><a href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8(uint8_t i, fract8 scale)</div><div class="ttdoc">scale one byte by a second one, which is treated as the numerator of a fraction whose denominator is ...</div><div class="ttdef"><b>Definition:</b> scale8.h:14</div></div>
+<div class="ttc" id="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="ttdoc">Some of the SPI controllers will need to perform a transform on each byte before doing anyting with i...</div><div class="ttdef"><b>Definition:</b> fastspi_types.h:18</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/files.html b/docs/3.1/files.html
index cebd234b..ccf84d98 100644
--- a/docs/3.1/files.html
+++ b/docs/3.1/files.html
@@ -88,39 +88,44 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</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><a class="el" href="bitswap_8h.html" target="_self">bitswap.h</a></td><td class="desc">Functions for rotating bits/bytes </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>
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_fbb9e787cf27434374136273d35a9c17.html" target="_self">lib8tion</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="math8_8h_source.html"><span class="icondoc"></span></a><b>math8.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="random8_8h_source.html"><span class="icondoc"></span></a><b>random8.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="scale8_8h_source.html"><span class="icondoc"></span></a><b>scale8.h</b></td><td class="desc"></td></tr>
+<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="trig8_8h_source.html"><span class="icondoc"></span></a><b>trig8.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="bitswap_8h_source.html"><span class="icondoc"></span></a><a class="el" href="bitswap_8h.html" target="_self">bitswap.h</a></td><td class="desc">Functions for rotating bits/bytes </td></tr>
+<tr id="row_2_" class="even"><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_3_"><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_4_" class="even"><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_5_"><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_6_" class="even"><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_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><a class="el" href="noise_8h.html" target="_self">noise.h</a></td><td class="desc">Noise functions provided by the library </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>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="fastled__delay_8h_source.html"><span class="icondoc"></span></a><b>fastled_delay.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="fastled__progmem_8h_source.html"><span class="icondoc"></span></a><b>fastled_progmem.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="fastpin_8h_source.html"><span class="icondoc"></span></a><b>fastpin.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_8h_source.html"><span class="icondoc"></span></a><b>fastspi.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__bitbang_8h_source.html"><span class="icondoc"></span></a><b>fastspi_bitbang.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="fastspi__dma_8h_source.html"><span class="icondoc"></span></a><b>fastspi_dma.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="_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_17_"><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_18_" class="even"><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_19_"><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_20_" class="even"><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_21_"><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_22_" class="even"><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_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a href="noise_8h_source.html"><span class="icondoc"></span></a><a class="el" href="noise_8h.html" target="_self">noise.h</a></td><td class="desc">Noise functions provided by the library </td></tr>
+<tr id="row_24_" class="even"><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_25_"><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_26_" class="even"><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 Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:29 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/functions.html b/docs/3.1/functions.html
index a6e0dfe7..1a0924bc 100644
--- a/docs/3.1/functions.html
+++ b/docs/3.1/functions.html
@@ -262,7 +262,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
: <a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">CLEDController</a>
</li>
<li>setMaxRefreshRate()
-: <a class="el" href="class_c_fast_l_e_d.html#a09f4d61853d88482fa5824144c8127ed">CFastLED</a>
+: <a class="el" href="class_c_fast_l_e_d.html#a1f39e8404db214bbd6a776f52a77d8b1">CFastLED</a>
</li>
<li>setTemperature()
: <a class="el" href="class_c_fast_l_e_d.html#a28c2dfb0ec592db03f3063ade135f19f">CFastLED</a>
@@ -301,7 +301,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:29 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/functions_func.html b/docs/3.1/functions_func.html
index e64084c2..145a6aa8 100644
--- a/docs/3.1/functions_func.html
+++ b/docs/3.1/functions_func.html
@@ -262,7 +262,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
: <a class="el" href="class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037">CLEDController</a>
</li>
<li>setMaxRefreshRate()
-: <a class="el" href="class_c_fast_l_e_d.html#a09f4d61853d88482fa5824144c8127ed">CFastLED</a>
+: <a class="el" href="class_c_fast_l_e_d.html#a1f39e8404db214bbd6a776f52a77d8b1">CFastLED</a>
</li>
<li>setTemperature()
: <a class="el" href="class_c_fast_l_e_d.html#a28c2dfb0ec592db03f3063ade135f19f">CFastLED</a>
@@ -301,7 +301,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:29 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/globals.html b/docs/3.1/globals.html
index 08972daa..fe6c86ff 100644
--- a/docs/3.1/globals.html
+++ b/docs/3.1/globals.html
@@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:29 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/globals_func.html b/docs/3.1/globals_func.html
index 5c01f103..3d1fc02a 100644
--- a/docs/3.1/globals_func.html
+++ b/docs/3.1/globals_func.html
@@ -100,7 +100,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:29 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/graph_legend.html b/docs/3.1/graph_legend.html
index 050f6080..0b63f94d 100644
--- a/docs/3.1/graph_legend.html
+++ b/docs/3.1/graph_legend.html
@@ -147,7 +147,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/group___bitswap.html b/docs/3.1/group___bitswap.html
index a8d65828..71fe7196 100644
--- a/docs/3.1/group___bitswap.html
+++ b/docs/3.1/group___bitswap.html
@@ -112,7 +112,7 @@ Functions</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/group___color_enums.html b/docs/3.1/group___color_enums.html
index 76c25498..59a02b0b 100644
--- a/docs/3.1/group___color_enums.html
+++ b/docs/3.1/group___color_enums.html
@@ -198,7 +198,7 @@ Enumerations</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/group___colorpalletes.html b/docs/3.1/group___colorpalletes.html
index a98b9514..9a9dc026 100644
--- a/docs/3.1/group___colorpalletes.html
+++ b/docs/3.1/group___colorpalletes.html
@@ -89,23 +89,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
-<tr class="memitem:ga550b5245a7c2e0554d1d5af179903119"><td class="memItemLeft" align="right" valign="top">const TProgmemRGBPalette16 CloudColors_p&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119">PROGMEM</a></td></tr>
-<tr class="memdesc:ga550b5245a7c2e0554d1d5af179903119"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cloudy color pallete. <a href="#ga550b5245a7c2e0554d1d5af179903119">More...</a><br /></td></tr>
-<tr class="separator:ga550b5245a7c2e0554d1d5af179903119"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga550b5245a7c2e0554d1d5af179903119"><td class="memItemLeft" align="right" valign="top">const TProgmemRGBPalette16 CloudColors_p&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119">PROGMEM</a></td></tr>
-<tr class="memdesc:ga550b5245a7c2e0554d1d5af179903119"><td class="mdescLeft">&#160;</td><td class="mdescRight">HSV Rainbow. <a href="#ga550b5245a7c2e0554d1d5af179903119">More...</a><br /></td></tr>
-<tr class="separator:ga550b5245a7c2e0554d1d5af179903119"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga57a38373661043f74b292976e83c687b"><td class="memItemLeft" align="right" valign="top">const TProgmemRGBPalette16 CloudColors_p&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___colorpalletes.html#ga57a38373661043f74b292976e83c687b">FL_PROGMEM</a></td></tr>
+<tr class="memdesc:ga57a38373661043f74b292976e83c687b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cloudy color pallete. <a href="#ga57a38373661043f74b292976e83c687b">More...</a><br /></td></tr>
+<tr class="separator:ga57a38373661043f74b292976e83c687b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga57a38373661043f74b292976e83c687b"><td class="memItemLeft" align="right" valign="top">FASTLED_USING_NAMESPACE const TProgmemRGBPalette16 CloudColors_p&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___colorpalletes.html#ga57a38373661043f74b292976e83c687b">FL_PROGMEM</a></td></tr>
+<tr class="memdesc:ga57a38373661043f74b292976e83c687b"><td class="mdescLeft">&#160;</td><td class="mdescRight">HSV Rainbow. <a href="#ga57a38373661043f74b292976e83c687b">More...</a><br /></td></tr>
+<tr class="separator:ga57a38373661043f74b292976e83c687b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>These schemes are all declared as "PROGMEM", meaning that they won't take up SRAM on AVR chips until used. </p>
<p>Furthermore, the compiler won't even include these in your PROGMEM (flash) storage unless you specifically use each one, so you only 'pay for' those you actually use. </p>
<h2 class="groupheader">Variable Documentation</h2>
-<a class="anchor" id="ga550b5245a7c2e0554d1d5af179903119"></a>
+<a class="anchor" id="ga57a38373661043f74b292976e83c687b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname">const TProgmemRGBPalette16 HeatColors_p PROGMEM</td>
+ <td class="memname">const TProgmemRGBPalette16 HeatColors_p FL_PROGMEM</td>
</tr>
</table>
</div><div class="memdoc">
@@ -123,12 +123,12 @@ Variables</h2></td></tr>
</div>
</div>
-<a class="anchor" id="ga550b5245a7c2e0554d1d5af179903119"></a>
+<a class="anchor" id="ga57a38373661043f74b292976e83c687b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname">const TProgmemRGBPalette16 HeatColors_p PROGMEM</td>
+ <td class="memname">const TProgmemRGBPalette16 HeatColors_p FL_PROGMEM</td>
</tr>
</table>
</div><div class="memdoc">
@@ -170,7 +170,7 @@ Variables</h2></td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/group___colorutils.html b/docs/3.1/group___colorutils.html
index 2cccf452..709c837e 100644
--- a/docs/3.1/group___colorutils.html
+++ b/docs/3.1/group___colorutils.html
@@ -92,6 +92,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="union_t_r_g_b_gradient_palette_entry_union.html">TRGBGradientPaletteEntryUnion</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a></td></tr>
@@ -109,6 +111,24 @@ typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>TProgmemR
<tr class="memitem:ga68d7c7a5522fb7aa113e50351bd620d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga68d7c7a5522fb7aa113e50351bd620d4"></a>
typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>TProgmemHSVPalette16</b>[16]</td></tr>
<tr class="separator:ga68d7c7a5522fb7aa113e50351bd620d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5c6ee5f16c2e9dcea972adc5b582218c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5c6ee5f16c2e9dcea972adc5b582218c"></a>
+typedef const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>TProgmemRGBGradientPalette_byte</b></td></tr>
+<tr class="separator:ga5c6ee5f16c2e9dcea972adc5b582218c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga56cb3bce8ab7c903689192abedcc9699"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga56cb3bce8ab7c903689192abedcc9699"></a>
+typedef const TProgmemRGBGradientPalette_byte *&#160;</td><td class="memItemRight" valign="bottom"><b>TProgmemRGBGradientPalette_bytes</b></td></tr>
+<tr class="separator:ga56cb3bce8ab7c903689192abedcc9699"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad07b6fd5973f3c9fc4a084b206aaeabd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad07b6fd5973f3c9fc4a084b206aaeabd"></a>
+typedef TProgmemRGBGradientPalette_bytes&#160;</td><td class="memItemRight" valign="bottom"><b>TProgmemRGBGradientPalettePtr</b></td></tr>
+<tr class="separator:gad07b6fd5973f3c9fc4a084b206aaeabd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9b4bbbaa572ed85baf5d098dc47a347b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9b4bbbaa572ed85baf5d098dc47a347b"></a>
+typedef uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>TDynamicRGBGradientPalette_byte</b></td></tr>
+<tr class="separator:ga9b4bbbaa572ed85baf5d098dc47a347b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae1c82c19302557ba92e9ce0ec2c9ed5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae1c82c19302557ba92e9ce0ec2c9ed5b"></a>
+typedef const TDynamicRGBGradientPalette_byte *&#160;</td><td class="memItemRight" valign="bottom"><b>TDynamicRGBGradientPalette_bytes</b></td></tr>
+<tr class="separator:gae1c82c19302557ba92e9ce0ec2c9ed5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8ca55222f4aaa94bba41171554225f75"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8ca55222f4aaa94bba41171554225f75"></a>
+typedef TDynamicRGBGradientPalette_bytes&#160;</td><td class="memItemRight" valign="bottom"><b>TDynamicRGBGradientPalettePtr</b></td></tr>
+<tr class="separator:ga8ca55222f4aaa94bba41171554225f75"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
@@ -119,7 +139,7 @@ Enumerations</h2></td></tr>
}</td></tr>
<tr class="separator:ga097bfc6a8459d95e8afa8a16b9e6476a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga565c04e626af4a3ec44bf97edc607b4e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga565c04e626af4a3ec44bf97edc607b4e"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>TBlendType</b> { <b>NOBLEND</b> =0,
-<b>BLEND</b> =1
+<b>LINEARBLEND</b> =1
}</td></tr>
<tr class="separator:ga565c04e626af4a3ec44bf97edc607b4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
@@ -235,18 +255,18 @@ void&#160;</td><td class="memItemRight" valign="bottom"><b>UpscalePalette</b> (c
<tr class="memitem:gae2a0641902f28723263666a128995fef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae2a0641902f28723263666a128995fef"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>UpscalePalette</b> (const struct <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> &amp;srcpal16, struct <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a> &amp;destpal256)</td></tr>
<tr class="separator:gae2a0641902f28723263666a128995fef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gaee31357df36e51470467fe496652c807"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaee31357df36e51470467fe496652c807"></a>
-<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>ColorFromPalette</b> (const <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> &amp;pal, uint8_t index, uint8_t brightness=255, TBlendType blendType=BLEND)</td></tr>
-<tr class="separator:gaee31357df36e51470467fe496652c807"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga089bb0e4043fbfcd80274944eccf2265"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga089bb0e4043fbfcd80274944eccf2265"></a>
-<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>ColorFromPalette</b> (const TProgmemRGBPalette16 &amp;pal, uint8_t index, uint8_t brightness=255, TBlendType blendType=BLEND)</td></tr>
-<tr class="separator:ga089bb0e4043fbfcd80274944eccf2265"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac46e65aff3dd6519b33e27f0998f17cd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac46e65aff3dd6519b33e27f0998f17cd"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>ColorFromPalette</b> (const <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> &amp;pal, uint8_t index, uint8_t brightness=255, TBlendType blendType=LINEARBLEND)</td></tr>
+<tr class="separator:gac46e65aff3dd6519b33e27f0998f17cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0a1bd774cd65ee7b85a20c11212bbd95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0a1bd774cd65ee7b85a20c11212bbd95"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>ColorFromPalette</b> (const TProgmemRGBPalette16 &amp;pal, uint8_t index, uint8_t brightness=255, TBlendType blendType=LINEARBLEND)</td></tr>
+<tr class="separator:ga0a1bd774cd65ee7b85a20c11212bbd95"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf65fa1b4fedbbd7b8054a71e1b6474b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf65fa1b4fedbbd7b8054a71e1b6474b3"></a>
<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>ColorFromPalette</b> (const <a class="el" href="class_c_r_g_b_palette256.html">CRGBPalette256</a> &amp;pal, uint8_t index, uint8_t brightness=255, TBlendType blendType=NOBLEND)</td></tr>
<tr class="separator:gaf65fa1b4fedbbd7b8054a71e1b6474b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gaf464ad57db54e7791e933850e38cdca2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf464ad57db54e7791e933850e38cdca2"></a>
-<a class="el" href="struct_c_h_s_v.html">CHSV</a>&#160;</td><td class="memItemRight" valign="bottom"><b>ColorFromPalette</b> (const <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> &amp;pal, uint8_t index, uint8_t brightness=255, TBlendType blendType=BLEND)</td></tr>
-<tr class="separator:gaf464ad57db54e7791e933850e38cdca2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafdfc20fbf9b8e4b71e010a654ec27891"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafdfc20fbf9b8e4b71e010a654ec27891"></a>
+<a class="el" href="struct_c_h_s_v.html">CHSV</a>&#160;</td><td class="memItemRight" valign="bottom"><b>ColorFromPalette</b> (const <a class="el" href="class_c_h_s_v_palette16.html">CHSVPalette16</a> &amp;pal, uint8_t index, uint8_t brightness=255, TBlendType blendType=LINEARBLEND)</td></tr>
+<tr class="separator:gafdfc20fbf9b8e4b71e010a654ec27891"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga79c94ea554455e72eabab172cc15456f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga79c94ea554455e72eabab172cc15456f"></a>
<a class="el" href="struct_c_h_s_v.html">CHSV</a>&#160;</td><td class="memItemRight" valign="bottom"><b>ColorFromPalette</b> (const <a class="el" href="class_c_h_s_v_palette256.html">CHSVPalette256</a> &amp;pal, uint8_t index, uint8_t brightness=255, TBlendType blendType=NOBLEND)</td></tr>
<tr class="separator:ga79c94ea554455e72eabab172cc15456f"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -254,13 +274,34 @@ void&#160;</td><td class="memItemRight" valign="bottom"><b>UpscalePalette</b> (c
template&lt;typename PALETTE &gt; </td></tr>
<tr class="memitem:gad6431776a18268d286d146158e25cb36"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>fill_palette</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> *L, uint16_t N, uint8_t startIndex, uint8_t incIndex, const PALETTE &amp;pal, uint8_t brightness, TBlendType blendType)</td></tr>
<tr class="separator:gad6431776a18268d286d146158e25cb36"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga61a6b3b99ea32e9287f72f1b32f0c663"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga61a6b3b99ea32e9287f72f1b32f0c663"></a>
+<tr class="memitem:gaf34a692bbec05b697dc9c06d8bb0f74f"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaf34a692bbec05b697dc9c06d8bb0f74f"></a>
template&lt;typename PALETTE &gt; </td></tr>
-<tr class="memitem:ga61a6b3b99ea32e9287f72f1b32f0c663"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>map_data_into_colors_through_palette</b> (uint8_t *dataArray, uint16_t dataCount, <a class="el" href="struct_c_r_g_b.html">CRGB</a> *targetColorArray, const PALETTE &amp;pal, uint8_t brightness=255, uint8_t opacity=255, TBlendType blendType=BLEND)</td></tr>
-<tr class="separator:ga61a6b3b99ea32e9287f72f1b32f0c663"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf34a692bbec05b697dc9c06d8bb0f74f"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>map_data_into_colors_through_palette</b> (uint8_t *dataArray, uint16_t dataCount, <a class="el" href="struct_c_r_g_b.html">CRGB</a> *targetColorArray, const PALETTE &amp;pal, uint8_t brightness=255, uint8_t opacity=255, TBlendType blendType=LINEARBLEND)</td></tr>
+<tr class="separator:gaf34a692bbec05b697dc9c06d8bb0f74f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga361799a4ba193694ad974079c980430c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga361799a4ba193694ad974079c980430c"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>nblendPaletteTowardPalette</b> (<a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> &amp;currentPalette, <a class="el" href="class_c_r_g_b_palette16.html">CRGBPalette16</a> &amp;targetPalette, uint8_t maxChanges=24)</td></tr>
<tr class="separator:ga361799a4ba193694ad974079c980430c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7c3f73fd65e9a9857870c1835a1c7d85"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7c3f73fd65e9a9857870c1835a1c7d85"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>applyGamma_video</b> (uint8_t brightness, float gamma)</td></tr>
+<tr class="separator:ga7c3f73fd65e9a9857870c1835a1c7d85"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39c1068518d7697230930504e57c4d91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga39c1068518d7697230930504e57c4d91"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>applyGamma_video</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;orig, float gamma)</td></tr>
+<tr class="separator:ga39c1068518d7697230930504e57c4d91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7e4fabd5c919111e7405790b9463aea4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7e4fabd5c919111e7405790b9463aea4"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a>&#160;</td><td class="memItemRight" valign="bottom"><b>applyGamma_video</b> (const <a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;orig, float gammaR, float gammaG, float gammaB)</td></tr>
+<tr class="separator:ga7e4fabd5c919111e7405790b9463aea4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga983d672315d5763873005cf1e6ebbe89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga983d672315d5763873005cf1e6ebbe89"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>napplyGamma_video</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;rgb, float gamma)</td></tr>
+<tr class="separator:ga983d672315d5763873005cf1e6ebbe89"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf1bf4d592f1bceacd3754658d25bfd72"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf1bf4d592f1bceacd3754658d25bfd72"></a>
+<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>napplyGamma_video</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> &amp;rgb, float gammaR, float gammaG, float gammaB)</td></tr>
+<tr class="separator:gaf1bf4d592f1bceacd3754658d25bfd72"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4e3dbd54679072011f2be08bcd23c337"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4e3dbd54679072011f2be08bcd23c337"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>napplyGamma_video</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> *rgbarray, uint16_t count, float gamma)</td></tr>
+<tr class="separator:ga4e3dbd54679072011f2be08bcd23c337"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac8d8e24305e35eda2e8717c688f36ca4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac8d8e24305e35eda2e8717c688f36ca4"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>napplyGamma_video</b> (<a class="el" href="struct_c_r_g_b.html">CRGB</a> *rgbarray, uint16_t count, float gammaR, float gammaG, float gammaB)</td></tr>
+<tr class="separator:gac8d8e24305e35eda2e8717c688f36ca4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>A variety of functions for working with color, palletes, and leds. </p>
@@ -325,7 +366,7 @@ template&lt;typename T &gt; </div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/group___noise.html b/docs/3.1/group___noise.html
index 4c00e3d5..ea6395e4 100644
--- a/docs/3.1/group___noise.html
+++ b/docs/3.1/group___noise.html
@@ -237,7 +237,7 @@ void&#160;</td><td class="memItemRight" valign="bottom"><b>fill_2dnoise16</b> (<
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/hierarchy.html b/docs/3.1/hierarchy.html
index 305883e2..27edb7dd 100644
--- a/docs/3.1/hierarchy.html
+++ b/docs/3.1/hierarchy.html
@@ -93,110 +93,115 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<p><a href="inherits.html">Go to the graphical class hierarchy</a></p>
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">Template definition for STM32 style ARM pins, providing direct access to the various GPIO registers </td></tr>
-<tr id="row_1_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>ARMHardwareSPIOutput</b></td><td class="desc"></td></tr>
-<tr id="row_1_0_" 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_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI2_DATA, SPI2_CLOCK, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_1_1_"><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_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_DATA, SPI_CLOCK, 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><b>AVRHardwareSPIOutput</b></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_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_DATA, SPI_CLOCK, 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_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_4_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_4_" class="arrow" onclick="toggleFolder('4_')">&#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_4_0_" 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_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_4_1_"><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_4_2_" 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_SPEED &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_5_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_5_" class="arrow" onclick="toggleFolder('5_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>AVRUSART0SPIOutput</b></td><td class="desc"></td></tr>
-<tr id="row_5_0_" 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_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_6_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_6_" class="arrow" onclick="toggleFolder('6_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>AVRUSART1SPIOutput</b></td><td class="desc"></td></tr>
-<tr id="row_6_0_" 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_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED &gt;</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="unionbitswap__type.html" target="_self">bitswap_type</a></td><td class="desc">Union containing a full 8 bytes to swap the bit orientation on </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_every_n_time_periods.html" target="_self">CEveryNTimePeriods&lt; timeType, timeGetter &gt;</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_fast_l_e_d.html" target="_self">CFastLED</a></td><td class="desc">High level controller interface for FastLED </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_h_s_v.html" target="_self">CHSV</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_h_s_v_palette16.html" target="_self">CHSVPalette16</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_h_s_v_palette256.html" target="_self">CHSVPalette256</a></td><td class="desc"></td></tr>
-<tr id="row_13_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_13_" class="arrow" onclick="toggleFolder('13_')">&#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">Base definition for an LED controller </td></tr>
-<tr id="row_13_0_" 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_a_p_a102_controller.html" target="_self">APA102Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="desc">APA102 controller class </td></tr>
-<tr id="row_13_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_1_" class="arrow" onclick="toggleFolder('13_1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d_m_x_serial_controller.html" target="_self">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_13_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_d_m_x_s_e_r_i_a_l.html" target="_self">DMXSERIAL&lt; RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_13_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_2_" class="arrow" onclick="toggleFolder('13_2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d_m_x_simple_controller.html" target="_self">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_13_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_d_m_x_s_i_m_p_l_e.html" target="_self">DMXSIMPLE&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_13_3_"><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">LPD8806 controller class </td></tr>
-<tr id="row_13_4_" 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">P9813 controller class </td></tr>
-<tr id="row_13_5_"><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">SM16716 controller class </td></tr>
-<tr id="row_13_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_6_" class="arrow" onclick="toggleFolder('13_6_')">&#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">WS2801 controller class </td></tr>
-<tr id="row_13_6_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_14_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_14_" class="arrow" onclick="toggleFolder('14_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>ClocklessController</b></td><td class="desc"></td></tr>
-<tr id="row_14_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_0_" class="arrow" onclick="toggleFolder('14_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_14_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_14_1_"><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_g_w6205_controller400_khz.html" target="_self">GW6205Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_2_" class="arrow" onclick="toggleFolder('14_2_')">&#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_14_2_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_g_w6205.html" target="_self">GW6205&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_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_g_w6205_controller800_khz.html" target="_self">GW6205Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_4_" class="arrow" onclick="toggleFolder('14_4_')">&#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_14_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_l_p_d1886.html" target="_self">LPD1886&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_5_"><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_d1886_controller1250_khz.html" target="_self">LPD1886Controller1250Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_6_" class="arrow" onclick="toggleFolder('14_6_')">&#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_14_6_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_t_m1803.html" target="_self">TM1803&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_7_" 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_m1803_controller400_khz.html" target="_self">TM1803Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_8_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_8_" class="arrow" onclick="toggleFolder('14_8_')">&#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_14_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_t_m1804.html" target="_self">TM1804&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_8_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_14_9_" 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_m1809_controller800_khz.html" target="_self">TM1809Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_10_"><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_14_11_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_11_" class="arrow" onclick="toggleFolder('14_11_')">&#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_14_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_t_m1829.html" target="_self">TM1829&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_12_" 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_controller800_khz.html" target="_self">TM1829Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_13_" class="arrow" onclick="toggleFolder('14_13_')">&#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_14_13_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_14_14_"><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_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_14_15_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_15_" class="arrow" onclick="toggleFolder('14_15_')">&#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_14_15_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_u_c_s1903.html" target="_self">UCS1903&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_16_" 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_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_14_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_17_" class="arrow" onclick="toggleFolder('14_17_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_u_c_s1904_controller800_khz.html" target="_self">UCS1904Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_17_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_s1904.html" target="_self">UCS1904&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_18_"><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_u_c_s1904_controller800_khz.html" target="_self">UCS1904Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_19_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_19_" class="arrow" onclick="toggleFolder('14_19_')">&#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_14_19_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_s2811__400.html" target="_self">WS2811_400&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_20_" 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_w_s2811_controller400_khz.html" target="_self">WS2811Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_21_" class="arrow" onclick="toggleFolder('14_21_')">&#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_14_21_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_14_21_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_14_22_" 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_w_s2811_controller800_khz.html" target="_self">WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_23_" class="arrow" onclick="toggleFolder('14_23_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2812_controller800_khz.html" target="_self">WS2812Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_23_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_s2812.html" target="_self">WS2812&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_23_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_s2812_b.html" target="_self">WS2812B&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_24_" 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_w_s2812_controller800_khz.html" target="_self">WS2812Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_25_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_14_25_" class="arrow" onclick="toggleFolder('14_25_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2812_controller800_khz.html" target="_self">WS2812Controller800Khz&lt; DATA_PIN, GRB &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_14_25_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_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_14_26_"><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_w_s2812_controller800_khz.html" target="_self">WS2812Controller800Khz&lt; DATA_PIN, GRB &gt;</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="class_c_min_wait.html" target="_self">CMinWait&lt; WAIT &gt;</a></td><td class="desc">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 this should make sure that chipsets that have </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="class_c_min_wait.html" target="_self">CMinWait&lt; 1000 &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_c_r_g_b.html" target="_self">CRGB</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="class_c_r_g_b_palette16.html" target="_self">CRGBPalette16</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_c_r_g_b_palette256.html" target="_self">CRGBPalette256</a></td><td class="desc"></td></tr>
-<tr id="row_20_"><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">Some of the SPI controllers will need to perform a transform on each byte before doing anyting with it </td></tr>
-<tr id="row_21_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_21_" class="arrow" onclick="toggleFolder('21_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_fast_pin.html" target="_self">FastPin&lt; PIN &gt;</a></td><td class="desc">The simplest level of <a class="el" href="class_pin.html">Pin</a> class </td></tr>
-<tr id="row_21_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_fast_pin_b_b.html" target="_self">FastPinBB&lt; PIN &gt;</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_fast_pin.html" target="_self">FastPin&lt; CLOCK_PIN &gt;</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="union_i_e_e_e754binary32__t.html" target="_self">IEEE754binary32_t</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="unionjust8bits.html" target="_self">just8bits</a></td><td class="desc">Structure representing 8 bits of access </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="struct_multi_pixel_controller.html" target="_self">MultiPixelController&lt; LANES, MASK, RGB_ORDER &gt;</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&lt; RGB_ORDER &gt;</a></td><td class="desc">Pixel controller class </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&lt; T, F, I &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_28_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_28_" class="arrow" onclick="toggleFolder('28_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>SAMHardwareSPIOutput</b></td><td class="desc"></td></tr>
-<tr id="row_28_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_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_DATA, SPI_CLOCK, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_29_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_29_" class="arrow" onclick="toggleFolder('29_')">&#9660;</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_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_29_0_" class="arrow" onclick="toggleFolder('29_0_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_pin.html" target="_self">Pin</a></td><td class="desc"></td></tr>
-<tr id="row_29_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_input_pin.html" target="_self">InputPin</a></td><td class="desc"></td></tr>
-<tr id="row_29_0_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_output_pin.html" target="_self">OutputPin</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="structsub4.html" target="_self">sub4</a></td><td class="desc">Structure representing 32 bits of access </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="uniont_bytes_for_long.html" target="_self">tBytesForLong</a></td><td class="desc"></td></tr>
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>ARMHardwareSPIOutput</b></td><td class="desc"></td></tr>
+<tr id="row_0_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_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI2_DATA, SPI2_CLOCK, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_0_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_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_0_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_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_0_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_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_DATA, SPI_CLOCK, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>AVRHardwareSPIOutput</b></td><td class="desc"></td></tr>
+<tr id="row_1_0_" 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_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_DATA, SPI_CLOCK, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_2_"><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_3_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_3_" class="arrow" onclick="toggleFolder('3_')">&#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_3_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_3_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_3_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_4_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_4_" class="arrow" onclick="toggleFolder('4_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>AVRUSART0SPIOutput</b></td><td class="desc"></td></tr>
+<tr id="row_4_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_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_5_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_5_" class="arrow" onclick="toggleFolder('5_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>AVRUSART1SPIOutput</b></td><td class="desc"></td></tr>
+<tr id="row_5_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_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED &gt;</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="unionbitswap__type.html" target="_self">bitswap_type</a></td><td class="desc">Union containing a full 8 bytes to swap the bit orientation on </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_every_n_time_periods.html" target="_self">CEveryNTimePeriods&lt; timeType, timeGetter &gt;</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_fast_l_e_d.html" target="_self">CFastLED</a></td><td class="desc">High level controller interface for FastLED </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="struct_c_h_s_v.html" target="_self">CHSV</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="class_c_h_s_v_palette16.html" target="_self">CHSVPalette16</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_h_s_v_palette256.html" target="_self">CHSVPalette256</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_12_" class="arrow" onclick="toggleFolder('12_')">&#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">Base definition for an LED controller </td></tr>
+<tr id="row_12_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">APA102 controller class </td></tr>
+<tr id="row_12_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_12_1_" class="arrow" onclick="toggleFolder('12_1_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d_m_x_serial_controller.html" target="_self">DMXSerialController&lt; RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_12_1_0_" style="display:none;"><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_d_m_x_s_e_r_i_a_l.html" target="_self">DMXSERIAL&lt; RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_12_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_12_2_" class="arrow" onclick="toggleFolder('12_2_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d_m_x_simple_controller.html" target="_self">DMXSimpleController&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_12_2_0_" class="even" style="display:none;"><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_d_m_x_s_i_m_p_l_e.html" target="_self">DMXSIMPLE&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_12_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_l_p_d8806_controller.html" target="_self">LPD8806Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="desc">LPD8806 controller class </td></tr>
+<tr id="row_12_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_p9813_controller.html" target="_self">P9813Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="desc">P9813 controller class </td></tr>
+<tr id="row_12_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_s_m16716_controller.html" target="_self">SM16716Controller&lt; DATA_PIN, CLOCK_PIN, RGB_ORDER, SPI_SPEED &gt;</a></td><td class="desc">SM16716 controller class </td></tr>
+<tr id="row_12_6_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_12_6_" class="arrow" onclick="toggleFolder('12_6_')">&#9658;</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">WS2801 controller class </td></tr>
+<tr id="row_12_6_0_" class="even" style="display:none;"><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_13_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_13_" class="arrow" onclick="toggleFolder('13_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>ClocklessController</b></td><td class="desc"></td></tr>
+<tr id="row_13_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_0_" class="arrow" onclick="toggleFolder('13_0_')">&#9658;</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_13_0_0_" class="even" style="display:none;"><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_13_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_g_w6205_controller400_khz.html" target="_self">GW6205Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_2_" class="arrow" onclick="toggleFolder('13_2_')">&#9658;</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_13_2_0_" class="even" style="display:none;"><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_13_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_g_w6205_controller800_khz.html" target="_self">GW6205Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_4_" class="arrow" onclick="toggleFolder('13_4_')">&#9658;</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_13_4_0_" class="even" style="display:none;"><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_13_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_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_13_6_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_6_" class="arrow" onclick="toggleFolder('13_6_')">&#9658;</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_13_6_0_" class="even" style="display:none;"><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_13_7_" 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_m1803_controller400_khz.html" target="_self">TM1803Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_8_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_8_" class="arrow" onclick="toggleFolder('13_8_')">&#9658;</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_13_8_0_" class="even" style="display:none;"><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_13_8_1_" class="even" style="display:none;"><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_13_9_" 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_m1809_controller800_khz.html" target="_self">TM1809Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_10_"><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_13_11_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_11_" class="arrow" onclick="toggleFolder('13_11_')">&#9658;</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_13_11_0_" style="display:none;"><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_13_12_"><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_controller800_khz.html" target="_self">TM1829Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_13_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_13_" class="arrow" onclick="toggleFolder('13_13_')">&#9658;</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_13_13_0_" style="display:none;"><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_13_14_"><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_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_13_15_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_15_" class="arrow" onclick="toggleFolder('13_15_')">&#9658;</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_13_15_0_" style="display:none;"><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_13_16_"><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_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_13_17_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_17_" class="arrow" onclick="toggleFolder('13_17_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_u_c_s1904_controller800_khz.html" target="_self">UCS1904Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_17_0_" style="display:none;"><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_s1904.html" target="_self">UCS1904&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_18_"><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_u_c_s1904_controller800_khz.html" target="_self">UCS1904Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_19_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_19_" class="arrow" onclick="toggleFolder('13_19_')">&#9658;</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_13_19_0_" style="display:none;"><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_13_20_"><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_w_s2811_controller400_khz.html" target="_self">WS2811Controller400Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_21_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_21_" class="arrow" onclick="toggleFolder('13_21_')">&#9658;</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_13_21_0_" style="display:none;"><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_13_21_1_" style="display:none;"><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_13_22_"><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_w_s2811_controller800_khz.html" target="_self">WS2811Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_23_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_23_" class="arrow" onclick="toggleFolder('13_23_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2812_controller800_khz.html" target="_self">WS2812Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_23_0_" style="display:none;"><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_13_23_1_" style="display:none;"><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_13_24_"><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_w_s2812_controller800_khz.html" target="_self">WS2812Controller800Khz&lt; DATA_PIN, RGB_ORDER &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_25_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_13_25_" class="arrow" onclick="toggleFolder('13_25_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_w_s2812_controller800_khz.html" target="_self">WS2812Controller800Khz&lt; DATA_PIN, GRB &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_13_25_0_" style="display:none;"><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_13_26_"><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_w_s2812_controller800_khz.html" target="_self">WS2812Controller800Khz&lt; DATA_PIN, GRB &gt;</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_c_min_wait.html" target="_self">CMinWait&lt; WAIT &gt;</a></td><td class="desc">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 this should make sure that chipsets that have </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_c_min_wait.html" target="_self">CMinWait&lt; 1000 &gt;</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="struct_c_r_g_b.html" target="_self">CRGB</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_c_r_g_b_palette16.html" target="_self">CRGBPalette16</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_c_r_g_b_palette256.html" target="_self">CRGBPalette256</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="class_d_a_t_a___n_o_p.html" target="_self">DATA_NOP</a></td><td class="desc">Some of the SPI controllers will need to perform a transform on each byte before doing anyting with it </td></tr>
+<tr id="row_20_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_20_" class="arrow" onclick="toggleFolder('20_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_fast_pin.html" target="_self">FastPin&lt; PIN &gt;</a></td><td class="desc">The simplest level of <a class="el" href="class_pin.html">Pin</a> class </td></tr>
+<tr id="row_20_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_fast_pin_b_b.html" target="_self">FastPinBB&lt; PIN &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_21_" 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_fast_pin.html" target="_self">FastPin&lt; CLOCK_PIN &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_22_"><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_23_" 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="unionjust8bits.html" target="_self">just8bits</a></td><td class="desc">Structure representing 8 bits of access </td></tr>
+<tr id="row_24_"><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_25_" 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">Pixel controller class </td></tr>
+<tr id="row_26_"><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_27_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_27_" class="arrow" onclick="toggleFolder('27_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>SAMHardwareSPIOutput</b></td><td class="desc"></td></tr>
+<tr id="row_27_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_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" target="_self">SPIOutput&lt; SPI_DATA, SPI_CLOCK, SPI_SPEED &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_28_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_28_" class="arrow" onclick="toggleFolder('28_')">&#9660;</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_28_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_28_0_" class="arrow" onclick="toggleFolder('28_0_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_pin.html" target="_self">Pin</a></td><td class="desc"></td></tr>
+<tr id="row_28_0_0_" class="even" style="display:none;"><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_input_pin.html" target="_self">InputPin</a></td><td class="desc"></td></tr>
+<tr id="row_28_0_1_" class="even" style="display:none;"><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_input_pin.html" target="_self">InputPin</a></td><td class="desc"></td></tr>
+<tr id="row_28_0_2_" class="even" style="display:none;"><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_output_pin.html" target="_self">OutputPin</a></td><td class="desc"></td></tr>
+<tr id="row_28_0_3_" class="even" style="display:none;"><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_output_pin.html" target="_self">OutputPin</a></td><td class="desc"></td></tr>
+<tr id="row_28_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_pin.html" target="_self">Pin</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="structsub4.html" target="_self">sub4</a></td><td class="desc">Structure representing 32 bits of access </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="uniont_bytes_for_long.html" target="_self">tBytesForLong</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="union_t_r_g_b_gradient_palette_entry_union.html" target="_self">TRGBGradientPaletteEntryUnion</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/hsv2rgb_8h_source.html b/docs/3.1/hsv2rgb_8h_source.html
index 52361f68..5a2dc29f 100644
--- a/docs/3.1/hsv2rgb_8h_source.html
+++ b/docs/3.1/hsv2rgb_8h_source.html
@@ -92,93 +92,96 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="l00006"></a><span class="lineno"> 6</span>&#160;FASTLED_NAMESPACE_BEGIN</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">// hsv2rgb_rainbow - convert a hue, saturation, and value to RGB</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// using a visually balanced rainbow (vs a straight</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// mathematical spectrum).</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// This &#39;rainbow&#39; yields better yellow and orange</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// than a straight &#39;spectrum&#39;.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// NOTE: here hue is 0-255, not just 0-191</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="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="l00017"></a><span class="lineno"> 17</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="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#define HUE_MAX_RAINBOW 255</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">// 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="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">// hsv2rgb_spectrum - convert a hue, saturation, and value to RGB</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">// using a mathematically straight spectrum (vs</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">// a visually balanced rainbow).</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// This &#39;spectrum&#39; will have more green &amp; blue</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">// than a &#39;rainbow&#39;, and less yellow and orange.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">// NOTE: here hue is 0-255, not just 0-191</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keywordtype">void</span> 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="l00030"></a><span class="lineno"> 30</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="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define HUE_MAX_SPECTRUM 255</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="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="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">// hsv2rgb_raw - convert hue, saturation, and value to RGB.</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">// This &#39;spectrum&#39; conversion will be more green &amp; blue</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">// than a real &#39;rainbow&#39;, and the hue is specified just</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment">// in the range 0-191. Together, these result in a</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">// slightly faster conversion speed, at the expense of</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">// color balance.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment">// NOTE: Hue is 0-191 only!</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">// Saturation &amp; value are 0-255 each.</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;</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>&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="l00046"></a><span class="lineno"> 46</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="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#define HUE_MAX 191</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="comment">// rgb2hsv_approximate - recover _approximate_ HSV values from RGB.</span></div>
-<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">// NOTE 1: This function is a long-term work in process; expect</span></div>
-<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">// results to change slightly over time as this function is</span></div>
-<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">// refined and improved.</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">// NOTE 2: This function is most accurate when the input is an</span></div>
-<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment">// RGB color that came from a fully-saturated HSV color to start</span></div>
-<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">// with. E.g. CHSV( hue, 255, 255) -&gt; CRGB -&gt; CHSV will give</span></div>
-<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">// best results.</span></div>
-<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment">// NOTE 3: This function is not nearly as fast as HSV-to-RGB.</span></div>
-<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment">// It is provided for those situations when the need for this</span></div>
-<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">// function cannot be avoided, or when extremely high performance</span></div>
-<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">// is not needed.</span></div>
-<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment">// NOTE 4: Why is this &#39;only&#39; an &quot;approximation&quot;?</span></div>
-<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment">// Not all RGB colors have HSV equivalents! For example, there</span></div>
-<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">// is no HSV value that will ever convert to RGB(255,255,0) using</span></div>
-<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment">// the code provided in this library. So if you try to</span></div>
-<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment">// convert RGB(255,255,0) &#39;back&#39; to HSV, you&#39;ll necessarily get</span></div>
-<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">// only an approximation. Emphasis has been placed on getting</span></div>
-<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">// the &#39;hue&#39; as close as usefully possible, but even that&#39;s a bit</span></div>
-<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">// of a challenge. The 8-bit HSV and 8-bit RGB color spaces</span></div>
-<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">// are not a &quot;bijection&quot;.</span></div>
-<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">// Nevertheless, this function does a pretty good job, particularly</span></div>
-<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">// at recovering the &#39;hue&#39; from fully saturated RGB colors that</span></div>
-<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">// originally came from HSV rainbow colors. So if you start</span></div>
-<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">// with CHSV(hue_in,255,255), and convert that to RGB, and then</span></div>
-<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">// convert it back to HSV using this function, the resulting output</span></div>
-<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">// hue will either exactly the same, or very close (+/-1).</span></div>
-<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment">// The more desaturated the original RGB color is, the rougher the</span></div>
-<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">// approximation, and the less accurate the results.</span></div>
-<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<a class="code" href="struct_c_h_s_v.html">CHSV</a> rgb2hsv_approximate( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rgb);</div>
-<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div>
-<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="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 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">// rgb2hsv_approximate - recover _approximate_ HSV values from RGB.</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">// NOTE 1: This function is a long-term work in process; expect</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">// results to change slightly over time as this function is</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">// refined and improved.</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment">// NOTE 2: This function is most accurate when the input is an</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">// RGB color that came from a fully-saturated HSV color to start</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">// with. E.g. CHSV( hue, 255, 255) -&gt; CRGB -&gt; CHSV will give</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">// best results.</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment">// NOTE 3: This function is not nearly as fast as HSV-to-RGB.</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">// It is provided for those situations when the need for this</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">// function cannot be avoided, or when extremely high performance</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">// is not needed.</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">// NOTE 4: Why is this &#39;only&#39; an &quot;approximation&quot;?</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">// Not all RGB colors have HSV equivalents! For example, there</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment">// is no HSV value that will ever convert to RGB(255,255,0) using</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment">// the code provided in this library. So if you try to</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">// convert RGB(255,255,0) &#39;back&#39; to HSV, you&#39;ll necessarily get</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">// only an approximation. Emphasis has been placed on getting</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">// the &#39;hue&#39; as close as usefully possible, but even that&#39;s a bit</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">// of a challenge. The 8-bit HSV and 8-bit RGB color spaces</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">// are not a &quot;bijection&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">// Nevertheless, this function does a pretty good job, particularly</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">// at recovering the &#39;hue&#39; from fully saturated RGB colors that</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">// originally came from HSV rainbow colors. So if you start</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">// with CHSV(hue_in,255,255), and convert that to RGB, and then</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">// convert it back to HSV using this function, the resulting output</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment">// hue will either exactly the same, or very close (+/-1).</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">// The more desaturated the original RGB color is, the rougher the</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">// approximation, and the less accurate the results.</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<a class="code" href="struct_c_h_s_v.html">CHSV</a> rgb2hsv_approximate( <span class="keyword">const</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; rgb);</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;FASTLED_NAMESPACE_END</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="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:83</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:18</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/index.html b/docs/3.1/index.html
index a4598133..6bbc051e 100644
--- a/docs/3.1/index.html
+++ b/docs/3.1/index.html
@@ -84,7 +84,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/inherit_graph_0.map b/docs/3.1/inherit_graph_0.map
index 5670a2f2..9055498c 100644
--- a/docs/3.1/inherit_graph_0.map
+++ b/docs/3.1/inherit_graph_0.map
@@ -1,3 +1,6 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class___d_u_e_p_i_n.html" title="Template definition for STM32 style ARM pins, providing direct access to the various GPIO registers..." alt="" coords="6,5,175,46"/>
+<area shape="rect" id="node1" href="$class_a_v_r_software_s_p_i_output.html" title="AVRSoftwareSPIOutput\l\&lt; _DATA_PIN, _CLOCK_PIN,\l _SPI_CLOCK_DIVIDER \&gt;" alt="" coords="5,85,205,141"/>
+<area shape="rect" id="node2" href="$class_software_s_p_i_output.html" title="SoftwareSPIOutput\&lt;\l _DATA_PIN, _CLOCK_PIN,\l _SPI_CLOCK_DIVIDER \&gt;" alt="" coords="257,5,449,61"/>
+<area shape="rect" id="node3" href="$class_s_p_i_output.html" title="SPIOutput\&lt; _DATA_PIN,\l _CLOCK_PIN, _SPI_CLOCK\l_DIVIDER \&gt;" alt="" coords="254,85,453,141"/>
+<area shape="rect" id="node4" href="$class_s_p_i_output.html" title="SPIOutput\&lt; DATA_PIN,\l CLOCK_PIN, SPI_SPEED \&gt;" alt="" coords="256,166,451,207"/>
</map>
diff --git a/docs/3.1/inherit_graph_0.md5 b/docs/3.1/inherit_graph_0.md5
index 8aacddb0..223eea47 100644
--- a/docs/3.1/inherit_graph_0.md5
+++ b/docs/3.1/inherit_graph_0.md5
@@ -1 +1 @@
-77d9cd636e7f25c925aad7b547d07668 \ No newline at end of file
+2c41106f5574631dc7c5658b11f41088 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_0.png b/docs/3.1/inherit_graph_0.png
index 6b828ade..db0d74dc 100644
--- a/docs/3.1/inherit_graph_0.png
+++ b/docs/3.1/inherit_graph_0.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_1.map b/docs/3.1/inherit_graph_1.map
index 9055498c..9b05351d 100644
--- a/docs/3.1/inherit_graph_1.map
+++ b/docs/3.1/inherit_graph_1.map
@@ -1,6 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_a_v_r_software_s_p_i_output.html" title="AVRSoftwareSPIOutput\l\&lt; _DATA_PIN, _CLOCK_PIN,\l _SPI_CLOCK_DIVIDER \&gt;" alt="" coords="5,85,205,141"/>
-<area shape="rect" id="node2" href="$class_software_s_p_i_output.html" title="SoftwareSPIOutput\&lt;\l _DATA_PIN, _CLOCK_PIN,\l _SPI_CLOCK_DIVIDER \&gt;" alt="" coords="257,5,449,61"/>
-<area shape="rect" id="node3" href="$class_s_p_i_output.html" title="SPIOutput\&lt; _DATA_PIN,\l _CLOCK_PIN, _SPI_CLOCK\l_DIVIDER \&gt;" alt="" coords="254,85,453,141"/>
-<area shape="rect" id="node4" href="$class_s_p_i_output.html" title="SPIOutput\&lt; DATA_PIN,\l CLOCK_PIN, SPI_SPEED \&gt;" alt="" coords="256,166,451,207"/>
+<area shape="rect" id="node1" href="$class_a_v_r_software_s_p_i_output.html" title="AVRSoftwareSPIOutput\l\&lt; DATA_PIN, CLOCK_PIN,\l SPI_SPEED \&gt;" alt="" coords="6,5,191,61"/>
</map>
diff --git a/docs/3.1/inherit_graph_1.md5 b/docs/3.1/inherit_graph_1.md5
index 223eea47..b535aa3e 100644
--- a/docs/3.1/inherit_graph_1.md5
+++ b/docs/3.1/inherit_graph_1.md5
@@ -1 +1 @@
-2c41106f5574631dc7c5658b11f41088 \ No newline at end of file
+ce85357edaf83c085052f03649cdbbb7 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_1.png b/docs/3.1/inherit_graph_1.png
index db0d74dc..14bcd558 100644
--- a/docs/3.1/inherit_graph_1.png
+++ b/docs/3.1/inherit_graph_1.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_10.map b/docs/3.1/inherit_graph_10.map
index 428f1342..32f82ec3 100644
--- a/docs/3.1/inherit_graph_10.map
+++ b/docs/3.1/inherit_graph_10.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_c_min_wait.html" title="CMinWait\&lt; 1000 \&gt;" alt="" coords="6,5,138,32"/>
+<area shape="rect" id="node1" href="$class_c_min_wait.html" title="Class to ensure that a minimum amount of time has kicked since the last time run &#45; and delay if not e..." alt="" coords="5,5,141,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_10.md5 b/docs/3.1/inherit_graph_10.md5
index c0fa1719..2d8ffdc9 100644
--- a/docs/3.1/inherit_graph_10.md5
+++ b/docs/3.1/inherit_graph_10.md5
@@ -1 +1 @@
-ec403eb7aeba941ec587f7cd276ab7a4 \ No newline at end of file
+d061b8cd12ee165a7fe64ff35ddf4c50 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_10.png b/docs/3.1/inherit_graph_10.png
index 29a98e00..315ee837 100644
--- a/docs/3.1/inherit_graph_10.png
+++ b/docs/3.1/inherit_graph_10.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_11.map b/docs/3.1/inherit_graph_11.map
index 32f82ec3..3bcdde74 100644
--- a/docs/3.1/inherit_graph_11.map
+++ b/docs/3.1/inherit_graph_11.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_c_min_wait.html" title="Class to ensure that a minimum amount of time has kicked since the last time run &#45; and delay if not e..." alt="" coords="5,5,141,32"/>
+<area shape="rect" id="node1" href="$struct_c_r_g_b.html" title="CRGB" alt="" coords="6,5,66,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_11.md5 b/docs/3.1/inherit_graph_11.md5
index 2d8ffdc9..f1c9ed97 100644
--- a/docs/3.1/inherit_graph_11.md5
+++ b/docs/3.1/inherit_graph_11.md5
@@ -1 +1 @@
-d061b8cd12ee165a7fe64ff35ddf4c50 \ No newline at end of file
+0dc6e5cebf8cf7991ae1cccc50cc4c68 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_11.png b/docs/3.1/inherit_graph_11.png
index 315ee837..034d2496 100644
--- a/docs/3.1/inherit_graph_11.png
+++ b/docs/3.1/inherit_graph_11.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_12.map b/docs/3.1/inherit_graph_12.map
index 3bcdde74..a37af540 100644
--- a/docs/3.1/inherit_graph_12.map
+++ b/docs/3.1/inherit_graph_12.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$struct_c_r_g_b.html" title="CRGB" alt="" coords="6,5,66,32"/>
+<area shape="rect" id="node1" href="$class_c_r_g_b_palette16.html" title="CRGBPalette16" alt="" coords="5,5,123,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_12.md5 b/docs/3.1/inherit_graph_12.md5
index f1c9ed97..c27b940a 100644
--- a/docs/3.1/inherit_graph_12.md5
+++ b/docs/3.1/inherit_graph_12.md5
@@ -1 +1 @@
-0dc6e5cebf8cf7991ae1cccc50cc4c68 \ No newline at end of file
+605594545affded9ddb5dfd7ad57af84 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_12.png b/docs/3.1/inherit_graph_12.png
index 034d2496..df846db8 100644
--- a/docs/3.1/inherit_graph_12.png
+++ b/docs/3.1/inherit_graph_12.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_13.map b/docs/3.1/inherit_graph_13.map
index a37af540..b47198d1 100644
--- a/docs/3.1/inherit_graph_13.map
+++ b/docs/3.1/inherit_graph_13.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_c_r_g_b_palette16.html" title="CRGBPalette16" alt="" coords="5,5,123,32"/>
+<area shape="rect" id="node1" href="$class_c_r_g_b_palette256.html" title="CRGBPalette256" alt="" coords="6,5,130,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_13.md5 b/docs/3.1/inherit_graph_13.md5
index c27b940a..04cb5ea1 100644
--- a/docs/3.1/inherit_graph_13.md5
+++ b/docs/3.1/inherit_graph_13.md5
@@ -1 +1 @@
-605594545affded9ddb5dfd7ad57af84 \ No newline at end of file
+77060e775dbe8df58c848605024876ca \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_13.png b/docs/3.1/inherit_graph_13.png
index df846db8..da77fa31 100644
--- a/docs/3.1/inherit_graph_13.png
+++ b/docs/3.1/inherit_graph_13.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_14.map b/docs/3.1/inherit_graph_14.map
index b47198d1..19a9c657 100644
--- a/docs/3.1/inherit_graph_14.map
+++ b/docs/3.1/inherit_graph_14.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_c_r_g_b_palette256.html" title="CRGBPalette256" alt="" coords="6,5,130,32"/>
+<area shape="rect" id="node1" href="$class_d_a_t_a___n_o_p.html" title="Some of the SPI controllers will need to perform a transform on each byte before doing anyting with i..." alt="" coords="5,5,99,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_14.md5 b/docs/3.1/inherit_graph_14.md5
index 04cb5ea1..5f01d4a6 100644
--- a/docs/3.1/inherit_graph_14.md5
+++ b/docs/3.1/inherit_graph_14.md5
@@ -1 +1 @@
-77060e775dbe8df58c848605024876ca \ No newline at end of file
+02cfa8fbc6ed1eb6b3d40d91cc103d4d \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_14.png b/docs/3.1/inherit_graph_14.png
index da77fa31..c6d0e6d7 100644
--- a/docs/3.1/inherit_graph_14.png
+++ b/docs/3.1/inherit_graph_14.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_15.map b/docs/3.1/inherit_graph_15.map
index 19a9c657..855df757 100644
--- a/docs/3.1/inherit_graph_15.map
+++ b/docs/3.1/inherit_graph_15.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_d_a_t_a___n_o_p.html" title="Some of the SPI controllers will need to perform a transform on each byte before doing anyting with i..." alt="" coords="5,5,99,32"/>
+<area shape="rect" id="node1" href="$class_fast_pin.html" title="FastPin\&lt; CLOCK_PIN \&gt;" alt="" coords="5,5,171,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_15.md5 b/docs/3.1/inherit_graph_15.md5
index 5f01d4a6..46df333b 100644
--- a/docs/3.1/inherit_graph_15.md5
+++ b/docs/3.1/inherit_graph_15.md5
@@ -1 +1 @@
-02cfa8fbc6ed1eb6b3d40d91cc103d4d \ No newline at end of file
+ccf9b1197d80bc1c2aba3505b533b587 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_15.png b/docs/3.1/inherit_graph_15.png
index c6d0e6d7..0b40025f 100644
--- a/docs/3.1/inherit_graph_15.png
+++ b/docs/3.1/inherit_graph_15.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_16.map b/docs/3.1/inherit_graph_16.map
index 855df757..915c0501 100644
--- a/docs/3.1/inherit_graph_16.map
+++ b/docs/3.1/inherit_graph_16.map
@@ -1,3 +1,4 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_fast_pin.html" title="FastPin\&lt; CLOCK_PIN \&gt;" alt="" coords="5,5,171,32"/>
+<area shape="rect" id="node1" href="$class_fast_pin.html" title="The simplest level of Pin class. " alt="" coords="5,5,117,32"/>
+<area shape="rect" id="node2" href="$class_fast_pin_b_b.html" title="FastPinBB\&lt; PIN \&gt;" alt="" coords="165,5,296,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_16.md5 b/docs/3.1/inherit_graph_16.md5
index 46df333b..6202ad65 100644
--- a/docs/3.1/inherit_graph_16.md5
+++ b/docs/3.1/inherit_graph_16.md5
@@ -1 +1 @@
-ccf9b1197d80bc1c2aba3505b533b587 \ No newline at end of file
+3bc369ad9258fe5b5453ce276e8ccce6 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_16.png b/docs/3.1/inherit_graph_16.png
index 0b40025f..6ed3fbfc 100644
--- a/docs/3.1/inherit_graph_16.png
+++ b/docs/3.1/inherit_graph_16.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_17.map b/docs/3.1/inherit_graph_17.map
index 915c0501..e09415a3 100644
--- a/docs/3.1/inherit_graph_17.map
+++ b/docs/3.1/inherit_graph_17.map
@@ -1,4 +1,32 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_fast_pin.html" title="The simplest level of Pin class. " alt="" coords="5,5,117,32"/>
-<area shape="rect" id="node2" href="$class_fast_pin_b_b.html" title="FastPinBB\&lt; PIN \&gt;" alt="" coords="165,5,296,32"/>
+<area shape="rect" id="node2" href="$class_g_w6205_controller400_khz.html" title="GW6205Controller400Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,5,395,46"/>
+<area shape="rect" id="node4" href="$class_g_w6205_controller800_khz.html" title="GW6205Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,70,395,111"/>
+<area shape="rect" id="node6" href="$class_l_p_d1886_controller1250_khz.html" title="LPD1886Controller1250Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,135,395,177"/>
+<area shape="rect" id="node8" href="$class_t_m1803_controller400_khz.html" title="TM1803Controller400Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,201,395,242"/>
+<area shape="rect" id="node10" href="$class_t_m1809_controller800_khz.html" title="TM1809Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,266,395,307"/>
+<area shape="rect" id="node13" href="$class_t_m1829_controller1600_khz.html" title="TM1829Controller1600Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,331,395,373"/>
+<area shape="rect" id="node14" href="$class_t_m1829_controller800_khz.html" title="TM1829Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,397,395,438"/>
+<area shape="rect" id="node16" href="$class_u_c_s1903_b_controller800_khz.html" title="UCS1903BController800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,462,395,503"/>
+<area shape="rect" id="node18" href="$class_u_c_s1903_controller400_khz.html" title="UCS1903Controller400Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,527,395,569"/>
+<area shape="rect" id="node20" href="$class_u_c_s1904_controller800_khz.html" title="UCS1904Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,593,395,634"/>
+<area shape="rect" id="node22" href="$class_w_s2811_controller400_khz.html" title="WS2811Controller400Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,658,395,699"/>
+<area shape="rect" id="node24" href="$class_w_s2811_controller800_khz.html" title="WS2811Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,723,395,765"/>
+<area shape="rect" id="node27" href="$class_w_s2812_controller800_khz.html" title="WS2812Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,854,395,895"/>
+<area shape="rect" id="node30" href="$class_w_s2812_controller800_khz.html" title="WS2812Controller800Khz\l\&lt; DATA_PIN, GRB \&gt;" alt="" coords="205,949,381,990"/>
+<area shape="rect" id="node3" href="$class_g_w6205__400.html" title="GW6205_400\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="445,5,630,46"/>
+<area shape="rect" id="node5" href="$class_g_w6205.html" title="GW6205\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="443,70,631,111"/>
+<area shape="rect" id="node7" href="$class_l_p_d1886.html" title="LPD1886\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="459,135,616,177"/>
+<area shape="rect" id="node9" href="$class_t_m1803.html" title="TM1803\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,201,629,242"/>
+<area shape="rect" id="node11" href="$class_t_m1804.html" title="TM1804\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,266,629,307"/>
+<area shape="rect" id="node12" href="$class_t_m1809.html" title="TM1809\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,331,629,373"/>
+<area shape="rect" id="node15" href="$class_t_m1829.html" title="TM1829\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,397,629,438"/>
+<area shape="rect" id="node17" href="$class_u_c_s1903_b.html" title="UCS1903B\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="453,462,622,503"/>
+<area shape="rect" id="node19" href="$class_u_c_s1903.html" title="UCS1903\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="457,527,617,569"/>
+<area shape="rect" id="node21" href="$class_u_c_s1904.html" title="UCS1904\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="457,593,617,634"/>
+<area shape="rect" id="node23" href="$class_w_s2811__400.html" title="WS2811_400\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="446,658,629,699"/>
+<area shape="rect" id="node25" href="$class_a_p_a104.html" title="APA104\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,723,629,765"/>
+<area shape="rect" id="node26" href="$class_w_s2811.html" title="WS2811\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="444,789,631,830"/>
+<area shape="rect" id="node28" href="$class_w_s2812.html" title="WS2812\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="444,854,631,895"/>
+<area shape="rect" id="node29" href="$class_w_s2812_b.html" title="WS2812B\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="456,919,619,961"/>
+<area shape="rect" id="node31" href="$class_n_e_o_p_i_x_e_l.html" title="NEOPIXEL\&lt; DATA_PIN \&gt;" alt="" coords="449,985,626,1012"/>
</map>
diff --git a/docs/3.1/inherit_graph_17.md5 b/docs/3.1/inherit_graph_17.md5
index 6202ad65..cc9d1624 100644
--- a/docs/3.1/inherit_graph_17.md5
+++ b/docs/3.1/inherit_graph_17.md5
@@ -1 +1 @@
-3bc369ad9258fe5b5453ce276e8ccce6 \ No newline at end of file
+83459d01528993392e1fbe97cec2ccab \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_17.png b/docs/3.1/inherit_graph_17.png
index 6ed3fbfc..27e7c5a5 100644
--- a/docs/3.1/inherit_graph_17.png
+++ b/docs/3.1/inherit_graph_17.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_18.map b/docs/3.1/inherit_graph_18.map
index e09415a3..8babf404 100644
--- a/docs/3.1/inherit_graph_18.map
+++ b/docs/3.1/inherit_graph_18.map
@@ -1,32 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node2" href="$class_g_w6205_controller400_khz.html" title="GW6205Controller400Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,5,395,46"/>
-<area shape="rect" id="node4" href="$class_g_w6205_controller800_khz.html" title="GW6205Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,70,395,111"/>
-<area shape="rect" id="node6" href="$class_l_p_d1886_controller1250_khz.html" title="LPD1886Controller1250Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,135,395,177"/>
-<area shape="rect" id="node8" href="$class_t_m1803_controller400_khz.html" title="TM1803Controller400Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,201,395,242"/>
-<area shape="rect" id="node10" href="$class_t_m1809_controller800_khz.html" title="TM1809Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,266,395,307"/>
-<area shape="rect" id="node13" href="$class_t_m1829_controller1600_khz.html" title="TM1829Controller1600Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,331,395,373"/>
-<area shape="rect" id="node14" href="$class_t_m1829_controller800_khz.html" title="TM1829Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,397,395,438"/>
-<area shape="rect" id="node16" href="$class_u_c_s1903_b_controller800_khz.html" title="UCS1903BController800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,462,395,503"/>
-<area shape="rect" id="node18" href="$class_u_c_s1903_controller400_khz.html" title="UCS1903Controller400Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,527,395,569"/>
-<area shape="rect" id="node20" href="$class_u_c_s1904_controller800_khz.html" title="UCS1904Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,593,395,634"/>
-<area shape="rect" id="node22" href="$class_w_s2811_controller400_khz.html" title="WS2811Controller400Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,658,395,699"/>
-<area shape="rect" id="node24" href="$class_w_s2811_controller800_khz.html" title="WS2811Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,723,395,765"/>
-<area shape="rect" id="node27" href="$class_w_s2812_controller800_khz.html" title="WS2812Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,854,395,895"/>
-<area shape="rect" id="node30" href="$class_w_s2812_controller800_khz.html" title="WS2812Controller800Khz\l\&lt; DATA_PIN, GRB \&gt;" alt="" coords="205,949,381,990"/>
-<area shape="rect" id="node3" href="$class_g_w6205__400.html" title="GW6205_400\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="445,5,630,46"/>
-<area shape="rect" id="node5" href="$class_g_w6205.html" title="GW6205\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="443,70,631,111"/>
-<area shape="rect" id="node7" href="$class_l_p_d1886.html" title="LPD1886\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="459,135,616,177"/>
-<area shape="rect" id="node9" href="$class_t_m1803.html" title="TM1803\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,201,629,242"/>
-<area shape="rect" id="node11" href="$class_t_m1804.html" title="TM1804\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,266,629,307"/>
-<area shape="rect" id="node12" href="$class_t_m1809.html" title="TM1809\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,331,629,373"/>
-<area shape="rect" id="node15" href="$class_t_m1829.html" title="TM1829\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,397,629,438"/>
-<area shape="rect" id="node17" href="$class_u_c_s1903_b.html" title="UCS1903B\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="453,462,622,503"/>
-<area shape="rect" id="node19" href="$class_u_c_s1903.html" title="UCS1903\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="457,527,617,569"/>
-<area shape="rect" id="node21" href="$class_u_c_s1904.html" title="UCS1904\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="457,593,617,634"/>
-<area shape="rect" id="node23" href="$class_w_s2811__400.html" title="WS2811_400\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="446,658,629,699"/>
-<area shape="rect" id="node25" href="$class_a_p_a104.html" title="APA104\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,723,629,765"/>
-<area shape="rect" id="node26" href="$class_w_s2811.html" title="WS2811\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="444,789,631,830"/>
-<area shape="rect" id="node28" href="$class_w_s2812.html" title="WS2812\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="444,854,631,895"/>
-<area shape="rect" id="node29" href="$class_w_s2812_b.html" title="WS2812B\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="456,919,619,961"/>
-<area shape="rect" id="node31" href="$class_n_e_o_p_i_x_e_l.html" title="NEOPIXEL\&lt; DATA_PIN \&gt;" alt="" coords="449,985,626,1012"/>
+<area shape="rect" id="node1" href="$union_i_e_e_e754binary32__t.html" title="IEEE754binary32_t" alt="" coords="6,5,143,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_18.md5 b/docs/3.1/inherit_graph_18.md5
index cc9d1624..586f6e81 100644
--- a/docs/3.1/inherit_graph_18.md5
+++ b/docs/3.1/inherit_graph_18.md5
@@ -1 +1 @@
-83459d01528993392e1fbe97cec2ccab \ No newline at end of file
+96c12d437b00f882905c100917f4fc8f \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_18.png b/docs/3.1/inherit_graph_18.png
index 27e7c5a5..3e72319e 100644
--- a/docs/3.1/inherit_graph_18.png
+++ b/docs/3.1/inherit_graph_18.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_19.map b/docs/3.1/inherit_graph_19.map
index 8babf404..10920651 100644
--- a/docs/3.1/inherit_graph_19.map
+++ b/docs/3.1/inherit_graph_19.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$union_i_e_e_e754binary32__t.html" title="IEEE754binary32_t" alt="" coords="6,5,143,32"/>
+<area shape="rect" id="node1" href="$unionjust8bits.html" title="structure representing 8 bits of access " alt="" coords="6,5,77,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_19.md5 b/docs/3.1/inherit_graph_19.md5
index 586f6e81..47803097 100644
--- a/docs/3.1/inherit_graph_19.md5
+++ b/docs/3.1/inherit_graph_19.md5
@@ -1 +1 @@
-96c12d437b00f882905c100917f4fc8f \ No newline at end of file
+8d471172123b13dfb9999519f6748ec6 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_19.png b/docs/3.1/inherit_graph_19.png
index 3e72319e..be566307 100644
--- a/docs/3.1/inherit_graph_19.png
+++ b/docs/3.1/inherit_graph_19.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_2.map b/docs/3.1/inherit_graph_2.map
index 9b05351d..e7334093 100644
--- a/docs/3.1/inherit_graph_2.map
+++ b/docs/3.1/inherit_graph_2.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_a_v_r_software_s_p_i_output.html" title="AVRSoftwareSPIOutput\l\&lt; DATA_PIN, CLOCK_PIN,\l SPI_SPEED \&gt;" alt="" coords="6,5,191,61"/>
+<area shape="rect" id="node1" href="$unionbitswap__type.html" title="union containing a full 8 bytes to swap the bit orientation on " alt="" coords="6,5,106,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_2.md5 b/docs/3.1/inherit_graph_2.md5
index b535aa3e..2ffcc4e2 100644
--- a/docs/3.1/inherit_graph_2.md5
+++ b/docs/3.1/inherit_graph_2.md5
@@ -1 +1 @@
-ce85357edaf83c085052f03649cdbbb7 \ No newline at end of file
+e43e29c4c6be74769d4fed0dfa782b80 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_2.png b/docs/3.1/inherit_graph_2.png
index 14bcd558..f3c2f42d 100644
--- a/docs/3.1/inherit_graph_2.png
+++ b/docs/3.1/inherit_graph_2.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_20.map b/docs/3.1/inherit_graph_20.map
index 10920651..d5ef36e0 100644
--- a/docs/3.1/inherit_graph_20.map
+++ b/docs/3.1/inherit_graph_20.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$unionjust8bits.html" title="structure representing 8 bits of access " alt="" coords="6,5,77,32"/>
+<area shape="rect" id="node1" href="$struct_multi_pixel_controller.html" title="MultiPixelController\l\&lt; LANES, MASK, RGB_ORDER \&gt;" alt="" coords="6,5,231,46"/>
</map>
diff --git a/docs/3.1/inherit_graph_20.md5 b/docs/3.1/inherit_graph_20.md5
index 47803097..752f4ad7 100644
--- a/docs/3.1/inherit_graph_20.md5
+++ b/docs/3.1/inherit_graph_20.md5
@@ -1 +1 @@
-8d471172123b13dfb9999519f6748ec6 \ No newline at end of file
+f1a3293763c3d7b8452c673e78352fbd \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_20.png b/docs/3.1/inherit_graph_20.png
index be566307..dfc895f2 100644
--- a/docs/3.1/inherit_graph_20.png
+++ b/docs/3.1/inherit_graph_20.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_21.map b/docs/3.1/inherit_graph_21.map
index d5ef36e0..80aee25a 100644
--- a/docs/3.1/inherit_graph_21.map
+++ b/docs/3.1/inherit_graph_21.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$struct_multi_pixel_controller.html" title="MultiPixelController\l\&lt; LANES, MASK, RGB_ORDER \&gt;" alt="" coords="6,5,231,46"/>
+<area shape="rect" id="node1" href="$struct_pixel_controller.html" title="Pixel controller class. " alt="" coords="5,5,155,46"/>
</map>
diff --git a/docs/3.1/inherit_graph_21.md5 b/docs/3.1/inherit_graph_21.md5
index 752f4ad7..c12f4ff0 100644
--- a/docs/3.1/inherit_graph_21.md5
+++ b/docs/3.1/inherit_graph_21.md5
@@ -1 +1 @@
-f1a3293763c3d7b8452c673e78352fbd \ No newline at end of file
+2e6eeb5d60bb289fdc319656b34db93f \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_21.png b/docs/3.1/inherit_graph_21.png
index dfc895f2..7e3b7bc2 100644
--- a/docs/3.1/inherit_graph_21.png
+++ b/docs/3.1/inherit_graph_21.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_22.map b/docs/3.1/inherit_graph_22.map
index 80aee25a..78dcf17b 100644
--- a/docs/3.1/inherit_graph_22.map
+++ b/docs/3.1/inherit_graph_22.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$struct_pixel_controller.html" title="Pixel controller class. " alt="" coords="5,5,155,46"/>
+<area shape="rect" id="node1" href="$classq.html" title="q\&lt; T, F, I \&gt;" alt="" coords="6,5,93,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_22.md5 b/docs/3.1/inherit_graph_22.md5
index c12f4ff0..82b1e6bd 100644
--- a/docs/3.1/inherit_graph_22.md5
+++ b/docs/3.1/inherit_graph_22.md5
@@ -1 +1 @@
-2e6eeb5d60bb289fdc319656b34db93f \ No newline at end of file
+34855bf88566a0ba51f7a87b06c3d4de \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_22.png b/docs/3.1/inherit_graph_22.png
index 7e3b7bc2..256192a7 100644
--- a/docs/3.1/inherit_graph_22.png
+++ b/docs/3.1/inherit_graph_22.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_23.map b/docs/3.1/inherit_graph_23.map
index 78dcf17b..c45b47ea 100644
--- a/docs/3.1/inherit_graph_23.map
+++ b/docs/3.1/inherit_graph_23.map
@@ -1,3 +1,6 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$classq.html" title="q\&lt; T, F, I \&gt;" alt="" coords="6,5,93,32"/>
+<area shape="rect" id="node1" href="$class_selectable.html" title="Selectable" alt="" coords="6,31,90,57"/>
+<area shape="rect" id="node2" href="$class_pin.html" title="Pin" alt="" coords="139,31,181,57"/>
+<area shape="rect" id="node3" href="$class_input_pin.html" title="InputPin" alt="" coords="235,5,306,32"/>
+<area shape="rect" id="node4" href="$class_output_pin.html" title="OutputPin" alt="" coords="230,56,311,83"/>
</map>
diff --git a/docs/3.1/inherit_graph_23.md5 b/docs/3.1/inherit_graph_23.md5
index 82b1e6bd..16d2bd55 100644
--- a/docs/3.1/inherit_graph_23.md5
+++ b/docs/3.1/inherit_graph_23.md5
@@ -1 +1 @@
-34855bf88566a0ba51f7a87b06c3d4de \ No newline at end of file
+3223476052b31aafd3758538ebfc26ab \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_23.png b/docs/3.1/inherit_graph_23.png
index 256192a7..5dc8dc81 100644
--- a/docs/3.1/inherit_graph_23.png
+++ b/docs/3.1/inherit_graph_23.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_24.map b/docs/3.1/inherit_graph_24.map
index c45b47ea..806784f0 100644
--- a/docs/3.1/inherit_graph_24.map
+++ b/docs/3.1/inherit_graph_24.map
@@ -1,6 +1,6 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_selectable.html" title="Selectable" alt="" coords="6,31,90,57"/>
-<area shape="rect" id="node2" href="$class_pin.html" title="Pin" alt="" coords="139,31,181,57"/>
-<area shape="rect" id="node3" href="$class_input_pin.html" title="InputPin" alt="" coords="235,5,306,32"/>
-<area shape="rect" id="node4" href="$class_output_pin.html" title="OutputPin" alt="" coords="230,56,311,83"/>
+<area shape="rect" id="node2" href="$class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI2_DATA,\l SPI2_CLOCK, SPI_SPEED \&gt;" alt="" coords="225,5,426,46"/>
+<area shape="rect" id="node3" href="$class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI2_DATA,\l SPI_CLOCK, SPI_SPEED \&gt;" alt="" coords="229,70,422,111"/>
+<area shape="rect" id="node4" href="$class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI_DATA,\l SPI2_CLOCK, SPI_SPEED \&gt;" alt="" coords="225,135,426,177"/>
+<area shape="rect" id="node5" href="$class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI_DATA,\l SPI_CLOCK, SPI_SPEED \&gt;" alt="" coords="229,201,422,242"/>
</map>
diff --git a/docs/3.1/inherit_graph_24.md5 b/docs/3.1/inherit_graph_24.md5
index 16d2bd55..dc7c1546 100644
--- a/docs/3.1/inherit_graph_24.md5
+++ b/docs/3.1/inherit_graph_24.md5
@@ -1 +1 @@
-3223476052b31aafd3758538ebfc26ab \ No newline at end of file
+8d6bb42275acc5603dc0749a0162794e \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_24.png b/docs/3.1/inherit_graph_24.png
index 5dc8dc81..3ec6c80f 100644
--- a/docs/3.1/inherit_graph_24.png
+++ b/docs/3.1/inherit_graph_24.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_25.map b/docs/3.1/inherit_graph_25.map
index 3392ef29..66689649 100644
--- a/docs/3.1/inherit_graph_25.map
+++ b/docs/3.1/inherit_graph_25.map
@@ -1,4 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node2" href="$class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI2_DATA,\l SPI2_CLOCK, SPI_SPEED \&gt;" alt="" coords="225,5,426,46"/>
-<area shape="rect" id="node3" href="$class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI_DATA,\l SPI_CLOCK, SPI_SPEED \&gt;" alt="" coords="229,70,422,111"/>
+<area shape="rect" id="node2" href="$class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI_UART0\l_DATA, SPI_UART0_CLOCK,\l SPI_SPEED \&gt;" alt="" coords="219,5,421,61"/>
</map>
diff --git a/docs/3.1/inherit_graph_25.md5 b/docs/3.1/inherit_graph_25.md5
index a7ee6066..30d62be3 100644
--- a/docs/3.1/inherit_graph_25.md5
+++ b/docs/3.1/inherit_graph_25.md5
@@ -1 +1 @@
-2b7aa4e7c4a2a3d16115c4130c0e22d1 \ No newline at end of file
+4155ce38acf209c0054521ccfe29cd11 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_25.png b/docs/3.1/inherit_graph_25.png
index 582d7fc6..c15ce69a 100644
--- a/docs/3.1/inherit_graph_25.png
+++ b/docs/3.1/inherit_graph_25.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_26.map b/docs/3.1/inherit_graph_26.map
index 66689649..661688be 100644
--- a/docs/3.1/inherit_graph_26.map
+++ b/docs/3.1/inherit_graph_26.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node2" href="$class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI_UART0\l_DATA, SPI_UART0_CLOCK,\l SPI_SPEED \&gt;" alt="" coords="219,5,421,61"/>
+<area shape="rect" id="node2" href="$class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI_UART1\l_DATA, SPI_UART1_CLOCK,\l SPI_SPEED \&gt;" alt="" coords="219,5,421,61"/>
</map>
diff --git a/docs/3.1/inherit_graph_26.md5 b/docs/3.1/inherit_graph_26.md5
index 30d62be3..6b0f600c 100644
--- a/docs/3.1/inherit_graph_26.md5
+++ b/docs/3.1/inherit_graph_26.md5
@@ -1 +1 @@
-4155ce38acf209c0054521ccfe29cd11 \ No newline at end of file
+9196205d20a02ec6a0e64a0f3c6c06ee \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_26.png b/docs/3.1/inherit_graph_26.png
index c15ce69a..07f34d7e 100644
--- a/docs/3.1/inherit_graph_26.png
+++ b/docs/3.1/inherit_graph_26.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_27.map b/docs/3.1/inherit_graph_27.map
index 661688be..250724cb 100644
--- a/docs/3.1/inherit_graph_27.map
+++ b/docs/3.1/inherit_graph_27.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node2" href="$class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI_UART1\l_DATA, SPI_UART1_CLOCK,\l SPI_SPEED \&gt;" alt="" coords="219,5,421,61"/>
+<area shape="rect" id="node1" href="$structsub4.html" title="structure representing 32 bits of access " alt="" coords="5,5,56,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_27.md5 b/docs/3.1/inherit_graph_27.md5
index 6b0f600c..e00192f1 100644
--- a/docs/3.1/inherit_graph_27.md5
+++ b/docs/3.1/inherit_graph_27.md5
@@ -1 +1 @@
-9196205d20a02ec6a0e64a0f3c6c06ee \ No newline at end of file
+dc0342838c623ffee6445388bf13a639 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_27.png b/docs/3.1/inherit_graph_27.png
index 07f34d7e..ce4ebb77 100644
--- a/docs/3.1/inherit_graph_27.png
+++ b/docs/3.1/inherit_graph_27.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_28.map b/docs/3.1/inherit_graph_28.map
index 250724cb..7e72113c 100644
--- a/docs/3.1/inherit_graph_28.map
+++ b/docs/3.1/inherit_graph_28.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$structsub4.html" title="structure representing 32 bits of access " alt="" coords="5,5,56,32"/>
+<area shape="rect" id="node1" href="$uniont_bytes_for_long.html" title="tBytesForLong" alt="" coords="5,5,115,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_28.md5 b/docs/3.1/inherit_graph_28.md5
index e00192f1..c9ba1969 100644
--- a/docs/3.1/inherit_graph_28.md5
+++ b/docs/3.1/inherit_graph_28.md5
@@ -1 +1 @@
-dc0342838c623ffee6445388bf13a639 \ No newline at end of file
+cc096aad13575ff7cb2b147c51e9bb74 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_28.png b/docs/3.1/inherit_graph_28.png
index ce4ebb77..ed2276ff 100644
--- a/docs/3.1/inherit_graph_28.png
+++ b/docs/3.1/inherit_graph_28.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_29.map b/docs/3.1/inherit_graph_29.map
index 7e72113c..81c8c43b 100644
--- a/docs/3.1/inherit_graph_29.map
+++ b/docs/3.1/inherit_graph_29.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$uniont_bytes_for_long.html" title="tBytesForLong" alt="" coords="5,5,115,32"/>
+<area shape="rect" id="node1" href="$union_t_r_g_b_gradient_palette_entry_union.html" title="TRGBGradientPaletteEntry\lUnion" alt="" coords="6,5,189,46"/>
</map>
diff --git a/docs/3.1/inherit_graph_29.md5 b/docs/3.1/inherit_graph_29.md5
index c9ba1969..3a769fc5 100644
--- a/docs/3.1/inherit_graph_29.md5
+++ b/docs/3.1/inherit_graph_29.md5
@@ -1 +1 @@
-cc096aad13575ff7cb2b147c51e9bb74 \ No newline at end of file
+ec3163c4aacddfc74245a62753ba41fb \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_29.png b/docs/3.1/inherit_graph_29.png
index ed2276ff..999471a1 100644
--- a/docs/3.1/inherit_graph_29.png
+++ b/docs/3.1/inherit_graph_29.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_3.map b/docs/3.1/inherit_graph_3.map
index e7334093..fbc485b2 100644
--- a/docs/3.1/inherit_graph_3.map
+++ b/docs/3.1/inherit_graph_3.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$unionbitswap__type.html" title="union containing a full 8 bytes to swap the bit orientation on " alt="" coords="6,5,106,32"/>
+<area shape="rect" id="node1" href="$class_c_every_n_time_periods.html" title="CEveryNTimePeriods\l\&lt; timeType, timeGetter \&gt;" alt="" coords="6,5,175,46"/>
</map>
diff --git a/docs/3.1/inherit_graph_3.md5 b/docs/3.1/inherit_graph_3.md5
index 2ffcc4e2..c72aade6 100644
--- a/docs/3.1/inherit_graph_3.md5
+++ b/docs/3.1/inherit_graph_3.md5
@@ -1 +1 @@
-e43e29c4c6be74769d4fed0dfa782b80 \ No newline at end of file
+420300a05d5a670b5090fb520e4c0b3a \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_3.png b/docs/3.1/inherit_graph_3.png
index f3c2f42d..5056b88e 100644
--- a/docs/3.1/inherit_graph_3.png
+++ b/docs/3.1/inherit_graph_3.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_4.map b/docs/3.1/inherit_graph_4.map
index fbc485b2..24f31d41 100644
--- a/docs/3.1/inherit_graph_4.map
+++ b/docs/3.1/inherit_graph_4.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_c_every_n_time_periods.html" title="CEveryNTimePeriods\l\&lt; timeType, timeGetter \&gt;" alt="" coords="6,5,175,46"/>
+<area shape="rect" id="node1" href="$class_c_fast_l_e_d.html" title="High level controller interface for FastLED. " alt="" coords="6,5,90,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_4.md5 b/docs/3.1/inherit_graph_4.md5
index c72aade6..984f312c 100644
--- a/docs/3.1/inherit_graph_4.md5
+++ b/docs/3.1/inherit_graph_4.md5
@@ -1 +1 @@
-420300a05d5a670b5090fb520e4c0b3a \ No newline at end of file
+44c3d65150aae6493ecfef52e9b2825d \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_4.png b/docs/3.1/inherit_graph_4.png
index 5056b88e..8facaee9 100644
--- a/docs/3.1/inherit_graph_4.png
+++ b/docs/3.1/inherit_graph_4.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_5.map b/docs/3.1/inherit_graph_5.map
index 24f31d41..3249266d 100644
--- a/docs/3.1/inherit_graph_5.map
+++ b/docs/3.1/inherit_graph_5.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_c_fast_l_e_d.html" title="High level controller interface for FastLED. " alt="" coords="6,5,90,32"/>
+<area shape="rect" id="node1" href="$struct_c_h_s_v.html" title="CHSV" alt="" coords="5,5,64,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_5.md5 b/docs/3.1/inherit_graph_5.md5
index 984f312c..baa6491b 100644
--- a/docs/3.1/inherit_graph_5.md5
+++ b/docs/3.1/inherit_graph_5.md5
@@ -1 +1 @@
-44c3d65150aae6493ecfef52e9b2825d \ No newline at end of file
+e390ed93cd6fa4b7c88fe03f104e7aba \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_5.png b/docs/3.1/inherit_graph_5.png
index 8facaee9..e957c5b6 100644
--- a/docs/3.1/inherit_graph_5.png
+++ b/docs/3.1/inherit_graph_5.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_6.map b/docs/3.1/inherit_graph_6.map
index 3249266d..543a0fbf 100644
--- a/docs/3.1/inherit_graph_6.map
+++ b/docs/3.1/inherit_graph_6.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$struct_c_h_s_v.html" title="CHSV" alt="" coords="5,5,64,32"/>
+<area shape="rect" id="node1" href="$class_c_h_s_v_palette16.html" title="CHSVPalette16" alt="" coords="6,5,122,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_6.md5 b/docs/3.1/inherit_graph_6.md5
index baa6491b..04a0b47f 100644
--- a/docs/3.1/inherit_graph_6.md5
+++ b/docs/3.1/inherit_graph_6.md5
@@ -1 +1 @@
-e390ed93cd6fa4b7c88fe03f104e7aba \ No newline at end of file
+eea0468fc09668ecbad4a9499ecbb175 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_6.png b/docs/3.1/inherit_graph_6.png
index e957c5b6..254e7e52 100644
--- a/docs/3.1/inherit_graph_6.png
+++ b/docs/3.1/inherit_graph_6.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_7.map b/docs/3.1/inherit_graph_7.map
index 543a0fbf..2ae0c5b4 100644
--- a/docs/3.1/inherit_graph_7.map
+++ b/docs/3.1/inherit_graph_7.map
@@ -1,3 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_c_h_s_v_palette16.html" title="CHSVPalette16" alt="" coords="6,5,122,32"/>
+<area shape="rect" id="node1" href="$class_c_h_s_v_palette256.html" title="CHSVPalette256" alt="" coords="5,5,128,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_7.md5 b/docs/3.1/inherit_graph_7.md5
index 04a0b47f..bbf95a28 100644
--- a/docs/3.1/inherit_graph_7.md5
+++ b/docs/3.1/inherit_graph_7.md5
@@ -1 +1 @@
-eea0468fc09668ecbad4a9499ecbb175 \ No newline at end of file
+316eb8b21f637cc5f65d7df9c7d29b12 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_7.png b/docs/3.1/inherit_graph_7.png
index 254e7e52..d61c7349 100644
--- a/docs/3.1/inherit_graph_7.png
+++ b/docs/3.1/inherit_graph_7.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_8.map b/docs/3.1/inherit_graph_8.map
index 2ae0c5b4..ce18c254 100644
--- a/docs/3.1/inherit_graph_8.map
+++ b/docs/3.1/inherit_graph_8.map
@@ -1,3 +1,13 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_c_h_s_v_palette256.html" title="CHSVPalette256" alt="" coords="5,5,128,32"/>
+<area shape="rect" id="node1" href="$class_c_l_e_d_controller.html" title="Base definition for an LED controller. " alt="" coords="6,232,122,259"/>
+<area shape="rect" id="node2" href="$class_a_p_a102_controller.html" title="APA102 controller class. " alt="" coords="171,5,402,61"/>
+<area shape="rect" id="node3" href="$class_d_m_x_serial_controller.html" title="DMXSerialController\l\&lt; RGB_ORDER \&gt;" alt="" coords="215,86,359,127"/>
+<area shape="rect" id="node5" href="$class_d_m_x_simple_controller.html" title="DMXSimpleController\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="185,151,388,193"/>
+<area shape="rect" id="node7" href="$class_l_p_d8806_controller.html" title="LPD8806 controller class. " alt="" coords="185,217,388,273"/>
+<area shape="rect" id="node8" href="$class_p9813_controller.html" title="P9813 controller class. " alt="" coords="201,297,372,353"/>
+<area shape="rect" id="node9" href="$class_s_m16716_controller.html" title="SM16716 controller class. " alt="" coords="185,377,388,433"/>
+<area shape="rect" id="node10" href="$class_w_s2801_controller.html" title="WS2801 controller class. " alt="" coords="171,457,402,513"/>
+<area shape="rect" id="node4" href="$class_d_m_x_s_e_r_i_a_l.html" title="DMXSERIAL\&lt; RGB_ORDER \&gt;" alt="" coords="463,93,670,120"/>
+<area shape="rect" id="node6" href="$class_d_m_x_s_i_m_p_l_e.html" title="DMXSIMPLE\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="476,151,657,193"/>
+<area shape="rect" id="node11" href="$class_w_s2803_controller.html" title="WS2803Controller\&lt; DATA\l_PIN, CLOCK_PIN, RGB_ORDER,\l SPI_SPEED \&gt;" alt="" coords="451,457,682,513"/>
</map>
diff --git a/docs/3.1/inherit_graph_8.md5 b/docs/3.1/inherit_graph_8.md5
index bbf95a28..cb2f6ade 100644
--- a/docs/3.1/inherit_graph_8.md5
+++ b/docs/3.1/inherit_graph_8.md5
@@ -1 +1 @@
-316eb8b21f637cc5f65d7df9c7d29b12 \ No newline at end of file
+341b49535497055142763b857652f387 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_8.png b/docs/3.1/inherit_graph_8.png
index d61c7349..27ec511e 100644
--- a/docs/3.1/inherit_graph_8.png
+++ b/docs/3.1/inherit_graph_8.png
Binary files differ
diff --git a/docs/3.1/inherit_graph_9.map b/docs/3.1/inherit_graph_9.map
index ce18c254..428f1342 100644
--- a/docs/3.1/inherit_graph_9.map
+++ b/docs/3.1/inherit_graph_9.map
@@ -1,13 +1,3 @@
<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
-<area shape="rect" id="node1" href="$class_c_l_e_d_controller.html" title="Base definition for an LED controller. " alt="" coords="6,232,122,259"/>
-<area shape="rect" id="node2" href="$class_a_p_a102_controller.html" title="APA102 controller class. " alt="" coords="171,5,402,61"/>
-<area shape="rect" id="node3" href="$class_d_m_x_serial_controller.html" title="DMXSerialController\l\&lt; RGB_ORDER \&gt;" alt="" coords="215,86,359,127"/>
-<area shape="rect" id="node5" href="$class_d_m_x_simple_controller.html" title="DMXSimpleController\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="185,151,388,193"/>
-<area shape="rect" id="node7" href="$class_l_p_d8806_controller.html" title="LPD8806 controller class. " alt="" coords="185,217,388,273"/>
-<area shape="rect" id="node8" href="$class_p9813_controller.html" title="P9813 controller class. " alt="" coords="201,297,372,353"/>
-<area shape="rect" id="node9" href="$class_s_m16716_controller.html" title="SM16716 controller class. " alt="" coords="185,377,388,433"/>
-<area shape="rect" id="node10" href="$class_w_s2801_controller.html" title="WS2801 controller class. " alt="" coords="171,457,402,513"/>
-<area shape="rect" id="node4" href="$class_d_m_x_s_e_r_i_a_l.html" title="DMXSERIAL\&lt; RGB_ORDER \&gt;" alt="" coords="463,93,670,120"/>
-<area shape="rect" id="node6" href="$class_d_m_x_s_i_m_p_l_e.html" title="DMXSIMPLE\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="476,151,657,193"/>
-<area shape="rect" id="node11" href="$class_w_s2803_controller.html" title="WS2803Controller\&lt; DATA\l_PIN, CLOCK_PIN, RGB_ORDER,\l SPI_SPEED \&gt;" alt="" coords="451,457,682,513"/>
+<area shape="rect" id="node1" href="$class_c_min_wait.html" title="CMinWait\&lt; 1000 \&gt;" alt="" coords="6,5,138,32"/>
</map>
diff --git a/docs/3.1/inherit_graph_9.md5 b/docs/3.1/inherit_graph_9.md5
index cb2f6ade..c0fa1719 100644
--- a/docs/3.1/inherit_graph_9.md5
+++ b/docs/3.1/inherit_graph_9.md5
@@ -1 +1 @@
-341b49535497055142763b857652f387 \ No newline at end of file
+ec403eb7aeba941ec587f7cd276ab7a4 \ No newline at end of file
diff --git a/docs/3.1/inherit_graph_9.png b/docs/3.1/inherit_graph_9.png
index 27ec511e..29a98e00 100644
--- a/docs/3.1/inherit_graph_9.png
+++ b/docs/3.1/inherit_graph_9.png
Binary files differ
diff --git a/docs/3.1/inherits.html b/docs/3.1/inherits.html
index 07a6bb97..cbe9c4a9 100644
--- a/docs/3.1/inherits.html
+++ b/docs/3.1/inherits.html
@@ -92,131 +92,131 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="textblock">
<p><a href="hierarchy.html">Go to the textual class hierarchy</a></p>
</div><table border="0" cellspacing="10" cellpadding="0">
-<tr><td><img src="inherit_graph_0.png" border="0" alt="" usemap="#___d_u_e_p_i_n_3_01_p_i_n_00_01___m_a_s_k_00_01___o_d_r_00_01___b_s_r_r_00_01___b_r_r_01_4"/>
-<map name="___d_u_e_p_i_n_3_01_p_i_n_00_01___m_a_s_k_00_01___o_d_r_00_01___b_s_r_r_00_01___b_r_r_01_4" id="___d_u_e_p_i_n_3_01_p_i_n_00_01___m_a_s_k_00_01___o_d_r_00_01___b_s_r_r_00_01___b_r_r_01_4">
-<area shape="rect" id="node1" href="class___d_u_e_p_i_n.html" title="Template definition for STM32 style ARM pins, providing direct access to the various GPIO registers..." alt="" coords="6,5,175,46"/></map>
-</td></tr>
-<tr><td><img src="inherit_graph_1.png" border="0" alt="" usemap="#_a_v_r_software_s_p_i_output_3_01___d_a_t_a___p_i_n_00_01___c_l_o_c_k___p_i_n_00_01___s_p_i___c_l_o_c_k___d_i_v_i_d_e_r_01_4"/>
+<tr><td><img src="inherit_graph_0.png" border="0" alt="" usemap="#_a_v_r_software_s_p_i_output_3_01___d_a_t_a___p_i_n_00_01___c_l_o_c_k___p_i_n_00_01___s_p_i___c_l_o_c_k___d_i_v_i_d_e_r_01_4"/>
<map name="_a_v_r_software_s_p_i_output_3_01___d_a_t_a___p_i_n_00_01___c_l_o_c_k___p_i_n_00_01___s_p_i___c_l_o_c_k___d_i_v_i_d_e_r_01_4" id="_a_v_r_software_s_p_i_output_3_01___d_a_t_a___p_i_n_00_01___c_l_o_c_k___p_i_n_00_01___s_p_i___c_l_o_c_k___d_i_v_i_d_e_r_01_4">
<area shape="rect" id="node1" href="class_a_v_r_software_s_p_i_output.html" title="AVRSoftwareSPIOutput\l\&lt; _DATA_PIN, _CLOCK_PIN,\l _SPI_CLOCK_DIVIDER \&gt;" alt="" coords="5,85,205,141"/><area shape="rect" id="node2" href="class_software_s_p_i_output.html" title="SoftwareSPIOutput\&lt;\l _DATA_PIN, _CLOCK_PIN,\l _SPI_CLOCK_DIVIDER \&gt;" alt="" coords="257,5,449,61"/><area shape="rect" id="node3" href="class_s_p_i_output.html" title="SPIOutput\&lt; _DATA_PIN,\l _CLOCK_PIN, _SPI_CLOCK\l_DIVIDER \&gt;" alt="" coords="254,85,453,141"/><area shape="rect" id="node4" href="class_s_p_i_output.html" title="SPIOutput\&lt; DATA_PIN,\l CLOCK_PIN, SPI_SPEED \&gt;" alt="" coords="256,166,451,207"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_2.png" border="0" alt="" usemap="#_a_v_r_software_s_p_i_output_3_01_d_a_t_a___p_i_n_00_01_c_l_o_c_k___p_i_n_00_01_s_p_i___s_p_e_e_d_01_4"/>
+<tr><td><img src="inherit_graph_1.png" border="0" alt="" usemap="#_a_v_r_software_s_p_i_output_3_01_d_a_t_a___p_i_n_00_01_c_l_o_c_k___p_i_n_00_01_s_p_i___s_p_e_e_d_01_4"/>
<map name="_a_v_r_software_s_p_i_output_3_01_d_a_t_a___p_i_n_00_01_c_l_o_c_k___p_i_n_00_01_s_p_i___s_p_e_e_d_01_4" id="_a_v_r_software_s_p_i_output_3_01_d_a_t_a___p_i_n_00_01_c_l_o_c_k___p_i_n_00_01_s_p_i___s_p_e_e_d_01_4">
<area shape="rect" id="node1" href="class_a_v_r_software_s_p_i_output.html" title="AVRSoftwareSPIOutput\l\&lt; DATA_PIN, CLOCK_PIN,\l SPI_SPEED \&gt;" alt="" coords="6,5,191,61"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_3.png" border="0" alt="" usemap="#bitswap__type"/>
+<tr><td><img src="inherit_graph_2.png" border="0" alt="" usemap="#bitswap__type"/>
<map name="bitswap__type" id="bitswap__type">
<area shape="rect" id="node1" href="unionbitswap__type.html" title="union containing a full 8 bytes to swap the bit orientation on " alt="" coords="6,5,106,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_4.png" border="0" alt="" usemap="#_c_every_n_time_periods_3_01time_type_00_01time_getter_01_4"/>
+<tr><td><img src="inherit_graph_3.png" border="0" alt="" usemap="#_c_every_n_time_periods_3_01time_type_00_01time_getter_01_4"/>
<map name="_c_every_n_time_periods_3_01time_type_00_01time_getter_01_4" id="_c_every_n_time_periods_3_01time_type_00_01time_getter_01_4">
<area shape="rect" id="node1" href="class_c_every_n_time_periods.html" title="CEveryNTimePeriods\l\&lt; timeType, timeGetter \&gt;" alt="" coords="6,5,175,46"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_5.png" border="0" alt="" usemap="#_c_fast_l_e_d"/>
+<tr><td><img src="inherit_graph_4.png" border="0" alt="" usemap="#_c_fast_l_e_d"/>
<map name="_c_fast_l_e_d" id="_c_fast_l_e_d">
<area shape="rect" id="node1" href="class_c_fast_l_e_d.html" title="High level controller interface for FastLED. " alt="" coords="6,5,90,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_6.png" border="0" alt="" usemap="#_c_h_s_v"/>
+<tr><td><img src="inherit_graph_5.png" border="0" alt="" usemap="#_c_h_s_v"/>
<map name="_c_h_s_v" id="_c_h_s_v">
<area shape="rect" id="node1" href="struct_c_h_s_v.html" title="CHSV" alt="" coords="5,5,64,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_7.png" border="0" alt="" usemap="#_c_h_s_v_palette16"/>
+<tr><td><img src="inherit_graph_6.png" border="0" alt="" usemap="#_c_h_s_v_palette16"/>
<map name="_c_h_s_v_palette16" id="_c_h_s_v_palette16">
<area shape="rect" id="node1" href="class_c_h_s_v_palette16.html" title="CHSVPalette16" alt="" coords="6,5,122,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_8.png" border="0" alt="" usemap="#_c_h_s_v_palette256"/>
+<tr><td><img src="inherit_graph_7.png" border="0" alt="" usemap="#_c_h_s_v_palette256"/>
<map name="_c_h_s_v_palette256" id="_c_h_s_v_palette256">
<area shape="rect" id="node1" href="class_c_h_s_v_palette256.html" title="CHSVPalette256" alt="" coords="5,5,128,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_9.png" border="0" alt="" usemap="#_c_l_e_d_controller"/>
+<tr><td><img src="inherit_graph_8.png" border="0" alt="" usemap="#_c_l_e_d_controller"/>
<map name="_c_l_e_d_controller" id="_c_l_e_d_controller">
<area shape="rect" id="node1" href="class_c_l_e_d_controller.html" title="Base definition for an LED controller. " alt="" coords="6,232,122,259"/><area shape="rect" id="node2" href="class_a_p_a102_controller.html" title="APA102 controller class. " alt="" coords="171,5,402,61"/><area shape="rect" id="node3" href="class_d_m_x_serial_controller.html" title="DMXSerialController\l\&lt; RGB_ORDER \&gt;" alt="" coords="215,86,359,127"/><area shape="rect" id="node5" href="class_d_m_x_simple_controller.html" title="DMXSimpleController\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="185,151,388,193"/><area shape="rect" id="node7" href="class_l_p_d8806_controller.html" title="LPD8806 controller class. " alt="" coords="185,217,388,273"/><area shape="rect" id="node8" href="class_p9813_controller.html" title="P9813 controller class. " alt="" coords="201,297,372,353"/><area shape="rect" id="node9" href="class_s_m16716_controller.html" title="SM16716 controller class. " alt="" coords="185,377,388,433"/><area shape="rect" id="node10" href="class_w_s2801_controller.html" title="WS2801 controller class. " alt="" coords="171,457,402,513"/><area shape="rect" id="node4" href="class_d_m_x_s_e_r_i_a_l.html" title="DMXSERIAL\&lt; RGB_ORDER \&gt;" alt="" coords="463,93,670,120"/><area shape="rect" id="node6" href="class_d_m_x_s_i_m_p_l_e.html" title="DMXSIMPLE\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="476,151,657,193"/><area shape="rect" id="node11" href="class_w_s2803_controller.html" title="WS2803Controller\&lt; DATA\l_PIN, CLOCK_PIN, RGB_ORDER,\l SPI_SPEED \&gt;" alt="" coords="451,457,682,513"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_10.png" border="0" alt="" usemap="#_c_min_wait_3_011000_01_4"/>
+<tr><td><img src="inherit_graph_9.png" border="0" alt="" usemap="#_c_min_wait_3_011000_01_4"/>
<map name="_c_min_wait_3_011000_01_4" id="_c_min_wait_3_011000_01_4">
<area shape="rect" id="node1" href="class_c_min_wait.html" title="CMinWait\&lt; 1000 \&gt;" alt="" coords="6,5,138,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_11.png" border="0" alt="" usemap="#_c_min_wait_3_01_w_a_i_t_01_4"/>
+<tr><td><img src="inherit_graph_10.png" border="0" alt="" usemap="#_c_min_wait_3_01_w_a_i_t_01_4"/>
<map name="_c_min_wait_3_01_w_a_i_t_01_4" id="_c_min_wait_3_01_w_a_i_t_01_4">
<area shape="rect" id="node1" href="class_c_min_wait.html" title="Class to ensure that a minimum amount of time has kicked since the last time run &#45; and delay if not e..." alt="" coords="5,5,141,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_12.png" border="0" alt="" usemap="#_c_r_g_b"/>
+<tr><td><img src="inherit_graph_11.png" border="0" alt="" usemap="#_c_r_g_b"/>
<map name="_c_r_g_b" id="_c_r_g_b">
<area shape="rect" id="node1" href="struct_c_r_g_b.html" title="CRGB" alt="" coords="6,5,66,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_13.png" border="0" alt="" usemap="#_c_r_g_b_palette16"/>
+<tr><td><img src="inherit_graph_12.png" border="0" alt="" usemap="#_c_r_g_b_palette16"/>
<map name="_c_r_g_b_palette16" id="_c_r_g_b_palette16">
<area shape="rect" id="node1" href="class_c_r_g_b_palette16.html" title="CRGBPalette16" alt="" coords="5,5,123,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_14.png" border="0" alt="" usemap="#_c_r_g_b_palette256"/>
+<tr><td><img src="inherit_graph_13.png" border="0" alt="" usemap="#_c_r_g_b_palette256"/>
<map name="_c_r_g_b_palette256" id="_c_r_g_b_palette256">
<area shape="rect" id="node1" href="class_c_r_g_b_palette256.html" title="CRGBPalette256" alt="" coords="6,5,130,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_15.png" border="0" alt="" usemap="#_d_a_t_a___n_o_p"/>
+<tr><td><img src="inherit_graph_14.png" border="0" alt="" usemap="#_d_a_t_a___n_o_p"/>
<map name="_d_a_t_a___n_o_p" id="_d_a_t_a___n_o_p">
<area shape="rect" id="node1" href="class_d_a_t_a___n_o_p.html" title="Some of the SPI controllers will need to perform a transform on each byte before doing anyting with i..." alt="" coords="5,5,99,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_16.png" border="0" alt="" usemap="#_fast_pin_3_01_c_l_o_c_k___p_i_n_01_4"/>
+<tr><td><img src="inherit_graph_15.png" border="0" alt="" usemap="#_fast_pin_3_01_c_l_o_c_k___p_i_n_01_4"/>
<map name="_fast_pin_3_01_c_l_o_c_k___p_i_n_01_4" id="_fast_pin_3_01_c_l_o_c_k___p_i_n_01_4">
<area shape="rect" id="node1" href="class_fast_pin.html" title="FastPin\&lt; CLOCK_PIN \&gt;" alt="" coords="5,5,171,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_17.png" border="0" alt="" usemap="#_fast_pin_3_01_p_i_n_01_4"/>
+<tr><td><img src="inherit_graph_16.png" border="0" alt="" usemap="#_fast_pin_3_01_p_i_n_01_4"/>
<map name="_fast_pin_3_01_p_i_n_01_4" id="_fast_pin_3_01_p_i_n_01_4">
<area shape="rect" id="node1" href="class_fast_pin.html" title="The simplest level of Pin class. " alt="" coords="5,5,117,32"/><area shape="rect" id="node2" href="class_fast_pin_b_b.html" title="FastPinBB\&lt; PIN \&gt;" alt="" coords="165,5,296,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_18.png" border="0" alt="" usemap="#_g_w6205_controller400_khz_3_01_d_a_t_a___p_i_n_00_01_r_g_b___o_r_d_e_r_01_4"/>
+<tr><td><img src="inherit_graph_17.png" border="0" alt="" usemap="#_g_w6205_controller400_khz_3_01_d_a_t_a___p_i_n_00_01_r_g_b___o_r_d_e_r_01_4"/>
<map name="_g_w6205_controller400_khz_3_01_d_a_t_a___p_i_n_00_01_r_g_b___o_r_d_e_r_01_4" id="_g_w6205_controller400_khz_3_01_d_a_t_a___p_i_n_00_01_r_g_b___o_r_d_e_r_01_4">
<area shape="rect" id="node2" href="class_g_w6205_controller400_khz.html" title="GW6205Controller400Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,5,395,46"/><area shape="rect" id="node4" href="class_g_w6205_controller800_khz.html" title="GW6205Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,70,395,111"/><area shape="rect" id="node6" href="class_l_p_d1886_controller1250_khz.html" title="LPD1886Controller1250Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,135,395,177"/><area shape="rect" id="node8" href="class_t_m1803_controller400_khz.html" title="TM1803Controller400Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,201,395,242"/><area shape="rect" id="node10" href="class_t_m1809_controller800_khz.html" title="TM1809Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,266,395,307"/><area shape="rect" id="node13" href="class_t_m1829_controller1600_khz.html" title="TM1829Controller1600Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,331,395,373"/><area shape="rect" id="node14" href="class_t_m1829_controller800_khz.html" title="TM1829Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,397,395,438"/><area shape="rect" id="node16" href="class_u_c_s1903_b_controller800_khz.html" title="UCS1903BController800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,462,395,503"/><area shape="rect" id="node18" href="class_u_c_s1903_controller400_khz.html" title="UCS1903Controller400Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,527,395,569"/><area shape="rect" id="node20" href="class_u_c_s1904_controller800_khz.html" title="UCS1904Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,593,395,634"/><area shape="rect" id="node22" href="class_w_s2811_controller400_khz.html" title="WS2811Controller400Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,658,395,699"/><area shape="rect" id="node24" href="class_w_s2811_controller800_khz.html" title="WS2811Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,723,395,765"/><area shape="rect" id="node27" href="class_w_s2812_controller800_khz.html" title="WS2812Controller800Khz\l\&lt; DATA_PIN, RGB_ORDER \&gt;" alt="" coords="192,854,395,895"/><area shape="rect" id="node30" href="class_w_s2812_controller800_khz.html" title="WS2812Controller800Khz\l\&lt; DATA_PIN, GRB \&gt;" alt="" coords="205,949,381,990"/><area shape="rect" id="node3" href="class_g_w6205__400.html" title="GW6205_400\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="445,5,630,46"/><area shape="rect" id="node5" href="class_g_w6205.html" title="GW6205\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="443,70,631,111"/><area shape="rect" id="node7" href="class_l_p_d1886.html" title="LPD1886\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="459,135,616,177"/><area shape="rect" id="node9" href="class_t_m1803.html" title="TM1803\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,201,629,242"/><area shape="rect" id="node11" href="class_t_m1804.html" title="TM1804\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,266,629,307"/><area shape="rect" id="node12" href="class_t_m1809.html" title="TM1809\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,331,629,373"/><area shape="rect" id="node15" href="class_t_m1829.html" title="TM1829\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,397,629,438"/><area shape="rect" id="node17" href="class_u_c_s1903_b.html" title="UCS1903B\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="453,462,622,503"/><area shape="rect" id="node19" href="class_u_c_s1903.html" title="UCS1903\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="457,527,617,569"/><area shape="rect" id="node21" href="class_u_c_s1904.html" title="UCS1904\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="457,593,617,634"/><area shape="rect" id="node23" href="class_w_s2811__400.html" title="WS2811_400\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="446,658,629,699"/><area shape="rect" id="node25" href="class_a_p_a104.html" title="APA104\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="445,723,629,765"/><area shape="rect" id="node26" href="class_w_s2811.html" title="WS2811\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="444,789,631,830"/><area shape="rect" id="node28" href="class_w_s2812.html" title="WS2812\&lt; DATA_PIN, RGB\l_ORDER \&gt;" alt="" coords="444,854,631,895"/><area shape="rect" id="node29" href="class_w_s2812_b.html" title="WS2812B\&lt; DATA_PIN,\l RGB_ORDER \&gt;" alt="" coords="456,919,619,961"/><area shape="rect" id="node31" href="class_n_e_o_p_i_x_e_l.html" title="NEOPIXEL\&lt; DATA_PIN \&gt;" alt="" coords="449,985,626,1012"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_19.png" border="0" alt="" usemap="#_i_e_e_e754binary32__t"/>
+<tr><td><img src="inherit_graph_18.png" border="0" alt="" usemap="#_i_e_e_e754binary32__t"/>
<map name="_i_e_e_e754binary32__t" id="_i_e_e_e754binary32__t">
<area shape="rect" id="node1" href="union_i_e_e_e754binary32__t.html" title="IEEE754binary32_t" alt="" coords="6,5,143,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_20.png" border="0" alt="" usemap="#just8bits"/>
+<tr><td><img src="inherit_graph_19.png" border="0" alt="" usemap="#just8bits"/>
<map name="just8bits" id="just8bits">
<area shape="rect" id="node1" href="unionjust8bits.html" title="structure representing 8 bits of access " alt="" coords="6,5,77,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_21.png" border="0" alt="" usemap="#_multi_pixel_controller_3_01_l_a_n_e_s_00_01_m_a_s_k_00_01_r_g_b___o_r_d_e_r_01_4"/>
+<tr><td><img src="inherit_graph_20.png" border="0" alt="" usemap="#_multi_pixel_controller_3_01_l_a_n_e_s_00_01_m_a_s_k_00_01_r_g_b___o_r_d_e_r_01_4"/>
<map name="_multi_pixel_controller_3_01_l_a_n_e_s_00_01_m_a_s_k_00_01_r_g_b___o_r_d_e_r_01_4" id="_multi_pixel_controller_3_01_l_a_n_e_s_00_01_m_a_s_k_00_01_r_g_b___o_r_d_e_r_01_4">
<area shape="rect" id="node1" href="struct_multi_pixel_controller.html" title="MultiPixelController\l\&lt; LANES, MASK, RGB_ORDER \&gt;" alt="" coords="6,5,231,46"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_22.png" border="0" alt="" usemap="#_pixel_controller_3_01_r_g_b___o_r_d_e_r_01_4"/>
+<tr><td><img src="inherit_graph_21.png" border="0" alt="" usemap="#_pixel_controller_3_01_r_g_b___o_r_d_e_r_01_4"/>
<map name="_pixel_controller_3_01_r_g_b___o_r_d_e_r_01_4" id="_pixel_controller_3_01_r_g_b___o_r_d_e_r_01_4">
<area shape="rect" id="node1" href="struct_pixel_controller.html" title="Pixel controller class. " alt="" coords="5,5,155,46"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_23.png" border="0" alt="" usemap="#q_3_01_t_00_01_f_00_01_i_01_4"/>
+<tr><td><img src="inherit_graph_22.png" border="0" alt="" usemap="#q_3_01_t_00_01_f_00_01_i_01_4"/>
<map name="q_3_01_t_00_01_f_00_01_i_01_4" id="q_3_01_t_00_01_f_00_01_i_01_4">
<area shape="rect" id="node1" href="classq.html" title="q\&lt; T, F, I \&gt;" alt="" coords="6,5,93,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_24.png" border="0" alt="" usemap="#_selectable"/>
+<tr><td><img src="inherit_graph_23.png" border="0" alt="" usemap="#_selectable"/>
<map name="_selectable" id="_selectable">
<area shape="rect" id="node1" href="class_selectable.html" title="Selectable" alt="" coords="6,31,90,57"/><area shape="rect" id="node2" href="class_pin.html" title="Pin" alt="" coords="139,31,181,57"/><area shape="rect" id="node3" href="class_input_pin.html" title="InputPin" alt="" coords="235,5,306,32"/><area shape="rect" id="node4" href="class_output_pin.html" title="OutputPin" alt="" coords="230,56,311,83"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_25.png" border="0" alt="" usemap="#_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4"/>
+<tr><td><img src="inherit_graph_24.png" border="0" alt="" usemap="#_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4"/>
<map name="_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4" id="_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4">
-<area shape="rect" id="node2" href="class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI2_DATA,\l SPI2_CLOCK, SPI_SPEED \&gt;" alt="" coords="225,5,426,46"/><area shape="rect" id="node3" href="class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI_DATA,\l SPI_CLOCK, SPI_SPEED \&gt;" alt="" coords="229,70,422,111"/></map>
+<area shape="rect" id="node2" href="class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI2_DATA,\l SPI2_CLOCK, SPI_SPEED \&gt;" alt="" coords="225,5,426,46"/><area shape="rect" id="node3" href="class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI2_DATA,\l SPI_CLOCK, SPI_SPEED \&gt;" alt="" coords="229,70,422,111"/><area shape="rect" id="node4" href="class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI_DATA,\l SPI2_CLOCK, SPI_SPEED \&gt;" alt="" coords="225,135,426,177"/><area shape="rect" id="node5" href="class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI_DATA,\l SPI_CLOCK, SPI_SPEED \&gt;" alt="" coords="229,201,422,242"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_26.png" border="0" alt="" usemap="#_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4"/>
+<tr><td><img src="inherit_graph_25.png" border="0" alt="" usemap="#_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4"/>
<map name="_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4" id="_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4">
<area shape="rect" id="node2" href="class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI_UART0\l_DATA, SPI_UART0_CLOCK,\l SPI_SPEED \&gt;" alt="" coords="219,5,421,61"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_27.png" border="0" alt="" usemap="#_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4"/>
+<tr><td><img src="inherit_graph_26.png" border="0" alt="" usemap="#_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4"/>
<map name="_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4" id="_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4">
<area shape="rect" id="node2" href="class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html" title="SPIOutput\&lt; SPI_UART1\l_DATA, SPI_UART1_CLOCK,\l SPI_SPEED \&gt;" alt="" coords="219,5,421,61"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_28.png" border="0" alt="" usemap="#sub4"/>
+<tr><td><img src="inherit_graph_27.png" border="0" alt="" usemap="#sub4"/>
<map name="sub4" id="sub4">
<area shape="rect" id="node1" href="structsub4.html" title="structure representing 32 bits of access " alt="" coords="5,5,56,32"/></map>
</td></tr>
-<tr><td><img src="inherit_graph_29.png" border="0" alt="" usemap="#t_bytes_for_long"/>
+<tr><td><img src="inherit_graph_28.png" border="0" alt="" usemap="#t_bytes_for_long"/>
<map name="t_bytes_for_long" id="t_bytes_for_long">
<area shape="rect" id="node1" href="uniont_bytes_for_long.html" title="tBytesForLong" alt="" coords="5,5,115,32"/></map>
</td></tr>
+<tr><td><img src="inherit_graph_29.png" border="0" alt="" usemap="#_t_r_g_b_gradient_palette_entry_union"/>
+<map name="_t_r_g_b_gradient_palette_entry_union" id="_t_r_g_b_gradient_palette_entry_union">
+<area shape="rect" id="node1" href="union_t_r_g_b_gradient_palette_entry_union.html" title="TRGBGradientPaletteEntry\lUnion" alt="" coords="6,5,189,46"/></map>
+</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/led__sysdefs_8h_source.html b/docs/3.1/led__sysdefs_8h_source.html
index 14e63894..0180958e 100644
--- a/docs/3.1/led__sysdefs_8h_source.html
+++ b/docs/3.1/led__sysdefs_8h_source.html
@@ -92,29 +92,46 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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 class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#if defined(NRF51) || defined(__RFduino__)</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/nrf51/led_sysdefs_arm_nrf51.h&quot;</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#elif defined(__MK20DX128__) || defined(__MK20DX256__)</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// Include k20/T3 headers</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/k20/led_sysdefs_arm_k20.h&quot;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#elif defined(__MKL26Z64__)</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// Include kl26/T-LC headers</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/kl26/led_sysdefs_arm_kl26.h&quot;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#elif defined(__SAM3X8E__)</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// Include sam/due headers</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/sam/led_sysdefs_arm_sam.h&quot;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#elif defined(STM32F10X_MD)</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/stm32/led_sysdefs_arm_stm32.h&quot;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#elif defined(__SAMD21G18A__)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/d21/led_sysdefs_arm_d21.h&quot;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#elif defined(__XTENSA__)</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#error &quot;XTENSA-architecture microcontrollers are not supported.&quot;</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// AVR platforms</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;platforms/avr/led_sysdefs_avr.h&quot;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#ifndef FASTLED_NAMESPACE_BEGIN</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#define FASTLED_NAMESPACE_BEGIN</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#define FASTLED_NAMESPACE_END</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define FASTLED_USING_NAMESPACE</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#endif</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">// Arduino.h needed for convenience functions digitalPinToPort/BitMask/portOutputRegister and the pinMode methods.</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#ifdef ARDUINO</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include&lt;Arduino.h&gt;</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#define CLKS_PER_US (F_CPU/1000000)</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="preprocessor">#endif</span></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/lib8tion_8h_source.html b/docs/3.1/lib8tion_8h_source.html
index 6cf1bf8d..523ff4c6 100644
--- a/docs/3.1/lib8tion_8h_source.html
+++ b/docs/3.1/lib8tion_8h_source.html
@@ -94,2112 +94,1064 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="l00008"></a><span class="lineno"> 8</span>&#160;FASTLED_NAMESPACE_BEGIN</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="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="comment"> Fast, efficient 8-bit math functions specifically</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> designed for high-performance LED programming.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> Because of the AVR(Arduino) and ARM assembly language</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> implementations provided, using these functions often</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> results in smaller and faster code than the equivalent</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> program using plain &quot;C&quot; arithmetic and logic.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"></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"> beatsin88( BPM88, low16, high16)</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> Included are:</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"></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> - Saturating unsigned 8-bit add and subtract.</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> Instead of wrapping around if an overflow occurs,</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> these routines just &#39;clamp&#39; the output at a maxumum</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> of 255, or a minimum of 0. Useful for adding pixel</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> values. E.g., qadd8( 200, 100) = 255.</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> qadd8( i, j) == MIN( (i + j), 0xFF )</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"> qsub8( i, j) == MAX( (i - j), 0 )</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"> - Saturating signed 8-bit (&quot;7-bit&quot;) add.</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment"> qadd7( i, j) == MIN( (i + j), 0x7F)</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment"></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"> - Scaling (down) of unsigned 8- and 16- bit values.</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment"> Scaledown value is specified in 1/256ths.</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment"> scale8( i, sc) == (i * sc) / 256</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment"> scale16by8( i, sc) == (i * sc) / 256</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"> Example: scaling a 0-255 value down into a</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment"> range from 0-99:</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment"> downscaled = scale8( originalnumber, 100);</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment"> A special version of scale8 is provided for scaling</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment"> LED brightness values, to make sure that they don&#39;t</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment"> accidentally scale down to total black at low</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment"> dimming levels, since that would look wrong:</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment"> scale8_video( i, sc) = ((i * sc) / 256) +? 1</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment"> Example: reducing an LED brightness by a</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment"> dimming factor:</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment"> new_bright = scale8_video( orig_bright, dimming);</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment"> - Fast 8- and 16- bit unsigned random numbers.</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"> Significantly faster than Arduino random(), but</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment"> also somewhat less random. You can add entropy.</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment"> random8() == random from 0..255</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"> random8( n) == random from 0..(N-1)</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment"> random8( n, m) == random from N..(M-1)</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment"> random16() == random from 0..65535</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment"> random16( n) == random from 0..(N-1)</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment"> random16( n, m) == random from N..(M-1)</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment"> random16_set_seed( k) == seed = k</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"> random16_add_entropy( k) == seed += k</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"> - Absolute value of a signed 8-bit value.</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"> abs8( i) == abs( i)</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"></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"> - 8-bit math operations which return 8-bit values.</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"> These are provided mostly for completeness,</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"> not particularly for performance.</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"> mul8( i, j) == (i * j) &amp; 0xFF</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"> add8( i, j) == (i + j) &amp; 0xFF</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"> sub8( i, j) == (i - j) &amp; 0xFF</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> - Fast 16-bit approximations of sin and cos.</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"> Input angle is a uint16_t from 0-65535.</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"> Output is a signed int16_t from -32767 to 32767.</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"> sin16( x) == sin( (x/32768.0) * pi) * 32767</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment"> cos16( x) == cos( (x/32768.0) * pi) * 32767</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> Accurate to more than 99% in all cases.</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="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"> - Fast 8-bit approximations of sin and cos.</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> Input angle is a uint8_t from 0-255.</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> Output is an UNsigned uint8_t from 0 to 255.</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"> sin8( x) == (sin( (x/128.0) * pi) * 128) + 128</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment"> cos8( x) == (cos( (x/128.0) * pi) * 128) + 128</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"> Accurate to within about 2%.</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment"> - Fast 8-bit &quot;easing in/out&quot; function.</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment"> ease8InOutCubic(x) == 3(x^i) - 2(x^3)</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment"> ease8InOutApprox(x) ==</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment"> faster, rougher, approximation of cubic easing</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment"> ease8InOutQuad(x) == quadratic (vs cubic) easing</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"> - Cubic, Quadratic, and Triangle wave functions.</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment"> Input is a uint8_t representing phase withing the wave,</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment"> similar to how sin8 takes an angle &#39;theta&#39;.</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"> Output is a uint8_t representing the amplitude of</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment"> the wave at that point.</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment"> cubicwave8( x)</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment"> quadwave8( x)</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment"> triwave8( x)</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment"> - Square root for 16-bit integers. About three times</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment"> faster and five times smaller than Arduino&#39;s built-in</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment"> generic 32-bit sqrt routine.</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="comment"> sqrt16( uint16_t x ) == sqrt( x)</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="comment"> - Dimming and brightening functions for 8-bit</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="comment"> light values.</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="comment"> dim8_video( x) == scale8_video( x, x)</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="comment"> dim8_raw( x) == scale8( x, x)</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="comment"> dim8_lin( x) == (x&lt;128) ? ((x+1)/2) : scale8(x,x)</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment"> brighten8_video( x) == 255 - dim8_video( 255 - x)</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment"> brighten8_raw( x) == 255 - dim8_raw( 255 - x)</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"> brighten8_lin( x) == 255 - dim8_lin( 255 - x)</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment"> The dimming functions in particular are suitable</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"> for making LED light output appear more &#39;linear&#39;.</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment"> - Linear interpolation between two values, with the</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment"> fraction between them expressed as an 8- or 16-bit</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="comment"> fixed point fraction (fract8 or fract16).</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment"> lerp8by8( fromU8, toU8, fract8 )</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="comment"> lerp16by8( fromU16, toU16, fract8 )</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment"> lerp15by8( fromS16, toS16, fract8 )</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment"> == from + (( to - from ) * fract8) / 256)</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment"> lerp16by16( fromU16, toU16, fract16 )</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment"> == from + (( to - from ) * fract16) / 65536)</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment"> map8( in, rangeStart, rangeEnd)</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment"> == map( in, 0, 255, rangeStart, rangeEnd);</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment"> - Optimized memmove, memcpy, and memset, that are</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment"> faster than standard avr-libc 1.8.</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment"> memmove8( dest, src, bytecount)</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="comment"> memcpy8( dest, src, bytecount)</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment"> memset8( buf, value, bytecount)</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="comment"> - Beat generators which return sine or sawtooth</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="comment"> waves in a specified number of Beats Per Minute.</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment"> Sine wave beat generators can specify a low and</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment"> high range for the output. Sawtooth wave beat</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment"> generators always range 0-255 or 0-65535.</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment"> beatsin8( BPM, low8, high8)</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment"> = (sine(beatphase) * (high8-low8)) + low8</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment"> beatsin16( BPM, low16, high16)</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment"> = (sine(beatphase) * (high16-low16)) + low16</span></div>
-<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment"> beat8( BPM) = 8-bit repeating sawtooth wave</span></div>
-<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment"> beat16( BPM) = 16-bit repeating sawtooth wave</span></div>
-<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"> beat88( BPM88) = 16-bit repeating sawtooth wave</span></div>
-<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"> BPM is beats per minute in either simple form</span></div>
-<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment"> e.g. 120, or Q8.8 fixed-point form.</span></div>
-<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"> BPM88 is beats per minute in ONLY Q8.8 fixed-point </span></div>
-<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment"> form.</span></div>
-<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment">Lib8tion is pronounced like &#39;libation&#39;: lie-BAY-shun</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment"> beatsin88( BPM88, low16, high16)</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment"> = (sine(beatphase) * (high16-low16)) + low16</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"> beat8( BPM) = 8-bit repeating sawtooth wave</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"> beat16( BPM) = 16-bit repeating sawtooth wave</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment"> beat88( BPM88) = 16-bit repeating sawtooth wave</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"> BPM is beats per minute in either simple form</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment"> e.g. 120, or Q8.8 fixed-point form.</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment"> BPM88 is beats per minute in ONLY Q8.8 fixed-point</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment"> form.</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="comment">*/</span></div>
-<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div>
-<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="comment">Lib8tion is pronounced like &#39;libation&#39;: lie-BAY-shun</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="comment">*/</span></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="preprocessor">#include &lt;stdint.h&gt;</span></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">#define LIB8STATIC __attribute__ ((unused)) static inline</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</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="preprocessor">#if !defined(__AVR__)</span></div>
-<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
-<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment">// for memmove, memcpy, and memset if not defined here</span></div>
-<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div>
-<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="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="l00182"></a><span class="lineno"> 182</span>&#160;<span class="preprocessor">#define LIB8_ATTINY 1</span></div>
-<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div>
-<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div>
-<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="preprocessor">#if defined(__arm__)</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="preprocessor">#define LIB8STATIC __attribute__ ((unused)) static inline</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="preprocessor">#if !defined(__AVR__)</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment">// for memmove, memcpy, and memset if not defined here</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="preprocessor">#endif</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;<span class="preprocessor">#if defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega8U2__) || defined(__AVR_AT90USB162__) || defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny167__) || defined(__AVR_ATtiny87__)</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="preprocessor">#define LIB8_ATTINY 1</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="preprocessor">#endif</span></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="preprocessor">#if defined(FASTLED_TEENSY3)</span></div>
-<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="comment">// Can use Cortex M4 DSP instructions</span></div>
-<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="preprocessor">#define QADD8_C 0</span></div>
-<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="preprocessor">#define QADD7_C 0</span></div>
-<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="preprocessor">#define QADD8_ARM_DSP_ASM 1</span></div>
-<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="preprocessor">#define QADD7_ARM_DSP_ASM 1</span></div>
-<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment">// Generic ARM</span></div>
-<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="preprocessor">#define QADD8_C 1</span></div>
-<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="preprocessor">#define QADD7_C 1</span></div>
-<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div>
-<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="preprocessor">#define QSUB8_C 1</span></div>
-<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="preprocessor">#define SCALE8_C 1</span></div>
-<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="preprocessor">#define SCALE16BY8_C 1</span></div>
-<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="preprocessor">#define SCALE16_C 1</span></div>
-<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="preprocessor">#define ABS8_C 1</span></div>
-<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="preprocessor">#define MUL8_C 1</span></div>
-<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="preprocessor">#define QMUL8_C 1</span></div>
-<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="preprocessor">#define ADD8_C 1</span></div>
-<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="preprocessor">#define SUB8_C 1</span></div>
-<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="preprocessor">#define EASE8_C 1</span></div>
-<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="preprocessor">#define AVG8_C 1</span></div>
-<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="preprocessor">#define AVG7_C 1</span></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;<span class="preprocessor">#elif defined(__AVR__)</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="preprocessor">#if defined(__arm__)</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="preprocessor">#if defined(FASTLED_TEENSY3)</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment">// Can use Cortex M4 DSP instructions</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="preprocessor">#define QADD8_C 0</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="preprocessor">#define QADD7_C 0</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="preprocessor">#define QADD8_ARM_DSP_ASM 1</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="preprocessor">#define QADD7_ARM_DSP_ASM 1</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment">// Generic ARM</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="preprocessor">#define QADD8_C 1</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="preprocessor">#define QADD7_C 1</span></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;<span class="preprocessor">#define QSUB8_C 1</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="preprocessor">#define SCALE8_C 1</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="preprocessor">#define SCALE16BY8_C 1</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="preprocessor">#define SCALE16_C 1</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="preprocessor">#define ABS8_C 1</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="preprocessor">#define MUL8_C 1</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="preprocessor">#define QMUL8_C 1</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="preprocessor">#define ADD8_C 1</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="preprocessor">#define SUB8_C 1</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="preprocessor">#define EASE8_C 1</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="preprocessor">#define AVG8_C 1</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="preprocessor">#define AVG7_C 1</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div>
-<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="comment">// AVR ATmega and friends Arduino</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="preprocessor">#elif defined(__AVR__)</span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div>
-<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="preprocessor">#define QADD8_C 0</span></div>
-<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="preprocessor">#define QADD7_C 0</span></div>
-<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="preprocessor">#define QSUB8_C 0</span></div>
-<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="preprocessor">#define ABS8_C 0</span></div>
-<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="preprocessor">#define ADD8_C 0</span></div>
-<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="preprocessor">#define SUB8_C 0</span></div>
-<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="preprocessor">#define AVG8_C 0</span></div>
-<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="preprocessor">#define AVG7_C 0</span></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="preprocessor">#define QADD8_AVRASM 1</span></div>
-<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="preprocessor">#define QADD7_AVRASM 1</span></div>
-<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="preprocessor">#define QSUB8_AVRASM 1</span></div>
-<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="preprocessor">#define ABS8_AVRASM 1</span></div>
-<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="preprocessor">#define ADD8_AVRASM 1</span></div>
-<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="preprocessor">#define SUB8_AVRASM 1</span></div>
-<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="preprocessor">#define AVG8_AVRASM 1</span></div>
-<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="preprocessor">#define AVG7_AVRASM 1</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;<span class="comment">// Note: these require hardware MUL instruction</span></div>
-<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="comment">// -- sorry, ATtiny!</span></div>
-<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="preprocessor">#if !defined(LIB8_ATTINY)</span></div>
-<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="preprocessor">#define SCALE8_C 0</span></div>
-<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="preprocessor">#define SCALE16BY8_C 0</span></div>
-<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="preprocessor">#define SCALE16_C 0</span></div>
-<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="preprocessor">#define MUL8_C 0</span></div>
-<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="preprocessor">#define QMUL8_C 0</span></div>
-<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="preprocessor">#define EASE8_C 0</span></div>
-<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="preprocessor">#define SCALE8_AVRASM 1</span></div>
-<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="preprocessor">#define SCALE16BY8_AVRASM 1</span></div>
-<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="preprocessor">#define SCALE16_AVRASM 1</span></div>
-<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="preprocessor">#define MUL8_AVRASM 1</span></div>
-<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="preprocessor">#define QMUL8_AVRASM 1</span></div>
-<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="preprocessor">#define EASE8_AVRASM 1</span></div>
-<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="preprocessor">#define CLEANUP_R1_AVRASM 1</span></div>
-<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="comment">// On ATtiny, we just use C implementations</span></div>
-<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="preprocessor">#define SCALE8_C 1</span></div>
-<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="preprocessor">#define SCALE16BY8_C 1</span></div>
-<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="preprocessor">#define SCALE16_C 1</span></div>
-<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="preprocessor">#define MUL8_C 1</span></div>
-<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="preprocessor">#define QMUL8_C 1</span></div>
-<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="preprocessor">#define EASE8_C 1</span></div>
-<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="preprocessor">#define SCALE8_AVRASM 0</span></div>
-<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="preprocessor">#define SCALE16BY8_AVRASM 0</span></div>
-<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="preprocessor">#define SCALE16_AVRASM 0</span></div>
-<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="preprocessor">#define MUL8_AVRASM 0</span></div>
-<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="preprocessor">#define QMUL8_AVRASM 0</span></div>
-<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="preprocessor">#define EASE8_AVRASM 0</span></div>
-<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div>
-<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="comment">// AVR ATmega and friends Arduino</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="preprocessor">#define QADD8_C 0</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="preprocessor">#define QADD7_C 0</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="preprocessor">#define QSUB8_C 0</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="preprocessor">#define ABS8_C 0</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="preprocessor">#define ADD8_C 0</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="preprocessor">#define SUB8_C 0</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="preprocessor">#define AVG8_C 0</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="preprocessor">#define AVG7_C 0</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="preprocessor">#define QADD8_AVRASM 1</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="preprocessor">#define QADD7_AVRASM 1</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="preprocessor">#define QSUB8_AVRASM 1</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="preprocessor">#define ABS8_AVRASM 1</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="preprocessor">#define ADD8_AVRASM 1</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="preprocessor">#define SUB8_AVRASM 1</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="preprocessor">#define AVG8_AVRASM 1</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="preprocessor">#define AVG7_AVRASM 1</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="comment">// Note: these require hardware MUL instruction</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment">// -- sorry, ATtiny!</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="preprocessor">#if !defined(LIB8_ATTINY)</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="preprocessor">#define SCALE8_C 0</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="preprocessor">#define SCALE16BY8_C 0</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="preprocessor">#define SCALE16_C 0</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="preprocessor">#define MUL8_C 0</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="preprocessor">#define QMUL8_C 0</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="preprocessor">#define EASE8_C 0</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="preprocessor">#define SCALE8_AVRASM 1</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="preprocessor">#define SCALE16BY8_AVRASM 1</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="preprocessor">#define SCALE16_AVRASM 1</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="preprocessor">#define MUL8_AVRASM 1</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="preprocessor">#define QMUL8_AVRASM 1</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="preprocessor">#define EASE8_AVRASM 1</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="preprocessor">#define CLEANUP_R1_AVRASM 1</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment">// On ATtiny, we just use C implementations</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="preprocessor">#define SCALE8_C 1</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="preprocessor">#define SCALE16BY8_C 1</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="preprocessor">#define SCALE16_C 1</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="preprocessor">#define MUL8_C 1</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="preprocessor">#define QMUL8_C 1</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="preprocessor">#define EASE8_C 1</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="preprocessor">#define SCALE8_AVRASM 0</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="preprocessor">#define SCALE16BY8_AVRASM 0</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="preprocessor">#define SCALE16_AVRASM 0</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="preprocessor">#define MUL8_AVRASM 0</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="preprocessor">#define QMUL8_AVRASM 0</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="preprocessor">#define EASE8_AVRASM 0</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="preprocessor">#endif</span></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="comment">// unspecified architecture, so</span></div>
-<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="comment">// no ASM, everything in C</span></div>
-<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="preprocessor">#define QADD8_C 1</span></div>
-<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="preprocessor">#define QADD7_C 1</span></div>
-<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="preprocessor">#define QSUB8_C 1</span></div>
-<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="preprocessor">#define SCALE8_C 1</span></div>
-<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="preprocessor">#define SCALE16BY8_C 1</span></div>
-<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="preprocessor">#define SCALE16_C 1</span></div>
-<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="preprocessor">#define ABS8_C 1</span></div>
-<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="preprocessor">#define MUL8_C 1</span></div>
-<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="preprocessor">#define QMUL8_C 1</span></div>
-<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;<span class="preprocessor">#define ADD8_C 1</span></div>
-<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="preprocessor">#define SUB8_C 1</span></div>
-<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;<span class="preprocessor">#define EASE8_C 1</span></div>
-<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="preprocessor">#define AVG8_C 1</span></div>
-<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="preprocessor">#define AVG7_C 1</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="preprocessor">#else</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="comment">// unspecified architecture, so</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="comment">// no ASM, everything in C</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="preprocessor">#define QADD8_C 1</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="preprocessor">#define QADD7_C 1</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="preprocessor">#define QSUB8_C 1</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="preprocessor">#define SCALE8_C 1</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="preprocessor">#define SCALE16BY8_C 1</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="preprocessor">#define SCALE16_C 1</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="preprocessor">#define ABS8_C 1</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;<span class="preprocessor">#define MUL8_C 1</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="preprocessor">#define QMUL8_C 1</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;<span class="preprocessor">#define ADD8_C 1</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="preprocessor">#define SUB8_C 1</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="preprocessor">#define EASE8_C 1</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="preprocessor">#define AVG8_C 1</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="preprocessor">#define AVG7_C 1</span></div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div>
-<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div>
-<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="comment">// typdefs for fixed-point fractional types.</span></div>
-<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment">// sfract7 should be interpreted as signed 128ths.</span></div>
-<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="comment">// fract8 should be interpreted as unsigned 256ths.</span></div>
-<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;<span class="comment">// sfract15 should be interpreted as signed 32768ths.</span></div>
-<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="comment">// fract16 should be interpreted as unsigned 65536ths.</span></div>
-<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00299"></a><span class="lineno"> 299</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="l00300"></a><span class="lineno"> 300</span>&#160;<span class="comment">// as 64/256ths, or one-quarter.</span></div>
-<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;<span class="comment">//</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">// fract8 range is 0 to 0.99609375</span></div>
-<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="comment">// in steps of 0.00390625</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">// sfract7 range is -0.9921875 to 0.9921875</span></div>
-<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="comment">// in steps of 0.0078125</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="comment">// typdefs for fixed-point fractional types.</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 should be interpreted as signed 128ths.</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;<span class="comment">// fract8 should be interpreted as unsigned 256ths.</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="comment">// sfract15 should be interpreted as signed 32768ths.</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;<span class="comment">// fract16 should be interpreted as unsigned 65536ths.</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</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="l00306"></a><span class="lineno"> 306</span>&#160;<span class="comment">// as 64/256ths, or one-quarter.</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">//</span></div>
-<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment">// fract16 range is 0 to 0.99998474121</span></div>
-<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="comment">// in steps of 0.00001525878</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment">// fract8 range is 0 to 0.99609375</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="comment">// in steps of 0.00390625</span></div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="comment">// sfract15 range is -0.99996948242 to 0.99996948242</span></div>
-<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="comment">// in steps of 0.00003051757</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="comment">// sfract7 range is -0.9921875 to 0.9921875</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="comment">// in steps of 0.0078125</span></div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="comment">//</span></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="keyword">typedef</span> uint8_t fract8; <span class="comment">// ANSI: unsigned short _Fract</span></div>
-<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="keyword">typedef</span> int8_t sfract7; <span class="comment">// ANSI: signed short _Fract</span></div>
-<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="keyword">typedef</span> uint16_t fract16; <span class="comment">// ANSI: unsigned _Fract</span></div>
-<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="keyword">typedef</span> int16_t sfract15; <span class="comment">// ANSI: signed _Fract</span></div>
-<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="comment">// fract16 range is 0 to 0.99998474121</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="comment">// in steps of 0.00001525878</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="comment">// sfract15 range is -0.99996948242 to 0.99996948242</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="comment">// in steps of 0.00003051757</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="comment">//</span></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">// accumXY types should be interpreted as X bits of integer,</span></div>
-<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="comment">// and Y bits of fraction.</span></div>
-<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="comment">// E.g., accum88 has 8 bits of int, 8 bits of fraction</span></div>
-<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div>
-<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="keyword">typedef</span> uint16_t accum88; <span class="comment">// ANSI: unsigned short _Accum</span></div>
-<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="keyword">typedef</span> int16_t saccum78; <span class="comment">// ANSI: signed short _Accum</span></div>
-<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="keyword">typedef</span> uint32_t accum1616;<span class="comment">// ANSI: signed _Accum</span></div>
-<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="keyword">typedef</span> int32_t saccum1516;<span class="comment">//ANSI: signed _Accum</span></div>
-<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="keyword">typedef</span> uint16_t accum124; <span class="comment">// no direct ANSI counterpart</span></div>
-<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="keyword">typedef</span> int32_t saccum114;<span class="comment">// no direct ANSI counterpart</span></div>
-<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;</div>
-<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;</div>
-<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment">// typedef for IEEE754 &quot;binary32&quot; float type internals</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"><a class="line" href="union_i_e_e_e754binary32__t.html"> 336</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
-<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; uint32_t i;</div>
-<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordtype">float</span> f;</div>
-<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keyword">struct </span>{</div>
-<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; uint32_t mantissa: 23;</div>
-<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; uint32_t exponent: 8;</div>
-<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; uint32_t signbit: 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 mant7 : 7;</div>
-<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; uint32_t mant16: 16;</div>
-<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; uint32_t exp_ : 8;</div>
-<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; uint32_t sb_ : 1;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="keyword">typedef</span> uint8_t fract8; <span class="comment">// ANSI: unsigned short _Fract</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="keyword">typedef</span> int8_t sfract7; <span class="comment">// ANSI: signed short _Fract</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="keyword">typedef</span> uint16_t fract16; <span class="comment">// ANSI: unsigned _Fract</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="keyword">typedef</span> int16_t sfract15; <span class="comment">// ANSI: signed _Fract</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">// accumXY types should be interpreted as X bits of integer,</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="comment">// and Y bits of fraction.</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="comment">// E.g., accum88 has 8 bits of int, 8 bits of fraction</span></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="keyword">typedef</span> uint16_t accum88; <span class="comment">// ANSI: unsigned short _Accum</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="keyword">typedef</span> int16_t saccum78; <span class="comment">// ANSI: signed short _Accum</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="keyword">typedef</span> uint32_t accum1616;<span class="comment">// ANSI: signed _Accum</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="keyword">typedef</span> int32_t saccum1516;<span class="comment">//ANSI: signed _Accum</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="keyword">typedef</span> uint16_t accum124; <span class="comment">// no direct ANSI counterpart</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="keyword">typedef</span> int32_t saccum114;<span class="comment">// no direct ANSI counterpart</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="comment">// typedef for IEEE754 &quot;binary32&quot; float type internals</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="union_i_e_e_e754binary32__t.html"> 342</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; uint32_t i;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordtype">float</span> f;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; uint32_t mantissa: 23;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; uint32_t exponent: 8;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; uint32_t signbit: 1;</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="keyword">struct </span>{</div>
-<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; uint32_t mant_lo8 : 8;</div>
-<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; uint32_t mant_hi16_exp_lo1 : 16;</div>
-<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; uint32_t sb_exphi7 : 8;</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;} <a class="code" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>;</div>
-<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</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;</div>
-<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;</div>
-<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="comment">// qadd8: add one byte to another, saturating at 0xFF</span></div>
-<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;LIB8STATIC uint8_t qadd8( uint8_t i, uint8_t j)</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="preprocessor">#if QADD8_C == 1</span></div>
-<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t = i + j;</div>
-<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">if</span>( t &gt; 255) t = 255;</div>
-<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">return</span> t;</div>
-<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="preprocessor">#elif QADD8_AVRASM == 1</span></div>
-<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="comment">/* First, add j to i, conditioning the C flag */</span></div>
-<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="stringliteral">&quot;add %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; uint32_t mant7 : 7;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; uint32_t mant16: 16;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; uint32_t exp_ : 8;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; uint32_t sb_ : 1;</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="keyword">struct </span>{</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; uint32_t mant_lo8 : 8;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; uint32_t mant_hi16_exp_lo1 : 16;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; uint32_t sb_exphi7 : 8;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; };</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;} <a class="code" href="union_i_e_e_e754binary32__t.html">IEEE754binary32_t</a>;</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="preprocessor">#include &quot;lib8tion/math8.h&quot;</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="preprocessor">#include &quot;lib8tion/scale8.h&quot;</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="preprocessor">#include &quot;lib8tion/random8.h&quot;</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="preprocessor">#include &quot;lib8tion/trig8.h&quot;</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</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;</div>
-<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="comment">/* Now test the C flag.</span></div>
-<div class="line"><a name="l00374"></a><span class="lineno"> 374</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="l00375"></a><span class="lineno"> 375</span>&#160;<span class="comment"> If C is set, we go ahead and load 0xFF into i.</span></div>
-<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;<span class="comment"> */</span></div>
-<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="stringliteral">&quot;brcc L_%= \n\t&quot;</span></div>
-<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="stringliteral">&quot;ldi %0, 0xFF \n\t&quot;</span></div>
-<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="stringliteral">&quot;L_%=: &quot;</span></div>
-<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
-<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</div>
-<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;<span class="preprocessor">#elif QADD8_ARM_DSP_ASM == 1</span></div>
-<div class="line"><a name="l00384"></a><span class="lineno"> 384</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="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="preprocessor">#error &quot;No implementation for qadd8 available.&quot;</span></div>
-<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="preprocessor">#endif</span></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;</div>
-<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="comment">// qadd7: add one signed byte to another,</span></div>
-<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="comment">// saturating at 0x7F.</span></div>
-<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;LIB8STATIC int8_t qadd7( int8_t i, int8_t j)</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="preprocessor">#if QADD7_C == 1</span></div>
-<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; int16_t t = i + j;</div>
-<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">if</span>( t &gt; 127) t = 127;</div>
-<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">return</span> t;</div>
-<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="preprocessor">#elif QADD7_AVRASM == 1</span></div>
-<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="comment">/* First, add j to i, conditioning the V flag */</span></div>
-<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="stringliteral">&quot;add %0, %1 \n\t&quot;</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</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="comment">// float-to-fixed and fixed-to-float conversions</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</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="l00381"></a><span class="lineno"> 381</span>&#160;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;<span class="comment">// floatToSfract15: conversion from IEEE754 float in the range (-1,1)</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;<span class="comment">// to 16-bit fixed point. Note that the extremes of</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="comment">// one and negative one are NOT representable. The</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;<span class="comment">// representable range is basically</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="comment">// sfract15ToFloat: conversion from sfract15 fixed point to</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="comment">// IEEE754 32-bit float.</span></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;LIB8STATIC <span class="keywordtype">float</span> sfract15ToFloat( sfract15 y)</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; <span class="keywordflow">return</span> y / 32768.0;</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;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;LIB8STATIC sfract15 floatToSfract15( <span class="keywordtype">float</span> f)</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;{</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">return</span> f * 32768.0;</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;</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;</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; <span class="comment">/* Now test the V flag.</span></div>
-<div class="line"><a name="l00406"></a><span class="lineno"> 406</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="l00407"></a><span class="lineno"> 407</span>&#160;<span class="comment"> If V is set, we go ahead and load 0x7F into i.</span></div>
-<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="comment"> */</span></div>
-<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="stringliteral">&quot;brvc L_%= \n\t&quot;</span></div>
-<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="stringliteral">&quot;ldi %0, 0x7F \n\t&quot;</span></div>
-<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="stringliteral">&quot;L_%=: &quot;</span></div>
-<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
-<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</div>
-<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;</div>
-<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="preprocessor">#elif QADD7_ARM_DSP_ASM == 1</span></div>
-<div class="line"><a name="l00417"></a><span class="lineno"> 417</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="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="preprocessor">#error &quot;No implementation for qadd7 available.&quot;</span></div>
-<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;}</div>
-<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;</div>
-<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;<span class="comment">// qsub8: subtract one byte from another, saturating at 0x00</span></div>
-<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;LIB8STATIC uint8_t qsub8( uint8_t i, uint8_t j)</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="preprocessor">#if QSUB8_C == 1</span></div>
-<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordtype">int</span> t = i - j;</div>
-<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">if</span>( t &lt; 0) t = 0;</div>
-<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">return</span> t;</div>
-<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;<span class="preprocessor">#elif QSUB8_AVRASM == 1</span></div>
-<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;</div>
-<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="comment">/* First, subtract j from i, conditioning the C flag */</span></div>
-<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="stringliteral">&quot;sub %0, %1 \n\t&quot;</span></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;</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;<span class="comment">// memmove8, memcpy8, and memset8:</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="comment">// alternatives to memmove, memcpy, and memset that are</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="comment">// faster on AVR than standard avr-libc 1.8</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;<span class="preprocessor">#if defined(__AVR__)</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</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="l00421"></a><span class="lineno"> 421</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 ) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((noinline));</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;<span class="keywordtype">void</span> * memset8 ( <span class="keywordtype">void</span> * ptr, uint8_t value, uint16_t num ) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((noinline)) ;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;}</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;<span class="comment">// on non-AVR platforms, these names just call standard libc.</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;<span class="preprocessor">#define memmove8 memmove</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;<span class="preprocessor">#define memcpy8 memcpy</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<span class="preprocessor">#define memset8 memset</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;<span class="preprocessor">#endif</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;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="comment">// linear interpolation, such as could be used for Perlin noise, etc.</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;<span class="comment">//</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">/* Now test the C flag.</span></div>
-<div class="line"><a name="l00438"></a><span class="lineno"> 438</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="l00439"></a><span class="lineno"> 439</span>&#160;<span class="comment"> If C is set, we go ahead and load 0x00 into i.</span></div>
-<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;<span class="comment"> */</span></div>
-<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="stringliteral">&quot;brcc L_%= \n\t&quot;</span></div>
-<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="stringliteral">&quot;ldi %0, 0x00 \n\t&quot;</span></div>
-<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="stringliteral">&quot;L_%=: &quot;</span></div>
-<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
-<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</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="keywordflow">return</span> i;</div>
-<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="preprocessor">#error &quot;No implementation for qsub8 available.&quot;</span></div>
-<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;}</div>
-<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;</div>
-<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="comment">// add8: add one byte to another, with one byte result</span></div>
-<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;LIB8STATIC uint8_t add8( uint8_t i, uint8_t j)</div>
-<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;{</div>
-<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="preprocessor">#if ADD8_C == 1</span></div>
-<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordtype">int</span> t = i + j;</div>
-<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">return</span> t;</div>
-<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="preprocessor">#elif ADD8_AVRASM == 1</span></div>
-<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="comment">// Add j to i, period.</span></div>
-<div class="line"><a name="l00461"></a><span class="lineno"> 461</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="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="preprocessor">#error &quot;No implementation for add8 available.&quot;</span></div>
-<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;}</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;</div>
-<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;<span class="comment">// sub8: subtract one byte from another, 8-bit result</span></div>
-<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;LIB8STATIC uint8_t sub8( uint8_t i, uint8_t j)</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="preprocessor">#if SUB8_C == 1</span></div>
-<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordtype">int</span> t = i - j;</div>
-<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">return</span> t;</div>
-<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="preprocessor">#elif SUB8_AVRASM == 1</span></div>
-<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="comment">// Subtract j from i, period.</span></div>
-<div class="line"><a name="l00477"></a><span class="lineno"> 477</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="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="preprocessor">#error &quot;No implementation for sub8 available.&quot;</span></div>
-<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;}</div>
-<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;</div>
-<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment">// avg8: Calculate an integer average of two unsigned</span></div>
-<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment">// 8-bit integer values (uint8_t).</span></div>
-<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment">// Fractional results are rounded down, e.g. avg8(20,41) = 30</span></div>
-<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;LIB8STATIC uint8_t avg8( uint8_t i, uint8_t j)</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;<span class="preprocessor">#if AVG8_C == 1</span></div>
-<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">return</span> (i + j) &gt;&gt; 1;</div>
-<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="preprocessor">#elif AVG8_AVRASM == 1</span></div>
-<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">/* First, add j to i, 9th bit overflows into C flag */</span></div>
-<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="stringliteral">&quot;add %0, %1 \n\t&quot;</span></div>
-<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="comment">/* Divide by two, moving C flag into high 8th bit */</span></div>
-<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="stringliteral">&quot;ror %0 \n\t&quot;</span></div>
-<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
-<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</div>
-<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;<span class="preprocessor">#error &quot;No implementation for avg8 available.&quot;</span></div>
-<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;<span class="preprocessor">#endif</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;</div>
-<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;<span class="comment">// avg7: Calculate an integer average of two signed 7-bit</span></div>
-<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;<span class="comment">// integers (int8_t)</span></div>
-<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;<span class="comment">// If the first argument is even, result is rounded down.</span></div>
-<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;<span class="comment">// If the first argument is odd, result is result up.</span></div>
-<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;LIB8STATIC int8_t avg7( int8_t i, int8_t j)</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;<span class="preprocessor">#if AVG7_C == 1</span></div>
-<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">return</span> ((i + j) &gt;&gt; 1) + (i &amp; 0x1);</div>
-<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="preprocessor">#elif AVG7_AVRASM == 1</span></div>
-<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="stringliteral">&quot;asr %1 \n\t&quot;</span></div>
-<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="stringliteral">&quot;asr %0 \n\t&quot;</span></div>
-<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="stringliteral">&quot;adc %0, %1 \n\t&quot;</span></div>
-<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
-<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j) );</div>
-<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="preprocessor">#error &quot;No implementation for avg7 available.&quot;</span></div>
-<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;}</div>
-<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;</div>
-<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;<span class="comment">// mod8: Calculate the remainder of one unsigned 8-bit</span></div>
-<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;<span class="comment">// value divided by anoter, aka A % M.</span></div>
-<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="comment">// Implemented by repeated subtraction, which is</span></div>
-<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="comment">// very compact, and very fast if A is &#39;probably&#39;</span></div>
-<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;<span class="comment">// less than M. If A is a large multiple of M,</span></div>
-<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;<span class="comment">// the loop has to execute multiple times. However,</span></div>
-<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;<span class="comment">// even in that case, the loop is only two</span></div>
-<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;<span class="comment">// instructions long on AVR, i.e., quick.</span></div>
-<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;LIB8STATIC uint8_t mod8( uint8_t a, uint8_t m)</div>
-<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;{</div>
-<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<span class="preprocessor">#if defined(__AVR__)</span></div>
-<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span> (</div>
-<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="stringliteral">&quot;L_%=: sub %[a],%[m] \n\t&quot;</span></div>
-<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="stringliteral">&quot; brcc L_%= \n\t&quot;</span></div>
-<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="stringliteral">&quot; add %[a],%[m] \n\t&quot;</span></div>
-<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; : [a] <span class="stringliteral">&quot;+r&quot;</span> (a)</div>
-<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; : [m] <span class="stringliteral">&quot;r&quot;</span> (m)</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;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">while</span>( a &gt;= m) a -= m;</div>
-<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">return</span> a;</div>
-<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;}</div>
-<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;</div>
-<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;<span class="comment">// addmod8: Add two numbers, and calculate the modulo</span></div>
-<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;<span class="comment">// of the sum and a third number, M.</span></div>
-<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="comment">// In other words, it returns (A+B) % M.</span></div>
-<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="comment">// It is designed as a compact mechanism for</span></div>
-<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;<span class="comment">// incrementing a &#39;mode&#39; switch and wrapping</span></div>
-<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;<span class="comment">// around back to &#39;mode 0&#39; when the switch</span></div>
-<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="comment">// goes past the end of the available range.</span></div>
-<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;<span class="comment">// e.g. if you have seven modes, this switches</span></div>
-<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="comment">// to the next one and wraps around if needed:</span></div>
-<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="comment">// mode = addmod8( mode, 1, 7);</span></div>
-<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="comment">// See &#39;mod8&#39; for notes on performance.</span></div>
-<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;LIB8STATIC uint8_t addmod8( uint8_t a, uint8_t b, uint8_t m)</div>
-<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;{</div>
-<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;<span class="preprocessor">#if defined(__AVR__)</span></div>
-<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span> (</div>
-<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="stringliteral">&quot; add %[a],%[b] \n\t&quot;</span></div>
-<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="stringliteral">&quot;L_%=: sub %[a],%[m] \n\t&quot;</span></div>
-<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="stringliteral">&quot; brcc L_%= \n\t&quot;</span></div>
-<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="stringliteral">&quot; add %[a],%[m] \n\t&quot;</span></div>
-<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; : [a] <span class="stringliteral">&quot;+r&quot;</span> (a)</div>
-<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; : [b] <span class="stringliteral">&quot;r&quot;</span> (b), [m] <span class="stringliteral">&quot;r&quot;</span> (m)</div>
-<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; );</div>
-<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; a += b;</div>
-<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordflow">while</span>( a &gt;= m) a -= m;</div>
-<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">return</span> a;</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;</div>
-<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;</div>
-<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;<span class="comment">// scale8: scale one byte by a second one, which is treated as</span></div>
-<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;<span class="comment">// the numerator of a fraction whose denominator is 256</span></div>
-<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;<span class="comment">// In other words, it computes i * (scale / 256)</span></div>
-<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;<span class="comment">// 4 clocks AVR with MUL, 2 clocks ARM</span></div>
-<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;LIB8STATIC uint8_t scale8( uint8_t i, fract8 scale)</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="preprocessor">#if SCALE8_C == 1</span></div>
-<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keywordflow">return</span> ((uint16_t)i * (uint16_t)(scale) ) &gt;&gt; 8;</div>
-<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
-<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;<span class="preprocessor">#if defined(LIB8_ATTINY)</span></div>
-<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; uint8_t work=0;</div>
-<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; uint8_t cnt=0x80;</div>
-<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="stringliteral">&quot;LOOP_%=: \n\t&quot;</span></div>
-<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="comment">/*&quot; sbrc %[scale], 0 \n\t&quot;</span></div>
-<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;<span class="comment"> &quot; add %[work], %[i] \n\t&quot;</span></div>
-<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;<span class="comment"> &quot; ror %[work] \n\t&quot;</span></div>
-<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;<span class="comment"> &quot; lsr %[scale] \n\t&quot;</span></div>
-<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;<span class="comment"> &quot; clc \n\t&quot;*/</span></div>
-<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="stringliteral">&quot; sbrc %[scale], 0 \n\t&quot;</span></div>
-<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="stringliteral">&quot; add %[work], %[i] \n\t&quot;</span></div>
-<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="stringliteral">&quot; ror %[work] \n\t&quot;</span></div>
-<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="stringliteral">&quot; lsr %[scale] \n\t&quot;</span></div>
-<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="stringliteral">&quot; lsr %[cnt] \n\t&quot;</span></div>
-<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="stringliteral">&quot;brcc LOOP_%=&quot;</span></div>
-<div class="line"><a name="l00606"></a><span class="lineno"> 606</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="l00607"></a><span class="lineno"> 607</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="l00608"></a><span class="lineno"> 608</span>&#160; :</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> work;</div>
-<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit scale, giving 16-bit r1,r0 */</span></div>
-<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
-<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="comment">/* Move the high 8-bits of the product (r1) back to i */</span></div>
-<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="stringliteral">&quot;mov %0, r1 \n\t&quot;</span></div>
-<div class="line"><a name="l00617"></a><span class="lineno"> 617</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="l00618"></a><span class="lineno"> 618</span>&#160; <span class="stringliteral">&quot;clr __zero_reg__ \n\t&quot;</span></div>
-<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;</div>
-<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i) <span class="comment">/* writes to i */</span></div>
-<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (scale) <span class="comment">/* uses scale */</span></div>
-<div class="line"><a name="l00622"></a><span class="lineno"> 622</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="l00437"></a><span class="lineno"> 437</span>&#160;<span class="comment">// A note on the structure of the lerp functions:</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</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="l00439"></a><span class="lineno"> 439</span>&#160;<span class="comment">// speed: without knowing the relative order of a and b,</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</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="l00441"></a><span class="lineno"> 441</span>&#160;<span class="comment">// and have to be promoted to a wider, slower type.</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="comment">// To avoid that, we separate the two cases, and are able</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;<span class="comment">// to do all the math in the same width as the arguments,</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="comment">// which is much faster and smaller on AVR.</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;<span class="comment">// linear interpolation between two unsigned 8-bit values,</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="comment">// with 8-bit fraction</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;LIB8STATIC uint8_t lerp8by8( uint8_t a, uint8_t b, fract8 frac)</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; uint8_t result;</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">if</span>( b &gt; a) {</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; uint8_t delta = b - a;</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; uint8_t scaled = <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( delta, frac);</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; result = a + scaled;</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; uint8_t delta = a - b;</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; uint8_t scaled = <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( delta, frac);</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; result = a - scaled;</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> result;</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">// linear interpolation between two unsigned 16-bit values,</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="comment">// with 16-bit fraction</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;LIB8STATIC uint16_t lerp16by16( uint16_t a, uint16_t b, fract16 frac)</div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;{</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; uint16_t result;</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">if</span>( b &gt; a ) {</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; uint16_t delta = b - a;</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; uint32_t scaled = <a class="code" href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145">scale16</a>(delta, frac);</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; result = a + scaled;</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; uint16_t delta = a - b;</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; uint16_t scaled = <a class="code" href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145">scale16</a>( delta, frac);</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; result = a - scaled;</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; }</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;}</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="comment">// linear interpolation between two unsigned 16-bit values,</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="comment">// with 8-bit fraction</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;LIB8STATIC uint16_t lerp16by8( uint16_t a, uint16_t b, fract8 frac)</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; uint16_t result;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">if</span>( b &gt; a) {</div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; uint16_t delta = b - a;</div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; uint16_t scaled = <a class="code" href="group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e">scale16by8</a>( delta, frac);</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; result = a + scaled;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; uint16_t delta = a - b;</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; uint16_t scaled = <a class="code" href="group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e">scale16by8</a>( delta, frac);</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; result = a - scaled;</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">return</span> result;</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;<span class="comment">// linear interpolation between two signed 15-bit values,</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;<span class="comment">// with 8-bit fraction</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;LIB8STATIC int16_t lerp15by8( int16_t a, int16_t b, fract8 frac)</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; int16_t result;</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">if</span>( b &gt; a) {</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; uint16_t delta = b - a;</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; uint16_t scaled = <a class="code" href="group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e">scale16by8</a>( delta, frac);</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; result = a + scaled;</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; uint16_t delta = a - b;</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; uint16_t scaled = <a class="code" href="group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e">scale16by8</a>( delta, frac);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; result = a - scaled;</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> result;</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="comment">// linear interpolation between two signed 15-bit values,</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;<span class="comment">// with 8-bit fraction</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;LIB8STATIC int16_t lerp15by16( int16_t a, int16_t b, fract16 frac)</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; int16_t result;</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">if</span>( b &gt; a) {</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; uint16_t delta = b - a;</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; uint16_t scaled = <a class="code" href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145">scale16</a>( delta, frac);</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; result = a + scaled;</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; uint16_t delta = a - b;</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; uint16_t scaled = <a class="code" href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145">scale16</a>( delta, frac);</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; result = a - scaled;</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; }</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">return</span> result;</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;</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;<span class="comment">// map8: map from one full-range 8-bit value into a narrower</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;<span class="comment">// range of 8-bit values, possibly a range of hues.</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</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="l00535"></a><span class="lineno"> 535</span>&#160;<span class="comment">// hue = map8( myValue, HUE_BLUE, HUE_RED);</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<span class="comment">// Combines nicely with the waveform functions (like sin8, etc)</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="comment">// to produce continuous hue gradients back and forth:</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;<span class="comment">// hue = map8( sin8( myValue), HUE_BLUE, HUE_RED);</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;<span class="comment">// Mathematically simiar to lerp8by8, but arguments are more</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;<span class="comment">// like Arduino&#39;s &quot;map&quot;; this function is similar to</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;<span class="comment">// map( in, 0, 255, rangeStart, rangeEnd)</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;<span class="comment">// but faster and specifically designed for 8-bit values.</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;LIB8STATIC uint8_t map8( uint8_t in, uint8_t rangeStart, uint8_t rangeEnd)</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;{</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; uint8_t rangeWidth = rangeEnd - rangeStart;</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; uint8_t out = <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( in, rangeWidth);</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; out += rangeStart;</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">return</span> out;</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;</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;<span class="comment">// easing functions; see http://easings.net</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="comment">// ease8InOutQuad: 8-bit quadratic ease-in / ease-out function</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="comment">// Takes around 13 cycles on AVR</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;LIB8STATIC uint8_t ease8InOutQuad( uint8_t i)</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; uint8_t j = i;</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span>( j &amp; 0x80 ) {</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; j = 255 - j;</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; uint8_t jj = <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( j, (j+1));</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; uint8_t jj2 = jj &lt;&lt; 1;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">if</span>( i &amp; 0x80 ) {</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; jj2 = 255 - jj2;</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; }</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">return</span> jj2;</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;</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;<span class="comment">// ease8InOutCubic: 8-bit cubic ease-in / ease-out function</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="comment">// Takes around 18 cycles on AVR</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;LIB8STATIC fract8 ease8InOutCubic( fract8 i)</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;{</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; uint8_t ii = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>( i, i);</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; uint8_t iii = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>( ii, i);</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; uint16_t r1 = (3 * (uint16_t)(ii)) - ( 2 * (uint16_t)(iii));</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; <span class="comment">/* the code generated for the above *&#39;s automatically</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;<span class="comment"> cleans up R1, so there&#39;s no need to explicitily call</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;<span class="comment"> cleanup_R1(); */</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; uint8_t result = r1;</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; <span class="comment">// if we got &quot;256&quot;, return 255:</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">if</span>( r1 &amp; 0x100 ) {</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; result = 255;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; }</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;}</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;<span class="comment">// ease8InOutApprox: fast, rough 8-bit ease-in/ease-out function</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;<span class="comment">// shaped approximately like &#39;ease8InOutCubic&#39;,</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;<span class="comment">// it&#39;s never off by more than a couple of percent</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;<span class="comment">// from the actual cubic S-curve, and it executes</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;<span class="comment">// more than twice as fast. Use when the cycles</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;<span class="comment">// are more important than visual smoothness.</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;<span class="comment">// Asm version takes around 7 cycles on AVR.</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;<span class="preprocessor">#if EASE8_C == 1</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;LIB8STATIC fract8 ease8InOutApprox( fract8 i)</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;{</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">if</span>( i &lt; 64) {</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="comment">// start with slope 0.5</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; i /= 2;</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( i &gt; (255 - 64)) {</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">// end with slope 0.5</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; i = 255 - i;</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; i /= 2;</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; i = 255 - i;</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="comment">// in the middle, use slope 192/128 = 1.5</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; i -= 64;</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; i += (i / 2);</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; i += 32;</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; <span class="comment">/* Return the result */</span></div>
-<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8 available.&quot;</span></div>
-<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;}</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;</div>
-<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;<span class="comment">// The &quot;video&quot; version of scale8 guarantees that the output will</span></div>
-<div class="line"><a name="l00634"></a><span class="lineno"> 634</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="l00635"></a><span class="lineno"> 635</span>&#160;<span class="comment">// inputs are non-zero, the output is guaranteed to be non-zero.</span></div>
-<div class="line"><a name="l00636"></a><span class="lineno"> 636</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="l00637"></a><span class="lineno"> 637</span>&#160;<span class="comment">// several additional cycles.</span></div>
-<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;LIB8STATIC uint8_t scale8_video( uint8_t i, fract8 scale)</div>
-<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;{</div>
-<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;<span class="preprocessor">#if SCALE8_C == 1 || defined(LIB8_ATTINY)</span></div>
-<div class="line"><a name="l00641"></a><span class="lineno"> 641</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="l00642"></a><span class="lineno"> 642</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
-<div class="line"><a name="l00643"></a><span class="lineno"> 643</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="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordflow">return</span> j;</div>
-<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
-<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; uint8_t j=0;</div>
-<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="stringliteral">&quot; tst %[i]\n\t&quot;</span></div>
-<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
-<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="stringliteral">&quot; mul %[i], %[scale]\n\t&quot;</span></div>
-<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="stringliteral">&quot; mov %[j], r1\n\t&quot;</span></div>
-<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="stringliteral">&quot; clr __zero_reg__\n\t&quot;</span></div>
-<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="stringliteral">&quot; cpse %[scale], r1\n\t&quot;</span></div>
-<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="stringliteral">&quot; subi %[j], 0xFF\n\t&quot;</span></div>
-<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="stringliteral">&quot;L_%=: \n\t&quot;</span></div>
-<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; : [j] <span class="stringliteral">&quot;+a&quot;</span> (j)</div>
-<div class="line"><a name="l00657"></a><span class="lineno"> 657</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="l00658"></a><span class="lineno"> 658</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">return</span> i;</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="preprocessor">#elif EASE8_AVRASM == 1</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;LIB8STATIC uint8_t ease8InOutApprox( fract8 i)</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="comment">// takes around 7 cycles on AVR</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span> (</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="stringliteral">&quot; subi %[i], 64 \n\t&quot;</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="stringliteral">&quot; cpi %[i], 128 \n\t&quot;</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="stringliteral">&quot; brcc Lshift_%= \n\t&quot;</span></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; <span class="comment">// middle case</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="stringliteral">&quot; mov __tmp_reg__, %[i] \n\t&quot;</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="stringliteral">&quot; lsr __tmp_reg__ \n\t&quot;</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="stringliteral">&quot; add %[i], __tmp_reg__ \n\t&quot;</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="stringliteral">&quot; subi %[i], 224 \n\t&quot;</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="stringliteral">&quot; rjmp Ldone_%= \n\t&quot;</span></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="comment">// start or end case</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="stringliteral">&quot;Lshift_%=: \n\t&quot;</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="stringliteral">&quot; lsr %[i] \n\t&quot;</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="stringliteral">&quot; subi %[i], 96 \n\t&quot;</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="stringliteral">&quot;Ldone_%=: \n\t&quot;</span></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; : [i] <span class="stringliteral">&quot;+a&quot;</span> (i)</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="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</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; <span class="keywordflow">return</span> i;</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">#else</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;<span class="preprocessor">#error &quot;No implementation for ease8 available.&quot;</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;<span class="preprocessor">#endif</span></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; <span class="keywordflow">return</span> j;</div>
-<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
-<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="comment">// asm volatile(</span></div>
-<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="comment">// &quot; tst %0 \n&quot;</span></div>
-<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="comment">// &quot; breq L_%= \n&quot;</span></div>
-<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="comment">// &quot; mul %0, %1 \n&quot;</span></div>
-<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="comment">// &quot; mov %0, r1 \n&quot;</span></div>
-<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="comment">// &quot; add %0, %2 \n&quot;</span></div>
-<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="comment">// &quot; clr __zero_reg__ \n&quot;</span></div>
-<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="comment">// &quot;L_%=: \n&quot;</span></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="comment">// : &quot;+a&quot; (i)</span></div>
-<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="comment">// : &quot;a&quot; (scale), &quot;a&quot; (nonzeroscale)</span></div>
-<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="comment">// : &quot;r0&quot;, &quot;r1&quot;);</span></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; <span class="comment">// // Return the result</span></div>
-<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="comment">// return i;</span></div>
-<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_video available.&quot;</span></div>
-<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;}</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;<span class="comment">// triwave8: triangle (sawtooth) wave generator. Useful for</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;<span class="comment">// turning a one-byte ever-increasing value into a</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;<span class="comment">// one-byte value that oscillates up and down.</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;<span class="comment">// input output</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;<span class="comment">// 0..127 0..254 (positive slope)</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;<span class="comment">// 128..255 254..0 (negative slope)</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;<span class="comment">// On AVR this function takes just three cycles.</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;LIB8STATIC uint8_t triwave8(uint8_t in)</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; <span class="keywordflow">if</span>( in &amp; 0x80) {</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; in = 255 - in;</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; uint8_t out = in &lt;&lt; 1;</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;}</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;</div>
<div class="line"><a name="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;<span class="comment">// This version of scale8 does not clean up the R1 register on AVR</span></div>
-<div class="line"><a name="l00684"></a><span class="lineno"> 684</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="l00685"></a><span class="lineno"> 685</span>&#160;<span class="comment">// then explicitly call cleanup_R1.</span></div>
-<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;LIB8STATIC uint8_t scale8_LEAVING_R1_DIRTY( uint8_t i, fract8 scale)</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;<span class="preprocessor">#if SCALE8_C == 1</span></div>
-<div class="line"><a name="l00689"></a><span class="lineno"> 689</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="l00690"></a><span class="lineno"> 690</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
-<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit scale, giving 16-bit r1,r0 */</span></div>
-<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
-<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="comment">/* Move the high 8-bits of the product (r1) back to i */</span></div>
-<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="stringliteral">&quot;mov %0, r1 \n\t&quot;</span></div>
-<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="comment">/* R1 IS LEFT DIRTY HERE; YOU MUST ZERO IT OUT YOURSELF */</span></div>
-<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="comment">/* &quot;clr __zero_reg__ \n\t&quot; */</span></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; : <span class="stringliteral">&quot;+a&quot;</span> (i) <span class="comment">/* writes to i */</span></div>
-<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (scale) <span class="comment">/* uses scale */</span></div>
-<div class="line"><a name="l00701"></a><span class="lineno"> 701</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="l00702"></a><span class="lineno"> 702</span>&#160;</div>
-<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="comment">// Return the result</span></div>
-<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_LEAVING_R1_DIRTY available.&quot;</span></div>
-<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;<span class="preprocessor">#endif</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;</div>
-<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;<span class="comment">// THIS FUNCTION ALWAYS MODIFIES ITS ARGUMENT DIRECTLY IN PLACE</span></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;LIB8STATIC <span class="keywordtype">void</span> nscale8_LEAVING_R1_DIRTY( uint8_t&amp; i, fract8 scale)</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;<span class="preprocessor">#if SCALE8_C == 1</span></div>
-<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; i = ((int)i * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
-<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
-<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit scale, giving 16-bit r1,r0 */</span></div>
-<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
-<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="comment">/* Move the high 8-bits of the product (r1) back to i */</span></div>
-<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="stringliteral">&quot;mov %0, r1 \n\t&quot;</span></div>
-<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="comment">/* R1 IS LEFT DIRTY HERE; YOU MUST ZERO IT OUT YOURSELF */</span></div>
-<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="comment">/* &quot;clr __zero_reg__ \n\t&quot; */</span></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="stringliteral">&quot;+a&quot;</span> (i) <span class="comment">/* writes to i */</span></div>
-<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (scale) <span class="comment">/* uses scale */</span></div>
-<div class="line"><a name="l00727"></a><span class="lineno"> 727</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="l00728"></a><span class="lineno"> 728</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8_LEAVING_R1_DIRTY available.&quot;</span></div>
-<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;<span class="preprocessor">#endif</span></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;</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;</div>
-<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;LIB8STATIC uint8_t scale8_video_LEAVING_R1_DIRTY( uint8_t i, fract8 scale)</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="preprocessor">#if SCALE8_C == 1 || defined(LIB8_ATTINY)</span></div>
-<div class="line"><a name="l00738"></a><span class="lineno"> 738</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="l00739"></a><span class="lineno"> 739</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
-<div class="line"><a name="l00740"></a><span class="lineno"> 740</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="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">return</span> j;</div>
-<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
-<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; uint8_t j=0;</div>
-<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="stringliteral">&quot; tst %[i]\n\t&quot;</span></div>
-<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
-<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="stringliteral">&quot; mul %[i], %[scale]\n\t&quot;</span></div>
-<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="stringliteral">&quot; mov %[j], r1\n\t&quot;</span></div>
-<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
-<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <span class="stringliteral">&quot; subi %[j], 0xFF\n\t&quot;</span></div>
-<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="stringliteral">&quot;L_%=: \n\t&quot;</span></div>
-<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; : [j] <span class="stringliteral">&quot;+a&quot;</span> (j)</div>
-<div class="line"><a name="l00753"></a><span class="lineno"> 753</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="l00754"></a><span class="lineno"> 754</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</div>
-<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;</div>
-<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keywordflow">return</span> j;</div>
-<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="comment">// uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</span></div>
-<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="comment">// asm volatile(</span></div>
-<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="comment">// &quot; tst %0 \n&quot;</span></div>
-<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="comment">// &quot; breq L_%= \n&quot;</span></div>
-<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="comment">// &quot; mul %0, %1 \n&quot;</span></div>
-<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="comment">// &quot; mov %0, r1 \n&quot;</span></div>
-<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="comment">// &quot; add %0, %2 \n&quot;</span></div>
-<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="comment">// &quot; clr __zero_reg__ \n&quot;</span></div>
-<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="comment">// &quot;L_%=: \n&quot;</span></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; <span class="comment">// : &quot;+a&quot; (i)</span></div>
-<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="comment">// : &quot;a&quot; (scale), &quot;a&quot; (nonzeroscale)</span></div>
-<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="comment">// : &quot;r0&quot;, &quot;r1&quot;);</span></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; <span class="comment">// // Return the result</span></div>
-<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="comment">// return i;</span></div>
-<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_video_LEAVING_R1_DIRTY available.&quot;</span></div>
-<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;<span class="preprocessor">#endif</span></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;LIB8STATIC <span class="keywordtype">void</span> nscale8_video_LEAVING_R1_DIRTY( uint8_t &amp; i, fract8 scale)</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;<span class="preprocessor">#if SCALE8_C == 1 || defined(LIB8_ATTINY)</span></div>
-<div class="line"><a name="l00781"></a><span class="lineno"> 781</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="l00782"></a><span class="lineno"> 782</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
-<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="stringliteral">&quot; tst %[i]\n\t&quot;</span></div>
-<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
-<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="stringliteral">&quot; mul %[i], %[scale]\n\t&quot;</span></div>
-<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="stringliteral">&quot; mov %[i], r1\n\t&quot;</span></div>
-<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="stringliteral">&quot; breq L_%=\n\t&quot;</span></div>
-<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="stringliteral">&quot; subi %[i], 0xFF\n\t&quot;</span></div>
-<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="stringliteral">&quot;L_%=: \n\t&quot;</span></div>
-<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; : [i] <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
-<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; : [scale] <span class="stringliteral">&quot;a&quot;</span> (scale)</div>
-<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</div>
-<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale8_video_LEAVING_R1_DIRTY available.&quot;</span></div>
-<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;<span class="preprocessor">#endif</span></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;</div>
-<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;</div>
-<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;LIB8STATIC <span class="keywordtype">void</span> cleanup_R1()</div>
-<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;{</div>
-<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;<span class="preprocessor">#if CLEANUP_R1_AVRASM == 1</span></div>
-<div class="line"><a name="l00803"></a><span class="lineno"> 803</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="l00804"></a><span class="lineno"> 804</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="l00805"></a><span class="lineno"> 805</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;}</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;<span class="comment">// quadwave8 and cubicwave8: S-shaped wave generators (like &#39;sine&#39;).</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;<span class="comment">// Useful for turning a one-byte &#39;counter&#39; value into a</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;<span class="comment">// one-byte oscillating value that moves smoothly up and down,</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160;<span class="comment">// with an &#39;acceleration&#39; and &#39;deceleration&#39; curve.</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;<span class="comment">// These are even faster than &#39;sin8&#39;, and have</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;<span class="comment">// slightly different curve shapes.</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;<span class="comment">//</span></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="comment">// quadwave8: quadratic waveform generator. Spends just a little more</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;<span class="comment">// time at the limits than &#39;sine&#39; does.</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;LIB8STATIC uint8_t quadwave8(uint8_t in)</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;{</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">return</span> ease8InOutQuad( triwave8( in));</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;</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;<span class="comment">// cubicwave8: cubic waveform generator. Spends visibly more time</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160;<span class="comment">// at the limits than &#39;sine&#39; does.</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;LIB8STATIC uint8_t cubicwave8(uint8_t in)</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> ease8InOutCubic( triwave8( in));</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;}</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;<span class="comment">// squarewave8: square wave generator. Useful for</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;<span class="comment">// turning a one-byte ever-increasing value</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;<span class="comment">// into a one-byte value that is either 0 or 255.</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;<span class="comment">// The width of the output &#39;pulse&#39; is</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;<span class="comment">// determined by the pulsewidth argument:</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;<span class="comment">// If pulsewidth is 255, output is always 255.</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;<span class="comment">// If pulsewidth &lt; 255, then</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;<span class="comment">// if input &lt; pulsewidth then output is 255</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160;<span class="comment">// if input &gt;= pulsewidth then output is 0</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;<span class="comment">// 255 +--pulsewidth--+</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;<span class="comment">// . | |</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;<span class="comment">// 0 0 +--------(256-pulsewidth)--------</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;LIB8STATIC uint8_t squarewave8( uint8_t in, uint8_t pulsewidth=128)</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">if</span>( in &lt; pulsewidth || (pulsewidth == 255)) {</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordflow">return</span> 255;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordflow">return</span> 0;</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;</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;</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"><a class="line" href="classq.html"> 732</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="l00733"></a><span class="lineno"> 733</span>&#160; T i:I;</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; T f:F;</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</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="l00737"></a><span class="lineno"> 737</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="l00738"></a><span class="lineno"> 738</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="l00739"></a><span class="lineno"> 739</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="l00740"></a><span class="lineno"> 740</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="l00741"></a><span class="lineno"> 741</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="l00742"></a><span class="lineno"> 742</span>&#160;<span class="preprocessor">#ifdef FASTLED_ARM</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</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="l00744"></a><span class="lineno"> 744</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160;};</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;<span class="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="l00748"></a><span class="lineno"> 748</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="l00749"></a><span class="lineno"> 749</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="l00750"></a><span class="lineno"> 750</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="l00751"></a><span class="lineno"> 751</span>&#160;<span class="preprocessor">#ifdef FASTLED_ARM</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</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="l00753"></a><span class="lineno"> 753</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160;</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;<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="l00756"></a><span class="lineno"> 756</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="l00757"></a><span class="lineno"> 757</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="l00758"></a><span class="lineno"> 758</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="l00759"></a><span class="lineno"> 759</span>&#160;</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;</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;<span class="comment">// Beat generators - These functions produce waves at a given</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;<span class="comment">// number of &#39;beats per minute&#39;. Internally, they use</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;<span class="comment">// the Arduino function &#39;millis&#39; to track elapsed time.</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;<span class="comment">// Accuracy is a bit better than one part in a thousand.</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</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="l00768"></a><span class="lineno"> 768</span>&#160;<span class="comment">// per minute, rising from 0 to 255, resetting to zero,</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;<span class="comment">// rising up again, etc.. The output of this function</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;<span class="comment">// is suitable for feeding directly into sin8, and cos8,</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;<span class="comment">// triwave8, quadwave8, and cubicwave8.</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</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="l00773"></a><span class="lineno"> 773</span>&#160;<span class="comment">// per minute, rising from 0 to 65535, resetting to zero,</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;<span class="comment">// rising up again, etc. The output of this function is</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;<span class="comment">// suitable for feeding directly into sin16 and cos16.</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;<span class="comment">// beat88( BPM88) is the same as beat16, except that the BPM88 argument</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;<span class="comment">// MUST be in Q8.8 fixed point format, e.g. 120BPM must</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;<span class="comment">// be specified as 120*256 = 30720.</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</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="l00780"></a><span class="lineno"> 780</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="l00781"></a><span class="lineno"> 781</span>&#160;<span class="comment">// between the values of &#39;low&#39; and &#39;high&#39;.</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</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="l00783"></a><span class="lineno"> 783</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="l00784"></a><span class="lineno"> 784</span>&#160;<span class="comment">// minute, between the values of &#39;low&#39; and &#39;high&#39;.</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;<span class="comment">// beatsin88( BPM88, ...) is the same as beatsin16, except that the</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;<span class="comment">// BPM88 argument MUST be in Q8.8 fixed point format,</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;<span class="comment">// e.g. 120BPM must be specified as 120*256 = 30720.</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</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="l00790"></a><span class="lineno"> 790</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="l00791"></a><span class="lineno"> 791</span>&#160;<span class="comment">// The more sophisticated way of specifying BPM allows for fractional</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</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="l00793"></a><span class="lineno"> 793</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="l00794"></a><span class="lineno"> 794</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="l00795"></a><span class="lineno"> 795</span>&#160;<span class="comment">// in this case), and pass that as the 16-bit BPM argument.</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;<span class="comment">// &quot;BPM88&quot; MUST always be specified in Q8.8 format.</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;<span class="comment">// Originally designed to make an entire animation project pulse with brightness.</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</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="l00800"></a><span class="lineno"> 800</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;<span class="comment">// uint8_t bright = beatsin8( 60 /*BPM*/, 192 /*dimmest*/, 255 /*brightest*/ ));</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;<span class="comment">// FastLED.setBrightness( bright );</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;<span class="comment">// FastLED.show();</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</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="l00806"></a><span class="lineno"> 806</span>&#160;</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;</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;<span class="comment">// nscale8x3: scale three one byte values by a fourth one, which is treated as</span></div>
-<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;<span class="comment">// the numerator of a fraction whose demominator is 256</span></div>
-<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160;<span class="comment">// In other words, it computes r,g,b * (scale / 256)</span></div>
-<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160;<span class="comment">// THIS FUNCTION ALWAYS MODIFIES ITS ARGUMENTS IN PLACE</span></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;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="l00816"></a><span class="lineno"> 816</span>&#160;{</div>
-<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
-<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; r = ((int)r * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
-<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; g = ((int)g * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
-<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; b = ((int)b * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
-<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
-<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; r = scale8_LEAVING_R1_DIRTY(r, scale);</div>
-<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; g = scale8_LEAVING_R1_DIRTY(g, scale);</div>
-<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; b = scale8_LEAVING_R1_DIRTY(b, scale);</div>
-<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; cleanup_R1();</div>
-<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x3 available.&quot;</span></div>
-<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;}</div>
-<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;</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;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="l00833"></a><span class="lineno"> 833</span>&#160;{</div>
-<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
-<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</div>
-<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; r = (r == 0) ? 0 : (((<span class="keywordtype">int</span>)r * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
-<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; g = (g == 0) ? 0 : (((<span class="keywordtype">int</span>)g * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
-<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; b = (b == 0) ? 0 : (((<span class="keywordtype">int</span>)b * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
-<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
-<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; nscale8_video_LEAVING_R1_DIRTY( r, scale);</div>
-<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; nscale8_video_LEAVING_R1_DIRTY( g, scale);</div>
-<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; nscale8_video_LEAVING_R1_DIRTY( b, scale);</div>
-<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; cleanup_R1();</div>
-<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x3 available.&quot;</span></div>
-<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160;}</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">// nscale8x2: scale two one byte values by a third one, which is treated as</span></div>
-<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160;<span class="comment">// the numerator of a fraction whose demominator is 256</span></div>
-<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160;<span class="comment">// In other words, it computes i,j * (scale / 256)</span></div>
-<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160;<span class="comment">// THIS FUNCTION ALWAYS MODIFIES ITS ARGUMENTS IN PLACE</span></div>
-<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160;</div>
-<div class="line"><a name="l00855"></a><span class="lineno"> 855</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="l00856"></a><span class="lineno"> 856</span>&#160;{</div>
-<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
-<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; i = ((int)i * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
-<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; j = ((int)j * (<span class="keywordtype">int</span>)(scale) ) &gt;&gt; 8;</div>
-<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
-<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; i = scale8_LEAVING_R1_DIRTY(i, scale);</div>
-<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; j = scale8_LEAVING_R1_DIRTY(j, scale);</div>
-<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; cleanup_R1();</div>
-<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x2 available.&quot;</span></div>
-<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160;}</div>
-<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;</div>
-<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;</div>
-<div class="line"><a name="l00870"></a><span class="lineno"> 870</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="l00871"></a><span class="lineno"> 871</span>&#160;{</div>
-<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160;<span class="preprocessor">#if SCALE8_C == 1</span></div>
-<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; uint8_t nonzeroscale = (scale != 0) ? 1 : 0;</div>
-<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; i = (i == 0) ? 0 : (((<span class="keywordtype">int</span>)i * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
-<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; j = (j == 0) ? 0 : (((<span class="keywordtype">int</span>)j * (int)(scale) ) &gt;&gt; 8) + nonzeroscale;</div>
-<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;<span class="preprocessor">#elif SCALE8_AVRASM == 1</span></div>
-<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; nscale8_video_LEAVING_R1_DIRTY( i, scale);</div>
-<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; nscale8_video_LEAVING_R1_DIRTY( j, scale);</div>
-<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; cleanup_R1();</div>
-<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;<span class="preprocessor">#error &quot;No implementation for nscale8x2 available.&quot;</span></div>
-<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160;}</div>
-<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160;</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;<span class="comment">// The beat generators need access to a millisecond counter.</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</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="l00810"></a><span class="lineno"> 810</span>&#160;<span class="comment">// need to provide a function with this signature:</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160;<span class="comment">// uint32_t get_millisecond_timer();</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;<span class="comment">// that provides similar functionality.</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160;<span class="comment">// You can also force use of the get_millisecond_timer function</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;<span class="comment">// by #defining USE_GET_MILLISECOND_TIMER.</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;<span class="preprocessor">#if (defined(ARDUINO) || defined(SPARK)) &amp;&amp; !defined(USE_GET_MILLISECOND_TIMER)</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;<span class="comment">// Forward declaration of Arduino function &#39;millis&#39;.</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;uint32_t millis();</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;<span class="preprocessor">#define GET_MILLIS millis</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;uint32_t get_millisecond_timer();</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160;<span class="preprocessor">#define GET_MILLIS get_millisecond_timer</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;</div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</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="l00825"></a><span class="lineno"> 825</span>&#160;<span class="comment">// with BPM specified in Q8.8 fixed-point format; e.g.</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;<span class="comment">// for this function, 120 BPM MUST BE specified as</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;<span class="comment">// 120*256 = 30720.</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;<span class="comment">// If you just want to specify &quot;120&quot;, use beat16 or beat8.</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;LIB8STATIC uint16_t beat88( accum88 beats_per_minute_88, uint32_t timebase = 0)</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;{</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</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="l00832"></a><span class="lineno"> 832</span>&#160; <span class="comment">// To avoid using the (slower) division operator, we</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</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="l00834"></a><span class="lineno"> 834</span>&#160; <span class="comment">// and then use a simple, fast bit-shift to divide by 65536.</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</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="l00837"></a><span class="lineno"> 837</span>&#160; <span class="comment">// The conversion is accurate to about 0.05%, more or less,</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</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="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keywordflow">return</span> (((GET_MILLIS()) - timebase) * beats_per_minute_88 * 280) &gt;&gt; 16;</div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160;}</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;<span class="comment">// beat16 generates a 16-bit &#39;sawtooth&#39; wave at a given BPM</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160;LIB8STATIC uint16_t beat16( accum88 beats_per_minute, uint32_t timebase = 0)</div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160;{</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</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="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keywordflow">if</span>( beats_per_minute &lt; 256) beats_per_minute &lt;&lt;= 8;</div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keywordflow">return</span> beat88(beats_per_minute, timebase);</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;</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</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="l00851"></a><span class="lineno"> 851</span>&#160;LIB8STATIC uint8_t beat8( accum88 beats_per_minute, uint32_t timebase = 0)</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;{</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="keywordflow">return</span> beat16( beats_per_minute, timebase) &gt;&gt; 8;</div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160;}</div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160;</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;<span class="comment">// beatsin88 generates a 16-bit sine wave at a given BPM,</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;<span class="comment">// that oscillates within a given range.</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160;<span class="comment">// For this function, BPM MUST BE SPECIFIED as</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160;<span class="comment">// a Q8.8 fixed-point value; e.g. 120BPM must be</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;<span class="comment">// specified as 120*256 = 30720.</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160;<span class="comment">// If you just want to specify &quot;120&quot;, use beatsin16 or beatsin8.</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;LIB8STATIC uint16_t beatsin88( accum88 beats_per_minute_88, uint16_t lowest = 0, uint16_t highest = 65535,</div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; uint32_t timebase = 0, uint16_t phase_offset = 0)</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;{</div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; uint16_t beat = beat88( beats_per_minute_88, timebase);</div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; uint16_t beatsin = (sin16( beat + phase_offset) + 32768);</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; uint16_t rangewidth = highest - lowest;</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; uint16_t scaledbeat = <a class="code" href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145">scale16</a>( beatsin, rangewidth);</div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; uint16_t result = lowest + scaledbeat;</div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160;}</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160;</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160;<span class="comment">// beatsin16 generates a 16-bit sine wave at a given BPM,</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160;<span class="comment">// that oscillates within a given range.</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;LIB8STATIC uint16_t beatsin16( accum88 beats_per_minute, uint16_t lowest = 0, uint16_t highest = 65535,</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; uint32_t timebase = 0, uint16_t phase_offset = 0)</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; uint16_t beat = beat16( beats_per_minute, timebase);</div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; uint16_t beatsin = (sin16( beat + phase_offset) + 32768);</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; uint16_t rangewidth = highest - lowest;</div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; uint16_t scaledbeat = <a class="code" href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145">scale16</a>( beatsin, rangewidth);</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; uint16_t result = lowest + scaledbeat;</div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160;}</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160;</div>
-<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160;<span class="comment">// scale16by8: scale a 16-bit unsigned value by an 8-bit value,</span></div>
-<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160;<span class="comment">// considered as numerator of a fraction whose denominator</span></div>
-<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;<span class="comment">// is 256. In other words, it computes i * (scale / 256)</span></div>
-<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;</div>
-<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;<span class="preprocessor">#if SCALE16BY8_C == 1</span></div>
-<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160;LIB8STATIC uint16_t scale16by8( uint16_t i, fract8 scale )</div>
-<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;{</div>
-<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; uint16_t result;</div>
-<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; result = (i * scale) / 256;</div>
-<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160;}</div>
-<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;<span class="preprocessor">#elif SCALE16BY8_AVRASM == 1</span></div>
-<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160;LIB8STATIC uint16_t scale16by8( uint16_t i, fract8 scale )</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; uint16_t result = 0;</div>
-<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="comment">// result.A = HighByte(i.A x j )</span></div>
-<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="stringliteral">&quot; mul %A[i], %[scale] \n\t&quot;</span></div>
-<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="stringliteral">&quot; mov %A[result], r1 \n\t&quot;</span></div>
-<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="comment">//&quot; clr %B[result] \n\t&quot;</span></div>
-<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160;</div>
-<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="comment">// result.A-B += i.B x j</span></div>
-<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <span class="stringliteral">&quot; mul %B[i], %[scale] \n\t&quot;</span></div>
-<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="stringliteral">&quot; add %A[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 %B[result], r1 \n\t&quot;</span></div>
-<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;</div>
-<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="comment">// cleanup r1</span></div>
-<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <span class="stringliteral">&quot; clr __zero_reg__ \n\t&quot;</span></div>
-<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;</div>
-<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; : [result] <span class="stringliteral">&quot;+r&quot;</span> (result)</div>
-<div class="line"><a name="l00916"></a><span class="lineno"> 916</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="l00917"></a><span class="lineno"> 917</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span></div>
-<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; );</div>
-<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160;}</div>
-<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160;<span class="preprocessor">#error &quot;No implementation for scale16by8 available.&quot;</span></div>
-<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160;</div>
-<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160;<span class="comment">// scale16: scale a 16-bit unsigned value by a 16-bit value,</span></div>
-<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160;<span class="comment">// considered as numerator of a fraction whose denominator</span></div>
-<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160;<span class="comment">// is 65536. In other words, it computes i * (scale / 65536)</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160;<span class="comment">// beatsin8 generates an 8-bit sine wave at a given BPM,</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160;<span class="comment">// that oscillates within a given range.</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;LIB8STATIC uint8_t beatsin8( accum88 beats_per_minute, uint8_t lowest = 0, uint8_t highest = 255,</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; uint32_t timebase = 0, uint8_t phase_offset = 0)</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;{</div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; uint8_t beat = beat8( beats_per_minute, timebase);</div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; uint8_t beatsin = sin8( beat + phase_offset);</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; uint8_t rangewidth = highest - lowest;</div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; uint8_t scaledbeat = <a class="code" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>( beatsin, rangewidth);</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; uint8_t result = lowest + scaledbeat;</div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;}</div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160;</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">// seconds16, minutes16, hours8</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;<span class="comment">// functions to return the current seconds, minutes, or hours</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;<span class="comment">// since boot time, in the specified width. Used as part of</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;<span class="comment">// the &quot;every N time-periods&quot; mechanism.</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160;</div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160;LIB8STATIC uint16_t seconds16()</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160;{</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; uint32_t ms = GET_MILLIS();</div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; uint16_t s16;</div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; s16 = ms / 1000;</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <span class="keywordflow">return</span> s16;</div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;}</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;LIB8STATIC uint16_t minutes16()</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;{</div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; uint32_t ms = GET_MILLIS();</div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; uint16_t m16;</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; m16 = (ms / (60000L)) &amp; 0xFFFF;</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="keywordflow">return</span> m16;</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;</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160;LIB8STATIC uint8_t hours8()</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; uint32_t ms = GET_MILLIS();</div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; uint8_t h8;</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; h8 = (ms / (3600000L)) &amp; 0xFF;</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="keywordflow">return</span> h8;</div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160;}</div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160;</div>
-<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160;<span class="preprocessor">#if SCALE16_C == 1</span></div>
-<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160;LIB8STATIC uint16_t scale16( uint16_t i, fract16 scale )</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; uint16_t result;</div>
-<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; result = ((uint32_t)(i) * (uint32_t)(scale)) / 65536;</div>
-<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">return</span> result;</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;<span class="preprocessor">#elif SCALE16_AVRASM == 1</span></div>
-<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;LIB8STATIC</div>
-<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160;uint16_t scale16( uint16_t i, fract16 scale )</div>
-<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160;{</div>
-<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; uint32_t result = 0;</div>
-<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="keyword">const</span> uint8_t zero = 0;</div>
-<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <span class="comment">// result.A-B = i.A x scale.A</span></div>
-<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="stringliteral">&quot; mul %A[i], %A[scale] \n\t&quot;</span></div>
-<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <span class="comment">// save results...</span></div>
-<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="comment">// basic idea:</span></div>
-<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="comment">//&quot; mov %A[result], r0 \n\t&quot;</span></div>
-<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="comment">//&quot; mov %B[result], r1 \n\t&quot;</span></div>
-<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <span class="comment">// which can be written as...</span></div>
-<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="stringliteral">&quot; movw %A[result], r0 \n\t&quot;</span></div>
-<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="comment">// We actually need to do anything with r0,</span></div>
-<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="comment">// as result.A is never used again here, so we</span></div>
-<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="comment">// could just move the high byte, but movw is</span></div>
-<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="comment">// one clock cycle, just like mov, so might as</span></div>
-<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <span class="comment">// well, in case we want to use this code for</span></div>
-<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="comment">// a generic 16x16 multiply somewhere.</span></div>
-<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160;</div>
-<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="comment">// result.C-D = i.B x scale.B</span></div>
-<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="stringliteral">&quot; mul %B[i], %B[scale] \n\t&quot;</span></div>
-<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="comment">//&quot; mov %C[result], r0 \n\t&quot;</span></div>
-<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="comment">//&quot; mov %D[result], r1 \n\t&quot;</span></div>
-<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="stringliteral">&quot; movw %C[result], r0 \n\t&quot;</span></div>
-<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;</div>
-<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <span class="comment">// result.B-D += i.B x scale.A</span></div>
-<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="stringliteral">&quot; mul %B[i], %A[scale] \n\t&quot;</span></div>
-<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160;</div>
-<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="stringliteral">&quot; add %B[result], r0 \n\t&quot;</span></div>
-<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="stringliteral">&quot; adc %C[result], r1 \n\t&quot;</span></div>
-<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <span class="stringliteral">&quot; adc %D[result], %[zero] \n\t&quot;</span></div>
-<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160;</div>
-<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="comment">// result.B-D += i.A x scale.B</span></div>
-<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; <span class="stringliteral">&quot; mul %A[i], %B[scale] \n\t&quot;</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160;</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160;<span class="comment">// Helper routine to divide a 32-bit value by 1024, returning</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160;<span class="comment">// only the low 16 bits. You&#39;d think this would be just</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160;<span class="comment">// result = (in32 &gt;&gt; 10) &amp; 0xFFFF;</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160;<span class="comment">// and on ARM, that&#39;s what you want and all is well.</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160;<span class="comment">// But on AVR that code turns into a loop that executes</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160;<span class="comment">// a four-byte shift ten times: 40 shifts in all, plus loop</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;<span class="comment">// overhead. This routine gets exactly the same result with</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;<span class="comment">// just six shifts (vs 40), and no loop overhead.</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160;<span class="comment">// Used to convert millis to &#39;binary seconds&#39; aka bseconds:</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160;<span class="comment">// one bsecond == 1024 millis.</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160;LIB8STATIC uint16_t div1024_32_16( uint32_t in32)</div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160;{</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; uint16_t out16;</div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;<span class="preprocessor">#if defined(__AVR__)</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="stringliteral">&quot; lsr %D[in] \n\t&quot;</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="stringliteral">&quot; ror %C[in] \n\t&quot;</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="stringliteral">&quot; ror %B[in] \n\t&quot;</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="stringliteral">&quot; lsr %D[in] \n\t&quot;</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <span class="stringliteral">&quot; ror %C[in] \n\t&quot;</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="stringliteral">&quot; ror %B[in] \n\t&quot;</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="stringliteral">&quot; mov %B[out],%C[in] \n\t&quot;</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="stringliteral">&quot; mov %A[out],%B[in] \n\t&quot;</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; : [in] <span class="stringliteral">&quot;+r&quot;</span> (in32),</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; [out] <span class="stringliteral">&quot;=r&quot;</span> (out16)</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; );</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; out16 = (in32 &gt;&gt; 10) &amp; 0xFFFF;</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; <span class="keywordflow">return</span> out16;</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">// bseconds16 returns the current time-since-boot in</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;<span class="comment">// &quot;binary seconds&quot;, which are actually 1024/1000 of a</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160;<span class="comment">// second long.</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160;LIB8STATIC uint16_t bseconds16()</div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160;{</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; uint32_t ms = GET_MILLIS();</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; uint16_t s16;</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; s16 = div1024_32_16( ms);</div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="keywordflow">return</span> s16;</div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160;}</div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160;</div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160;</div>
-<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <span class="stringliteral">&quot; add %B[result], r0 \n\t&quot;</span></div>
-<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <span class="stringliteral">&quot; adc %C[result], r1 \n\t&quot;</span></div>
-<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <span class="stringliteral">&quot; adc %D[result], %[zero] \n\t&quot;</span></div>
-<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160;</div>
-<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="comment">// cleanup r1</span></div>
-<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="stringliteral">&quot; clr r1 \n\t&quot;</span></div>
-<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160;</div>
-<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; : [result] <span class="stringliteral">&quot;+r&quot;</span> (result)</div>
-<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; : [i] <span class="stringliteral">&quot;r&quot;</span> (i),</div>
-<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; [scale] <span class="stringliteral">&quot;r&quot;</span> (scale),</div>
-<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; [zero] <span class="stringliteral">&quot;r&quot;</span> (zero)</div>
-<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span></div>
-<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; );</div>
-<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; result = result &gt;&gt; 16;</div>
-<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160;}</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 scale16 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">// mul8: 8x8 bit multiplication, with 8 bit result</span></div>
-<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160;LIB8STATIC uint8_t mul8( uint8_t i, uint8_t j)</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 MUL8_C == 1</span></div>
-<div class="line"><a name="l01000"></a><span class="lineno"> 1000</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="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="preprocessor">#elif MUL8_AVRASM == 1</span></div>
-<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit j, giving 16-bit r1,r0 */</span></div>
-<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="stringliteral">&quot;mul %0, %1 \n\t&quot;</span></div>
-<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="comment">/* Extract the LOW 8-bits (r0) */</span></div>
-<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <span class="stringliteral">&quot;mov %0, r0 \n\t&quot;</span></div>
-<div class="line"><a name="l01007"></a><span class="lineno"> 1007</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="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="stringliteral">&quot;clr __zero_reg__ \n\t&quot;</span></div>
-<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
-<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j)</div>
-<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</div>
-<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;</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 mul8 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="l01020"></a><span class="lineno"> 1020</span>&#160;<span class="comment">// mul8: saturating 8x8 bit multiplication, with 8 bit result</span></div>
-<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;LIB8STATIC uint8_t qmul8( uint8_t i, uint8_t j)</div>
-<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;{</div>
-<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;<span class="preprocessor">#if QMUL8_C == 1</span></div>
-<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <span class="keywordtype">int</span> p = ((int)i * (<span class="keywordtype">int</span>)(j) );</div>
-<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="keywordflow">if</span>( p &gt; 255) p = 255;</div>
-<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">return</span> p;</div>
-<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;<span class="preprocessor">#elif QMUL8_AVRASM == 1</span></div>
-<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="comment">/* Multiply 8-bit i * 8-bit j, giving 16-bit r1,r0 */</span></div>
-<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="stringliteral">&quot; mul %0, %1 \n\t&quot;</span></div>
-<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="comment">/* If high byte of result is zero, all is well. */</span></div>
-<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="stringliteral">&quot; tst r1 \n\t&quot;</span></div>
-<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <span class="stringliteral">&quot; breq Lnospill_%= \n\t&quot;</span></div>
-<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <span class="comment">/* If high byte of result &gt; 0, saturate low byte to 0xFF */</span></div>
-<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="stringliteral">&quot; ldi %0,0xFF \n\t&quot;</span></div>
-<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="stringliteral">&quot; rjmp Ldone_%= \n\t&quot;</span></div>
-<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="stringliteral">&quot;Lnospill_%=: \n\t&quot;</span></div>
-<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="comment">/* Extract the LOW 8-bits (r0) */</span></div>
-<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="stringliteral">&quot; mov %0, r0 \n\t&quot;</span></div>
-<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <span class="stringliteral">&quot;Ldone_%=: \n\t&quot;</span></div>
-<div class="line"><a name="l01041"></a><span class="lineno"> 1041</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="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="stringliteral">&quot; clr __zero_reg__ \n\t&quot;</span></div>
-<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; : <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
-<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; : <span class="stringliteral">&quot;a&quot;</span> (j)</div>
-<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span>);</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160;<span class="comment">// Classes to implement &quot;Every N Milliseconds&quot;, &quot;Every N Seconds&quot;,</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160;<span class="comment">// &quot;Every N Minutes&quot;, &quot;Every N Hours&quot;, and &quot;Every N BSeconds&quot;.</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160;<span class="preprocessor">#if 1</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160;<span class="preprocessor">#define INSTANTIATE_EVERY_N_TIME_PERIODS(NAME,TIMETYPE,TIMEGETTER) \</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160;<span class="preprocessor">class NAME { \</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160;<span class="preprocessor">public: \</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160;<span class="preprocessor"> TIMETYPE mPrevTrigger; \</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160;<span class="preprocessor"> TIMETYPE mPeriod; \</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160;<span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;<span class="preprocessor"> NAME() { reset(); mPeriod = 1; }; \</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160;<span class="preprocessor"> NAME(TIMETYPE period) { reset(); setPeriod(period); }; \</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160;<span class="preprocessor"> void setPeriod( TIMETYPE period) { mPeriod = period; }; \</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160;<span class="preprocessor"> TIMETYPE getTime() { return (TIMETYPE)(TIMEGETTER()); }; \</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160;<span class="preprocessor"> TIMETYPE getPeriod() { return mPeriod; }; \</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160;<span class="preprocessor"> TIMETYPE getElapsed() { return getTime() - mPrevTrigger; } \</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160;<span class="preprocessor"> TIMETYPE getRemaining() { return mPeriod - getElapsed(); } \</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160;<span class="preprocessor"> TIMETYPE getLastTriggerTime() { return mPrevTrigger; } \</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160;<span class="preprocessor"> bool ready() { \</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160;<span class="preprocessor"> bool isReady = (getElapsed() &gt;= mPeriod); \</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;<span class="preprocessor"> if( isReady ) { reset(); } \</span></div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160;<span class="preprocessor"> return isReady; \</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160;<span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160;<span class="preprocessor"> void reset() { mPrevTrigger = getTime(); }; \</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160;<span class="preprocessor"> void trigger() { mPrevTrigger = getTime() - mPeriod; }; \</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;<span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;<span class="preprocessor"> operator bool() { return ready(); } \</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;<span class="preprocessor">};</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;INSTANTIATE_EVERY_N_TIME_PERIODS(<a class="code" href="class_c_every_n_time_periods.html">CEveryNMillis</a>,uint32_t,GET_MILLIS);</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;INSTANTIATE_EVERY_N_TIME_PERIODS(<a class="code" href="class_c_every_n_time_periods.html">CEveryNSeconds</a>,uint16_t,seconds16);</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;INSTANTIATE_EVERY_N_TIME_PERIODS(<a class="code" href="class_c_every_n_time_periods.html">CEveryNBSeconds</a>,uint16_t,bseconds16);</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;INSTANTIATE_EVERY_N_TIME_PERIODS(<a class="code" href="class_c_every_n_time_periods.html">CEveryNMinutes</a>,uint16_t,minutes16);</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;INSTANTIATE_EVERY_N_TIME_PERIODS(<a class="code" href="class_c_every_n_time_periods.html">CEveryNHours</a>,uint8_t,hours8);</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;<span class="comment">// Under C++11 rules, we would be allowed to use not-external</span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="comment">// -linkage-type symbols as template arguments,</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;<span class="comment">// e.g., LIB8STATIC seconds16, and we&#39;d be able to use these</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;<span class="comment">// templates as shown below.</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;<span class="comment">// However, under C++03 rules, we cannot do that, and thus we</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;<span class="comment">// have to resort to the preprocessor to &#39;instantiate&#39; &#39;templates&#39;,</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;<span class="comment">// as handled above.</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> timeType,timeType (*timeGetter)()&gt;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"><a class="line" href="class_c_every_n_time_periods.html"> 1016</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a> {</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; timeType mPrevTrigger;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; timeType mPeriod;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a>() { reset(); mPeriod = 1; };</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a>(timeType period) { reset(); setPeriod(period); };</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordtype">void</span> setPeriod( timeType period) { mPeriod = period; };</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; timeType getTime() { <span class="keywordflow">return</span> (timeType)(timeGetter()); };</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; timeType getPeriod() { <span class="keywordflow">return</span> mPeriod; };</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; timeType getElapsed() { <span class="keywordflow">return</span> getTime() - mPrevTrigger; }</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; timeType getRemaining() { <span class="keywordflow">return</span> mPeriod - getElapsed(); }</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; timeType getLastTriggerTime() { <span class="keywordflow">return</span> mPrevTrigger; }</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordtype">bool</span> ready() {</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="keywordtype">bool</span> isReady = (getElapsed() &gt;= mPeriod);</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keywordflow">if</span>( isReady ) { reset(); }</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keywordflow">return</span> isReady;</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; <span class="keywordtype">void</span> reset() { mPrevTrigger = getTime(); };</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <span class="keywordtype">void</span> trigger() { mPrevTrigger = getTime() - mPeriod; };</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="keyword">operator</span> bool() { <span class="keywordflow">return</span> ready(); }</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;<span class="keyword">typedef</span> <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods&lt;uint16_t,seconds16&gt;</a> <a class="code" href="class_c_every_n_time_periods.html">CEveryNSeconds</a>;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;<span class="keyword">typedef</span> <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods&lt;uint16_t,bseconds16&gt;</a> <a class="code" href="class_c_every_n_time_periods.html">CEveryNBSeconds</a>;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;<span class="keyword">typedef</span> <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods&lt;uint32_t,millis&gt;</a> <a class="code" href="class_c_every_n_time_periods.html">CEveryNMillis</a>;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;<span class="keyword">typedef</span> <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods&lt;uint16_t,minutes16&gt;</a> <a class="code" href="class_c_every_n_time_periods.html">CEveryNMinutes</a>;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;<span class="keyword">typedef</span> <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods&lt;uint8_t,hours8&gt;</a> <a class="code" href="class_c_every_n_time_periods.html">CEveryNHours</a>;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;<span class="preprocessor">#endif</span></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; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;<span class="preprocessor">#error &quot;No implementation for qmul8 available.&quot;</span></div>
-<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;}</div>
-<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;</div>
-<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;</div>
-<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;<span class="comment">// abs8: take abs() of a signed 8-bit uint8_t</span></div>
-<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;LIB8STATIC int8_t abs8( int8_t i)</div>
-<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;{</div>
-<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;<span class="preprocessor">#if ABS8_C == 1</span></div>
-<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <span class="keywordflow">if</span>( i &lt; 0) i = -i;</div>
-<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;<span class="preprocessor">#elif ABS8_AVRASM == 1</span></div>
-<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;<span class="preprocessor">#define CONCAT_HELPER( x, y ) x##y</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;<span class="preprocessor">#define CONCAT_MACRO( x, y ) CONCAT_HELPER( x, y )</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;<span class="preprocessor">#define EVERY_N_MILLIS(N) EVERY_N_MILLIS_I(CONCAT_MACRO(PER, __COUNTER__ ),N)</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;<span class="preprocessor">#define EVERY_N_MILLIS_I(NAME,N) static CEveryNMillis NAME(N); if( NAME )</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;<span class="preprocessor">#define EVERY_N_SECONDS(N) EVERY_N_SECONDS_I(CONCAT_MACRO(PER, __COUNTER__ ),N)</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;<span class="preprocessor">#define EVERY_N_SECONDS_I(NAME,N) static CEveryNSeconds NAME(N); if( NAME )</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;<span class="preprocessor">#define EVERY_N_BSECONDS(N) EVERY_N_BSECONDS_I(CONCAT_MACRO(PER, __COUNTER__ ),N)</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;<span class="preprocessor">#define EVERY_N_BSECONDS_I(NAME,N) static CEveryNBSeconds NAME(N); if( NAME )</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;<span class="preprocessor">#define EVERY_N_MINUTES(N) EVERY_N_MINUTES_I(CONCAT_MACRO(PER, __COUNTER__ ),N)</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;<span class="preprocessor">#define EVERY_N_MINUTES_I(NAME,N) static CEveryNMinutes NAME(N); if( NAME )</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;<span class="preprocessor">#define EVERY_N_HOURS(N) EVERY_N_HOURS_I(CONCAT_MACRO(PER, __COUNTER__ ),N)</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;<span class="preprocessor">#define EVERY_N_HOURS_I(NAME,N) static CEveryNHours NAME(N); if( NAME )</span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;<span class="preprocessor">#define CEveryNMilliseconds CEveryNMillis</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;<span class="preprocessor">#define EVERY_N_MILLISECONDS(N) EVERY_N_MILLIS(N)</span></div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;</div>
-<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l01064"></a><span class="lineno"> 1064</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="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="stringliteral">&quot;sbrc %0, 7 \n&quot;</span></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; <span class="comment">/* Negate the value */</span></div>
-<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <span class="stringliteral">&quot;neg %0 \n&quot;</span></div>
-<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;</div>
-<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; : <span class="stringliteral">&quot;+r&quot;</span> (i) : <span class="stringliteral">&quot;r&quot;</span> (i) );</div>
-<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="keywordflow">return</span> i;</div>
-<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="preprocessor">#error &quot;No implementation for abs8 available.&quot;</span></div>
-<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;}</div>
-<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;</div>
-<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;</div>
-<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;<span class="comment">// float-to-fixed and fixed-to-float conversions</span></div>
-<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01082"></a><span class="lineno"> 1082</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="l01083"></a><span class="lineno"> 1083</span>&#160;</div>
-<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;<span class="comment">// floatToSfract15: conversion from IEEE754 float in the range (-1,1)</span></div>
-<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;<span class="comment">// to 16-bit fixed point. Note that the extremes of</span></div>
-<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;<span class="comment">// one and negative one are NOT representable. The</span></div>
-<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;<span class="comment">// representable range is basically</span></div>
-<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;<span class="comment">// sfract15ToFloat: conversion from sfract15 fixed point to</span></div>
-<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;<span class="comment">// IEEE754 32-bit float.</span></div>
-<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;</div>
-<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;LIB8STATIC</div>
-<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;<span class="keywordtype">float</span> sfract15ToFloat( sfract15 y)</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; <span class="keywordflow">return</span> y / 32768.0;</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;</div>
-<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;LIB8STATIC</div>
-<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;sfract15 floatToSfract15( <span class="keywordtype">float</span> f)</div>
-<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;{</div>
-<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="keywordflow">return</span> f * 32768.0;</div>
-<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;}</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;</div>
-<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;</div>
-<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;</div>
-<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;<span class="comment">// Dimming and brightening functions</span></div>
-<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;<span class="comment">// The eye does not respond in a linear way to light.</span></div>
-<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;<span class="comment">// High speed PWM&#39;d LEDs at 50% duty cycle appear far</span></div>
-<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;<span class="comment">// brighter then the &#39;half as bright&#39; you might expect.</span></div>
-<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;<span class="comment">// If you want your midpoint brightness leve (128) to</span></div>
-<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;<span class="comment">// appear half as bright as &#39;full&#39; brightness (255), you</span></div>
-<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;<span class="comment">// have to apply a &#39;dimming function&#39;.</span></div>
-<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;<span class="comment">//</span></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;LIB8STATIC uint8_t dim8_raw( uint8_t x)</div>
-<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;{</div>
-<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="keywordflow">return</span> scale8( x, x);</div>
-<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;}</div>
-<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;</div>
-<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;LIB8STATIC uint8_t dim8_video( uint8_t x)</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; <span class="keywordflow">return</span> scale8_video( x, x);</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;</div>
-<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;LIB8STATIC uint8_t dim8_lin( uint8_t x )</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; <span class="keywordflow">if</span>( x &amp; 0x80 ) {</div>
-<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; x = scale8( x, x);</div>
-<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; x += 1;</div>
-<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; x /= 2;</div>
-<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; }</div>
-<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">return</span> x;</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 brighten8_raw( uint8_t x)</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 ix = 255 - x;</div>
-<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keywordflow">return</span> 255 - scale8( ix, ix);</div>
-<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;}</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;LIB8STATIC uint8_t brighten8_video( uint8_t x)</div>
-<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;{</div>
-<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; uint8_t ix = 255 - x;</div>
-<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="keywordflow">return</span> 255 - scale8_video( ix, ix);</div>
-<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;}</div>
-<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;</div>
-<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;LIB8STATIC uint8_t brighten8_lin( uint8_t x )</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; uint8_t ix = 255 - x;</div>
-<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; <span class="keywordflow">if</span>( ix &amp; 0x80 ) {</div>
-<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; ix = scale8( ix, ix);</div>
-<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; ix += 1;</div>
-<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; ix /= 2;</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; <span class="keywordflow">return</span> 255 - ix;</div>
-<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;}</div>
-<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;</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;<span class="comment">// A 16-bit PNRG good enough for LED animations</span></div>
-<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;</div>
-<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;<span class="comment">// X(n+1) = (2053 * X(n)) + 13849)</span></div>
-<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;<span class="preprocessor">#define RAND16_2053 ((uint16_t)(2053))</span></div>
-<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;<span class="preprocessor">#define RAND16_13849 ((uint16_t)(13849))</span></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;<span class="keyword">extern</span> uint16_t rand16seed;<span class="comment">// = RAND16_SEED;</span></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;</div>
-<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;LIB8STATIC uint8_t random8()</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; rand16seed = (rand16seed * RAND16_2053) + RAND16_13849;</div>
-<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="comment">// return the sum of the high and low bytes, for better</span></div>
-<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="comment">// mixing and non-sequential correlation</span></div>
-<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="keywordflow">return</span> (uint8_t)(((uint8_t)(rand16seed &amp; 0xFF)) +</div>
-<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; ((uint8_t)(rand16seed &gt;&gt; 8)));</div>
-<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;}</div>
-<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;</div>
-<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;LIB8STATIC uint16_t random16()</div>
-<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;{</div>
-<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; rand16seed = (rand16seed * RAND16_2053) + RAND16_13849;</div>
-<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <span class="keywordflow">return</span> rand16seed;</div>
-<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;}</div>
-<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;</div>
-<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;</div>
-<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;LIB8STATIC uint8_t random8(uint8_t lim)</div>
-<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;{</div>
-<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; uint8_t r = random8();</div>
-<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; r = scale8( r, lim);</div>
-<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <span class="keywordflow">return</span> r;</div>
-<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;}</div>
-<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;</div>
-<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;LIB8STATIC uint8_t random8(uint8_t min, uint8_t lim)</div>
-<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;{</div>
-<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; uint8_t delta = lim - min;</div>
-<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; uint8_t r = random8(delta) + min;</div>
-<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <span class="keywordflow">return</span> r;</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;</div>
-<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;LIB8STATIC uint16_t random16( uint16_t lim)</div>
-<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;{</div>
-<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; uint16_t r = random16();</div>
-<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; uint32_t p = (uint32_t)lim * (uint32_t)r;</div>
-<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; r = p &gt;&gt; 16;</div>
-<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keywordflow">return</span> r;</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;</div>
-<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;LIB8STATIC uint16_t random16( uint16_t min, uint16_t lim)</div>
-<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;{</div>
-<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; uint16_t delta = lim - min;</div>
-<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; uint16_t r = random16( delta) + min;</div>
-<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <span class="keywordflow">return</span> r;</div>
-<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;}</div>
-<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;</div>
-<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;LIB8STATIC <span class="keywordtype">void</span> random16_set_seed( uint16_t seed)</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; rand16seed = seed;</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;</div>
-<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;LIB8STATIC uint16_t random16_get_seed()</div>
-<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;{</div>
-<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; <span class="keywordflow">return</span> rand16seed;</div>
-<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;}</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;LIB8STATIC <span class="keywordtype">void</span> random16_add_entropy( uint16_t entropy)</div>
-<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;{</div>
-<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; rand16seed += entropy;</div>
-<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;}</div>
-<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;</div>
-<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;</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">// sin16 &amp; cos16:</span></div>
-<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;<span class="comment">// Fast 16-bit approximations of sin(x) &amp; cos(x).</span></div>
-<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;<span class="comment">// Input angle is an unsigned int from 0-65535.</span></div>
-<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;<span class="comment">// Output is signed int from -32767 to 32767.</span></div>
-<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;<span class="comment">// This approximation never varies more than 0.69%</span></div>
-<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;<span class="comment">// from the floating point value you&#39;d get by doing</span></div>
-<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;<span class="comment">// float s = sin( x ) * 32767.0;</span></div>
-<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;<span class="comment">// Don&#39;t use this approximation for calculating the</span></div>
-<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;<span class="comment">// trajectory of a rocket to Mars, but it&#39;s great</span></div>
-<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;<span class="comment">// for art projects and LED displays.</span></div>
-<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;<span class="comment">// On Arduino/AVR, this approximation is more than</span></div>
-<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;<span class="comment">// 10X faster than floating point sin(x) and cos(x)</span></div>
-<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;</div>
-<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;<span class="preprocessor">#if defined(__AVR__)</span></div>
-<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;<span class="preprocessor">#define sin16 sin16_avr</span></div>
-<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;<span class="preprocessor">#define sin16 sin16_C</span></div>
-<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;<span class="preprocessor">#endif</span></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;LIB8STATIC int16_t sin16_avr( uint16_t theta )</div>
-<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;{</div>
-<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t data[] =</div>
-<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; { 0, 0, 49, 0, 6393%256, 6393/256, 48, 0,</div>
-<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; 12539%256, 12539/256, 44, 0, 18204%256, 18204/256, 38, 0,</div>
-<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; 23170%256, 23170/256, 31, 0, 27245%256, 27245/256, 23, 0,</div>
-<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; 30273%256, 30273/256, 14, 0, 32137%256, 32137/256, 4 <span class="comment">/*,0*/</span> };</div>
-<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;</div>
-<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; uint16_t offset = (theta &amp; 0x3FFF);</div>
-<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;</div>
-<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="comment">// AVR doesn&#39;t have a multi-bit shift instruction,</span></div>
-<div class="line"><a name="l01272"></a><span class="lineno"> 1272</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="l01273"></a><span class="lineno"> 1273</span>&#160; <span class="comment">// Inserting empty volatile statements between each</span></div>
-<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="comment">// bit shift forces gcc to unroll the loop.</span></div>
-<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; offset &gt;&gt;= 1; <span class="comment">// 0..8191</span></div>
-<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(<span class="stringliteral">&quot;&quot;</span>);</div>
-<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; offset &gt;&gt;= 1; <span class="comment">// 0..4095</span></div>
-<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(<span class="stringliteral">&quot;&quot;</span>);</div>
-<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; offset &gt;&gt;= 1; <span class="comment">// 0..2047</span></div>
-<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;</div>
-<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x4000 ) offset = 2047 - offset;</div>
-<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;</div>
-<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; uint8_t sectionX4;</div>
-<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; sectionX4 = offset / 256;</div>
-<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; sectionX4 *= 4;</div>
-<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;</div>
-<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; uint8_t m;</div>
-<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;</div>
-<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <span class="keyword">union </span>{</div>
-<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; uint16_t b;</div>
-<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="keyword">struct </span>{</div>
-<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; uint8_t blo;</div>
-<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; uint8_t bhi;</div>
-<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; };</div>
-<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; } u;</div>
-<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;</div>
-<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <span class="comment">//in effect u.b = blo + (256 * bhi);</span></div>
-<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; u.blo = data[ sectionX4 ];</div>
-<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; u.bhi = data[ sectionX4 + 1];</div>
-<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; m = data[ sectionX4 + 2];</div>
-<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;</div>
-<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; uint8_t secoffset8 = (uint8_t)(offset) / 2;</div>
-<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;</div>
-<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; uint16_t mx = m * secoffset8;</div>
-<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;</div>
-<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; int16_t y = mx + u.b;</div>
-<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x8000 ) y = -y;</div>
-<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;</div>
-<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <span class="keywordflow">return</span> y;</div>
-<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;}</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;LIB8STATIC int16_t sin16_C( uint16_t 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">static</span> <span class="keyword">const</span> uint16_t base[] =</div>
-<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; { 0, 6393, 12539, 18204, 23170, 27245, 30273, 32137 };</div>
-<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint8_t slope[] =</div>
-<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; { 49, 48, 44, 38, 31, 23, 14, 4 };</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; uint16_t offset = (theta &amp; 0x3FFF) &gt;&gt; 3; <span class="comment">// 0..2047</span></div>
-<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x4000 ) offset = 2047 - offset;</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 section = offset / 256; <span class="comment">// 0..7</span></div>
-<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; uint16_t b = base[section];</div>
-<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; uint8_t m = slope[section];</div>
-<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;</div>
-<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; uint8_t secoffset8 = (uint8_t)(offset) / 2;</div>
-<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;</div>
-<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; uint16_t mx = m * secoffset8;</div>
-<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; int16_t y = mx + b;</div>
-<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;</div>
-<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x8000 ) y = -y;</div>
-<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;</div>
-<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; <span class="keywordflow">return</span> y;</div>
-<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;}</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;LIB8STATIC int16_t cos16( uint16_t theta)</div>
-<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;{</div>
-<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <span class="keywordflow">return</span> sin16( theta + 16384);</div>
-<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;}</div>
-<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;</div>
-<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;</div>
-<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;<span class="comment">// sin8 &amp; cos8</span></div>
-<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;<span class="comment">// Fast 8-bit approximations of sin(x) &amp; cos(x).</span></div>
-<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;<span class="comment">// Input angle is an unsigned int from 0-255.</span></div>
-<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;<span class="comment">// Output is an unsigned int from 0 to 255.</span></div>
-<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;<span class="comment">// This approximation can vary to to 2%</span></div>
-<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;<span class="comment">// from the floating point value you&#39;d get by doing</span></div>
-<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;<span class="comment">// float s = (sin( x ) * 128.0) + 128;</span></div>
-<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;<span class="comment">// Don&#39;t use this approximation for calculating the</span></div>
-<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;<span class="comment">// &quot;real&quot; trigonometric calculations, but it&#39;s great</span></div>
-<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;<span class="comment">// for art projects and LED displays.</span></div>
-<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;<span class="comment">// On Arduino/AVR, this approximation is more than</span></div>
-<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;<span class="comment">// 20X faster than floating point sin(x) and cos(x)</span></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;<span class="preprocessor">#if defined(__AVR__) &amp;&amp; !defined(LIB8_ATTINY)</span></div>
-<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;<span class="preprocessor">#define sin8 sin8_avr</span></div>
-<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;<span class="preprocessor">#define sin8 sin8_C</span></div>
-<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;</div>
-<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;</div>
-<div class="line"><a name="l01366"></a><span class="lineno"> 1366</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="l01367"></a><span class="lineno"> 1367</span>&#160;</div>
-<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;LIB8STATIC uint8_t sin8_avr( uint8_t theta)</div>
-<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;{</div>
-<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; uint8_t offset = theta;</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; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <span class="stringliteral">&quot;sbrc %[theta],6 \n\t&quot;</span></div>
-<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; <span class="stringliteral">&quot;com %[offset] \n\t&quot;</span></div>
-<div class="line"><a name="l01375"></a><span class="lineno"> 1375</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="l01376"></a><span class="lineno"> 1376</span>&#160; );</div>
-<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;</div>
-<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; offset &amp;= 0x3F; <span class="comment">// 0..63</span></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 secoffset = offset &amp; 0x0F; <span class="comment">// 0..15</span></div>
-<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x40) secoffset++;</div>
-<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;</div>
-<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; uint8_t m16; uint8_t b;</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; uint8_t section = offset &gt;&gt; 4; <span class="comment">// 0..3</span></div>
-<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; uint8_t s2 = section * 2;</div>
-<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;</div>
-<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <span class="keyword">const</span> uint8_t* p = b_m16_interleave;</div>
-<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; p += s2;</div>
-<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; b = *p;</div>
-<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; p++;</div>
-<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; m16 = *p;</div>
-<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;</div>
-<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; uint8_t mx;</div>
-<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; uint8_t xr1;</div>
-<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
-<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="stringliteral">&quot;mul %[m16],%[secoffset] \n\t&quot;</span></div>
-<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; <span class="stringliteral">&quot;mov %[mx],r0 \n\t&quot;</span></div>
-<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; <span class="stringliteral">&quot;mov %[xr1],r1 \n\t&quot;</span></div>
-<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <span class="stringliteral">&quot;eor r1, r1 \n\t&quot;</span></div>
-<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; <span class="stringliteral">&quot;swap %[mx] \n\t&quot;</span></div>
-<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; <span class="stringliteral">&quot;andi %[mx],0x0F \n\t&quot;</span></div>
-<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; <span class="stringliteral">&quot;swap %[xr1] \n\t&quot;</span></div>
-<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; <span class="stringliteral">&quot;andi %[xr1], 0xF0 \n\t&quot;</span></div>
-<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <span class="stringliteral">&quot;or %[mx], %[xr1] \n\t&quot;</span></div>
-<div class="line"><a name="l01406"></a><span class="lineno"> 1406</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="l01407"></a><span class="lineno"> 1407</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="l01408"></a><span class="lineno"> 1408</span>&#160; );</div>
-<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;</div>
-<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; int8_t y = mx + b;</div>
-<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x80 ) y = -y;</div>
-<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;</div>
-<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; y += 128;</div>
-<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;</div>
-<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <span class="keywordflow">return</span> y;</div>
-<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;}</div>
-<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;</div>
-<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;</div>
-<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;LIB8STATIC uint8_t sin8_C( uint8_t theta)</div>
-<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;{</div>
-<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; uint8_t offset = theta;</div>
-<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x40 ) {</div>
-<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; offset = (uint8_t)255 - offset;</div>
-<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; }</div>
-<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; offset &amp;= 0x3F; <span class="comment">// 0..63</span></div>
-<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;</div>
-<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; uint8_t secoffset = offset &amp; 0x0F; <span class="comment">// 0..15</span></div>
-<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x40) secoffset++;</div>
-<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;</div>
-<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; uint8_t section = offset &gt;&gt; 4; <span class="comment">// 0..3</span></div>
-<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; uint8_t s2 = section * 2;</div>
-<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; <span class="keyword">const</span> uint8_t* p = b_m16_interleave;</div>
-<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; p += s2;</div>
-<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; uint8_t b = *p;</div>
-<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; p++;</div>
-<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; uint8_t m16 = *p;</div>
-<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;</div>
-<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; uint8_t mx = (m16 * secoffset) &gt;&gt; 4;</div>
-<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;</div>
-<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; int8_t y = mx + b;</div>
-<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; <span class="keywordflow">if</span>( theta &amp; 0x80 ) y = -y;</div>
-<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;</div>
-<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; y += 128;</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> y;</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;</div>
-<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;LIB8STATIC uint8_t cos8( uint8_t theta)</div>
-<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;{</div>
-<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; <span class="keywordflow">return</span> sin8( theta + 64);</div>
-<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;}</div>
-<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;</div>
-<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;</div>
-<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;<span class="comment">// memmove8, memcpy8, and memset8:</span></div>
-<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;<span class="comment">// alternatives to memmove, memcpy, and memset that are</span></div>
-<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;<span class="comment">// faster on AVR than standard avr-libc 1.8</span></div>
-<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;</div>
-<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;<span class="preprocessor">#if defined(__AVR__)</span></div>
-<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
-<div class="line"><a name="l01463"></a><span class="lineno"> 1463</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="l01464"></a><span class="lineno"> 1464</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 ) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((noinline));</div>
-<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;<span class="keywordtype">void</span> * memset8 ( <span class="keywordtype">void</span> * ptr, uint8_t value, uint16_t num ) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a> ((noinline)) ;</div>
-<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;}</div>
-<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;<span class="comment">// on non-AVR platforms, these names just call standard libc.</span></div>
-<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;<span class="preprocessor">#define memmove8 memmove</span></div>
-<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;<span class="preprocessor">#define memcpy8 memcpy</span></div>
-<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;<span class="preprocessor">#define memset8 memset</span></div>
-<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;</div>
-<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;</div>
-<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;<span class="comment">// linear interpolation, such as could be used for Perlin noise, etc.</span></div>
-<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;</div>
-<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;<span class="comment">// A note on the structure of the lerp functions:</span></div>
-<div class="line"><a name="l01481"></a><span class="lineno"> 1481</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="l01482"></a><span class="lineno"> 1482</span>&#160;<span class="comment">// speed: without knowing the relative order of a and b,</span></div>
-<div class="line"><a name="l01483"></a><span class="lineno"> 1483</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="l01484"></a><span class="lineno"> 1484</span>&#160;<span class="comment">// and have to be promoted to a wider, slower type.</span></div>
-<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;<span class="comment">// To avoid that, we separate the two cases, and are able</span></div>
-<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;<span class="comment">// to do all the math in the same width as the arguments,</span></div>
-<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;<span class="comment">// which is much faster and smaller on AVR.</span></div>
-<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;</div>
-<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;<span class="comment">// linear interpolation between two unsigned 8-bit values,</span></div>
-<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;<span class="comment">// with 8-bit fraction</span></div>
-<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;LIB8STATIC uint8_t lerp8by8( uint8_t a, uint8_t b, fract8 frac)</div>
-<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;{</div>
-<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; uint8_t result;</div>
-<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; <span class="keywordflow">if</span>( b &gt; a) {</div>
-<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; uint8_t delta = b - a;</div>
-<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; uint8_t scaled = scale8( delta, frac);</div>
-<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; result = a + scaled;</div>
-<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; uint8_t delta = a - b;</div>
-<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; uint8_t scaled = scale8( delta, frac);</div>
-<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; result = a - scaled;</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; <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;}</div>
-<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;</div>
-<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;<span class="comment">// linear interpolation between two unsigned 16-bit values,</span></div>
-<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;<span class="comment">// with 16-bit fraction</span></div>
-<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;LIB8STATIC uint16_t lerp16by16( uint16_t a, uint16_t b, fract16 frac)</div>
-<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;{</div>
-<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; uint16_t result;</div>
-<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <span class="keywordflow">if</span>( b &gt; a ) {</div>
-<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; uint16_t delta = b - a;</div>
-<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; uint32_t scaled = scale16(delta, frac);</div>
-<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; result = a + scaled;</div>
-<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; uint16_t delta = a - b;</div>
-<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; uint16_t scaled = scale16( delta, frac);</div>
-<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; result = a - scaled;</div>
-<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; }</div>
-<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;}</div>
-<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;</div>
-<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;<span class="comment">// linear interpolation between two unsigned 16-bit values,</span></div>
-<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;<span class="comment">// with 8-bit fraction</span></div>
-<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;LIB8STATIC uint16_t lerp16by8( uint16_t a, uint16_t b, fract8 frac)</div>
-<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;{</div>
-<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; uint16_t result;</div>
-<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; <span class="keywordflow">if</span>( b &gt; a) {</div>
-<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; uint16_t delta = b - a;</div>
-<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; uint16_t scaled = scale16by8( delta, frac);</div>
-<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; result = a + scaled;</div>
-<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; uint16_t delta = a - b;</div>
-<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; uint16_t scaled = scale16by8( delta, frac);</div>
-<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; result = a - scaled;</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; <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;}</div>
-<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;</div>
-<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;<span class="comment">// linear interpolation between two signed 15-bit values,</span></div>
-<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;<span class="comment">// with 8-bit fraction</span></div>
-<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;LIB8STATIC int16_t lerp15by8( int16_t a, int16_t b, fract8 frac)</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; int16_t result;</div>
-<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <span class="keywordflow">if</span>( b &gt; a) {</div>
-<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; uint16_t delta = b - a;</div>
-<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; uint16_t scaled = scale16by8( delta, frac);</div>
-<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; result = a + scaled;</div>
-<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; uint16_t delta = a - b;</div>
-<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; uint16_t scaled = scale16by8( delta, frac);</div>
-<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; result = a - scaled;</div>
-<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; }</div>
-<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;}</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="comment">// linear interpolation between two signed 15-bit values,</span></div>
-<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;<span class="comment">// with 8-bit fraction</span></div>
-<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;LIB8STATIC int16_t lerp15by16( int16_t a, int16_t b, fract16 frac)</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; int16_t result;</div>
-<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; <span class="keywordflow">if</span>( b &gt; a) {</div>
-<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; uint16_t delta = b - a;</div>
-<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; uint16_t scaled = scale16( delta, frac);</div>
-<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; result = a + scaled;</div>
-<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; uint16_t delta = a - b;</div>
-<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; uint16_t scaled = scale16( delta, frac);</div>
-<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; result = a - scaled;</div>
-<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; }</div>
-<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;}</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;<span class="comment">// map8: map from one full-range 8-bit value into a narrower</span></div>
-<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;<span class="comment">// range of 8-bit values, possibly a range of hues.</span></div>
-<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01577"></a><span class="lineno"> 1577</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="l01578"></a><span class="lineno"> 1578</span>&#160;<span class="comment">// hue = map8( myValue, HUE_BLUE, HUE_RED);</span></div>
-<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;<span class="comment">// Combines nicely with the waveform functions (like sin8, etc)</span></div>
-<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;<span class="comment">// to produce continuous hue gradients back and forth:</span></div>
-<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;<span class="comment">// hue = map8( sin8( myValue), HUE_BLUE, HUE_RED);</span></div>
-<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;<span class="comment">// Mathematically simiar to lerp8by8, but arguments are more</span></div>
-<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;<span class="comment">// like Arduino&#39;s &quot;map&quot;; this function is similar to</span></div>
-<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;<span class="comment">// map( in, 0, 255, rangeStart, rangeEnd)</span></div>
-<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;<span class="comment">// but faster and specifically designed for 8-bit values.</span></div>
-<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;LIB8STATIC uint8_t map8( uint8_t in, uint8_t rangeStart, uint8_t rangeEnd)</div>
-<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;{</div>
-<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; uint8_t rangeWidth = rangeEnd - rangeStart;</div>
-<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; uint8_t out = scale8( in, rangeWidth);</div>
-<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; out += rangeStart;</div>
-<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; <span class="keywordflow">return</span> out;</div>
-<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;}</div>
-<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;</div>
-<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;</div>
-<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;<span class="comment">// easing functions; see http://easings.net</span></div>
-<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;</div>
-<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;<span class="comment">// ease8InOutQuad: 8-bit quadratic ease-in / ease-out function</span></div>
-<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;<span class="comment">// Takes around 13 cycles on AVR</span></div>
-<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;LIB8STATIC uint8_t ease8InOutQuad( uint8_t i)</div>
-<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;{</div>
-<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; uint8_t j = i;</div>
-<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; <span class="keywordflow">if</span>( j &amp; 0x80 ) {</div>
-<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; j = 255 - j;</div>
-<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; }</div>
-<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; uint8_t jj = scale8( j, (j+1));</div>
-<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; uint8_t jj2 = jj &lt;&lt; 1;</div>
-<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <span class="keywordflow">if</span>( i &amp; 0x80 ) {</div>
-<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; jj2 = 255 - jj2;</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="keywordflow">return</span> jj2;</div>
-<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;}</div>
-<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;</div>
-<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;</div>
-<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;<span class="comment">// ease8InOutCubic: 8-bit cubic ease-in / ease-out function</span></div>
-<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;<span class="comment">// Takes around 18 cycles on AVR</span></div>
-<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;LIB8STATIC fract8 ease8InOutCubic( fract8 i)</div>
-<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;{</div>
-<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; uint8_t ii = scale8_LEAVING_R1_DIRTY( i, i);</div>
-<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; uint8_t iii = scale8_LEAVING_R1_DIRTY( ii, i);</div>
-<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;</div>
-<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; uint16_t r1 = (3 * (uint16_t)(ii)) - ( 2 * (uint16_t)(iii));</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">/* the code generated for the above *&#39;s automatically</span></div>
-<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;<span class="comment"> cleans up R1, so there&#39;s no need to explicitily call</span></div>
-<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;<span class="comment"> cleanup_R1(); */</span></div>
-<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;</div>
-<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; uint8_t result = r1;</div>
-<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;</div>
-<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; <span class="comment">// if we got &quot;256&quot;, return 255:</span></div>
-<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; <span class="keywordflow">if</span>( r1 &amp; 0x100 ) {</div>
-<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; result = 255;</div>
-<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; }</div>
-<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;}</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="comment">// ease8InOutApprox: fast, rough 8-bit ease-in/ease-out function</span></div>
-<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;<span class="comment">// shaped approximately like &#39;ease8InOutCubic&#39;,</span></div>
-<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;<span class="comment">// it&#39;s never off by more than a couple of percent</span></div>
-<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;<span class="comment">// from the actual cubic S-curve, and it executes</span></div>
-<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;<span class="comment">// more than twice as fast. Use when the cycles</span></div>
-<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;<span class="comment">// are more important than visual smoothness.</span></div>
-<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;<span class="comment">// Asm version takes around 7 cycles on AVR.</span></div>
-<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;</div>
-<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;<span class="preprocessor">#if EASE8_C == 1</span></div>
-<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;LIB8STATIC fract8 ease8InOutApprox( fract8 i)</div>
-<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;{</div>
-<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="keywordflow">if</span>( i &lt; 64) {</div>
-<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; <span class="comment">// start with slope 0.5</span></div>
-<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; i /= 2;</div>
-<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( i &gt; (255 - 64)) {</div>
-<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; <span class="comment">// end with slope 0.5</span></div>
-<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; i = 255 - i;</div>
-<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; i /= 2;</div>
-<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; i = 255 - i;</div>
-<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <span class="comment">// in the middle, use slope 192/128 = 1.5</span></div>
-<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; i -= 64;</div>
-<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; i += (i / 2);</div>
-<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; i += 32;</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="keywordflow">return</span> i;</div>
-<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;}</div>
-<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;</div>
-<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;<span class="preprocessor">#elif EASE8_AVRASM == 1</span></div>
-<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;LIB8STATIC uint8_t ease8InOutApprox( fract8 i)</div>
-<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160;{</div>
-<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; <span class="comment">// takes around 7 cycles on AVR</span></div>
-<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span> (</div>
-<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; <span class="stringliteral">&quot; subi %[i], 64 \n\t&quot;</span></div>
-<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; <span class="stringliteral">&quot; cpi %[i], 128 \n\t&quot;</span></div>
-<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; <span class="stringliteral">&quot; brcc Lshift_%= \n\t&quot;</span></div>
-<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;</div>
-<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; <span class="comment">// middle case</span></div>
-<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; <span class="stringliteral">&quot; mov __tmp_reg__, %[i] \n\t&quot;</span></div>
-<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; <span class="stringliteral">&quot; lsr __tmp_reg__ \n\t&quot;</span></div>
-<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; <span class="stringliteral">&quot; add %[i], __tmp_reg__ \n\t&quot;</span></div>
-<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; <span class="stringliteral">&quot; subi %[i], 224 \n\t&quot;</span></div>
-<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; <span class="stringliteral">&quot; rjmp Ldone_%= \n\t&quot;</span></div>
-<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;</div>
-<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <span class="comment">// start or end case</span></div>
-<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; <span class="stringliteral">&quot;Lshift_%=: \n\t&quot;</span></div>
-<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; <span class="stringliteral">&quot; lsr %[i] \n\t&quot;</span></div>
-<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <span class="stringliteral">&quot; subi %[i], 96 \n\t&quot;</span></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; <span class="stringliteral">&quot;Ldone_%=: \n\t&quot;</span></div>
-<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;</div>
-<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; : [i] <span class="stringliteral">&quot;+a&quot;</span> (i)</div>
-<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; :</div>
-<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; : <span class="stringliteral">&quot;r0&quot;</span>, <span class="stringliteral">&quot;r1&quot;</span></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">return</span> i;</div>
-<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;}</div>
-<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;<span class="preprocessor">#error &quot;No implementation for ease8 available.&quot;</span></div>
-<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;</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;</div>
-<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;<span class="comment">// triwave8: triangle (sawtooth) wave generator. Useful for</span></div>
-<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;<span class="comment">// turning a one-byte ever-increasing value into a</span></div>
-<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;<span class="comment">// one-byte value that oscillates up and down.</span></div>
-<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;<span class="comment">// input output</span></div>
-<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;<span class="comment">// 0..127 0..254 (positive slope)</span></div>
-<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;<span class="comment">// 128..255 254..0 (negative slope)</span></div>
-<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;<span class="comment">// On AVR this function takes just three cycles.</span></div>
-<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;LIB8STATIC uint8_t triwave8(uint8_t in)</div>
-<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;{</div>
-<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; <span class="keywordflow">if</span>( in &amp; 0x80) {</div>
-<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; in = 255 - in;</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; uint8_t out = in &lt;&lt; 1;</div>
-<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; <span class="keywordflow">return</span> out;</div>
-<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;}</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;<span class="comment">// quadwave8 and cubicwave8: S-shaped wave generators (like &#39;sine&#39;).</span></div>
-<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;<span class="comment">// Useful for turning a one-byte &#39;counter&#39; value into a</span></div>
-<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;<span class="comment">// one-byte oscillating value that moves smoothly up and down,</span></div>
-<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;<span class="comment">// with an &#39;acceleration&#39; and &#39;deceleration&#39; curve.</span></div>
-<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;<span class="comment">// These are even faster than &#39;sin8&#39;, and have</span></div>
-<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;<span class="comment">// slightly different curve shapes.</span></div>
-<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;</div>
-<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;<span class="comment">// quadwave8: quadratic waveform generator. Spends just a little more</span></div>
-<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;<span class="comment">// time at the limits than &#39;sine&#39; does.</span></div>
-<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;LIB8STATIC uint8_t quadwave8(uint8_t in)</div>
-<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;{</div>
-<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; <span class="keywordflow">return</span> ease8InOutQuad( triwave8( in));</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="comment">// cubicwave8: cubic waveform generator. Spends visibly more time</span></div>
-<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;<span class="comment">// at the limits than &#39;sine&#39; does.</span></div>
-<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;LIB8STATIC uint8_t cubicwave8(uint8_t in)</div>
-<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;{</div>
-<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; <span class="keywordflow">return</span> ease8InOutCubic( triwave8( in));</div>
-<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;}</div>
-<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;</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;</div>
-<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;<span class="comment">// sqrt16: square root for 16-bit integers</span></div>
-<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;<span class="comment">// About three times faster and five times smaller</span></div>
-<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;<span class="comment">// than Arduino&#39;s general sqrt on AVR.</span></div>
-<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;LIB8STATIC uint8_t sqrt16(uint16_t x)</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; <span class="keywordflow">if</span>( x &lt;= 1) {</div>
-<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; <span class="keywordflow">return</span> x;</div>
-<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; }</div>
-<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;</div>
-<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; uint8_t low = 1; <span class="comment">// lower bound</span></div>
-<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; uint8_t hi, mid;</div>
-<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;</div>
-<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; <span class="keywordflow">if</span>( x &gt; 7904) {</div>
-<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; hi = 255;</div>
-<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; hi = (x &gt;&gt; 5) + 8; <span class="comment">// initial estimate for upper bound</span></div>
-<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; }</div>
-<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;</div>
-<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; <span class="keywordflow">do</span> {</div>
-<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; mid = (low + hi) &gt;&gt; 1;</div>
-<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; <span class="keywordflow">if</span> ((uint16_t)(mid * mid) &gt; x) {</div>
-<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; hi = mid - 1;</div>
-<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; <span class="keywordflow">if</span>( mid == 255) {</div>
-<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; <span class="keywordflow">return</span> 255;</div>
-<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160; }</div>
-<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160; low = mid + 1;</div>
-<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; }</div>
-<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160; } <span class="keywordflow">while</span> (hi &gt;= low);</div>
-<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;</div>
-<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; <span class="keywordflow">return</span> low - 1;</div>
-<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;}</div>
-<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;</div>
-<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;</div>
-<div class="line"><a name="l01784"></a><span class="lineno"><a class="line" href="classq.html"> 1784</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="l01785"></a><span class="lineno"> 1785</span>&#160; T i:I;</div>
-<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160; T f:F;</div>
-<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l01788"></a><span class="lineno"> 1788</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="l01789"></a><span class="lineno"> 1789</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="l01790"></a><span class="lineno"> 1790</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="l01791"></a><span class="lineno"> 1791</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="l01792"></a><span class="lineno"> 1792</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="l01793"></a><span class="lineno"> 1793</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="l01794"></a><span class="lineno"> 1794</span>&#160;<span class="preprocessor">#ifdef FASTLED_ARM</span></div>
-<div class="line"><a name="l01795"></a><span class="lineno"> 1795</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="l01796"></a><span class="lineno"> 1796</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;};</div>
-<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;</div>
-<div class="line"><a name="l01799"></a><span class="lineno"> 1799</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="l01800"></a><span class="lineno"> 1800</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="l01801"></a><span class="lineno"> 1801</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="l01802"></a><span class="lineno"> 1802</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="l01803"></a><span class="lineno"> 1803</span>&#160;<span class="preprocessor">#ifdef FASTLED_ARM</span></div>
-<div class="line"><a name="l01804"></a><span class="lineno"> 1804</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="l01805"></a><span class="lineno"> 1805</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;</div>
-<div class="line"><a name="l01807"></a><span class="lineno"> 1807</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="l01808"></a><span class="lineno"> 1808</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="l01809"></a><span class="lineno"> 1809</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="l01810"></a><span class="lineno"> 1810</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="l01811"></a><span class="lineno"> 1811</span>&#160;</div>
-<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;</div>
-<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;</div>
-<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;<span class="comment">// Beat generators - These functions produce waves at a given</span></div>
-<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;<span class="comment">// number of &#39;beats per minute&#39;. Internally, they use</span></div>
-<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;<span class="comment">// the Arduino function &#39;millis&#39; to track elapsed time.</span></div>
-<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;<span class="comment">// Accuracy is a bit better than one part in a thousand.</span></div>
-<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01819"></a><span class="lineno"> 1819</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="l01820"></a><span class="lineno"> 1820</span>&#160;<span class="comment">// per minute, rising from 0 to 255, resetting to zero,</span></div>
-<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;<span class="comment">// rising up again, etc.. The output of this function</span></div>
-<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;<span class="comment">// is suitable for feeding directly into sin8, and cos8,</span></div>
-<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;<span class="comment">// triwave8, quadwave8, and cubicwave8.</span></div>
-<div class="line"><a name="l01824"></a><span class="lineno"> 1824</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="l01825"></a><span class="lineno"> 1825</span>&#160;<span class="comment">// per minute, rising from 0 to 65535, resetting to zero,</span></div>
-<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;<span class="comment">// rising up again, etc. The output of this function is</span></div>
-<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;<span class="comment">// suitable for feeding directly into sin16 and cos16.</span></div>
-<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;<span class="comment">// beat88( BPM88) is the same as beat16, except that the BPM88 argument</span></div>
-<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;<span class="comment">// MUST be in Q8.8 fixed point format, e.g. 120BPM must</span></div>
-<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;<span class="comment">// be specified as 120*256 = 30720.</span></div>
-<div class="line"><a name="l01831"></a><span class="lineno"> 1831</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="l01832"></a><span class="lineno"> 1832</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="l01833"></a><span class="lineno"> 1833</span>&#160;<span class="comment">// between the values of &#39;low&#39; and &#39;high&#39;.</span></div>
-<div class="line"><a name="l01834"></a><span class="lineno"> 1834</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="l01835"></a><span class="lineno"> 1835</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="l01836"></a><span class="lineno"> 1836</span>&#160;<span class="comment">// minute, between the values of &#39;low&#39; and &#39;high&#39;.</span></div>
-<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;<span class="comment">// beatsin88( BPM88, ...) is the same as beatsin16, except that the</span></div>
-<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;<span class="comment">// BPM88 argument MUST be in Q8.8 fixed point format,</span></div>
-<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;<span class="comment">// e.g. 120BPM must be specified as 120*256 = 30720.</span></div>
-<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01841"></a><span class="lineno"> 1841</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="l01842"></a><span class="lineno"> 1842</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="l01843"></a><span class="lineno"> 1843</span>&#160;<span class="comment">// The more sophisticated way of specifying BPM allows for fractional</span></div>
-<div class="line"><a name="l01844"></a><span class="lineno"> 1844</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="l01845"></a><span class="lineno"> 1845</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="l01846"></a><span class="lineno"> 1846</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="l01847"></a><span class="lineno"> 1847</span>&#160;<span class="comment">// in this case), and pass that as the 16-bit BPM argument.</span></div>
-<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;<span class="comment">// &quot;BPM88&quot; MUST always be specified in Q8.8 format.</span></div>
-<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;<span class="comment">// Originally designed to make an entire animation project pulse with brightness.</span></div>
-<div class="line"><a name="l01851"></a><span class="lineno"> 1851</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="l01852"></a><span class="lineno"> 1852</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;<span class="comment">// uint8_t bright = beatsin8( 60 /*BPM*/, 192 /*dimmest*/, 255 /*brightest*/ ));</span></div>
-<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;<span class="comment">// FastLED.setBrightness( bright );</span></div>
-<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;<span class="comment">// FastLED.show();</span></div>
-<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l01857"></a><span class="lineno"> 1857</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="l01858"></a><span class="lineno"> 1858</span>&#160;</div>
-<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;</div>
-<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;<span class="comment">// The beat generators need access to a millisecond counter.</span></div>
-<div class="line"><a name="l01861"></a><span class="lineno"> 1861</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="l01862"></a><span class="lineno"> 1862</span>&#160;<span class="comment">// need to provide a function with this signature:</span></div>
-<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;<span class="comment">// uint32_t get_millisecond_timer();</span></div>
-<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;<span class="comment">// that provides similar functionality.</span></div>
-<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160;<span class="comment">// You can also force use of the get_millisecond_timer function</span></div>
-<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;<span class="comment">// by #defining USE_GET_MILLISECOND_TIMER.</span></div>
-<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;<span class="preprocessor">#if defined(ARDUINO) &amp;&amp; !defined(USE_GET_MILLISECOND_TIMER)</span></div>
-<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;<span class="comment">// Forward declaration of Arduino function &#39;millis&#39;.</span></div>
-<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160;uint32_t millis();</div>
-<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;<span class="preprocessor">#define GET_MILLIS millis</span></div>
-<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;uint32_t get_millisecond_timer();</div>
-<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;<span class="preprocessor">#define GET_MILLIS get_millisecond_timer</span></div>
-<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;</div>
-<div class="line"><a name="l01876"></a><span class="lineno"> 1876</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="l01877"></a><span class="lineno"> 1877</span>&#160;<span class="comment">// with BPM specified in Q8.8 fixed-point format; e.g.</span></div>
-<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160;<span class="comment">// for this function, 120 BPM MUST BE specified as</span></div>
-<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;<span class="comment">// 120*256 = 30720.</span></div>
-<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;<span class="comment">// If you just want to specify &quot;120&quot;, use beat16 or beat8.</span></div>
-<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;LIB8STATIC uint16_t beat88( accum88 beats_per_minute_88, uint32_t timebase = 0)</div>
-<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;{</div>
-<div class="line"><a name="l01883"></a><span class="lineno"> 1883</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="l01884"></a><span class="lineno"> 1884</span>&#160; <span class="comment">// To avoid using the (slower) division operator, we</span></div>
-<div class="line"><a name="l01885"></a><span class="lineno"> 1885</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="l01886"></a><span class="lineno"> 1886</span>&#160; <span class="comment">// and then use a simple, fast bit-shift to divide by 65536.</span></div>
-<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160; <span class="comment">//</span></div>
-<div class="line"><a name="l01888"></a><span class="lineno"> 1888</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="l01889"></a><span class="lineno"> 1889</span>&#160; <span class="comment">// The conversion is accurate to about 0.05%, more or less,</span></div>
-<div class="line"><a name="l01890"></a><span class="lineno"> 1890</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="l01891"></a><span class="lineno"> 1891</span>&#160; <span class="keywordflow">return</span> (((GET_MILLIS()) - timebase) * beats_per_minute_88 * 280) &gt;&gt; 16;</div>
-<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;}</div>
-<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160;</div>
-<div class="line"><a name="l01894"></a><span class="lineno"> 1894</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="l01895"></a><span class="lineno"> 1895</span>&#160;LIB8STATIC uint16_t beat16( accum88 beats_per_minute, uint32_t timebase = 0)</div>
-<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;{</div>
-<div class="line"><a name="l01897"></a><span class="lineno"> 1897</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="l01898"></a><span class="lineno"> 1898</span>&#160; <span class="keywordflow">if</span>( beats_per_minute &lt; 256) beats_per_minute &lt;&lt;= 8;</div>
-<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; <span class="keywordflow">return</span> beat88(beats_per_minute, timebase);</div>
-<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;}</div>
-<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;</div>
-<div class="line"><a name="l01902"></a><span class="lineno"> 1902</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="l01903"></a><span class="lineno"> 1903</span>&#160;LIB8STATIC uint8_t beat8( accum88 beats_per_minute, uint32_t timebase = 0)</div>
-<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;{</div>
-<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; <span class="keywordflow">return</span> beat16( beats_per_minute, timebase) &gt;&gt; 8;</div>
-<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;}</div>
-<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;</div>
-<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;<span class="comment">// beatsin88 generates a 16-bit sine wave at a given BPM,</span></div>
-<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;<span class="comment">// that oscillates within a given range.</span></div>
-<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;<span class="comment">// For this function, BPM MUST BE SPECIFIED as</span></div>
-<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;<span class="comment">// a Q8.8 fixed-point value; e.g. 120BPM must be</span></div>
-<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;<span class="comment">// specified as 120*256 = 30720.</span></div>
-<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;<span class="comment">// If you just want to specify &quot;120&quot;, use beatsin16 or beatsin8.</span></div>
-<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;LIB8STATIC uint16_t beatsin88( accum88 beats_per_minute_88, uint16_t lowest = 0, uint16_t highest = 65535,</div>
-<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; uint32_t timebase = 0, uint16_t phase_offset = 0)</div>
-<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;{</div>
-<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; uint16_t beat = beat88( beats_per_minute_88, timebase);</div>
-<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; uint16_t beatsin = (sin16( beat + phase_offset) + 32768);</div>
-<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160; uint16_t rangewidth = highest - lowest;</div>
-<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; uint16_t scaledbeat = scale16( beatsin, rangewidth);</div>
-<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; uint16_t result = lowest + scaledbeat;</div>
-<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;}</div>
-<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;</div>
-<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160;<span class="comment">// beatsin16 generates a 16-bit sine wave at a given BPM,</span></div>
-<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;<span class="comment">// that oscillates within a given range.</span></div>
-<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;LIB8STATIC uint16_t beatsin16( accum88 beats_per_minute, uint16_t lowest = 0, uint16_t highest = 65535,</div>
-<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; uint32_t timebase = 0, uint16_t phase_offset = 0)</div>
-<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;{</div>
-<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; uint16_t beat = beat16( beats_per_minute, timebase);</div>
-<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; uint16_t beatsin = (sin16( beat + phase_offset) + 32768);</div>
-<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160; uint16_t rangewidth = highest - lowest;</div>
-<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; uint16_t scaledbeat = scale16( beatsin, rangewidth);</div>
-<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; uint16_t result = lowest + scaledbeat;</div>
-<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160; <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;}</div>
-<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;</div>
-<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;<span class="comment">// beatsin8 generates an 8-bit sine wave at a given BPM,</span></div>
-<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;<span class="comment">// that oscillates within a given range.</span></div>
-<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;LIB8STATIC uint8_t beatsin8( accum88 beats_per_minute, uint8_t lowest = 0, uint8_t highest = 255,</div>
-<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; uint32_t timebase = 0, uint8_t phase_offset = 0)</div>
-<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;{</div>
-<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; uint8_t beat = beat8( beats_per_minute, timebase);</div>
-<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; uint8_t beatsin = sin8( beat + phase_offset);</div>
-<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; uint8_t rangewidth = highest - lowest;</div>
-<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; uint8_t scaledbeat = scale8( beatsin, rangewidth);</div>
-<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160; uint8_t result = lowest + scaledbeat;</div>
-<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;}</div>
-<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;</div>
-<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;</div>
-<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160;<span class="comment">// seconds16, minutes16, hours8</span></div>
-<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160;<span class="comment">// functions to return the current seconds, minutes, or hours</span></div>
-<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160;<span class="comment">// since boot time, in the specified width. Used as part of</span></div>
-<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;<span class="comment">// the &quot;every N time-periods&quot; mechanism.</span></div>
-<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;</div>
-<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;LIB8STATIC uint16_t seconds16()</div>
-<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;{</div>
-<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160; uint32_t ms = GET_MILLIS();</div>
-<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; uint16_t s16;</div>
-<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; s16 = ms / 1000;</div>
-<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; <span class="keywordflow">return</span> s16;</div>
-<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;}</div>
-<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;</div>
-<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;LIB8STATIC uint16_t minutes16()</div>
-<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;{</div>
-<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; uint32_t ms = GET_MILLIS();</div>
-<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160; uint16_t m16;</div>
-<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160; m16 = (ms / (60000L)) &amp; 0xFFFF;</div>
-<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160; <span class="keywordflow">return</span> m16;</div>
-<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;}</div>
-<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;</div>
-<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;LIB8STATIC uint8_t hours8()</div>
-<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;{</div>
-<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160; uint32_t ms = GET_MILLIS();</div>
-<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160; uint8_t h8;</div>
-<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; h8 = (ms / (3600000L)) &amp; 0xFF;</div>
-<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; <span class="keywordflow">return</span> h8;</div>
-<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;}</div>
-<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;</div>
-<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160;</div>
-<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;<span class="comment">// Helper routine to divide a 32-bit value by 1024, returning</span></div>
-<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160;<span class="comment">// only the low 16 bits. You&#39;d think this would be just</span></div>
-<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;<span class="comment">// result = (in32 &gt;&gt; 10) &amp; 0xFFFF;</span></div>
-<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;<span class="comment">// and on ARM, that&#39;s what you want and all is well.</span></div>
-<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160;<span class="comment">// But on AVR that code turns into a loop that executes</span></div>
-<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160;<span class="comment">// a four-byte shift ten times: 40 shifts in all, plus loop</span></div>
-<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;<span class="comment">// overhead. This routine gets exactly the same result with</span></div>
-<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160;<span class="comment">// just six shifts (vs 40), and no loop overhead.</span></div>
-<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160;<span class="comment">// Used to convert millis to &#39;binary seconds&#39; aka bseconds:</span></div>
-<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;<span class="comment">// one bsecond == 1024 millis.</span></div>
-<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;LIB8STATIC uint16_t div1024_32_16( uint32_t in32)</div>
-<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;{</div>
-<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; uint16_t out16;</div>
-<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;<span class="preprocessor">#if defined(__AVR__)</span></div>
-<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; <span class="keyword">asm</span> <span class="keyword">volatile</span> (</div>
-<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; <span class="stringliteral">&quot; lsr %D[in] \n\t&quot;</span></div>
-<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; <span class="stringliteral">&quot; ror %C[in] \n\t&quot;</span></div>
-<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; <span class="stringliteral">&quot; ror %B[in] \n\t&quot;</span></div>
-<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; <span class="stringliteral">&quot; lsr %D[in] \n\t&quot;</span></div>
-<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; <span class="stringliteral">&quot; ror %C[in] \n\t&quot;</span></div>
-<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; <span class="stringliteral">&quot; ror %B[in] \n\t&quot;</span></div>
-<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; <span class="stringliteral">&quot; mov %B[out],%C[in] \n\t&quot;</span></div>
-<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <span class="stringliteral">&quot; mov %A[out],%B[in] \n\t&quot;</span></div>
-<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; : [in] <span class="stringliteral">&quot;+r&quot;</span> (in32),</div>
-<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; [out] <span class="stringliteral">&quot;=r&quot;</span> (out16)</div>
-<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; );</div>
-<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; out16 = (in32 &gt;&gt; 10) &amp; 0xFFFF;</div>
-<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; <span class="keywordflow">return</span> out16;</div>
-<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;}</div>
-<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;</div>
-<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;<span class="comment">// bseconds16 returns the current time-since-boot in</span></div>
-<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;<span class="comment">// &quot;binary seconds&quot;, which are actually 1024/1000 of a</span></div>
-<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160;<span class="comment">// second long.</span></div>
-<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;LIB8STATIC uint16_t bseconds16()</div>
-<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;{</div>
-<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; uint32_t ms = GET_MILLIS();</div>
-<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; uint16_t s16;</div>
-<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; s16 = div1024_32_16( ms);</div>
-<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; <span class="keywordflow">return</span> s16;</div>
-<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;}</div>
-<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;</div>
-<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;</div>
-<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;<span class="comment">// Classes to implement &quot;Every N Milliseconds&quot;, &quot;Every N Seconds&quot;,</span></div>
-<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;<span class="comment">// &quot;Every N Minutes&quot;, &quot;Every N Hours&quot;, and &quot;Every N BSeconds&quot;.</span></div>
-<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;<span class="preprocessor">#if 1</span></div>
-<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;<span class="preprocessor">#define INSTANTIATE_EVERY_N_TIME_PERIODS(NAME,TIMETYPE,TIMEGETTER) \</span></div>
-<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;<span class="preprocessor">class NAME { \</span></div>
-<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;<span class="preprocessor">public: \</span></div>
-<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;<span class="preprocessor"> TIMETYPE mPrevTrigger; \</span></div>
-<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;<span class="preprocessor"> TIMETYPE mPeriod; \</span></div>
-<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;<span class="preprocessor"> \</span></div>
-<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;<span class="preprocessor"> NAME() { reset(); mPeriod = 1; }; \</span></div>
-<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;<span class="preprocessor"> NAME(TIMETYPE period) { reset(); setPeriod(period); }; \</span></div>
-<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;<span class="preprocessor"> void setPeriod( TIMETYPE period) { mPeriod = period; }; \</span></div>
-<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;<span class="preprocessor"> TIMETYPE getTime() { return (TIMETYPE)(TIMEGETTER()); }; \</span></div>
-<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;<span class="preprocessor"> TIMETYPE getPeriod() { return mPeriod; }; \</span></div>
-<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;<span class="preprocessor"> TIMETYPE getElapsed() { return getTime() - mPrevTrigger; } \</span></div>
-<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;<span class="preprocessor"> TIMETYPE getRemaining() { return mPeriod - getElapsed(); } \</span></div>
-<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;<span class="preprocessor"> TIMETYPE getLastTriggerTime() { return mPrevTrigger; } \</span></div>
-<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;<span class="preprocessor"> bool ready() { \</span></div>
-<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;<span class="preprocessor"> bool isReady = (getElapsed() &gt;= mPeriod); \</span></div>
-<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;<span class="preprocessor"> if( isReady ) { reset(); } \</span></div>
-<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;<span class="preprocessor"> return isReady; \</span></div>
-<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;<span class="preprocessor"> } \</span></div>
-<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;<span class="preprocessor"> void reset() { mPrevTrigger = getTime(); }; \</span></div>
-<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;<span class="preprocessor"> void trigger() { mPrevTrigger = getTime() - mPeriod; }; \</span></div>
-<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;<span class="preprocessor"> \</span></div>
-<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;<span class="preprocessor"> operator bool() { return ready(); } \</span></div>
-<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;<span class="preprocessor">};</span></div>
-<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;INSTANTIATE_EVERY_N_TIME_PERIODS(<a class="code" href="class_c_every_n_time_periods.html">CEveryNMillis</a>,uint32_t,GET_MILLIS);</div>
-<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;INSTANTIATE_EVERY_N_TIME_PERIODS(<a class="code" href="class_c_every_n_time_periods.html">CEveryNSeconds</a>,uint16_t,seconds16);</div>
-<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;INSTANTIATE_EVERY_N_TIME_PERIODS(<a class="code" href="class_c_every_n_time_periods.html">CEveryNBSeconds</a>,uint16_t,bseconds16);</div>
-<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;INSTANTIATE_EVERY_N_TIME_PERIODS(<a class="code" href="class_c_every_n_time_periods.html">CEveryNMinutes</a>,uint16_t,minutes16);</div>
-<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;INSTANTIATE_EVERY_N_TIME_PERIODS(<a class="code" href="class_c_every_n_time_periods.html">CEveryNHours</a>,uint8_t,hours8);</div>
-<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;</div>
-<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;<span class="comment">// Under C++11 rules, we would be allowed to use not-external</span></div>
-<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;<span class="comment">// -linkage-type symbols as template arguments,</span></div>
-<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;<span class="comment">// e.g., LIB8STATIC seconds16, and we&#39;d be able to use these</span></div>
-<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;<span class="comment">// templates as shown below.</span></div>
-<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;<span class="comment">// However, under C++03 rules, we cannot do that, and thus we</span></div>
-<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;<span class="comment">// have to resort to the preprocessor to &#39;instantiate&#39; &#39;templates&#39;,</span></div>
-<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;<span class="comment">// as handled above.</span></div>
-<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> timeType,timeType (*timeGetter)()&gt;</div>
-<div class="line"><a name="l02068"></a><span class="lineno"><a class="line" href="class_c_every_n_time_periods.html"> 2068</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a> {</div>
-<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; timeType mPrevTrigger;</div>
-<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; timeType mPeriod;</div>
-<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; </div>
-<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a>() { reset(); mPeriod = 1; };</div>
-<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a>(timeType period) { reset(); setPeriod(period); };</div>
-<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; <span class="keywordtype">void</span> setPeriod( timeType period) { mPeriod = period; };</div>
-<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; timeType getTime() { <span class="keywordflow">return</span> (timeType)(timeGetter()); };</div>
-<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; timeType getPeriod() { <span class="keywordflow">return</span> mPeriod; };</div>
-<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; timeType getElapsed() { <span class="keywordflow">return</span> getTime() - mPrevTrigger; }</div>
-<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; timeType getRemaining() { <span class="keywordflow">return</span> mPeriod - getElapsed(); }</div>
-<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; timeType getLastTriggerTime() { <span class="keywordflow">return</span> mPrevTrigger; }</div>
-<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; <span class="keywordtype">bool</span> ready() {</div>
-<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; <span class="keywordtype">bool</span> isReady = (getElapsed() &gt;= mPeriod);</div>
-<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; <span class="keywordflow">if</span>( isReady ) { reset(); }</div>
-<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; <span class="keywordflow">return</span> isReady;</div>
-<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; }</div>
-<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; <span class="keywordtype">void</span> reset() { mPrevTrigger = getTime(); };</div>
-<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; <span class="keywordtype">void</span> trigger() { mPrevTrigger = getTime() - mPeriod; };</div>
-<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; </div>
-<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; <span class="keyword">operator</span> bool() { <span class="keywordflow">return</span> ready(); }</div>
-<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;};</div>
-<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;<span class="keyword">typedef</span> <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods&lt;uint16_t,seconds16&gt;</a> <a class="code" href="class_c_every_n_time_periods.html">CEveryNSeconds</a>;</div>
-<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;<span class="keyword">typedef</span> <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods&lt;uint16_t,bseconds16&gt;</a> <a class="code" href="class_c_every_n_time_periods.html">CEveryNBSeconds</a>;</div>
-<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;<span class="keyword">typedef</span> <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods&lt;uint32_t,millis&gt;</a> <a class="code" href="class_c_every_n_time_periods.html">CEveryNMillis</a>;</div>
-<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;<span class="keyword">typedef</span> <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods&lt;uint16_t,minutes16&gt;</a> <a class="code" href="class_c_every_n_time_periods.html">CEveryNMinutes</a>;</div>
-<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;<span class="keyword">typedef</span> <a class="code" href="class_c_every_n_time_periods.html">CEveryNTimePeriods&lt;uint8_t,hours8&gt;</a> <a class="code" href="class_c_every_n_time_periods.html">CEveryNHours</a>;</div>
-<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;</div>
-<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;</div>
-<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;<span class="preprocessor">#define CONCAT_HELPER( x, y ) x##y</span></div>
-<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;<span class="preprocessor">#define CONCAT_MACRO( x, y ) CONCAT_HELPER( x, y )</span></div>
-<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;<span class="preprocessor">#define EVERY_N_MILLIS(N) EVERY_N_MILLIS_I(CONCAT_MACRO(PER, __COUNTER__ ),N)</span></div>
-<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;<span class="preprocessor">#define EVERY_N_MILLIS_I(NAME,N) static CEveryNMillis NAME(N); if( NAME )</span></div>
-<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;<span class="preprocessor">#define EVERY_N_SECONDS(N) EVERY_N_SECONDS_I(CONCAT_MACRO(PER, __COUNTER__ ),N)</span></div>
-<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;<span class="preprocessor">#define EVERY_N_SECONDS_I(NAME,N) static CEveryNSeconds NAME(N); if( NAME )</span></div>
-<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;<span class="preprocessor">#define EVERY_N_BSECONDS(N) EVERY_N_BSECONDS_I(CONCAT_MACRO(PER, __COUNTER__ ),N)</span></div>
-<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;<span class="preprocessor">#define EVERY_N_BSECONDS_I(NAME,N) static CEveryNBSeconds NAME(N); if( NAME )</span></div>
-<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;<span class="preprocessor">#define EVERY_N_MINUTES(N) EVERY_N_MINUTES_I(CONCAT_MACRO(PER, __COUNTER__ ),N)</span></div>
-<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;<span class="preprocessor">#define EVERY_N_MINUTES_I(NAME,N) static CEveryNMinutes NAME(N); if( NAME )</span></div>
-<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;<span class="preprocessor">#define EVERY_N_HOURS(N) EVERY_N_HOURS_I(CONCAT_MACRO(PER, __COUNTER__ ),N)</span></div>
-<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;<span class="preprocessor">#define EVERY_N_HOURS_I(NAME,N) static CEveryNHours NAME(N); if( NAME )</span></div>
-<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;</div>
-<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;<span class="preprocessor">#define CEveryNMilliseconds CEveryNMillis</span></div>
-<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;<span class="preprocessor">#define EVERY_N_MILLISECONDS(N) EVERY_N_MILLIS(N)</span></div>
-<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;</div>
-<div class="line"><a name="l02115"></a><span class="lineno"> 2115</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:336</div></div>
-<div class="ttc" id="class_c_every_n_time_periods_html"><div class="ttname"><a href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a></div><div class="ttdef"><b>Definition:</b> lib8tion.h:2068</div></div>
-<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void swapbits8(bitswap_type in</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> delay.h:79</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:1784</div></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;FASTLED_NAMESPACE_END</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;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="group___scaling_html_ga6c160f8c36ce9b3c5eda68e4992010af"><div class="ttname"><a href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8(uint8_t i, fract8 scale)</div><div class="ttdoc">scale one byte by a second one, which is treated as the numerator of a fraction whose denominator is ...</div><div class="ttdef"><b>Definition:</b> scale8.h:14</div></div>
+<div class="ttc" id="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:342</div></div>
+<div class="ttc" id="group___scaling_html_gaf34fde0746c9c2e5ed44f9c437a2267e"><div class="ttname"><a href="group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e">scale16by8</a></div><div class="ttdeci">LIB8STATIC uint16_t scale16by8(uint16_t i, fract8 scale)</div><div class="ttdoc">scale a 16-bit unsigned value by an 8-bit value, considered as numerator of a fraction whose denomina...</div><div class="ttdef"><b>Definition:</b> scale8.h:342</div></div>
+<div class="ttc" id="group___scaling_html_ga1ff8ac00ad78e22acc7bb7445bfdb145"><div class="ttname"><a href="group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145">scale16</a></div><div class="ttdeci">LIB8STATIC uint16_t scale16(uint16_t i, fract16 scale)</div><div class="ttdoc">scale a 16-bit unsigned value by a 16-bit value, considered as numerator of a fraction whose denomina...</div><div class="ttdef"><b>Definition:</b> scale8.h:378</div></div>
+<div class="ttc" id="class_c_every_n_time_periods_html"><div class="ttname"><a href="class_c_every_n_time_periods.html">CEveryNTimePeriods</a></div><div class="ttdef"><b>Definition:</b> lib8tion.h:1016</div></div>
+<div class="ttc" id="group___scaling_html_ga39579fcf09743f15545fe0b831ca313c"><div class="ttname"><a href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8_LEAVING_R1_DIRTY(uint8_t i, fract8 scale)</div><div class="ttdoc">This version of scale8 does not clean up the R1 register on AVR If you are doing several &#39;scale8&#39;s in...</div><div class="ttdef"><b>Definition:</b> scale8.h:115</div></div>
+<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) inline void swapbits8(bitswap_type in</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> fastled_delay.h:82</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:732</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index b47ce262..edd45a60 100644
--- a/docs/3.1/md__r_e_a_d_m_e.html
+++ b/docs/3.1/md__r_e_a_d_m_e.html
@@ -81,10 +81,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<div class="title">README </div> </div>
</div><!--header-->
<div class="contents">
-<div class="textblock"><p>IMPORTANT NOTE: For AVR based systems, avr-gcc 4.8.x is supported, as is avr-gcc 4.3 and earlier. There are known issues with avr-gcc 4.7 and timing based chipsets like the <a class="el" href="class_w_s2812_b.html">WS2812B</a>. If you are using a linux system make sure you are using avr-gcc 4.8.x not avr-gcc 4.7.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>
+<div class="textblock"><p><a href="https://gitter.im/FastLED/public">![Gitter](https://badges.gitter.im/Join%20Chat.svg)</a></p>
+<p>IMPORTANT NOTE: For AVR based systems, avr-gcc 4.8.x is supported, as is avr-gcc 4.3 and earlier. There are known issues with avr-gcc 4.7 and timing based chipsets like the <a class="el" href="class_w_s2812_b.html">WS2812B</a>. If you are using a linux system make sure you are using avr-gcc 4.8.x not avr-gcc 4.7.x.</p>
+<h1>FastLED 3.1 </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. 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. Tested with Arduino up to 1.6.5 from arduino.cc.</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>
@@ -99,14 +99,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
#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);
+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>Adafruit's DotStars - AKA the APA102</li>
+<li>Adafruit's Neopixel - aka the <a class="el" href="class_w_s2812_b.html">WS2812B</a> (also WS2811/WS2812, also supported 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>
@@ -125,10 +126,12 @@ void loop() {
<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>Teensy 2, Teensy++ 2, Teensy 3.0, Teensy 3.1, Teensy LC - 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>
+<li>RFDuino</li>
+<li>SparkCore</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>
+<p>What types of platforms are we thinking about supporting in the future? Here's a short list: 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>
@@ -137,7 +140,7 @@ void loop() {
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/md__t_o_d_o.html b/docs/3.1/md__t_o_d_o.html
index 8191b9d3..825ea1f5 100644
--- a/docs/3.1/md__t_o_d_o.html
+++ b/docs/3.1/md__t_o_d_o.html
@@ -87,12 +87,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<li>[X] 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" title="Pixel controller class. ">PixelController</a> to take a CPalette256 (pre-adjusted for brightness)</li>
<li>[X] 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>[X] 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>[X] Re-arrange header files into platform/architecture specific subdirectories</li>
<li>[ ] Make sure all platforms have <a class="el" href="class_pin.html">Pin</a> versions of <a class="el" href="class_fast_pin.html" title="The simplest level of Pin class. ">FastPin</a> classes for dynamic pin access?</li>
-<li>[ ] Modify SPI classes to acquire/release SPI hardware resources on starting/finishing writing led data</li>
+<li>[X] 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>[X] Arduino Yun support?</li>
<li>[X] GCC 4.8.x issues</li>
@@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/md_release_notes.html b/docs/3.1/md_release_notes.html
index ea6b08cd..01ebe107 100644
--- a/docs/3.1/md_release_notes.html
+++ b/docs/3.1/md_release_notes.html
@@ -197,7 +197,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/modules.html b/docs/3.1/modules.html
index bcd601e1..7300b5fa 100644
--- a/docs/3.1/modules.html
+++ b/docs/3.1/modules.html
@@ -82,18 +82,24 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all modules:</div><div class="directory">
-<table class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><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="group___bitswap.html" target="_self">Bit swapping/rotate</a></td><td class="desc">Functions for doing a rotation of bits/bytes used by parallel output </td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group___color_enums.html" target="_self">Color correction/temperature</a></td><td class="desc">Definitions for color correction and light temperatures </td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group___colorutils.html" target="_self">Color utility functions</a></td><td class="desc">A variety of functions for working with color, palletes, and leds </td></tr>
-<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group___noise.html" target="_self">Noise functions</a></td><td class="desc">Simplex noise function definitions </td></tr>
-<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group___colorpalletes.html" target="_self">Pre-defined color palletes</a></td><td class="desc">These schemes are all declared as "PROGMEM", meaning that they won't take up SRAM on AVR chips until used </td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group___dimming.html" target="_self">Dimming and brightening functions</a></td><td class="desc">Dimming and brightening functions </td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_4_" class="arrow" onclick="toggleFolder('4_')">&#9660;</span><a class="el" href="group__lib8tion.html" target="_self">Fast math functions</a></td><td class="desc">A variety of functions for working with numbers </td></tr>
+<tr id="row_4_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group___math.html" target="_self">Basic math operations</a></td><td class="desc">Add one byte to another, saturating at 0xFF </td></tr>
+<tr id="row_4_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group___random.html" target="_self">Fast random number generators</a></td><td class="desc">A 16-bit PNRG good enough for LED animations </td></tr>
+<tr id="row_4_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group___trig.html" target="_self">Fast trig functions</a></td><td class="desc"></td></tr>
+<tr id="row_4_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group___scaling.html" target="_self">Scaling functions</a></td><td class="desc">For scaling 8 and 16 bit values, as well as dimming and brightening them </td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group___noise.html" target="_self">Noise functions</a></td><td class="desc">Simplex noise function definitions </td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="group___colorpalletes.html" target="_self">Pre-defined color palletes</a></td><td class="desc">These schemes are all declared as "PROGMEM", meaning that they won't take up SRAM on AVR chips until used </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/noise_8h.html b/docs/3.1/noise_8h.html
index d273179e..0eb94c69 100644
--- a/docs/3.1/noise_8h.html
+++ b/docs/3.1/noise_8h.html
@@ -200,7 +200,7 @@ void&#160;</td><td class="memItemRight" valign="bottom"><b>fill_2dnoise16</b> (<
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/noise_8h_source.html b/docs/3.1/noise_8h_source.html
index 429b7b78..440f78c2 100644
--- a/docs/3.1/noise_8h_source.html
+++ b/docs/3.1/noise_8h_source.html
@@ -90,57 +90,60 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<a href="noise_8h.html">Go to the documentation of this file.</a><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="l00006"></a><span class="lineno"> 6</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="keyword">extern</span> uint16_t inoise16(uint32_t x, uint32_t y, uint32_t z);</div>
-<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">extern</span> uint16_t inoise16(uint32_t x, uint32_t y);</div>
-<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">extern</span> uint16_t inoise16(uint32_t x);</div>
-<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;FASTLED_NAMESPACE_BEGIN</div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</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="keyword">extern</span> uint16_t inoise16(uint32_t x, uint32_t y, uint32_t z);</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">extern</span> uint16_t inoise16(uint32_t x, uint32_t y);</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">extern</span> uint16_t inoise16(uint32_t x);</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">extern</span> int16_t <a class="code" href="group___noise.html#ga810bdc406dcf8fd5b7add9041aa18abd">inoise16_raw</a>(uint32_t x, uint32_t y, uint32_t z);</div>
-<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">extern</span> int16_t <a class="code" href="group___noise.html#ga810bdc406dcf8fd5b7add9041aa18abd">inoise16_raw</a>(uint32_t x, uint32_t y);</div>
-<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">extern</span> int16_t <a class="code" href="group___noise.html#ga810bdc406dcf8fd5b7add9041aa18abd">inoise16_raw</a>(uint32_t x);</div>
-<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div>
-<div class="line"><a name="l00037"></a><span class="lineno"> 37</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="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">extern</span> uint8_t inoise8(uint16_t x, uint16_t y);</div>
-<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">extern</span> uint8_t inoise8(uint16_t x);</div>
-<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div>
-<div class="line"><a name="l00046"></a><span class="lineno"> 46</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="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">extern</span> int8_t inoise8_raw(uint16_t x, uint16_t y);</div>
-<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword">extern</span> int8_t inoise8_raw(uint16_t x);</div>
-<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div>
-<div class="line"><a name="l00063"></a><span class="lineno"> 63</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> scalex, uint16_t time);</div>
-<div class="line"><a name="l00064"></a><span class="lineno"> 64</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> scalex, uint32_t time);</div>
-<div class="line"><a name="l00065"></a><span class="lineno"> 65</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="l00066"></a><span class="lineno"> 66</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="l00067"></a><span class="lineno"> 67</span>&#160;</div>
-<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keywordtype">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="l00069"></a><span class="lineno"> 69</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="l00071"></a><span class="lineno"> 71</span>&#160;</div>
-<div class="line"><a name="l00075"></a><span class="lineno"> 75</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="l00076"></a><span class="lineno"> 76</span>&#160; uint8_t octaves, uint16_t x, <span class="keywordtype">int</span> scale,</div>
-<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; uint8_t hue_octaves, uint16_t hue_x, <span class="keywordtype">int</span> hue_scale,</div>
-<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; uint16_t time);</div>
-<div class="line"><a name="l00079"></a><span class="lineno"> 79</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="l00080"></a><span class="lineno"> 80</span>&#160; uint8_t octaves, uint16_t x, <span class="keywordtype">int</span> scale,</div>
-<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; uint8_t hue_octaves, uint16_t hue_x, <span class="keywordtype">int</span> hue_scale,</div>
-<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; uint16_t time);</div>
-<div class="line"><a name="l00083"></a><span class="lineno"> 83</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="l00084"></a><span class="lineno"> 84</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="l00085"></a><span class="lineno"> 85</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="l00086"></a><span class="lineno"> 86</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="l00087"></a><span class="lineno"> 87</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="l00088"></a><span class="lineno"> 88</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="l00089"></a><span class="lineno"> 89</span>&#160;</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="keyword">extern</span> int16_t <a class="code" href="group___noise.html#ga810bdc406dcf8fd5b7add9041aa18abd">inoise16_raw</a>(uint32_t x, uint32_t y, uint32_t z);</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">extern</span> int16_t <a class="code" href="group___noise.html#ga810bdc406dcf8fd5b7add9041aa18abd">inoise16_raw</a>(uint32_t x, uint32_t y);</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">extern</span> int16_t <a class="code" href="group___noise.html#ga810bdc406dcf8fd5b7add9041aa18abd">inoise16_raw</a>(uint32_t x);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</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="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">extern</span> uint8_t inoise8(uint16_t x, uint16_t y);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">extern</span> uint8_t inoise8(uint16_t x);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</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="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">extern</span> int8_t inoise8_raw(uint16_t x, uint16_t y);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword">extern</span> int8_t inoise8_raw(uint16_t x);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</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> scalex, uint16_t time);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</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> scalex, uint32_t time);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</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="l00068"></a><span class="lineno"> 68</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="l00069"></a><span class="lineno"> 69</span>&#160;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</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="l00071"></a><span class="lineno"> 71</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="l00073"></a><span class="lineno"> 73</span>&#160;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</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="l00078"></a><span class="lineno"> 78</span>&#160; uint8_t octaves, uint16_t x, <span class="keywordtype">int</span> scale,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; uint8_t hue_octaves, uint16_t hue_x, <span class="keywordtype">int</span> hue_scale,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; uint16_t time);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</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="l00082"></a><span class="lineno"> 82</span>&#160; uint8_t octaves, uint16_t x, <span class="keywordtype">int</span> scale,</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; uint8_t hue_octaves, uint16_t hue_x, <span class="keywordtype">int</span> hue_scale,</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; uint16_t time);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</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="l00086"></a><span class="lineno"> 86</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="l00087"></a><span class="lineno"> 87</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="l00088"></a><span class="lineno"> 88</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="l00089"></a><span class="lineno"> 89</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="l00090"></a><span class="lineno"> 90</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="l00091"></a><span class="lineno"> 91</span>&#160;</div>
-<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="ttc" id="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="group___noise_html_ga810bdc406dcf8fd5b7add9041aa18abd"><div class="ttname"><a href="group___noise.html#ga810bdc406dcf8fd5b7add9041aa18abd">inoise16_raw</a></div><div class="ttdeci">int16_t inoise16_raw(uint32_t x, uint32_t y, uint32_t z)</div><div class="ttdoc">16 bit raw versions of the noise functions. </div><div class="ttdef"><b>Definition:</b> noise.cpp:262</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:1784</div></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="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:83</div></div>
+<div class="ttc" id="group___noise_html_ga810bdc406dcf8fd5b7add9041aa18abd"><div class="ttname"><a href="group___noise.html#ga810bdc406dcf8fd5b7add9041aa18abd">inoise16_raw</a></div><div class="ttdeci">int16_t inoise16_raw(uint32_t x, uint32_t y, uint32_t z)</div><div class="ttdoc">16 bit raw versions of the noise functions. </div><div class="ttdef"><b>Definition:</b> noise.cpp:245</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:732</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/pages.html b/docs/3.1/pages.html
index fb1b6038..c97cd941 100644
--- a/docs/3.1/pages.html
+++ b/docs/3.1/pages.html
@@ -83,16 +83,18 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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>
-<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="todo.html" target="_self">Todo List</a></td><td class="desc"></td></tr>
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="md__m0-clocklessnotes.html" target="_self">M0-clocklessnotes</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__p_o_r_t_i_n_g.html" target="_self">PORTING</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__r_e_a_d_m_e.html" target="_self">README</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><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_4_" 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>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="todo.html" target="_self">Todo List</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/pixeltypes_8h_source.html b/docs/3.1/pixeltypes_8h_source.html
index f4581359..f87334ac 100644
--- a/docs/3.1/pixeltypes_8h_source.html
+++ b/docs/3.1/pixeltypes_8h_source.html
@@ -94,823 +94,832 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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>() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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>() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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>( <a class="code" href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8">LEDColorCorrection</a> colorcode) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00008"></a><span class="lineno"> 8</span>&#160;FASTLED_NAMESPACE_BEGIN</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">struct </span><a class="code" href="struct_c_r_g_b.html">CRGB</a>;</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</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="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">// Forward declaration of hsv2rgb_rainbow here,</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// to avoid circular dependencies.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</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="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"><a class="line" href="struct_c_h_s_v.html"> 18</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="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; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; uint8_t hue;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; uint8_t h; };</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; uint8_t saturation;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; uint8_t sat;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; uint8_t s; };</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; uint8_t value;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; uint8_t val;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; uint8_t v; };</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; uint8_t raw[3];</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="comment">// default values are UNITIALIZED</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_h_s_v.html">CHSV</a>() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div>
+<div class="line"><a name="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">// allow construction from H, S, V</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; : h(ih), s(is), v(iv)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; {</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="comment">// allow copy construction</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; h = rhs.h;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; s = rhs.s;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; v = rhs.v;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; h = rhs.h;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; s = rhs.s;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; v = rhs.v;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">return</span> *<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="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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; h = ih;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; s = is;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; v = iv;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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;};</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; HUE_RED = 0,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; HUE_ORANGE = 32,</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; HUE_YELLOW = 64,</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; HUE_GREEN = 96,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; HUE_AQUA = 128,</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; HUE_BLUE = 160,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; HUE_PURPLE = 192,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; HUE_PINK = 224</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;} HSVHue;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="struct_c_r_g_b.html"> 83</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="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; <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; uint8_t r;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; uint8_t red;</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">union </span>{</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; uint8_t g;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; uint8_t green;</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">union </span>{</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; uint8_t b;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; uint8_t blue;</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; };</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; };</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; uint8_t raw[3];</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; };</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">inline</span> uint8_t&amp; operator[] (uint8_t x) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">return</span> raw[x];</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">inline</span> <span class="keyword">const</span> uint8_t&amp; operator[] (uint8_t x) <span class="keyword">const</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">return</span> raw[x];</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="comment">// default values are UNINITIALIZED</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>() <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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="comment">// allow construction from R, G, B</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; : r(ir), g(ig), b(ib)</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">// allow construction from 32-bit (really 24-bit) bit 0xRRGGBB color code</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( uint32_t colorcode) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</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="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;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( <a class="code" href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8">LEDColorCorrection</a> colorcode) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</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="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>( <a class="code" href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9">ColorTemperature</a> colorcode) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="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">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( <a class="code" href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9">ColorTemperature</a> colorcode) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</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="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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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-- () <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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++ () <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="comment">// getParity returns 0 or 1, depending on the</span></div>
-<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="comment">// lowest bit of the sum of the color components.</span></div>
-<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keyword">inline</span> uint8_t getParity()</div>
-<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; {</div>
-<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; uint8_t sum = r + g + b;</div>
-<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">return</span> (sum &amp; 0x01);</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">// setParity adjusts the color in the smallest</span></div>
-<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="comment">// way possible so that the parity of the color</span></div>
-<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="comment">// is now the desired value. This allows you to</span></div>
-<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="comment">// &#39;hide&#39; one bit of information in the color.</span></div>
-<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="comment">//</span></div>
-<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="comment">// Ideally, we find one color channel which already</span></div>
-<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="comment">// has data in it, and modify just that channel by one.</span></div>
-<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="comment">// We don&#39;t want to light up a channel that&#39;s black</span></div>
-<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="comment">// if we can avoid it, and if the pixel is &#39;grayscale&#39;,</span></div>
-<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="comment">// (meaning that R==G==B), we modify all three channels</span></div>
-<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="comment">// at once, to preserve the neutral hue.</span></div>
-<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="comment">//</span></div>
-<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="comment">// There&#39;s no such thing as a free lunch; in many cases</span></div>
-<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="comment">// this &#39;hidden bit&#39; may actually be visible, but this</span></div>
-<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="comment">// code makes reasonable efforts to hide it as much</span></div>
-<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="comment">// as is reasonably possible.</span></div>
-<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="comment">//</span></div>
-<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="comment">// Also, an effort is made to have make it such that</span></div>
-<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="comment">// repeatedly setting the parity to different values</span></div>
-<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="comment">// will not cause the color to &#39;drift&#39;. Toggling</span></div>
-<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="comment">// the parity twice should generally result in the</span></div>
-<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="comment">// original color again.</span></div>
-<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">//</span></div>
-<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> setParity( uint8_t parity)</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; uint8_t curparity = getParity();</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="keywordflow">if</span>( parity == curparity) <span class="keywordflow">return</span>;</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="keywordflow">if</span>( parity ) {</div>
-<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="comment">// going &#39;up&#39;</span></div>
-<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">if</span>( (b &gt; 0) &amp;&amp; (b &lt; 255)) {</div>
-<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span>( r == g &amp;&amp; g == b) {</div>
-<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; r++;</div>
-<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; g++;</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; b++;</div>
-<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( (r &gt; 0) &amp;&amp; (r &lt; 255)) {</div>
-<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; r++;</div>
-<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( (g &gt; 0) &amp;&amp; (g &lt; 255)) {</div>
-<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; g++;</div>
-<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">if</span>( r == g &amp;&amp; g == b) {</div>
-<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; r ^= 0x01;</div>
-<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; g ^= 0x01;</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; b ^= 0x01;</div>
-<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div>
-<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="comment">// going &#39;down&#39;</span></div>
-<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">if</span>( b &gt; 1) {</div>
-<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordflow">if</span>( r == g &amp;&amp; g == b) {</div>
-<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; r--;</div>
-<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; g--;</div>
-<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div>
-<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; b--;</div>
-<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( g &gt; 1) {</div>
-<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; g--;</div>
-<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( r &gt; 1) {</div>
-<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; r--;</div>
-<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">if</span>( r == g &amp;&amp; g == b) {</div>
-<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; r ^= 0x01;</div>
-<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; g ^= 0x01;</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; b ^= 0x01;</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; }</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; </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; <span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
-<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; AliceBlue=0xF0F8FF,</div>
-<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; Amethyst=0x9966CC,</div>
-<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; AntiqueWhite=0xFAEBD7,</div>
-<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; Aqua=0x00FFFF,</div>
-<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; Aquamarine=0x7FFFD4,</div>
-<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; Azure=0xF0FFFF,</div>
-<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; Beige=0xF5F5DC,</div>
-<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; Bisque=0xFFE4C4,</div>
-<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; Black=0x000000,</div>
-<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; BlanchedAlmond=0xFFEBCD,</div>
-<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; Blue=0x0000FF,</div>
-<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; BlueViolet=0x8A2BE2,</div>
-<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; Brown=0xA52A2A,</div>
-<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; BurlyWood=0xDEB887,</div>
-<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; CadetBlue=0x5F9EA0,</div>
-<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; Chartreuse=0x7FFF00,</div>
-<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; Chocolate=0xD2691E,</div>
-<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; Coral=0xFF7F50,</div>
-<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; CornflowerBlue=0x6495ED,</div>
-<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; Cornsilk=0xFFF8DC,</div>
-<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; Crimson=0xDC143C,</div>
-<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; Cyan=0x00FFFF,</div>
-<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; DarkBlue=0x00008B,</div>
-<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; DarkCyan=0x008B8B,</div>
-<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; DarkGoldenrod=0xB8860B,</div>
-<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; DarkGray=0xA9A9A9,</div>
-<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; DarkGrey=0xA9A9A9,</div>
-<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; DarkGreen=0x006400,</div>
-<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; DarkKhaki=0xBDB76B,</div>
-<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; DarkMagenta=0x8B008B,</div>
-<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; DarkOliveGreen=0x556B2F,</div>
-<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; DarkOrange=0xFF8C00,</div>
-<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; DarkOrchid=0x9932CC,</div>
-<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; DarkRed=0x8B0000,</div>
-<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; DarkSalmon=0xE9967A,</div>
-<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; DarkSeaGreen=0x8FBC8F,</div>
-<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; DarkSlateBlue=0x483D8B,</div>
-<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; DarkSlateGray=0x2F4F4F,</div>
-<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; DarkSlateGrey=0x2F4F4F,</div>
-<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; DarkTurquoise=0x00CED1,</div>
-<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; DarkViolet=0x9400D3,</div>
-<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; DeepPink=0xFF1493,</div>
-<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; DeepSkyBlue=0x00BFFF,</div>
-<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; DimGray=0x696969,</div>
-<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; DimGrey=0x696969,</div>
-<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; DodgerBlue=0x1E90FF,</div>
-<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; FireBrick=0xB22222,</div>
-<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; FloralWhite=0xFFFAF0,</div>
-<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; ForestGreen=0x228B22,</div>
-<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; Fuchsia=0xFF00FF,</div>
-<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; Gainsboro=0xDCDCDC,</div>
-<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; GhostWhite=0xF8F8FF,</div>
-<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; Gold=0xFFD700,</div>
-<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; Goldenrod=0xDAA520,</div>
-<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; Gray=0x808080,</div>
-<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; Grey=0x808080,</div>
-<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; Green=0x008000,</div>
-<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; GreenYellow=0xADFF2F,</div>
-<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; Honeydew=0xF0FFF0,</div>
-<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; HotPink=0xFF69B4,</div>
-<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; IndianRed=0xCD5C5C,</div>
-<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; Indigo=0x4B0082,</div>
-<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; Ivory=0xFFFFF0,</div>
-<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; Khaki=0xF0E68C,</div>
-<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; Lavender=0xE6E6FA,</div>
-<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; LavenderBlush=0xFFF0F5,</div>
-<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; LawnGreen=0x7CFC00,</div>
-<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; LemonChiffon=0xFFFACD,</div>
-<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; LightBlue=0xADD8E6,</div>
-<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; LightCoral=0xF08080,</div>
-<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; LightCyan=0xE0FFFF,</div>
-<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; LightGoldenrodYellow=0xFAFAD2,</div>
-<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; LightGreen=0x90EE90,</div>
-<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; LightGrey=0xD3D3D3,</div>
-<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; LightPink=0xFFB6C1,</div>
-<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; LightSalmon=0xFFA07A,</div>
-<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; LightSeaGreen=0x20B2AA,</div>
-<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; LightSkyBlue=0x87CEFA,</div>
-<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; LightSlateGray=0x778899,</div>
-<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; LightSlateGrey=0x778899,</div>
-<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; LightSteelBlue=0xB0C4DE,</div>
-<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; LightYellow=0xFFFFE0,</div>
-<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; Lime=0x00FF00,</div>
-<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; LimeGreen=0x32CD32,</div>
-<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; Linen=0xFAF0E6,</div>
-<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; Magenta=0xFF00FF,</div>
-<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; Maroon=0x800000,</div>
-<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; MediumAquamarine=0x66CDAA,</div>
-<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; MediumBlue=0x0000CD,</div>
-<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; MediumOrchid=0xBA55D3,</div>
-<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; MediumPurple=0x9370DB,</div>
-<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; MediumSeaGreen=0x3CB371,</div>
-<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; MediumSlateBlue=0x7B68EE,</div>
-<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; MediumSpringGreen=0x00FA9A,</div>
-<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; MediumTurquoise=0x48D1CC,</div>
-<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; MediumVioletRed=0xC71585,</div>
-<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; MidnightBlue=0x191970,</div>
-<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; MintCream=0xF5FFFA,</div>
-<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; MistyRose=0xFFE4E1,</div>
-<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; Moccasin=0xFFE4B5,</div>
-<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; NavajoWhite=0xFFDEAD,</div>
-<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; Navy=0x000080,</div>
-<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; OldLace=0xFDF5E6,</div>
-<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; Olive=0x808000,</div>
-<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; OliveDrab=0x6B8E23,</div>
-<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; Orange=0xFFA500,</div>
-<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; OrangeRed=0xFF4500,</div>
-<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; Orchid=0xDA70D6,</div>
-<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; PaleGoldenrod=0xEEE8AA,</div>
-<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; PaleGreen=0x98FB98,</div>
-<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; PaleTurquoise=0xAFEEEE,</div>
-<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; PaleVioletRed=0xDB7093,</div>
-<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; PapayaWhip=0xFFEFD5,</div>
-<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; PeachPuff=0xFFDAB9,</div>
-<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; Peru=0xCD853F,</div>
-<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; Pink=0xFFC0CB,</div>
-<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; Plaid=0xCC5533,</div>
-<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; Plum=0xDDA0DD,</div>
-<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; PowderBlue=0xB0E0E6,</div>
-<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; Purple=0x800080,</div>
-<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; Red=0xFF0000,</div>
-<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; RosyBrown=0xBC8F8F,</div>
-<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; RoyalBlue=0x4169E1,</div>
-<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; SaddleBrown=0x8B4513,</div>
-<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; Salmon=0xFA8072,</div>
-<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; SandyBrown=0xF4A460,</div>
-<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; SeaGreen=0x2E8B57,</div>
-<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; Seashell=0xFFF5EE,</div>
-<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; Sienna=0xA0522D,</div>
-<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; Silver=0xC0C0C0,</div>
-<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; SkyBlue=0x87CEEB,</div>
-<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; SlateBlue=0x6A5ACD,</div>
-<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; SlateGray=0x708090,</div>
-<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; SlateGrey=0x708090,</div>
-<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; Snow=0xFFFAFA,</div>
-<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; SpringGreen=0x00FF7F,</div>
-<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; SteelBlue=0x4682B4,</div>
-<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; Tan=0xD2B48C,</div>
-<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; Teal=0x008080,</div>
-<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; Thistle=0xD8BFD8,</div>
-<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; Tomato=0xFF6347,</div>
-<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; Turquoise=0x40E0D0,</div>
-<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; Violet=0xEE82EE,</div>
-<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; Wheat=0xF5DEB3,</div>
-<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; White=0xFFFFFF,</div>
-<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; WhiteSmoke=0xF5F5F5,</div>
-<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; Yellow=0xFFFF00,</div>
-<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; YellowGreen=0x9ACD32,</div>
-<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; </div>
-<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="comment">// LED RGB color that roughly approximates</span></div>
-<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <span class="comment">// the color of incandescent fairy lights,</span></div>
-<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="comment">// assuming that you&#39;re using FastLED</span></div>
-<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="comment">// color correction on your LEDs (recommended).</span></div>
-<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; FairyLight=0xFFE42D,</div>
-<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="comment">// If you are using no color correction, use this</span></div>
-<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; FairyLightNCC=0xFF9D2A</div>
-<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; </div>
-<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; } HTMLColorCode;</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;</div>
-<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;</div>
-<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;<span class="keyword">inline</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00705"></a><span class="lineno"> 705</span>&#160;{</div>
-<div class="line"><a name="l00706"></a><span class="lineno"> 706</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="l00707"></a><span class="lineno"> 707</span>&#160;}</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="keyword">inline</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00710"></a><span class="lineno"> 710</span>&#160;{</div>
-<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keywordflow">return</span> !(lhs == rhs);</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;</div>
-<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;<span class="keyword">inline</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00715"></a><span class="lineno"> 715</span>&#160;{</div>
-<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; uint16_t sl, sr;</div>
-<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; sl = lhs.r + lhs.g + lhs.b;</div>
-<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; sr = rhs.r + rhs.g + rhs.b;</div>
-<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">return</span> sl &lt; sr;</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;</div>
-<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;<span class="keyword">inline</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00723"></a><span class="lineno"> 723</span>&#160;{</div>
-<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; uint16_t sl, sr;</div>
-<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; sl = lhs.r + lhs.g + lhs.b;</div>
-<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; sr = rhs.r + rhs.g + rhs.b;</div>
-<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">return</span> sl &gt; sr;</div>
-<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;}</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="keyword">inline</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00731"></a><span class="lineno"> 731</span>&#160;{</div>
-<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; uint16_t sl, sr;</div>
-<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; sl = lhs.r + lhs.g + lhs.b;</div>
-<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; sr = rhs.r + rhs.g + rhs.b;</div>
-<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">return</span> sl &gt;= sr;</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;</div>
-<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;<span class="keyword">inline</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00739"></a><span class="lineno"> 739</span>&#160;{</div>
-<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; uint16_t sl, sr;</div>
-<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; sl = lhs.r + lhs.g + lhs.b;</div>
-<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; sr = rhs.r + rhs.g + rhs.b;</div>
-<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">return</span> sl &lt;= sr;</div>
-<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;}</div>
-<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160;</div>
-<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;</div>
-<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
-<div class="line"><a name="l00748"></a><span class="lineno"> 748</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="l00749"></a><span class="lineno"> 749</span>&#160;{</div>
-<div class="line"><a name="l00750"></a><span class="lineno"> 750</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="l00751"></a><span class="lineno"> 751</span>&#160; qadd8( p1.g, p2.g),</div>
-<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; qadd8( p1.b, p2.b));</div>
-<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;}</div>
-<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160;</div>
-<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
-<div class="line"><a name="l00756"></a><span class="lineno"> 756</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="l00757"></a><span class="lineno"> 757</span>&#160;{</div>
-<div class="line"><a name="l00758"></a><span class="lineno"> 758</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="l00759"></a><span class="lineno"> 759</span>&#160; qsub8( p1.g, p2.g),</div>
-<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; qsub8( p1.b, p2.b));</div>
-<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;}</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="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
-<div class="line"><a name="l00764"></a><span class="lineno"> 764</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="l00765"></a><span class="lineno"> 765</span>&#160;{</div>
-<div class="line"><a name="l00766"></a><span class="lineno"> 766</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="l00767"></a><span class="lineno"> 767</span>&#160; qmul8( p1.g, d),</div>
-<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; qmul8( p1.b, d));</div>
-<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;}</div>
-<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;</div>
-<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
-<div class="line"><a name="l00772"></a><span class="lineno"> 772</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="l00773"></a><span class="lineno"> 773</span>&#160;{</div>
-<div class="line"><a name="l00774"></a><span class="lineno"> 774</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="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;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
-<div class="line"><a name="l00779"></a><span class="lineno"> 779</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="l00780"></a><span class="lineno"> 780</span>&#160;{</div>
-<div class="line"><a name="l00781"></a><span class="lineno"> 781</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="l00782"></a><span class="lineno"> 782</span>&#160; p1.g &lt; p2.g ? p1.g : p2.g,</div>
-<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; p1.b &lt; p2.b ? p1.b : p2.b);</div>
-<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;}</div>
-<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;</div>
-<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
-<div class="line"><a name="l00787"></a><span class="lineno"> 787</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="l00788"></a><span class="lineno"> 788</span>&#160;{</div>
-<div class="line"><a name="l00789"></a><span class="lineno"> 789</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="l00790"></a><span class="lineno"> 790</span>&#160; p1.g &gt; p2.g ? p1.g : p2.g,</div>
-<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; p1.b &gt; p2.b ? p1.b : p2.b);</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;</div>
-<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
-<div class="line"><a name="l00795"></a><span class="lineno"> 795</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="l00796"></a><span class="lineno"> 796</span>&#160;{</div>
-<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> retval( p1);</div>
-<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; retval.nscale8_video( d);</div>
-<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">return</span> retval;</div>
-<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;}</div>
-<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;</div>
-<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="comment">// allow copy construction</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; r = rhs.r;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; g = rhs.g;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; b = rhs.b;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="comment">// allow construction from HSV color</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; hsv2rgb_rainbow( rhs, *<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="comment">// allow assignment from one RGB struct to another</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; r = rhs.r;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; g = rhs.g;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; b = rhs.b;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="comment">// allow assignment from 32-bit (really 24-bit) 0xRRGGBB color code</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; r = (colorcode &gt;&gt; 16) &amp; 0xFF;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; g = (colorcode &gt;&gt; 8) &amp; 0xFF;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; b = (colorcode &gt;&gt; 0) &amp; 0xFF;</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// allow assignment from R, G, and B</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; r = nr;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; g = ng;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; b = nb;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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="comment">// allow assignment from H, S, and V</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; 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="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">// allow assignment from just a Hue, saturation and value automatically at max.</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; setHue (uint8_t hue) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; 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="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">// allow assignment from HSV color</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; hsv2rgb_rainbow( rhs, *<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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="comment">// allow assignment from 32-bit (really 24-bit) 0xRRGGBB color code</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; setColorCode (uint32_t colorcode) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; r = (colorcode &gt;&gt; 16) &amp; 0xFF;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; g = (colorcode &gt;&gt; 8) &amp; 0xFF;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; b = (colorcode &gt;&gt; 0) &amp; 0xFF;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="comment">// add one RGB to another, saturating at 0xFF for each channel</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</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="l00215"></a><span class="lineno"> 215</span>&#160; {</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; r = qadd8( r, rhs.r);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; g = qadd8( g, rhs.g);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; b = qadd8( b, rhs.b);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="comment">// add a contstant to each channel, saturating at 0xFF</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="comment">// this is NOT an operator+= overload because the compiler</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</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="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// constant (e.g. CRGB::Red) and an 8-bit one (CRGB::Blue)</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</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="l00227"></a><span class="lineno"> 227</span>&#160; {</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; r = qadd8( r, d);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; g = qadd8( g, d);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; b = qadd8( b, d);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// subtract one RGB from another, saturating at 0x00 for each channel</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</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="l00236"></a><span class="lineno"> 236</span>&#160; {</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; r = <a class="code" href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a>( r, rhs.r);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; g = <a class="code" href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a>( g, rhs.g);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; b = <a class="code" href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a>( b, rhs.b);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// subtract a constant from each channel, saturating at 0x00</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// this is NOT an operator+= overload because the compiler</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</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="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// constant (e.g. CRGB::Red) and an 8-bit one (CRGB::Blue)</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</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="l00248"></a><span class="lineno"> 248</span>&#160; {</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; r = <a class="code" href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a>( r, d);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; g = <a class="code" href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a>( g, d);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; b = <a class="code" href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a>( b, d);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; }</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="comment">// subtract a constant of &#39;1&#39; from each channel, saturating at 0x00</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator-- () <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; subtractFromRGB(1);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</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="l00263"></a><span class="lineno"> 263</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; <a class="code" href="struct_c_r_g_b.html">CRGB</a> retval(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; --(*this);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">return</span> retval;</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;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</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="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">inline</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>&amp; operator++ () <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</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; addToRGB(1);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// add a constant of &#39;1&#39; from each channel, saturating at 0xFF</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</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) <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; {</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> retval(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; ++(*this);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// divide each of the channels by a constant</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</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="l00287"></a><span class="lineno"> 287</span>&#160; {</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; r /= d;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; g /= d;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; b /= d;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="comment">// right shift each of the channels by a constant</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</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="l00296"></a><span class="lineno"> 296</span>&#160; {</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; r &gt;&gt;= d;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; g &gt;&gt;= d;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; b &gt;&gt;= d;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="comment">// multiply each of the channels by a constant,</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="comment">// saturating each channel at 0xFF</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</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="l00306"></a><span class="lineno"> 306</span>&#160; {</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; r = <a class="code" href="group___math.html#ga9d113e85065df7c9006704ea6b6dcda4">qmul8</a>( r, d);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; g = <a class="code" href="group___math.html#ga9d113e85065df7c9006704ea6b6dcda4">qmul8</a>( g, d);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; b = <a class="code" href="group___math.html#ga9d113e85065df7c9006704ea6b6dcda4">qmul8</a>( b, d);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</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="l00314"></a><span class="lineno"> 314</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="l00315"></a><span class="lineno"> 315</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="l00316"></a><span class="lineno"> 316</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="l00317"></a><span class="lineno"> 317</span>&#160; <span class="comment">// at low brightness levels.</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</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="l00319"></a><span class="lineno"> 319</span>&#160; {</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <a class="code" href="group___scaling.html#ga700b7f510f32e8c91385093c436c27d9">nscale8x3_video</a>( r, g, b, scaledown);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="comment">// %= is a synonym for nscale8_video. Think of it is scaling down</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="comment">// by &quot;a percentage&quot;</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</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="l00327"></a><span class="lineno"> 327</span>&#160; {</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <a class="code" href="group___scaling.html#ga700b7f510f32e8c91385093c436c27d9">nscale8x3_video</a>( r, g, b, scaledown);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">// fadeLightBy is a synonym for nscale8_video( ..., 255-fadefactor)</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</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="l00334"></a><span class="lineno"> 334</span>&#160; {</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="group___scaling.html#ga700b7f510f32e8c91385093c436c27d9">nscale8x3_video</a>( r, g, b, 255 - fadefactor);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</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="l00340"></a><span class="lineno"> 340</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="l00341"></a><span class="lineno"> 341</span>&#160; <span class="comment">// may dim all the way to 100% black.</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</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="l00343"></a><span class="lineno"> 343</span>&#160; {</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="group___scaling.html#ga39bf87e5526120889086cab19ac749b1">nscale8x3</a>( r, g, b, scaledown);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="comment">// fadeToBlackBy is a synonym for nscale8( ..., 255-fadefactor)</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</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="l00350"></a><span class="lineno"> 350</span>&#160; {</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="group___scaling.html#ga39bf87e5526120889086cab19ac749b1">nscale8x3</a>( r, g, b, 255 - fadefactor);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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; <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="l00356"></a><span class="lineno"> 356</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="l00357"></a><span class="lineno"> 357</span>&#160; {</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordflow">if</span>( rhs.r &gt; r) r = rhs.r;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">if</span>( rhs.g &gt; g) g = rhs.g;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">if</span>( rhs.b &gt; b) b = rhs.b;</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; }</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <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="l00364"></a><span class="lineno"> 364</span>&#160; {</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">if</span>( d &gt; r) r = d;</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">if</span>( d &gt; g) g = d;</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">if</span>( d &gt; b) b = d;</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</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; <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="l00372"></a><span class="lineno"> 372</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="l00373"></a><span class="lineno"> 373</span>&#160; {</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">if</span>( rhs.r &lt; r) r = rhs.r;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span>( rhs.g &lt; g) g = rhs.g;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">if</span>( rhs.b &lt; b) b = rhs.b;</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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="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="l00380"></a><span class="lineno"> 380</span>&#160; {</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">if</span>( d &lt; r) r = d;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span>( d &lt; g) g = d;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span>( d &lt; b) b = d;</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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; <span class="comment">// this allows testing a CRGB for zero-ness</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keyword">inline</span> <span class="keyword">operator</span> bool() <span class="keyword">const</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; {</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">return</span> r || g || b;</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="comment">// invert each channel</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</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="l00395"></a><span class="lineno"> 395</span>&#160; {</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> retval;</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; retval.r = 255 - r;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; retval.g = 255 - g;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; retval.b = 255 - b;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; }</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;<span class="preprocessor">#ifdef SmartMatrix_h</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keyword">operator</span> rgb24()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; rgb24 ret;</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; ret.red = r;</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; ret.green = g;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; ret.blue = b;</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">return</span> ret;</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="preprocessor">#endif</span></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">inline</span> uint8_t getLuma ( )<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</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="l00415"></a><span class="lineno"> 415</span>&#160; <span class="comment">// 54 183 18 (!)</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; uint8_t luma = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>( r, 54) + <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">\</a></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;<a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c"> scale8_LEAVING_R1_DIRTY</a>( g, 183) + <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">\</a></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;<a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c"> scale8_LEAVING_R1_DIRTY</a>( b, 18);</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a>();</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">return</span> luma;</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;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keyword">inline</span> uint8_t getAverageLight( )<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keyword">const</span> uint8_t eightysix = 86;</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; uint8_t avg = <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a>( r, eightysix) + <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">\</a></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;<a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c"> scale8_LEAVING_R1_DIRTY</a>( g, eightysix) + <a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">\</a></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<a class="code" href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c"> scale8_LEAVING_R1_DIRTY</a>( b, eightysix);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <a class="code" href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a>();</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">return</span> avg;</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;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> maximizeBrightness( uint8_t limit = 255 ) {</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; uint8_t max = red;</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">if</span>( green &gt; max) max = green;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span>( blue &gt; max) max = blue;</div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; uint16_t factor = ((uint16_t)(limit) * 256) / max;</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; red = (red * factor) / 256;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; green = (green * factor) / 256;</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; blue = (blue * factor) / 256;</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;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</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="l00444"></a><span class="lineno"> 444</span>&#160; {</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> ret;</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; ret.r = lerp8by8(r,other.r,frac);</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; ret.g = lerp8by8(g,other.g,frac);</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; ret.b = lerp8by8(b,other.b,frac);</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="keywordflow">return</span> ret;</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;</div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</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="l00455"></a><span class="lineno"> 455</span>&#160; {</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> ret;</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; ret.r = lerp16by16(r&lt;&lt;8,other.r&lt;&lt;8,frac)&gt;&gt;8;</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; ret.g = lerp16by16(g&lt;&lt;8,other.g&lt;&lt;8,frac)&gt;&gt;8;</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; ret.b = lerp16by16(b&lt;&lt;8,other.b&lt;&lt;8,frac)&gt;&gt;8;</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">return</span> ret;</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; }</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;</div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="comment">// getParity returns 0 or 1, depending on the</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// lowest bit of the sum of the color components.</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keyword">inline</span> uint8_t getParity()</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; uint8_t sum = r + g + b;</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">return</span> (sum &amp; 0x01);</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; <span class="comment">// setParity adjusts the color in the smallest</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="comment">// way possible so that the parity of the color</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="comment">// is now the desired value. This allows you to</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="comment">// &#39;hide&#39; one bit of information in the color.</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="comment">// Ideally, we find one color channel which already</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="comment">// has data in it, and modify just that channel by one.</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="comment">// We don&#39;t want to light up a channel that&#39;s black</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="comment">// if we can avoid it, and if the pixel is &#39;grayscale&#39;,</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="comment">// (meaning that R==G==B), we modify all three channels</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="comment">// at once, to preserve the neutral hue.</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="comment">// There&#39;s no such thing as a free lunch; in many cases</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="comment">// this &#39;hidden bit&#39; may actually be visible, but this</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="comment">// code makes reasonable efforts to hide it as much</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="comment">// as is reasonably possible.</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="comment">// Also, an effort is made to have make it such that</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="comment">// repeatedly setting the parity to different values</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="comment">// will not cause the color to &#39;drift&#39;. Toggling</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">// the parity twice should generally result in the</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="comment">// original color again.</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="comment">//</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> setParity( uint8_t parity)</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; uint8_t curparity = getParity();</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="keywordflow">if</span>( parity == curparity) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">if</span>( parity ) {</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="comment">// going &#39;up&#39;</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">if</span>( (b &gt; 0) &amp;&amp; (b &lt; 255)) {</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">if</span>( r == g &amp;&amp; g == b) {</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; r++;</div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; g++;</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; b++;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( (r &gt; 0) &amp;&amp; (r &lt; 255)) {</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; r++;</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( (g &gt; 0) &amp;&amp; (g &lt; 255)) {</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; g++;</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">if</span>( r == g &amp;&amp; g == b) {</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; r ^= 0x01;</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; g ^= 0x01;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; b ^= 0x01;</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; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="comment">// going &#39;down&#39;</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">if</span>( b &gt; 1) {</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordflow">if</span>( r == g &amp;&amp; g == b) {</div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; r--;</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; g--;</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; b--;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( g &gt; 1) {</div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; g--;</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( r &gt; 1) {</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; r--;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">if</span>( r == g &amp;&amp; g == b) {</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; r ^= 0x01;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; g ^= 0x01;</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; b ^= 0x01;</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; }</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;</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">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; AliceBlue=0xF0F8FF,</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; Amethyst=0x9966CC,</div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; AntiqueWhite=0xFAEBD7,</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; Aqua=0x00FFFF,</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; Aquamarine=0x7FFFD4,</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; Azure=0xF0FFFF,</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; Beige=0xF5F5DC,</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; Bisque=0xFFE4C4,</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; Black=0x000000,</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; BlanchedAlmond=0xFFEBCD,</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; Blue=0x0000FF,</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; BlueViolet=0x8A2BE2,</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; Brown=0xA52A2A,</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; BurlyWood=0xDEB887,</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; CadetBlue=0x5F9EA0,</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; Chartreuse=0x7FFF00,</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; Chocolate=0xD2691E,</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; Coral=0xFF7F50,</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; CornflowerBlue=0x6495ED,</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; Cornsilk=0xFFF8DC,</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; Crimson=0xDC143C,</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; Cyan=0x00FFFF,</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; DarkBlue=0x00008B,</div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; DarkCyan=0x008B8B,</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; DarkGoldenrod=0xB8860B,</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; DarkGray=0xA9A9A9,</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; DarkGrey=0xA9A9A9,</div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; DarkGreen=0x006400,</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; DarkKhaki=0xBDB76B,</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; DarkMagenta=0x8B008B,</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; DarkOliveGreen=0x556B2F,</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; DarkOrange=0xFF8C00,</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; DarkOrchid=0x9932CC,</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; DarkRed=0x8B0000,</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; DarkSalmon=0xE9967A,</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; DarkSeaGreen=0x8FBC8F,</div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; DarkSlateBlue=0x483D8B,</div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; DarkSlateGray=0x2F4F4F,</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; DarkSlateGrey=0x2F4F4F,</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; DarkTurquoise=0x00CED1,</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; DarkViolet=0x9400D3,</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; DeepPink=0xFF1493,</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; DeepSkyBlue=0x00BFFF,</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; DimGray=0x696969,</div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; DimGrey=0x696969,</div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; DodgerBlue=0x1E90FF,</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; FireBrick=0xB22222,</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; FloralWhite=0xFFFAF0,</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; ForestGreen=0x228B22,</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; Fuchsia=0xFF00FF,</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; Gainsboro=0xDCDCDC,</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; GhostWhite=0xF8F8FF,</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; Gold=0xFFD700,</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; Goldenrod=0xDAA520,</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; Gray=0x808080,</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; Grey=0x808080,</div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; Green=0x008000,</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; GreenYellow=0xADFF2F,</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; Honeydew=0xF0FFF0,</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; HotPink=0xFF69B4,</div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; IndianRed=0xCD5C5C,</div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; Indigo=0x4B0082,</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; Ivory=0xFFFFF0,</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; Khaki=0xF0E68C,</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; Lavender=0xE6E6FA,</div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; LavenderBlush=0xFFF0F5,</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; LawnGreen=0x7CFC00,</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; LemonChiffon=0xFFFACD,</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; LightBlue=0xADD8E6,</div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; LightCoral=0xF08080,</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; LightCyan=0xE0FFFF,</div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; LightGoldenrodYellow=0xFAFAD2,</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; LightGreen=0x90EE90,</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; LightGrey=0xD3D3D3,</div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; LightPink=0xFFB6C1,</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; LightSalmon=0xFFA07A,</div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; LightSeaGreen=0x20B2AA,</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; LightSkyBlue=0x87CEFA,</div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; LightSlateGray=0x778899,</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; LightSlateGrey=0x778899,</div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; LightSteelBlue=0xB0C4DE,</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; LightYellow=0xFFFFE0,</div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; Lime=0x00FF00,</div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; LimeGreen=0x32CD32,</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; Linen=0xFAF0E6,</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; Magenta=0xFF00FF,</div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; Maroon=0x800000,</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; MediumAquamarine=0x66CDAA,</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; MediumBlue=0x0000CD,</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; MediumOrchid=0xBA55D3,</div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; MediumPurple=0x9370DB,</div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; MediumSeaGreen=0x3CB371,</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; MediumSlateBlue=0x7B68EE,</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; MediumSpringGreen=0x00FA9A,</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; MediumTurquoise=0x48D1CC,</div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; MediumVioletRed=0xC71585,</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; MidnightBlue=0x191970,</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; MintCream=0xF5FFFA,</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; MistyRose=0xFFE4E1,</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; Moccasin=0xFFE4B5,</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; NavajoWhite=0xFFDEAD,</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; Navy=0x000080,</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; OldLace=0xFDF5E6,</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; Olive=0x808000,</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; OliveDrab=0x6B8E23,</div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; Orange=0xFFA500,</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; OrangeRed=0xFF4500,</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; Orchid=0xDA70D6,</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; PaleGoldenrod=0xEEE8AA,</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; PaleGreen=0x98FB98,</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; PaleTurquoise=0xAFEEEE,</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; PaleVioletRed=0xDB7093,</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; PapayaWhip=0xFFEFD5,</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; PeachPuff=0xFFDAB9,</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; Peru=0xCD853F,</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; Pink=0xFFC0CB,</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; Plaid=0xCC5533,</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; Plum=0xDDA0DD,</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; PowderBlue=0xB0E0E6,</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; Purple=0x800080,</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; Red=0xFF0000,</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; RosyBrown=0xBC8F8F,</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; RoyalBlue=0x4169E1,</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; SaddleBrown=0x8B4513,</div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; Salmon=0xFA8072,</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; SandyBrown=0xF4A460,</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; SeaGreen=0x2E8B57,</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; Seashell=0xFFF5EE,</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; Sienna=0xA0522D,</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; Silver=0xC0C0C0,</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; SkyBlue=0x87CEEB,</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; SlateBlue=0x6A5ACD,</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; SlateGray=0x708090,</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; SlateGrey=0x708090,</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; Snow=0xFFFAFA,</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; SpringGreen=0x00FF7F,</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; SteelBlue=0x4682B4,</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; Tan=0xD2B48C,</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; Teal=0x008080,</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; Thistle=0xD8BFD8,</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; Tomato=0xFF6347,</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; Turquoise=0x40E0D0,</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; Violet=0xEE82EE,</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; Wheat=0xF5DEB3,</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; White=0xFFFFFF,</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; WhiteSmoke=0xF5F5F5,</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; Yellow=0xFFFF00,</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; YellowGreen=0x9ACD32,</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="comment">// LED RGB color that roughly approximates</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="comment">// the color of incandescent fairy lights,</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="comment">// assuming that you&#39;re using FastLED</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="comment">// color correction on your LEDs (recommended).</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; FairyLight=0xFFE42D,</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="comment">// If you are using no color correction, use this</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; FairyLightNCC=0xFF9D2A</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; } HTMLColorCode;</div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;};</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;</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;<span class="keyword">inline</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00707"></a><span class="lineno"> 707</span>&#160;{</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</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="l00709"></a><span class="lineno"> 709</span>&#160;}</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;<span class="keyword">inline</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00712"></a><span class="lineno"> 712</span>&#160;{</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">return</span> !(lhs == rhs);</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;<span class="keyword">inline</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00717"></a><span class="lineno"> 717</span>&#160;{</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; uint16_t sl, sr;</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; sl = lhs.r + lhs.g + lhs.b;</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; sr = rhs.r + rhs.g + rhs.b;</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">return</span> sl &lt; sr;</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;}</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;<span class="keyword">inline</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00725"></a><span class="lineno"> 725</span>&#160;{</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; uint16_t sl, sr;</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; sl = lhs.r + lhs.g + lhs.b;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; sr = rhs.r + rhs.g + rhs.b;</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">return</span> sl &gt; sr;</div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;}</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> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00733"></a><span class="lineno"> 733</span>&#160;{</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; uint16_t sl, sr;</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; sl = lhs.r + lhs.g + lhs.b;</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; sr = rhs.r + rhs.g + rhs.b;</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">return</span> sl &gt;= sr;</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;</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;<span class="keyword">inline</span> <a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((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="l00741"></a><span class="lineno"> 741</span>&#160;{</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; uint16_t sl, sr;</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; sl = lhs.r + lhs.g + lhs.b;</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; sr = rhs.r + rhs.g + rhs.b;</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">return</span> sl &lt;= sr;</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;}</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;</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;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</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="l00751"></a><span class="lineno"> 751</span>&#160;{</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</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="l00753"></a><span class="lineno"> 753</span>&#160; qadd8( p1.g, p2.g),</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; qadd8( p1.b, p2.b));</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;</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</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="l00759"></a><span class="lineno"> 759</span>&#160;{</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">return</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( <a class="code" href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a>( p1.r, p2.r),</div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a>( p1.g, p2.g),</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <a class="code" href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a>( p1.b, p2.b));</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;}</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</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="l00767"></a><span class="lineno"> 767</span>&#160;{</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">return</span> <a class="code" href="struct_c_r_g_b.html">CRGB</a>( <a class="code" href="group___math.html#ga9d113e85065df7c9006704ea6b6dcda4">qmul8</a>( p1.r, d),</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <a class="code" href="group___math.html#ga9d113e85065df7c9006704ea6b6dcda4">qmul8</a>( p1.g, d),</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <a class="code" href="group___math.html#ga9d113e85065df7c9006704ea6b6dcda4">qmul8</a>( p1.b, d));</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;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</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="l00775"></a><span class="lineno"> 775</span>&#160;{</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</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="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;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</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="l00782"></a><span class="lineno"> 782</span>&#160;{</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</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="l00784"></a><span class="lineno"> 784</span>&#160; p1.g &lt; p2.g ? p1.g : p2.g,</div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; p1.b &lt; p2.b ? p1.b : p2.b);</div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;}</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</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="l00790"></a><span class="lineno"> 790</span>&#160;{</div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</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="l00792"></a><span class="lineno"> 792</span>&#160; p1.g &gt; p2.g ? p1.g : p2.g,</div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; p1.b &gt; p2.b ? p1.b : p2.b);</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;}</div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;<a class="code" href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a>((always_inline))</div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</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="l00798"></a><span class="lineno"> 798</span>&#160;{</div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <a class="code" href="struct_c_r_g_b.html">CRGB</a> retval( p1);</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; retval.nscale8_video( d);</div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keywordflow">return</span> retval;</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">// Define RGB orderings</span></div>
-<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;<span class="keyword">enum</span> EOrder {</div>
-<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; RGB=0012,</div>
-<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; RBG=0021,</div>
-<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; GRB=0102,</div>
-<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; GBR=0120,</div>
-<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; BRG=0201,</div>
-<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; BGR=0210</div>
-<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;};</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;<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="group___color_enums_html_gadf6bcba67c9573665af20788c4431ae8"><div class="ttname"><a href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8">LEDColorCorrection</a></div><div class="ttdeci">LEDColorCorrection</div><div class="ttdef"><b>Definition:</b> color.h:7</div></div>
-<div class="ttc" id="group___color_enums_html_ga251e9e8dc2c7b981786b71706522b2a9"><div class="ttname"><a href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9">ColorTemperature</a></div><div class="ttdeci">ColorTemperature</div><div class="ttdef"><b>Definition:</b> color.h:29</div></div>
-<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) bool operator</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> delay.h:79</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 class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;<span class="comment">// Define RGB orderings</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;<span class="keyword">enum</span> EOrder {</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; RGB=0012,</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; RBG=0021,</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; GRB=0102,</div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; GBR=0120,</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; BRG=0201,</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; BGR=0210</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;FASTLED_NAMESPACE_END</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="ttc" id="group___math_html_ga9d113e85065df7c9006704ea6b6dcda4"><div class="ttname"><a href="group___math.html#ga9d113e85065df7c9006704ea6b6dcda4">qmul8</a></div><div class="ttdeci">LIB8STATIC uint8_t qmul8(uint8_t i, uint8_t j)</div><div class="ttdoc">saturating 8x8 bit multiplication, with 8 bit result </div><div class="ttdef"><b>Definition:</b> math8.h:258</div></div>
+<div class="ttc" id="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:83</div></div>
+<div class="ttc" id="group___math_html_gaaaa16f47aca46653d51793b1af177587"><div class="ttname"><a href="group___math.html#gaaaa16f47aca46653d51793b1af177587">qsub8</a></div><div class="ttdeci">LIB8STATIC uint8_t qsub8(uint8_t i, uint8_t j)</div><div class="ttdoc">subtract one byte from another, saturating at 0x00 </div><div class="ttdef"><b>Definition:</b> math8.h:77</div></div>
+<div class="ttc" id="group___scaling_html_ga700b7f510f32e8c91385093c436c27d9"><div class="ttname"><a href="group___scaling.html#ga700b7f510f32e8c91385093c436c27d9">nscale8x3_video</a></div><div class="ttdeci">LIB8STATIC void nscale8x3_video(uint8_t &amp;r, uint8_t &amp;g, uint8_t &amp;b, fract8 scale)</div><div class="ttdoc">scale three one byte values by a fourth one, which is treated as the numerator of a fraction whose de...</div><div class="ttdef"><b>Definition:</b> scale8.h:276</div></div>
+<div class="ttc" id="group___scaling_html_ga39579fcf09743f15545fe0b831ca313c"><div class="ttname"><a href="group___scaling.html#ga39579fcf09743f15545fe0b831ca313c">scale8_LEAVING_R1_DIRTY</a></div><div class="ttdeci">LIB8STATIC uint8_t scale8_LEAVING_R1_DIRTY(uint8_t i, fract8 scale)</div><div class="ttdoc">This version of scale8 does not clean up the R1 register on AVR If you are doing several &#39;scale8&#39;s in...</div><div class="ttdef"><b>Definition:</b> scale8.h:115</div></div>
+<div class="ttc" id="group___color_enums_html_gadf6bcba67c9573665af20788c4431ae8"><div class="ttname"><a href="group___color_enums.html#gadf6bcba67c9573665af20788c4431ae8">LEDColorCorrection</a></div><div class="ttdeci">LEDColorCorrection</div><div class="ttdef"><b>Definition:</b> color.h:9</div></div>
+<div class="ttc" id="group___scaling_html_ga572d0b441676c9d8ceb071fe8284b7e9"><div class="ttname"><a href="group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9">cleanup_R1</a></div><div class="ttdeci">LIB8STATIC void cleanup_R1()</div><div class="ttdoc">Clean up the r1 register after a series of *LEAVING_R1_DIRTY calls. </div><div class="ttdef"><b>Definition:</b> scale8.h:238</div></div>
+<div class="ttc" id="group___scaling_html_ga39bf87e5526120889086cab19ac749b1"><div class="ttname"><a href="group___scaling.html#ga39bf87e5526120889086cab19ac749b1">nscale8x3</a></div><div class="ttdeci">LIB8STATIC void nscale8x3(uint8_t &amp;r, uint8_t &amp;g, uint8_t &amp;b, fract8 scale)</div><div class="ttdoc">scale three one byte values by a fourth one, which is treated as the numerator of a fraction whose de...</div><div class="ttdef"><b>Definition:</b> scale8.h:253</div></div>
+<div class="ttc" id="group___color_enums_html_ga251e9e8dc2c7b981786b71706522b2a9"><div class="ttname"><a href="group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9">ColorTemperature</a></div><div class="ttdeci">ColorTemperature</div><div class="ttdef"><b>Definition:</b> color.h:31</div></div>
+<div class="ttc" id="group___bitswap_html_ga01396a2e40133293c3badab349ac99f0"><div class="ttname"><a href="group___bitswap.html#ga01396a2e40133293c3badab349ac99f0">__attribute__</a></div><div class="ttdeci">__attribute__((always_inline)) bool operator</div><div class="ttdoc">Do an 8byte by 8bit rotation. </div><div class="ttdef"><b>Definition:</b> fastled_delay.h:82</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:18</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/platforms_8h_source.html b/docs/3.1/platforms_8h_source.html
index e1dbc0ae..85ce24e0 100644
--- a/docs/3.1/platforms_8h_source.html
+++ b/docs/3.1/platforms_8h_source.html
@@ -92,22 +92,33 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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 class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#if defined(NRF51)</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/nrf51/fastled_arm_nrf51.h&quot;</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#elif defined(__MK20DX128__) || defined(__MK20DX256__)</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// Include k20/T3 headers</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/k20/fastled_arm_k20.h&quot;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#elif defined(__MKL26Z64__)</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// Include kl26/T-LC headers</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/kl26/fastled_arm_kl26.h&quot;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#elif defined(__SAM3X8E__)</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// Include sam/due headers</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/sam/fastled_arm_sam.h&quot;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#elif defined(STM32F10X_MD)</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/stm32/fastled_arm_stm32.h&quot;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#elif defined(__SAMD21G18A__)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;platforms/arm/d21/fastled_arm_d21.h&quot;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#elif defined(__XTENSA__)</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#error &quot;XTENSA-architecture microcontrollers are not supported&quot;</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// AVR platforms</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;platforms/avr/fastled_avr.h&quot;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/power__mgt_8h_source.html b/docs/3.1/power__mgt_8h_source.html
index 81aa3b44..c8311bb0 100644
--- a/docs/3.1/power__mgt_8h_source.html
+++ b/docs/3.1/power__mgt_8h_source.html
@@ -92,54 +92,58 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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="l00006"></a><span class="lineno"> 6</span>&#160;FASTLED_NAMESPACE_BEGIN</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">// Power Control setup functions</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">// Example:</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// set_max_power_in_volts_and_milliamps( 5, 400);</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="keywordtype">void</span> set_max_power_in_volts_and_milliamps( uint8_t volts, uint32_t milliamps);</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keywordtype">void</span> set_max_power_in_milliwatts( uint32_t powerInmW);</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="l00016"></a><span class="lineno"> 16</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="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">// Power Control &#39;show&#39; and &#39;delay&#39; functions</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">// These are drop-in replacements for FastLED.show() and FastLED.delay()</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</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="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">// FastLED.show() and FastLED.delay() with these two functions.</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="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">// Example:</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">// // was: FastLED.show();</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">// // now is:</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment">// show_at_max_brightness_for_power();</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keywordtype">void</span> show_at_max_brightness_for_power();</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keywordtype">void</span> delay_at_max_brightness_for_power( uint16_t ms);</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">// Power Control internal helper functions</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">// calculate_unscaled_power_mW tells you how many milliwatts the current</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment">// LED data would draw at brightness = 255.</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">// calculate_max_brightness_for_power_mW tells you the highest brightness</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</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="l00041"></a><span class="lineno"> 41</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="l00042"></a><span class="lineno"> 42</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="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment">// target_brightess you supply, but may be lower.</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</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="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 class="line"><a name="l00046"></a><span class="lineno"> 46</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="l00047"></a><span class="lineno"> 47</span>&#160;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;FASTLED_NAMESPACE_END</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">// POWER_MGT_H</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">#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:83</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/search/all_0.js b/docs/3.1/search/all_0.js
index 460de856..6127d55a 100644
--- a/docs/3.1/search/all_0.js
+++ b/docs/3.1/search/all_0.js
@@ -1,5 +1,4 @@
var searchData=
[
- ['_5f_5fattribute_5f_5f',['__attribute__',['../struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b',1,'PixelController::__attribute__((always_inline)) inline bool has(int n)'],['../struct_pixel_controller.html#afbe76a814e6bec02854dd4df167567b4',1,'PixelController::__attribute__((always_inline)) inline int advanceBy()'],['../struct_pixel_controller.html#a404558c7da7f3f6fae768bc45af9dc03',1,'PixelController::__attribute__((always_inline)) inline void advanceData()'],['../struct_pixel_controller.html#a900493d7e9e345d0cb6e602186151e73',1,'PixelController::__attribute__((always_inline)) inline void stepDithering()'],['../struct_pixel_controller.html#a9b0bc80097821046dbda7bbbf38dd7df',1,'PixelController::__attribute__((always_inline)) inline void preStepFirstByteDithering()'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) inline void swapbits8(bitswap_type in:&#160;delay.h'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) inline void delaycycles():&#160;delay.h'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) inline void delaycycles&lt;-6 &gt;():&#160;delay.h'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) bool operator:&#160;delay.h']]],
- ['_5fduepin',['_DUEPIN',['../class___d_u_e_p_i_n.html',1,'']]]
+ ['_5f_5fattribute_5f_5f',['__attribute__',['../struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b',1,'PixelController::__attribute__((always_inline)) inline bool has(int n)'],['../struct_pixel_controller.html#afbe76a814e6bec02854dd4df167567b4',1,'PixelController::__attribute__((always_inline)) inline int advanceBy()'],['../struct_pixel_controller.html#a404558c7da7f3f6fae768bc45af9dc03',1,'PixelController::__attribute__((always_inline)) inline void advanceData()'],['../struct_pixel_controller.html#a900493d7e9e345d0cb6e602186151e73',1,'PixelController::__attribute__((always_inline)) inline void stepDithering()'],['../struct_pixel_controller.html#a9b0bc80097821046dbda7bbbf38dd7df',1,'PixelController::__attribute__((always_inline)) inline void preStepFirstByteDithering()'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) inline void swapbits8(bitswap_type in:&#160;fastled_delay.h'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) inline void delaycycles():&#160;fastled_delay.h'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) inline void delaycycles&lt;-6 &gt;():&#160;fastled_delay.h'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) bool operator:&#160;fastled_delay.h']]]
];
diff --git a/docs/3.1/search/all_1.js b/docs/3.1/search/all_1.js
index 02222ec5..5abb1b5e 100644
--- a/docs/3.1/search/all_1.js
+++ b/docs/3.1/search/all_1.js
@@ -1,8 +1,13 @@
var searchData=
[
+ ['abs8',['abs8',['../group___math.html#ga4bf8996c4a130e96521495d4a1395a01',1,'math8.h']]],
+ ['add8',['add8',['../group___math.html#ga9f1f93145ca1955562b7f50f5db96ac1',1,'math8.h']]],
['addleds',['addLeds',['../class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f',1,'CFastLED::addLeds(CLEDController *pLed, struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)'],['../class_c_fast_l_e_d.html#a79df28eb68fc2062b995f9000aed274c',1,'CFastLED::addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)'],['../class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9',1,'CFastLED::addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)'],['../class_c_fast_l_e_d.html#ac4dff92f45048399edb0812a02ab9d96',1,'CFastLED::addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)'],['../class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9',1,'CFastLED::addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)']]],
+ ['addmod8',['addmod8',['../group___math.html#ga2bcd51c47538dbc933999382e272a7a7',1,'math8.h']]],
['apa102controller',['APA102Controller',['../class_a_p_a102_controller.html',1,'']]],
['apa104',['APA104',['../class_a_p_a104.html',1,'']]],
+ ['avg7',['avg7',['../group___math.html#ga30558a835c484b418165909118e702b1',1,'math8.h']]],
+ ['avg8',['avg8',['../group___math.html#ga6bfedf0473d4c3705e8feeb6a25b9ea5',1,'math8.h']]],
['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.js b/docs/3.1/search/all_10.js
index 6feb8274..a40ac5d5 100644
--- a/docs/3.1/search/all_10.js
+++ b/docs/3.1/search/all_10.js
@@ -1,4 +1,7 @@
var searchData=
[
- ['q',['q',['../classq.html',1,'']]]
+ ['q',['q',['../classq.html',1,'']]],
+ ['qadd7',['qadd7',['../group___math.html#gadf60ccff727f52078aecdd5873b6f0bc',1,'math8.h']]],
+ ['qmul8',['qmul8',['../group___math.html#ga9d113e85065df7c9006704ea6b6dcda4',1,'math8.h']]],
+ ['qsub8',['qsub8',['../group___math.html#gaaaa16f47aca46653d51793b1af177587',1,'math8.h']]]
];
diff --git a/docs/3.1/search/all_11.js b/docs/3.1/search/all_11.js
index b9205585..8cf3cca2 100644
--- a/docs/3.1/search/all_11.js
+++ b/docs/3.1/search/all_11.js
@@ -1,4 +1,10 @@
var searchData=
[
- ['readme',['README',['../md__r_e_a_d_m_e.html',1,'']]]
+ ['readme',['README',['../md__r_e_a_d_m_e.html',1,'']]],
+ ['rand16seed',['rand16seed',['../group___random.html#ga6f2ab7e21aae59453832b2933632f016',1,'rand16seed():&#160;lib8tion.cpp'],['../group___random.html#ga6f2ab7e21aae59453832b2933632f016',1,'rand16seed():&#160;lib8tion.cpp']]],
+ ['random16',['random16',['../group___random.html#ga17034d936ef716efe820e11c1df043b0',1,'random16():&#160;random8.h'],['../group___random.html#ga7236600fa1c01fc63665a9b8db508359',1,'random16(uint16_t lim):&#160;random8.h'],['../group___random.html#ga69d2cf7b8d730a0c36eec8711dbb134f',1,'random16(uint16_t min, uint16_t lim):&#160;random8.h']]],
+ ['random16_5fadd_5fentropy',['random16_add_entropy',['../group___random.html#ga1078b2029a50e86c93ccf4e3e1d85e7d',1,'random8.h']]],
+ ['random16_5fget_5fseed',['random16_get_seed',['../group___random.html#ga860bc64bfca4ada980e70cf1e03dedd8',1,'random8.h']]],
+ ['random16_5fset_5fseed',['random16_set_seed',['../group___random.html#ga95e371c2438843e0ed1ed83412b28c99',1,'random8.h']]],
+ ['random8',['random8',['../group___random.html#ga4e63c74426f6516f28470dc1b814aefe',1,'random8():&#160;random8.h'],['../group___random.html#ga216b1cfe4f62f92f5493515c6b74220c',1,'random8(uint8_t lim):&#160;random8.h'],['../group___random.html#ga2829e2c714f0a0f4617a65c4eddccec2',1,'random8(uint8_t min, uint8_t lim):&#160;random8.h']]]
];
diff --git a/docs/3.1/search/all_12.js b/docs/3.1/search/all_12.js
index 480bd154..80d5f500 100644
--- a/docs/3.1/search/all_12.js
+++ b/docs/3.1/search/all_12.js
@@ -1,23 +1,38 @@
var searchData=
[
+ ['scale16',['scale16',['../group___scaling.html#ga1ff8ac00ad78e22acc7bb7445bfdb145',1,'scale8.h']]],
+ ['scale16by8',['scale16by8',['../group___scaling.html#gaf34fde0746c9c2e5ed44f9c437a2267e',1,'scale8.h']]],
+ ['scale8',['scale8',['../group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af',1,'scale8.h']]],
+ ['scale8_5fleaving_5fr1_5fdirty',['scale8_LEAVING_R1_DIRTY',['../group___scaling.html#ga39579fcf09743f15545fe0b831ca313c',1,'scale8.h']]],
+ ['scale8_5fvideo',['scale8_video',['../group___scaling.html#ga333095ffa436c94d3e77ee9dc39da1c1',1,'scale8.h']]],
+ ['scale8_5fvideo_5fleaving_5fr1_5fdirty',['scale8_video_LEAVING_R1_DIRTY',['../group___scaling.html#gab341cef8d46232269bb70092fed9eb75',1,'scale8.h']]],
+ ['scaling_20functions',['Scaling functions',['../group___scaling.html',1,'']]],
['selectable',['Selectable',['../class_selectable.html',1,'']]],
['setbrightness',['setBrightness',['../class_c_fast_l_e_d.html#a730ba7d967e882b4b893689cf333b2eb',1,'CFastLED']]],
['setcorrection',['setCorrection',['../class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8',1,'CLEDController::setCorrection(CRGB correction)'],['../class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9',1,'CLEDController::setCorrection(LEDColorCorrection correction)'],['../class_c_fast_l_e_d.html#ad266c3e649cc12a6dc49a1e229acc282',1,'CFastLED::setCorrection()']]],
['setdither',['setDither',['../class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517',1,'CLEDController::setDither()'],['../class_c_fast_l_e_d.html#a7ae5d3864df01101d82d242c123ffb36',1,'CFastLED::setDither()']]],
['setleds',['setLeds',['../class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037',1,'CLEDController']]],
- ['setmaxrefreshrate',['setMaxRefreshRate',['../class_c_fast_l_e_d.html#a09f4d61853d88482fa5824144c8127ed',1,'CFastLED']]],
+ ['setmaxrefreshrate',['setMaxRefreshRate',['../class_c_fast_l_e_d.html#a1f39e8404db214bbd6a776f52a77d8b1',1,'CFastLED']]],
['settemperature',['setTemperature',['../class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883',1,'CLEDController::setTemperature(CRGB temperature)'],['../class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4',1,'CLEDController::setTemperature(ColorTemperature temperature)'],['../class_c_fast_l_e_d.html#a28c2dfb0ec592db03f3063ade135f19f',1,'CFastLED::setTemperature()']]],
['show',['show',['../class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5',1,'LPD8806Controller::show()'],['../class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0',1,'WS2801Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0',1,'WS2801Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332',1,'APA102Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332',1,'APA102Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81',1,'P9813Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81',1,'P9813Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d',1,'SM16716Controller::show()'],['../class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f',1,'CLEDController::show(const struct CRGB *data, int nLeds, CRGB scale)=0'],['../class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb',1,'CLEDController::show(const struct CRGB *data, int nLeds, uint8_t brightness)'],['../class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186',1,'DMXSimpleController::show()'],['../class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1',1,'DMXSerialController::show()'],['../class_c_fast_l_e_d.html#a83afdd1e2a21f33ac4f8d2610d6e331b',1,'CFastLED::show(uint8_t scale)'],['../class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de',1,'CFastLED::show()']]],
['showcolor',['showColor',['../class_l_p_d8806_controller.html#a4f6471eddcfe5445502b02f1f3179259',1,'LPD8806Controller::showColor()'],['../class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501',1,'WS2801Controller::showColor()'],['../class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428',1,'APA102Controller::showColor()'],['../class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a',1,'P9813Controller::showColor()'],['../class_s_m16716_controller.html#a7df8b8a34e0dc067c69aa056deca9677',1,'SM16716Controller::showColor()'],['../class_c_l_e_d_controller.html#a068fa50d8c7d31bd8537b731eea84c92',1,'CLEDController::showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)=0'],['../class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b',1,'CLEDController::showColor(const struct CRGB &amp;data, int nLeds, uint8_t brightness)'],['../class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4',1,'CLEDController::showColor(const struct CRGB &amp;data, uint8_t brightness=255)'],['../class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1',1,'DMXSimpleController::showColor()'],['../class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b',1,'DMXSerialController::showColor()'],['../class_c_fast_l_e_d.html#a7315b060d295bad5fbd32e50eaaf02b0',1,'CFastLED::showColor(const struct CRGB &amp;color, uint8_t scale)'],['../class_c_fast_l_e_d.html#a570df74cf09e6215c3647333d2b479a9',1,'CFastLED::showColor(const struct CRGB &amp;color)']]],
['showleds',['showLeds',['../class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076',1,'CLEDController']]],
+ ['sin16_5favr',['sin16_avr',['../group___trig.html#ga660ff60bfc5116525e50187de72009fc',1,'trig8.h']]],
+ ['sin16_5fc',['sin16_C',['../group___trig.html#ga0890962cb06b267617f4b06d7e9be5eb',1,'trig8.h']]],
+ ['sin8_5favr',['sin8_avr',['../group___trig.html#ga6aa1f993cbbc427d80da1ee2ccca86e7',1,'trig8.h']]],
+ ['sin8_5fc',['sin8_C',['../group___trig.html#ga46933a9b42921c6605588268d11f7c1e',1,'trig8.h']]],
['size',['size',['../class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08',1,'CLEDController::size()'],['../class_c_fast_l_e_d.html#a18fba22754d2a1a206fc5db8d24a92d0',1,'CFastLED::size()']]],
['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,'']]],
['spioutput_3c_20spi2_5fdata_2c_20spi2_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI2_DATA, SPI2_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
+ ['spioutput_3c_20spi2_5fdata_2c_20spi_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
+ ['spioutput_3c_20spi_5fdata_2c_20spi2_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
['spioutput_3c_20spi_5fdata_2c_20spi_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI_DATA, SPI_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
['spioutput_3c_20spi_5fuart0_5fdata_2c_20spi_5fuart0_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
['spioutput_3c_20spi_5fuart1_5fdata_2c_20spi_5fuart1_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
- ['sub4',['sub4',['../structsub4.html',1,'']]]
+ ['sqrt16',['sqrt16',['../group___math.html#ga66ecef97faa5f9b92c49766651c5afe9',1,'math8.h']]],
+ ['sub4',['sub4',['../structsub4.html',1,'']]],
+ ['sub8',['sub8',['../group___math.html#ga0c40c15ab5af36ddabded161941f2091',1,'math8.h']]]
];
diff --git a/docs/3.1/search/all_13.js b/docs/3.1/search/all_13.js
index 04655267..e7a08ef0 100644
--- a/docs/3.1/search/all_13.js
+++ b/docs/3.1/search/all_13.js
@@ -11,6 +11,7 @@ var searchData=
['tm1829controller1600khz',['TM1829Controller1600Khz',['../class_t_m1829_controller1600_khz.html',1,'']]],
['tm1829controller800khz',['TM1829Controller800Khz',['../class_t_m1829_controller800_khz.html',1,'']]],
['todo_20list',['Todo List',['../todo.html',1,'']]],
+ ['trgbgradientpaletteentryunion',['TRGBGradientPaletteEntryUnion',['../union_t_r_g_b_gradient_palette_entry_union.html',1,'']]],
['tungsten100w',['Tungsten100W',['../group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a631a1e96b10db9220ab27d70a320ac48',1,'color.h']]],
['tungsten40w',['Tungsten40W',['../group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a8f4ad60002c8856dc1f153e2eaa2de91',1,'color.h']]],
['typical8mmpixel',['Typical8mmPixel',['../group___color_enums.html#ggadf6bcba67c9573665af20788c4431ae8af617057397c2a4f89b4bf2783cdac24b',1,'color.h']]],
diff --git a/docs/3.1/search/all_2.js b/docs/3.1/search/all_2.js
index fb6d3839..2115ee55 100644
--- a/docs/3.1/search/all_2.js
+++ b/docs/3.1/search/all_2.js
@@ -2,5 +2,9 @@ var searchData=
[
['bit_20swapping_2frotate',['Bit swapping/rotate',['../group___bitswap.html',1,'']]],
['bitswap_2eh',['bitswap.h',['../bitswap_8h.html',1,'']]],
- ['bitswap_5ftype',['bitswap_type',['../unionbitswap__type.html',1,'']]]
+ ['bitswap_5ftype',['bitswap_type',['../unionbitswap__type.html',1,'']]],
+ ['brighten8_5flin',['brighten8_lin',['../group___dimming.html#ga094bda002b416c66e57521fc93878830',1,'scale8.h']]],
+ ['brighten8_5fraw',['brighten8_raw',['../group___dimming.html#gae8e36472a70f3016595048532d6c3a2d',1,'scale8.h']]],
+ ['brighten8_5fvideo',['brighten8_video',['../group___dimming.html#gad21876a676bcf26c47f957faed23f9bb',1,'scale8.h']]],
+ ['basic_20math_20operations',['Basic math operations',['../group___math.html',1,'']]]
];
diff --git a/docs/3.1/search/all_3.js b/docs/3.1/search/all_3.js
index 0b226b56..063c8ec0 100644
--- a/docs/3.1/search/all_3.js
+++ b/docs/3.1/search/all_3.js
@@ -6,6 +6,7 @@ var searchData=
['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,'']]],
+ ['cleanup_5fr1',['cleanup_R1',['../group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9',1,'scale8.h']]],
['clear',['clear',['../class_c_fast_l_e_d.html#a042989511cbc42390620bedc196ea956',1,'CFastLED']]],
['clearbluesky',['ClearBlueSky',['../group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9acb80944aa5bed3031b19f1e1101f6a9a',1,'color.h']]],
['cleardata',['clearData',['../class_c_fast_l_e_d.html#ac4f613f1b3e618528dca3189df88ce80',1,'CFastLED']]],
@@ -17,6 +18,8 @@ var searchData=
['color_20correction_2ftemperature',['Color correction/temperature',['../group___color_enums.html',1,'']]],
['colortemperature',['ColorTemperature',['../group___color_enums.html#ga251e9e8dc2c7b981786b71706522b2a9',1,'color.h']]],
['color_20utility_20functions',['Color utility functions',['../group___colorutils.html',1,'']]],
+ ['cos16',['cos16',['../group___trig.html#ga056952ebed39f55880bb353857b47075',1,'trig8.h']]],
+ ['cos8',['cos8',['../group___trig.html#ga4432f985c94f5bff715db402d767b0e8',1,'trig8.h']]],
['count',['count',['../class_c_fast_l_e_d.html#ae5730545ea18b1f5228172f9d246beb6',1,'CFastLED']]],
['countfps',['countFPS',['../class_c_fast_l_e_d.html#a61d27e179c9b68bde89d220aebc0de32',1,'CFastLED']]],
['crgb',['CRGB',['../struct_c_r_g_b.html',1,'']]],
diff --git a/docs/3.1/search/all_4.js b/docs/3.1/search/all_4.js
index fe44135e..8bb91ba5 100644
--- a/docs/3.1/search/all_4.js
+++ b/docs/3.1/search/all_4.js
@@ -2,6 +2,10 @@ var searchData=
[
['data_5fnop',['DATA_NOP',['../class_d_a_t_a___n_o_p.html',1,'']]],
['delay',['delay',['../class_c_fast_l_e_d.html#a6819ff831058a710d4582dfc09817202',1,'CFastLED']]],
+ ['dim8_5flin',['dim8_lin',['../group___dimming.html#ga3f94d2455e0aa92133f77af8747b5914',1,'scale8.h']]],
+ ['dim8_5fraw',['dim8_raw',['../group___dimming.html#gae51352a3522bb8eae5e17dbee97aa1aa',1,'scale8.h']]],
+ ['dim8_5fvideo',['dim8_video',['../group___dimming.html#ga40a13446a2022dc489be8b2a8f2fa494',1,'scale8.h']]],
+ ['dimming_20and_20brightening_20functions',['Dimming and brightening functions',['../group___dimming.html',1,'']]],
['directsunlight',['DirectSunlight',['../group___color_enums.html#gga251e9e8dc2c7b981786b71706522b2a9a890e0555ad95071fa4391a5775a38621',1,'color.h']]],
['dmxserial',['DMXSERIAL',['../class_d_m_x_s_e_r_i_a_l.html',1,'']]],
['dmxserialcontroller',['DMXSerialController',['../class_d_m_x_serial_controller.html',1,'']]],
diff --git a/docs/3.1/search/all_6.js b/docs/3.1/search/all_6.js
index 2d9e1fdc..9dcf8bd8 100644
--- a/docs/3.1/search/all_6.js
+++ b/docs/3.1/search/all_6.js
@@ -6,5 +6,9 @@ var searchData=
['fill_5fgradient',['fill_gradient',['../group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98',1,'colorutils.h']]],
['fill_5frainbow',['fill_rainbow',['../group___colorutils.html#gafcc7dac88e25736ebc49a9faf2a1c2e2',1,'fill_rainbow(struct CRGB *pFirstLED, int numToFill, uint8_t initialhue, uint8_t deltahue):&#160;colorutils.cpp'],['../group___colorutils.html#gac3052a230febda0693517ce9d12aa452',1,'fill_rainbow(struct CHSV *targetArray, int numToFill, uint8_t initialhue, uint8_t deltahue):&#160;colorutils.cpp'],['../group___colorutils.html#gafcc7dac88e25736ebc49a9faf2a1c2e2',1,'fill_rainbow(struct CRGB *pFirstLED, int numToFill, uint8_t initialhue, uint8_t deltahue=5):&#160;colorutils.cpp'],['../group___colorutils.html#gac3052a230febda0693517ce9d12aa452',1,'fill_rainbow(struct CHSV *targetArray, int numToFill, uint8_t initialhue, uint8_t deltahue=5):&#160;colorutils.cpp']]],
['fill_5fsolid',['fill_solid',['../group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b',1,'fill_solid(struct CRGB *leds, int numToFill, const struct CRGB &amp;color):&#160;colorutils.cpp'],['../group___colorutils.html#gad1abf13328e8dd1c483a270af77b17ed',1,'fill_solid(struct CHSV *targetArray, int numToFill, const struct CHSV &amp;hsvColor):&#160;colorutils.cpp'],['../group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b',1,'fill_solid(struct CRGB *leds, int numToFill, const struct CRGB &amp;color):&#160;colorutils.cpp'],['../group___colorutils.html#gad1abf13328e8dd1c483a270af77b17ed',1,'fill_solid(struct CHSV *targetArray, int numToFill, const struct CHSV &amp;hsvColor):&#160;colorutils.cpp']]],
- ['fastled3_2e0',['FastLED3.0',['../md_release_notes.html',1,'']]]
+ ['fl_5fprogmem',['FL_PROGMEM',['../group___colorpalletes.html#ga57a38373661043f74b292976e83c687b',1,'FL_PROGMEM():&#160;colorpalettes.cpp'],['../group___colorpalletes.html#ga57a38373661043f74b292976e83c687b',1,'FL_PROGMEM():&#160;colorpalettes.h']]],
+ ['fast_20math_20functions',['Fast math functions',['../group__lib8tion.html',1,'']]],
+ ['fastled3_2e0',['FastLED3.0',['../md_release_notes.html',1,'']]],
+ ['fast_20random_20number_20generators',['Fast random number generators',['../group___random.html',1,'']]],
+ ['fast_20trig_20functions',['Fast trig functions',['../group___trig.html',1,'']]]
];
diff --git a/docs/3.1/search/all_c.js b/docs/3.1/search/all_c.js
index 6cab743a..c85c3e10 100644
--- a/docs/3.1/search/all_c.js
+++ b/docs/3.1/search/all_c.js
@@ -1,4 +1,7 @@
var searchData=
[
+ ['m0_2dclocklessnotes',['M0-clocklessnotes',['../md__m0-clocklessnotes.html',1,'']]],
+ ['mod8',['mod8',['../group___math.html#gaa5e80daec10cc13bf1eca8b125ee0e88',1,'math8.h']]],
+ ['mul8',['mul8',['../group___math.html#ga10181a03cf8b8428fc524aa78e7fbf7f',1,'math8.h']]],
['multipixelcontroller',['MultiPixelController',['../struct_multi_pixel_controller.html',1,'']]]
];
diff --git a/docs/3.1/search/all_d.js b/docs/3.1/search/all_d.js
index eca81f96..08d151e5 100644
--- a/docs/3.1/search/all_d.js
+++ b/docs/3.1/search/all_d.js
@@ -3,5 +3,11 @@ var searchData=
['neopixel',['NEOPIXEL',['../class_n_e_o_p_i_x_e_l.html',1,'']]],
['next',['next',['../class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565',1,'CLEDController']]],
['noise_20functions',['Noise functions',['../group___noise.html',1,'']]],
- ['noise_2eh',['noise.h',['../noise_8h.html',1,'']]]
+ ['noise_2eh',['noise.h',['../noise_8h.html',1,'']]],
+ ['nscale8_5fleaving_5fr1_5fdirty',['nscale8_LEAVING_R1_DIRTY',['../group___scaling.html#ga5f6dde3d9398f4b389c96e759a3f7b80',1,'scale8.h']]],
+ ['nscale8_5fvideo_5fleaving_5fr1_5fdirty',['nscale8_video_LEAVING_R1_DIRTY',['../group___scaling.html#ga2a580fcaa010558218faae95d1936635',1,'scale8.h']]],
+ ['nscale8x2',['nscale8x2',['../group___scaling.html#ga6f419761a744efed4bae8875ac07aef0',1,'scale8.h']]],
+ ['nscale8x2_5fvideo',['nscale8x2_video',['../group___scaling.html#ga4204edd4a3f8aac7124a10f1f5cfccfe',1,'scale8.h']]],
+ ['nscale8x3',['nscale8x3',['../group___scaling.html#ga39bf87e5526120889086cab19ac749b1',1,'scale8.h']]],
+ ['nscale8x3_5fvideo',['nscale8x3_video',['../group___scaling.html#ga700b7f510f32e8c91385093c436c27d9',1,'scale8.h']]]
];
diff --git a/docs/3.1/search/all_f.js b/docs/3.1/search/all_f.js
index 77fe63c4..2791dd2b 100644
--- a/docs/3.1/search/all_f.js
+++ b/docs/3.1/search/all_f.js
@@ -1,8 +1,8 @@
var searchData=
[
['pre_2ddefined_20color_20palletes',['Pre-defined color palletes',['../group___colorpalletes.html',1,'']]],
+ ['porting',['PORTING',['../md__p_o_r_t_i_n_g.html',1,'']]],
['p9813controller',['P9813Controller',['../class_p9813_controller.html',1,'']]],
['pin',['Pin',['../class_pin.html',1,'']]],
- ['pixelcontroller',['PixelController',['../struct_pixel_controller.html',1,'PixelController&lt; RGB_ORDER &gt;'],['../struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71',1,'PixelController::PixelController(const PixelController &amp;other)'],['../struct_pixel_controller.html#a81403c8810658d3c41cb210703bbfc00',1,'PixelController::PixelController(const uint8_t *d, int len, CRGB &amp;s, EDitherMode dither=BINARY_DITHER, bool advance=true, uint8_t skip=0)']]],
- ['progmem',['PROGMEM',['../group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119',1,'PROGMEM():&#160;colorpalettes.cpp'],['../group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119',1,'PROGMEM():&#160;colorpalettes.h']]]
+ ['pixelcontroller',['PixelController',['../struct_pixel_controller.html',1,'PixelController&lt; RGB_ORDER &gt;'],['../struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71',1,'PixelController::PixelController(const PixelController &amp;other)'],['../struct_pixel_controller.html#a81403c8810658d3c41cb210703bbfc00',1,'PixelController::PixelController(const uint8_t *d, int len, CRGB &amp;s, EDitherMode dither=BINARY_DITHER, bool advance=true, uint8_t skip=0)']]]
];
diff --git a/docs/3.1/search/classes_0.js b/docs/3.1/search/classes_0.js
index 13185060..bf625714 100644
--- a/docs/3.1/search/classes_0.js
+++ b/docs/3.1/search/classes_0.js
@@ -1,4 +1,7 @@
var searchData=
[
- ['_5fduepin',['_DUEPIN',['../class___d_u_e_p_i_n.html',1,'']]]
+ ['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_1.js b/docs/3.1/search/classes_1.js
index bf625714..de7976eb 100644
--- a/docs/3.1/search/classes_1.js
+++ b/docs/3.1/search/classes_1.js
@@ -1,7 +1,4 @@
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,'']]]
+ ['bitswap_5ftype',['bitswap_type',['../unionbitswap__type.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_10.js b/docs/3.1/search/classes_10.js
index 596dc324..938825cd 100644
--- a/docs/3.1/search/classes_10.js
+++ b/docs/3.1/search/classes_10.js
@@ -1,12 +1,9 @@
var searchData=
[
- ['tbytesforlong',['tBytesForLong',['../uniont_bytes_for_long.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,'']]]
+ ['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,'']]],
+ ['ucs1904',['UCS1904',['../class_u_c_s1904.html',1,'']]],
+ ['ucs1904controller800khz',['UCS1904Controller800Khz',['../class_u_c_s1904_controller800_khz.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_11.js b/docs/3.1/search/classes_11.js
index 938825cd..a95343bb 100644
--- a/docs/3.1/search/classes_11.js
+++ b/docs/3.1/search/classes_11.js
@@ -1,9 +1,13 @@
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,'']]],
- ['ucs1904',['UCS1904',['../class_u_c_s1904.html',1,'']]],
- ['ucs1904controller800khz',['UCS1904Controller800Khz',['../class_u_c_s1904_controller800_khz.html',1,'']]]
+ ['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,'']]],
+ ['ws2812',['WS2812',['../class_w_s2812.html',1,'']]],
+ ['ws2812b',['WS2812B',['../class_w_s2812_b.html',1,'']]],
+ ['ws2812controller800khz',['WS2812Controller800Khz',['../class_w_s2812_controller800_khz.html',1,'']]],
+ ['ws2812controller800khz_3c_20data_5fpin_2c_20grb_20_3e',['WS2812Controller800Khz&lt; DATA_PIN, GRB &gt;',['../class_w_s2812_controller800_khz.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_2.js b/docs/3.1/search/classes_2.js
index de7976eb..d61d405d 100644
--- a/docs/3.1/search/classes_2.js
+++ b/docs/3.1/search/classes_2.js
@@ -1,4 +1,14 @@
var searchData=
[
- ['bitswap_5ftype',['bitswap_type',['../unionbitswap__type.html',1,'']]]
+ ['ceveryntimeperiods',['CEveryNTimePeriods',['../class_c_every_n_time_periods.html',1,'']]],
+ ['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.js b/docs/3.1/search/classes_3.js
index d61d405d..f629c357 100644
--- a/docs/3.1/search/classes_3.js
+++ b/docs/3.1/search/classes_3.js
@@ -1,14 +1,8 @@
var searchData=
[
- ['ceveryntimeperiods',['CEveryNTimePeriods',['../class_c_every_n_time_periods.html',1,'']]],
- ['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,'']]]
+ ['data_5fnop',['DATA_NOP',['../class_d_a_t_a___n_o_p.html',1,'']]],
+ ['dmxserial',['DMXSERIAL',['../class_d_m_x_s_e_r_i_a_l.html',1,'']]],
+ ['dmxserialcontroller',['DMXSerialController',['../class_d_m_x_serial_controller.html',1,'']]],
+ ['dmxsimple',['DMXSIMPLE',['../class_d_m_x_s_i_m_p_l_e.html',1,'']]],
+ ['dmxsimplecontroller',['DMXSimpleController',['../class_d_m_x_simple_controller.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_4.js b/docs/3.1/search/classes_4.js
index f629c357..81325af3 100644
--- a/docs/3.1/search/classes_4.js
+++ b/docs/3.1/search/classes_4.js
@@ -1,8 +1,6 @@
var searchData=
[
- ['data_5fnop',['DATA_NOP',['../class_d_a_t_a___n_o_p.html',1,'']]],
- ['dmxserial',['DMXSERIAL',['../class_d_m_x_s_e_r_i_a_l.html',1,'']]],
- ['dmxserialcontroller',['DMXSerialController',['../class_d_m_x_serial_controller.html',1,'']]],
- ['dmxsimple',['DMXSIMPLE',['../class_d_m_x_s_i_m_p_l_e.html',1,'']]],
- ['dmxsimplecontroller',['DMXSimpleController',['../class_d_m_x_simple_controller.html',1,'']]]
+ ['fastpin',['FastPin',['../class_fast_pin.html',1,'']]],
+ ['fastpin_3c_20clock_5fpin_20_3e',['FastPin&lt; CLOCK_PIN &gt;',['../class_fast_pin.html',1,'']]],
+ ['fastpinbb',['FastPinBB',['../class_fast_pin_b_b.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_5.js b/docs/3.1/search/classes_5.js
index 81325af3..7995504d 100644
--- a/docs/3.1/search/classes_5.js
+++ b/docs/3.1/search/classes_5.js
@@ -1,6 +1,7 @@
var searchData=
[
- ['fastpin',['FastPin',['../class_fast_pin.html',1,'']]],
- ['fastpin_3c_20clock_5fpin_20_3e',['FastPin&lt; CLOCK_PIN &gt;',['../class_fast_pin.html',1,'']]],
- ['fastpinbb',['FastPinBB',['../class_fast_pin_b_b.html',1,'']]]
+ ['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_6.js b/docs/3.1/search/classes_6.js
index 7995504d..775ca468 100644
--- a/docs/3.1/search/classes_6.js
+++ b/docs/3.1/search/classes_6.js
@@ -1,7 +1,5 @@
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,'']]]
+ ['ieee754binary32_5ft',['IEEE754binary32_t',['../union_i_e_e_e754binary32__t.html',1,'']]],
+ ['inputpin',['InputPin',['../class_input_pin.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_7.js b/docs/3.1/search/classes_7.js
index 775ca468..0e8dba7c 100644
--- a/docs/3.1/search/classes_7.js
+++ b/docs/3.1/search/classes_7.js
@@ -1,5 +1,4 @@
var searchData=
[
- ['ieee754binary32_5ft',['IEEE754binary32_t',['../union_i_e_e_e754binary32__t.html',1,'']]],
- ['inputpin',['InputPin',['../class_input_pin.html',1,'']]]
+ ['just8bits',['just8bits',['../unionjust8bits.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_8.js b/docs/3.1/search/classes_8.js
index 0e8dba7c..81e2ccd8 100644
--- a/docs/3.1/search/classes_8.js
+++ b/docs/3.1/search/classes_8.js
@@ -1,4 +1,6 @@
var searchData=
[
- ['just8bits',['just8bits',['../unionjust8bits.html',1,'']]]
+ ['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_9.js b/docs/3.1/search/classes_9.js
index 81e2ccd8..6cab743a 100644
--- a/docs/3.1/search/classes_9.js
+++ b/docs/3.1/search/classes_9.js
@@ -1,6 +1,4 @@
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,'']]]
+ ['multipixelcontroller',['MultiPixelController',['../struct_multi_pixel_controller.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_a.js b/docs/3.1/search/classes_a.js
index 6cab743a..5694348f 100644
--- a/docs/3.1/search/classes_a.js
+++ b/docs/3.1/search/classes_a.js
@@ -1,4 +1,4 @@
var searchData=
[
- ['multipixelcontroller',['MultiPixelController',['../struct_multi_pixel_controller.html',1,'']]]
+ ['neopixel',['NEOPIXEL',['../class_n_e_o_p_i_x_e_l.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_b.js b/docs/3.1/search/classes_b.js
index 5694348f..f9e2113b 100644
--- a/docs/3.1/search/classes_b.js
+++ b/docs/3.1/search/classes_b.js
@@ -1,4 +1,4 @@
var searchData=
[
- ['neopixel',['NEOPIXEL',['../class_n_e_o_p_i_x_e_l.html',1,'']]]
+ ['outputpin',['OutputPin',['../class_output_pin.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_c.js b/docs/3.1/search/classes_c.js
index f9e2113b..eb497370 100644
--- a/docs/3.1/search/classes_c.js
+++ b/docs/3.1/search/classes_c.js
@@ -1,4 +1,6 @@
var searchData=
[
- ['outputpin',['OutputPin',['../class_output_pin.html',1,'']]]
+ ['p9813controller',['P9813Controller',['../class_p9813_controller.html',1,'']]],
+ ['pin',['Pin',['../class_pin.html',1,'']]],
+ ['pixelcontroller',['PixelController',['../struct_pixel_controller.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_d.js b/docs/3.1/search/classes_d.js
index eb497370..6feb8274 100644
--- a/docs/3.1/search/classes_d.js
+++ b/docs/3.1/search/classes_d.js
@@ -1,6 +1,4 @@
var searchData=
[
- ['p9813controller',['P9813Controller',['../class_p9813_controller.html',1,'']]],
- ['pin',['Pin',['../class_pin.html',1,'']]],
- ['pixelcontroller',['PixelController',['../struct_pixel_controller.html',1,'']]]
+ ['q',['q',['../classq.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_e.js b/docs/3.1/search/classes_e.js
index 6feb8274..177c396d 100644
--- a/docs/3.1/search/classes_e.js
+++ b/docs/3.1/search/classes_e.js
@@ -1,4 +1,15 @@
var searchData=
[
- ['q',['q',['../classq.html',1,'']]]
+ ['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,'']]],
+ ['spioutput_3c_20spi2_5fdata_2c_20spi2_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI2_DATA, SPI2_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
+ ['spioutput_3c_20spi2_5fdata_2c_20spi_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI2_DATA, SPI_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
+ ['spioutput_3c_20spi_5fdata_2c_20spi2_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI_DATA, SPI2_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
+ ['spioutput_3c_20spi_5fdata_2c_20spi_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI_DATA, SPI_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
+ ['spioutput_3c_20spi_5fuart0_5fdata_2c_20spi_5fuart0_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
+ ['spioutput_3c_20spi_5fuart1_5fdata_2c_20spi_5fuart1_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
+ ['sub4',['sub4',['../structsub4.html',1,'']]]
];
diff --git a/docs/3.1/search/classes_f.js b/docs/3.1/search/classes_f.js
index 7e6664fd..6bda5b3c 100644
--- a/docs/3.1/search/classes_f.js
+++ b/docs/3.1/search/classes_f.js
@@ -1,13 +1,13 @@
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,'']]],
- ['spioutput_3c_20spi2_5fdata_2c_20spi2_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI2_DATA, SPI2_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i2___d_a_t_a_00_01_s_p_i2___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
- ['spioutput_3c_20spi_5fdata_2c_20spi_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI_DATA, SPI_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i___d_a_t_a_00_01_s_p_i___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
- ['spioutput_3c_20spi_5fuart0_5fdata_2c_20spi_5fuart0_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i___u_a_r_t0___d_a_t_a_00_01_s_p_i___u_a_r_t0___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
- ['spioutput_3c_20spi_5fuart1_5fdata_2c_20spi_5fuart1_5fclock_2c_20spi_5fspeed_20_3e',['SPIOutput&lt; SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED &gt;',['../class_s_p_i_output_3_01_s_p_i___u_a_r_t1___d_a_t_a_00_01_s_p_i___u_a_r_t1___c_l_o_c_k_00_01_s_p_i___s_p_e_e_d_01_4.html',1,'']]],
- ['sub4',['sub4',['../structsub4.html',1,'']]]
+ ['tbytesforlong',['tBytesForLong',['../uniont_bytes_for_long.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,'']]],
+ ['trgbgradientpaletteentryunion',['TRGBGradientPaletteEntryUnion',['../union_t_r_g_b_gradient_palette_entry_union.html',1,'']]]
];
diff --git a/docs/3.1/search/functions_0.js b/docs/3.1/search/functions_0.js
index ffa7aff5..6127d55a 100644
--- a/docs/3.1/search/functions_0.js
+++ b/docs/3.1/search/functions_0.js
@@ -1,4 +1,4 @@
var searchData=
[
- ['_5f_5fattribute_5f_5f',['__attribute__',['../struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b',1,'PixelController::__attribute__((always_inline)) inline bool has(int n)'],['../struct_pixel_controller.html#afbe76a814e6bec02854dd4df167567b4',1,'PixelController::__attribute__((always_inline)) inline int advanceBy()'],['../struct_pixel_controller.html#a404558c7da7f3f6fae768bc45af9dc03',1,'PixelController::__attribute__((always_inline)) inline void advanceData()'],['../struct_pixel_controller.html#a900493d7e9e345d0cb6e602186151e73',1,'PixelController::__attribute__((always_inline)) inline void stepDithering()'],['../struct_pixel_controller.html#a9b0bc80097821046dbda7bbbf38dd7df',1,'PixelController::__attribute__((always_inline)) inline void preStepFirstByteDithering()'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) inline void swapbits8(bitswap_type in:&#160;delay.h'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) inline void delaycycles():&#160;delay.h'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) inline void delaycycles&lt;-6 &gt;():&#160;delay.h'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) bool operator:&#160;delay.h']]]
+ ['_5f_5fattribute_5f_5f',['__attribute__',['../struct_pixel_controller.html#a11aef85a0ef8a9276cd2e729d57aa49b',1,'PixelController::__attribute__((always_inline)) inline bool has(int n)'],['../struct_pixel_controller.html#afbe76a814e6bec02854dd4df167567b4',1,'PixelController::__attribute__((always_inline)) inline int advanceBy()'],['../struct_pixel_controller.html#a404558c7da7f3f6fae768bc45af9dc03',1,'PixelController::__attribute__((always_inline)) inline void advanceData()'],['../struct_pixel_controller.html#a900493d7e9e345d0cb6e602186151e73',1,'PixelController::__attribute__((always_inline)) inline void stepDithering()'],['../struct_pixel_controller.html#a9b0bc80097821046dbda7bbbf38dd7df',1,'PixelController::__attribute__((always_inline)) inline void preStepFirstByteDithering()'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) inline void swapbits8(bitswap_type in:&#160;fastled_delay.h'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) inline void delaycycles():&#160;fastled_delay.h'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) inline void delaycycles&lt;-6 &gt;():&#160;fastled_delay.h'],['../group___bitswap.html#ga01396a2e40133293c3badab349ac99f0',1,'__attribute__((always_inline)) bool operator:&#160;fastled_delay.h']]]
];
diff --git a/docs/3.1/search/functions_1.js b/docs/3.1/search/functions_1.js
index 37cb7c57..3ab9da7c 100644
--- a/docs/3.1/search/functions_1.js
+++ b/docs/3.1/search/functions_1.js
@@ -1,4 +1,9 @@
var searchData=
[
- ['addleds',['addLeds',['../class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f',1,'CFastLED::addLeds(CLEDController *pLed, struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)'],['../class_c_fast_l_e_d.html#a79df28eb68fc2062b995f9000aed274c',1,'CFastLED::addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)'],['../class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9',1,'CFastLED::addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)'],['../class_c_fast_l_e_d.html#ac4dff92f45048399edb0812a02ab9d96',1,'CFastLED::addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)'],['../class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9',1,'CFastLED::addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)']]]
+ ['abs8',['abs8',['../group___math.html#ga4bf8996c4a130e96521495d4a1395a01',1,'math8.h']]],
+ ['add8',['add8',['../group___math.html#ga9f1f93145ca1955562b7f50f5db96ac1',1,'math8.h']]],
+ ['addleds',['addLeds',['../class_c_fast_l_e_d.html#afd7928d822589740af6e23b2d510cf3f',1,'CFastLED::addLeds(CLEDController *pLed, struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)'],['../class_c_fast_l_e_d.html#a79df28eb68fc2062b995f9000aed274c',1,'CFastLED::addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)'],['../class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9',1,'CFastLED::addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)'],['../class_c_fast_l_e_d.html#ac4dff92f45048399edb0812a02ab9d96',1,'CFastLED::addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)'],['../class_c_fast_l_e_d.html#aa8ec7c8ab7c8aed4d85b9c3d6d5feaa9',1,'CFastLED::addLeds(struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)']]],
+ ['addmod8',['addmod8',['../group___math.html#ga2bcd51c47538dbc933999382e272a7a7',1,'math8.h']]],
+ ['avg7',['avg7',['../group___math.html#ga30558a835c484b418165909118e702b1',1,'math8.h']]],
+ ['avg8',['avg8',['../group___math.html#ga6bfedf0473d4c3705e8feeb6a25b9ea5',1,'math8.h']]]
];
diff --git a/docs/3.1/search/functions_2.js b/docs/3.1/search/functions_2.js
index d7979ff8..278c3885 100644
--- a/docs/3.1/search/functions_2.js
+++ b/docs/3.1/search/functions_2.js
@@ -1,10 +1,6 @@
var searchData=
[
- ['clear',['clear',['../class_c_fast_l_e_d.html#a042989511cbc42390620bedc196ea956',1,'CFastLED']]],
- ['cleardata',['clearData',['../class_c_fast_l_e_d.html#ac4f613f1b3e618528dca3189df88ce80',1,'CFastLED']]],
- ['clearleddata',['clearLedData',['../class_c_l_e_d_controller.html#a7b61c81e004c96ff670a2742057a5a52',1,'CLEDController']]],
- ['clearleds',['clearLeds',['../class_l_p_d8806_controller.html#a7da0ecf67004256c83131406b2f4889e',1,'LPD8806Controller::clearLeds()'],['../class_w_s2801_controller.html#a867d4249b5921e0d717c6c21038bb11c',1,'WS2801Controller::clearLeds()'],['../class_a_p_a102_controller.html#aadcdde1b8fc6c680504fe9455ceff0fb',1,'APA102Controller::clearLeds()'],['../class_p9813_controller.html#ac2fddaa8ac8860649da9865b58dca13c',1,'P9813Controller::clearLeds()'],['../class_s_m16716_controller.html#a89d3d5ef2239a9d452bc2478b0549ad8',1,'SM16716Controller::clearLeds()'],['../class_c_l_e_d_controller.html#adfa6601c84fefd733904b32ac98b6dae',1,'CLEDController::clearLeds()'],['../class_d_m_x_simple_controller.html#a66deae70caf1d43a8692fff6540d1f1e',1,'DMXSimpleController::clearLeds()'],['../class_d_m_x_serial_controller.html#a04689efea1c1daf74905f87692caa129',1,'DMXSerialController::clearLeds()']]],
- ['cledcontroller',['CLEDController',['../class_c_l_e_d_controller.html#a8c560c6d171f117dfd19c0f2ec780a32',1,'CLEDController']]],
- ['count',['count',['../class_c_fast_l_e_d.html#ae5730545ea18b1f5228172f9d246beb6',1,'CFastLED']]],
- ['countfps',['countFPS',['../class_c_fast_l_e_d.html#a61d27e179c9b68bde89d220aebc0de32',1,'CFastLED']]]
+ ['brighten8_5flin',['brighten8_lin',['../group___dimming.html#ga094bda002b416c66e57521fc93878830',1,'scale8.h']]],
+ ['brighten8_5fraw',['brighten8_raw',['../group___dimming.html#gae8e36472a70f3016595048532d6c3a2d',1,'scale8.h']]],
+ ['brighten8_5fvideo',['brighten8_video',['../group___dimming.html#gad21876a676bcf26c47f957faed23f9bb',1,'scale8.h']]]
];
diff --git a/docs/3.1/search/functions_3.js b/docs/3.1/search/functions_3.js
index da00328b..92828132 100644
--- a/docs/3.1/search/functions_3.js
+++ b/docs/3.1/search/functions_3.js
@@ -1,4 +1,13 @@
var searchData=
[
- ['delay',['delay',['../class_c_fast_l_e_d.html#a6819ff831058a710d4582dfc09817202',1,'CFastLED']]]
+ ['cleanup_5fr1',['cleanup_R1',['../group___scaling.html#ga572d0b441676c9d8ceb071fe8284b7e9',1,'scale8.h']]],
+ ['clear',['clear',['../class_c_fast_l_e_d.html#a042989511cbc42390620bedc196ea956',1,'CFastLED']]],
+ ['cleardata',['clearData',['../class_c_fast_l_e_d.html#ac4f613f1b3e618528dca3189df88ce80',1,'CFastLED']]],
+ ['clearleddata',['clearLedData',['../class_c_l_e_d_controller.html#a7b61c81e004c96ff670a2742057a5a52',1,'CLEDController']]],
+ ['clearleds',['clearLeds',['../class_l_p_d8806_controller.html#a7da0ecf67004256c83131406b2f4889e',1,'LPD8806Controller::clearLeds()'],['../class_w_s2801_controller.html#a867d4249b5921e0d717c6c21038bb11c',1,'WS2801Controller::clearLeds()'],['../class_a_p_a102_controller.html#aadcdde1b8fc6c680504fe9455ceff0fb',1,'APA102Controller::clearLeds()'],['../class_p9813_controller.html#ac2fddaa8ac8860649da9865b58dca13c',1,'P9813Controller::clearLeds()'],['../class_s_m16716_controller.html#a89d3d5ef2239a9d452bc2478b0549ad8',1,'SM16716Controller::clearLeds()'],['../class_c_l_e_d_controller.html#adfa6601c84fefd733904b32ac98b6dae',1,'CLEDController::clearLeds()'],['../class_d_m_x_simple_controller.html#a66deae70caf1d43a8692fff6540d1f1e',1,'DMXSimpleController::clearLeds()'],['../class_d_m_x_serial_controller.html#a04689efea1c1daf74905f87692caa129',1,'DMXSerialController::clearLeds()']]],
+ ['cledcontroller',['CLEDController',['../class_c_l_e_d_controller.html#a8c560c6d171f117dfd19c0f2ec780a32',1,'CLEDController']]],
+ ['cos16',['cos16',['../group___trig.html#ga056952ebed39f55880bb353857b47075',1,'trig8.h']]],
+ ['cos8',['cos8',['../group___trig.html#ga4432f985c94f5bff715db402d767b0e8',1,'trig8.h']]],
+ ['count',['count',['../class_c_fast_l_e_d.html#ae5730545ea18b1f5228172f9d246beb6',1,'CFastLED']]],
+ ['countfps',['countFPS',['../class_c_fast_l_e_d.html#a61d27e179c9b68bde89d220aebc0de32',1,'CFastLED']]]
];
diff --git a/docs/3.1/search/functions_4.js b/docs/3.1/search/functions_4.js
index bace709d..e12efa05 100644
--- a/docs/3.1/search/functions_4.js
+++ b/docs/3.1/search/functions_4.js
@@ -1,4 +1,7 @@
var searchData=
[
- ['enable_5fdithering',['enable_dithering',['../struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3',1,'PixelController']]]
+ ['delay',['delay',['../class_c_fast_l_e_d.html#a6819ff831058a710d4582dfc09817202',1,'CFastLED']]],
+ ['dim8_5flin',['dim8_lin',['../group___dimming.html#ga3f94d2455e0aa92133f77af8747b5914',1,'scale8.h']]],
+ ['dim8_5fraw',['dim8_raw',['../group___dimming.html#gae51352a3522bb8eae5e17dbee97aa1aa',1,'scale8.h']]],
+ ['dim8_5fvideo',['dim8_video',['../group___dimming.html#ga40a13446a2022dc489be8b2a8f2fa494',1,'scale8.h']]]
];
diff --git a/docs/3.1/search/functions_5.js b/docs/3.1/search/functions_5.js
index a076edd8..bace709d 100644
--- a/docs/3.1/search/functions_5.js
+++ b/docs/3.1/search/functions_5.js
@@ -1,6 +1,4 @@
var searchData=
[
- ['fill_5fgradient',['fill_gradient',['../group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98',1,'colorutils.h']]],
- ['fill_5frainbow',['fill_rainbow',['../group___colorutils.html#gafcc7dac88e25736ebc49a9faf2a1c2e2',1,'fill_rainbow(struct CRGB *pFirstLED, int numToFill, uint8_t initialhue, uint8_t deltahue):&#160;colorutils.cpp'],['../group___colorutils.html#gac3052a230febda0693517ce9d12aa452',1,'fill_rainbow(struct CHSV *targetArray, int numToFill, uint8_t initialhue, uint8_t deltahue):&#160;colorutils.cpp'],['../group___colorutils.html#gafcc7dac88e25736ebc49a9faf2a1c2e2',1,'fill_rainbow(struct CRGB *pFirstLED, int numToFill, uint8_t initialhue, uint8_t deltahue=5):&#160;colorutils.cpp'],['../group___colorutils.html#gac3052a230febda0693517ce9d12aa452',1,'fill_rainbow(struct CHSV *targetArray, int numToFill, uint8_t initialhue, uint8_t deltahue=5):&#160;colorutils.cpp']]],
- ['fill_5fsolid',['fill_solid',['../group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b',1,'fill_solid(struct CRGB *leds, int numToFill, const struct CRGB &amp;color):&#160;colorutils.cpp'],['../group___colorutils.html#gad1abf13328e8dd1c483a270af77b17ed',1,'fill_solid(struct CHSV *targetArray, int numToFill, const struct CHSV &amp;hsvColor):&#160;colorutils.cpp'],['../group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b',1,'fill_solid(struct CRGB *leds, int numToFill, const struct CRGB &amp;color):&#160;colorutils.cpp'],['../group___colorutils.html#gad1abf13328e8dd1c483a270af77b17ed',1,'fill_solid(struct CHSV *targetArray, int numToFill, const struct CHSV &amp;hsvColor):&#160;colorutils.cpp']]]
+ ['enable_5fdithering',['enable_dithering',['../struct_pixel_controller.html#a3e923be6212346c5ae98f7731d74c2e3',1,'PixelController']]]
];
diff --git a/docs/3.1/search/functions_6.js b/docs/3.1/search/functions_6.js
index 80365800..a076edd8 100644
--- a/docs/3.1/search/functions_6.js
+++ b/docs/3.1/search/functions_6.js
@@ -1,9 +1,6 @@
var searchData=
[
- ['getadjustment',['getAdjustment',['../class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb',1,'CLEDController']]],
- ['getbrightness',['getBrightness',['../class_c_fast_l_e_d.html#ac2615781ec12e025fb17cc0e66281716',1,'CFastLED']]],
- ['getcorrection',['getCorrection',['../class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c',1,'CLEDController']]],
- ['getdither',['getDither',['../class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7',1,'CLEDController']]],
- ['getfps',['getFPS',['../class_c_fast_l_e_d.html#aa8c3ae3381e524ce30b181ffa23b83cd',1,'CFastLED']]],
- ['gettemperature',['getTemperature',['../class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d',1,'CLEDController']]]
+ ['fill_5fgradient',['fill_gradient',['../group___colorutils.html#ga3144bb2bb66aeed33e20f4fdd6cc1a98',1,'colorutils.h']]],
+ ['fill_5frainbow',['fill_rainbow',['../group___colorutils.html#gafcc7dac88e25736ebc49a9faf2a1c2e2',1,'fill_rainbow(struct CRGB *pFirstLED, int numToFill, uint8_t initialhue, uint8_t deltahue):&#160;colorutils.cpp'],['../group___colorutils.html#gac3052a230febda0693517ce9d12aa452',1,'fill_rainbow(struct CHSV *targetArray, int numToFill, uint8_t initialhue, uint8_t deltahue):&#160;colorutils.cpp'],['../group___colorutils.html#gafcc7dac88e25736ebc49a9faf2a1c2e2',1,'fill_rainbow(struct CRGB *pFirstLED, int numToFill, uint8_t initialhue, uint8_t deltahue=5):&#160;colorutils.cpp'],['../group___colorutils.html#gac3052a230febda0693517ce9d12aa452',1,'fill_rainbow(struct CHSV *targetArray, int numToFill, uint8_t initialhue, uint8_t deltahue=5):&#160;colorutils.cpp']]],
+ ['fill_5fsolid',['fill_solid',['../group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b',1,'fill_solid(struct CRGB *leds, int numToFill, const struct CRGB &amp;color):&#160;colorutils.cpp'],['../group___colorutils.html#gad1abf13328e8dd1c483a270af77b17ed',1,'fill_solid(struct CHSV *targetArray, int numToFill, const struct CHSV &amp;hsvColor):&#160;colorutils.cpp'],['../group___colorutils.html#gac84d8820fd175567ba66413dfb8bc63b',1,'fill_solid(struct CRGB *leds, int numToFill, const struct CRGB &amp;color):&#160;colorutils.cpp'],['../group___colorutils.html#gad1abf13328e8dd1c483a270af77b17ed',1,'fill_solid(struct CHSV *targetArray, int numToFill, const struct CHSV &amp;hsvColor):&#160;colorutils.cpp']]]
];
diff --git a/docs/3.1/search/functions_7.js b/docs/3.1/search/functions_7.js
index c14710b3..80365800 100644
--- a/docs/3.1/search/functions_7.js
+++ b/docs/3.1/search/functions_7.js
@@ -1,4 +1,9 @@
var searchData=
[
- ['head',['head',['../class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0',1,'CLEDController']]]
+ ['getadjustment',['getAdjustment',['../class_c_l_e_d_controller.html#af6173cca91ee446766cc15102990d7bb',1,'CLEDController']]],
+ ['getbrightness',['getBrightness',['../class_c_fast_l_e_d.html#ac2615781ec12e025fb17cc0e66281716',1,'CFastLED']]],
+ ['getcorrection',['getCorrection',['../class_c_l_e_d_controller.html#a168c661bb9b4a5dfc797b69d3900b26c',1,'CLEDController']]],
+ ['getdither',['getDither',['../class_c_l_e_d_controller.html#a676f705adf93898739a405b85150a3e7',1,'CLEDController']]],
+ ['getfps',['getFPS',['../class_c_fast_l_e_d.html#aa8c3ae3381e524ce30b181ffa23b83cd',1,'CFastLED']]],
+ ['gettemperature',['getTemperature',['../class_c_l_e_d_controller.html#afc94e9d029d7e59f56a4ab845f3de32d',1,'CLEDController']]]
];
diff --git a/docs/3.1/search/functions_8.js b/docs/3.1/search/functions_8.js
index efc7e84a..c14710b3 100644
--- a/docs/3.1/search/functions_8.js
+++ b/docs/3.1/search/functions_8.js
@@ -1,6 +1,4 @@
var searchData=
[
- ['init',['init',['../class_l_p_d8806_controller.html#abe5be69b938d0709cfc77fcf57c75608',1,'LPD8806Controller::init()'],['../class_w_s2801_controller.html#ad6187b68bccb831cd5cab3cffbd6bdb4',1,'WS2801Controller::init()'],['../class_a_p_a102_controller.html#a0e875981e076baf9cd1c5e7599b83cd0',1,'APA102Controller::init()'],['../class_p9813_controller.html#ad6fcb36b9378df660721ae24ed857b8a',1,'P9813Controller::init()'],['../class_s_m16716_controller.html#a1ba5a4e3f00b2235f278b9fb9aeb1591',1,'SM16716Controller::init()'],['../class_c_l_e_d_controller.html#af877a15a5ec452780fbd1d359b8a9913',1,'CLEDController::init()'],['../class_d_m_x_simple_controller.html#a251c7d09383870337853c360996871c3',1,'DMXSimpleController::init()'],['../class_d_m_x_serial_controller.html#a0cd937424d4f6eedb90acec81ca1fa27',1,'DMXSerialController::init()']]],
- ['init_5fbinary_5fdithering',['init_binary_dithering',['../struct_pixel_controller.html#accb48b27c47c742a8b13f97ae1d82d32',1,'PixelController']]],
- ['inoise16_5fraw',['inoise16_raw',['../group___noise.html#ga810bdc406dcf8fd5b7add9041aa18abd',1,'inoise16_raw(uint32_t x, uint32_t y, uint32_t z):&#160;noise.cpp'],['../group___noise.html#ga810bdc406dcf8fd5b7add9041aa18abd',1,'inoise16_raw(uint32_t x, uint32_t y, uint32_t z):&#160;noise.cpp']]]
+ ['head',['head',['../class_c_l_e_d_controller.html#a75a5a6ea50899409d875d72393323ca0',1,'CLEDController']]]
];
diff --git a/docs/3.1/search/functions_9.js b/docs/3.1/search/functions_9.js
index c0e202e7..efc7e84a 100644
--- a/docs/3.1/search/functions_9.js
+++ b/docs/3.1/search/functions_9.js
@@ -1,4 +1,6 @@
var searchData=
[
- ['leds',['leds',['../class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399',1,'CLEDController::leds()'],['../class_c_fast_l_e_d.html#ae3c0a81b88fb64a65725cb2fed67f766',1,'CFastLED::leds()']]]
+ ['init',['init',['../class_l_p_d8806_controller.html#abe5be69b938d0709cfc77fcf57c75608',1,'LPD8806Controller::init()'],['../class_w_s2801_controller.html#ad6187b68bccb831cd5cab3cffbd6bdb4',1,'WS2801Controller::init()'],['../class_a_p_a102_controller.html#a0e875981e076baf9cd1c5e7599b83cd0',1,'APA102Controller::init()'],['../class_p9813_controller.html#ad6fcb36b9378df660721ae24ed857b8a',1,'P9813Controller::init()'],['../class_s_m16716_controller.html#a1ba5a4e3f00b2235f278b9fb9aeb1591',1,'SM16716Controller::init()'],['../class_c_l_e_d_controller.html#af877a15a5ec452780fbd1d359b8a9913',1,'CLEDController::init()'],['../class_d_m_x_simple_controller.html#a251c7d09383870337853c360996871c3',1,'DMXSimpleController::init()'],['../class_d_m_x_serial_controller.html#a0cd937424d4f6eedb90acec81ca1fa27',1,'DMXSerialController::init()']]],
+ ['init_5fbinary_5fdithering',['init_binary_dithering',['../struct_pixel_controller.html#accb48b27c47c742a8b13f97ae1d82d32',1,'PixelController']]],
+ ['inoise16_5fraw',['inoise16_raw',['../group___noise.html#ga810bdc406dcf8fd5b7add9041aa18abd',1,'inoise16_raw(uint32_t x, uint32_t y, uint32_t z):&#160;noise.cpp'],['../group___noise.html#ga810bdc406dcf8fd5b7add9041aa18abd',1,'inoise16_raw(uint32_t x, uint32_t y, uint32_t z):&#160;noise.cpp']]]
];
diff --git a/docs/3.1/search/functions_a.js b/docs/3.1/search/functions_a.js
index 82914234..c0e202e7 100644
--- a/docs/3.1/search/functions_a.js
+++ b/docs/3.1/search/functions_a.js
@@ -1,4 +1,4 @@
var searchData=
[
- ['next',['next',['../class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565',1,'CLEDController']]]
+ ['leds',['leds',['../class_c_l_e_d_controller.html#a5e86c45c89ebfb7b21f9045790302399',1,'CLEDController::leds()'],['../class_c_fast_l_e_d.html#ae3c0a81b88fb64a65725cb2fed67f766',1,'CFastLED::leds()']]]
];
diff --git a/docs/3.1/search/functions_b.js b/docs/3.1/search/functions_b.js
index 4ecb912b..4108d5bf 100644
--- a/docs/3.1/search/functions_b.js
+++ b/docs/3.1/search/functions_b.js
@@ -1,4 +1,5 @@
var searchData=
[
- ['operator_5b_5d',['operator[]',['../class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a',1,'CLEDController::operator[]()'],['../class_c_fast_l_e_d.html#a646128b7d8c14b5020b285dbc8bc713b',1,'CFastLED::operator[]()']]]
+ ['mod8',['mod8',['../group___math.html#gaa5e80daec10cc13bf1eca8b125ee0e88',1,'math8.h']]],
+ ['mul8',['mul8',['../group___math.html#ga10181a03cf8b8428fc524aa78e7fbf7f',1,'math8.h']]]
];
diff --git a/docs/3.1/search/functions_c.js b/docs/3.1/search/functions_c.js
index 042ab40b..fc380fe7 100644
--- a/docs/3.1/search/functions_c.js
+++ b/docs/3.1/search/functions_c.js
@@ -1,4 +1,10 @@
var searchData=
[
- ['pixelcontroller',['PixelController',['../struct_pixel_controller.html#aec44f7bfc391ebf4874f678a994eff71',1,'PixelController::PixelController(const PixelController &amp;other)'],['../struct_pixel_controller.html#a81403c8810658d3c41cb210703bbfc00',1,'PixelController::PixelController(const uint8_t *d, int len, CRGB &amp;s, EDitherMode dither=BINARY_DITHER, bool advance=true, uint8_t skip=0)']]]
+ ['next',['next',['../class_c_l_e_d_controller.html#a06cfb05ad6e0f7982328928051f3f565',1,'CLEDController']]],
+ ['nscale8_5fleaving_5fr1_5fdirty',['nscale8_LEAVING_R1_DIRTY',['../group___scaling.html#ga5f6dde3d9398f4b389c96e759a3f7b80',1,'scale8.h']]],
+ ['nscale8_5fvideo_5fleaving_5fr1_5fdirty',['nscale8_video_LEAVING_R1_DIRTY',['../group___scaling.html#ga2a580fcaa010558218faae95d1936635',1,'scale8.h']]],
+ ['nscale8x2',['nscale8x2',['../group___scaling.html#ga6f419761a744efed4bae8875ac07aef0',1,'scale8.h']]],
+ ['nscale8x2_5fvideo',['nscale8x2_video',['../group___scaling.html#ga4204edd4a3f8aac7124a10f1f5cfccfe',1,'scale8.h']]],
+ ['nscale8x3',['nscale8x3',['../group___scaling.html#ga39bf87e5526120889086cab19ac749b1',1,'scale8.h']]],
+ ['nscale8x3_5fvideo',['nscale8x3_video',['../group___scaling.html#ga700b7f510f32e8c91385093c436c27d9',1,'scale8.h']]]
];
diff --git a/docs/3.1/search/functions_d.js b/docs/3.1/search/functions_d.js
index 5819512d..4ecb912b 100644
--- a/docs/3.1/search/functions_d.js
+++ b/docs/3.1/search/functions_d.js
@@ -1,13 +1,4 @@
var searchData=
[
- ['setbrightness',['setBrightness',['../class_c_fast_l_e_d.html#a730ba7d967e882b4b893689cf333b2eb',1,'CFastLED']]],
- ['setcorrection',['setCorrection',['../class_c_l_e_d_controller.html#a9620d0a629a6a3294c71f5f8dbfe91b8',1,'CLEDController::setCorrection(CRGB correction)'],['../class_c_l_e_d_controller.html#a74c43977660742e8185fd666e5d66bf9',1,'CLEDController::setCorrection(LEDColorCorrection correction)'],['../class_c_fast_l_e_d.html#ad266c3e649cc12a6dc49a1e229acc282',1,'CFastLED::setCorrection()']]],
- ['setdither',['setDither',['../class_c_l_e_d_controller.html#a0703d15ea35deaf94eed59ae27bc3517',1,'CLEDController::setDither()'],['../class_c_fast_l_e_d.html#a7ae5d3864df01101d82d242c123ffb36',1,'CFastLED::setDither()']]],
- ['setleds',['setLeds',['../class_c_l_e_d_controller.html#a5b08378b29f92c5def65175ec5334037',1,'CLEDController']]],
- ['setmaxrefreshrate',['setMaxRefreshRate',['../class_c_fast_l_e_d.html#a09f4d61853d88482fa5824144c8127ed',1,'CFastLED']]],
- ['settemperature',['setTemperature',['../class_c_l_e_d_controller.html#a69ac4a882bdc4a813ae957ddedb5a883',1,'CLEDController::setTemperature(CRGB temperature)'],['../class_c_l_e_d_controller.html#a1e6d35be39f9f67aacdb4709ea914ab4',1,'CLEDController::setTemperature(ColorTemperature temperature)'],['../class_c_fast_l_e_d.html#a28c2dfb0ec592db03f3063ade135f19f',1,'CFastLED::setTemperature()']]],
- ['show',['show',['../class_l_p_d8806_controller.html#a31d4e01a823682556e26748193f722e5',1,'LPD8806Controller::show()'],['../class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0',1,'WS2801Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_w_s2801_controller.html#a69fca4db95f5f60f27d7d1a8c7fa16a0',1,'WS2801Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332',1,'APA102Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_a_p_a102_controller.html#a245148d2621eb73999ab673852c49332',1,'APA102Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81',1,'P9813Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_p9813_controller.html#aac4f48b0da93055c0da7285839c4ce81',1,'P9813Controller::show(const struct CRGB *data, int nLeds, CRGB scale)'],['../class_s_m16716_controller.html#a3d720053186fd61d6ad90d48cac3d57d',1,'SM16716Controller::show()'],['../class_c_l_e_d_controller.html#add284627121ffab140e083e84fadc37f',1,'CLEDController::show(const struct CRGB *data, int nLeds, CRGB scale)=0'],['../class_c_l_e_d_controller.html#abe990b9a65f5bff1f391cc5c28752abb',1,'CLEDController::show(const struct CRGB *data, int nLeds, uint8_t brightness)'],['../class_d_m_x_simple_controller.html#a29df92ccb41090893fa3c49f22b47186',1,'DMXSimpleController::show()'],['../class_d_m_x_serial_controller.html#a3f3f3e606e495fd1bdcfd25c6bed7fe1',1,'DMXSerialController::show()'],['../class_c_fast_l_e_d.html#a83afdd1e2a21f33ac4f8d2610d6e331b',1,'CFastLED::show(uint8_t scale)'],['../class_c_fast_l_e_d.html#a3adb23ec5f919524928d576002cb45de',1,'CFastLED::show()']]],
- ['showcolor',['showColor',['../class_l_p_d8806_controller.html#a4f6471eddcfe5445502b02f1f3179259',1,'LPD8806Controller::showColor()'],['../class_w_s2801_controller.html#a615609bf16dd4c8fcc9ccf286ca52501',1,'WS2801Controller::showColor()'],['../class_a_p_a102_controller.html#a0aa9f2896fe8b23554623fd3de0d5428',1,'APA102Controller::showColor()'],['../class_p9813_controller.html#ae60dbfc4d27c62448032c61e7730ec8a',1,'P9813Controller::showColor()'],['../class_s_m16716_controller.html#a7df8b8a34e0dc067c69aa056deca9677',1,'SM16716Controller::showColor()'],['../class_c_l_e_d_controller.html#a068fa50d8c7d31bd8537b731eea84c92',1,'CLEDController::showColor(const struct CRGB &amp;data, int nLeds, CRGB scale)=0'],['../class_c_l_e_d_controller.html#a253069a734075b298da65d59d6efbb3b',1,'CLEDController::showColor(const struct CRGB &amp;data, int nLeds, uint8_t brightness)'],['../class_c_l_e_d_controller.html#a4ccd149ab7282817041a1ae4e586a9d4',1,'CLEDController::showColor(const struct CRGB &amp;data, uint8_t brightness=255)'],['../class_d_m_x_simple_controller.html#a3fb3a0501aae1d7a6aefb89f77168bd1',1,'DMXSimpleController::showColor()'],['../class_d_m_x_serial_controller.html#a3d6285e65af8862eb4b0d36d6d3df22b',1,'DMXSerialController::showColor()'],['../class_c_fast_l_e_d.html#a7315b060d295bad5fbd32e50eaaf02b0',1,'CFastLED::showColor(const struct CRGB &amp;color, uint8_t scale)'],['../class_c_fast_l_e_d.html#a570df74cf09e6215c3647333d2b479a9',1,'CFastLED::showColor(const struct CRGB &amp;color)']]],
- ['showleds',['showLeds',['../class_c_l_e_d_controller.html#aa4124b1cf5546ad028166e7884276076',1,'CLEDController']]],
- ['size',['size',['../class_c_l_e_d_controller.html#a8840496d231f1fe0fa640970dc14db08',1,'CLEDController::size()'],['../class_c_fast_l_e_d.html#a18fba22754d2a1a206fc5db8d24a92d0',1,'CFastLED::size()']]]
+ ['operator_5b_5d',['operator[]',['../class_c_l_e_d_controller.html#a278a429964bec69b3c91486665e61c0a',1,'CLEDController::operator[]()'],['../class_c_fast_l_e_d.html#a646128b7d8c14b5020b285dbc8bc713b',1,'CFastLED::operator[]()']]]
];
diff --git a/docs/3.1/search/groups_0.js b/docs/3.1/search/groups_0.js
index 3528c9c2..f9108ed9 100644
--- a/docs/3.1/search/groups_0.js
+++ b/docs/3.1/search/groups_0.js
@@ -1,4 +1,5 @@
var searchData=
[
- ['bit_20swapping_2frotate',['Bit swapping/rotate',['../group___bitswap.html',1,'']]]
+ ['bit_20swapping_2frotate',['Bit swapping/rotate',['../group___bitswap.html',1,'']]],
+ ['basic_20math_20operations',['Basic math operations',['../group___math.html',1,'']]]
];
diff --git a/docs/3.1/search/groups_2.js b/docs/3.1/search/groups_2.js
index e8a248f6..4b5c694c 100644
--- a/docs/3.1/search/groups_2.js
+++ b/docs/3.1/search/groups_2.js
@@ -1,4 +1,4 @@
var searchData=
[
- ['noise_20functions',['Noise functions',['../group___noise.html',1,'']]]
+ ['dimming_20and_20brightening_20functions',['Dimming and brightening functions',['../group___dimming.html',1,'']]]
];
diff --git a/docs/3.1/search/groups_3.js b/docs/3.1/search/groups_3.js
index 99ca0c3d..c673d955 100644
--- a/docs/3.1/search/groups_3.js
+++ b/docs/3.1/search/groups_3.js
@@ -1,4 +1,6 @@
var searchData=
[
- ['pre_2ddefined_20color_20palletes',['Pre-defined color palletes',['../group___colorpalletes.html',1,'']]]
+ ['fast_20math_20functions',['Fast math functions',['../group__lib8tion.html',1,'']]],
+ ['fast_20random_20number_20generators',['Fast random number generators',['../group___random.html',1,'']]],
+ ['fast_20trig_20functions',['Fast trig functions',['../group___trig.html',1,'']]]
];
diff --git a/docs/3.1/search/pages_1.js b/docs/3.1/search/pages_1.js
index b9205585..90f6d685 100644
--- a/docs/3.1/search/pages_1.js
+++ b/docs/3.1/search/pages_1.js
@@ -1,4 +1,4 @@
var searchData=
[
- ['readme',['README',['../md__r_e_a_d_m_e.html',1,'']]]
+ ['m0_2dclocklessnotes',['M0-clocklessnotes',['../md__m0-clocklessnotes.html',1,'']]]
];
diff --git a/docs/3.1/search/pages_2.js b/docs/3.1/search/pages_2.js
index 15f7a8d0..e3657651 100644
--- a/docs/3.1/search/pages_2.js
+++ b/docs/3.1/search/pages_2.js
@@ -1,5 +1,4 @@
var searchData=
[
- ['todo',['TODO',['../md__t_o_d_o.html',1,'']]],
- ['todo_20list',['Todo List',['../todo.html',1,'']]]
+ ['porting',['PORTING',['../md__p_o_r_t_i_n_g.html',1,'']]]
];
diff --git a/docs/3.1/search/searchdata.js b/docs/3.1/search/searchdata.js
index 90e27a08..fb6997cb 100644
--- a/docs/3.1/search/searchdata.js
+++ b/docs/3.1/search/searchdata.js
@@ -1,14 +1,14 @@
var indexSectionsWithContent =
{
0: "_abcdefghijlmnopqrstuw",
- 1: "_abcdfgijlmnopqstuw",
+ 1: "abcdfgijlmnopqstuw",
2: "bn",
- 3: "_acdefghilnops",
- 4: "p",
+ 3: "_abcdefghilmnopqrs",
+ 4: "fr",
5: "cl",
6: "cdhotu",
- 7: "bcnp",
- 8: "frt"
+ 7: "bcdfnps",
+ 8: "fmprt"
};
var indexSectionNames =
diff --git a/docs/3.1/search/variables_0.js b/docs/3.1/search/variables_0.js
index 8a6f7c07..e8f711d7 100644
--- a/docs/3.1/search/variables_0.js
+++ b/docs/3.1/search/variables_0.js
@@ -1,4 +1,4 @@
var searchData=
[
- ['progmem',['PROGMEM',['../group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119',1,'PROGMEM():&#160;colorpalettes.cpp'],['../group___colorpalletes.html#ga550b5245a7c2e0554d1d5af179903119',1,'PROGMEM():&#160;colorpalettes.h']]]
+ ['fl_5fprogmem',['FL_PROGMEM',['../group___colorpalletes.html#ga57a38373661043f74b292976e83c687b',1,'FL_PROGMEM():&#160;colorpalettes.cpp'],['../group___colorpalletes.html#ga57a38373661043f74b292976e83c687b',1,'FL_PROGMEM():&#160;colorpalettes.h']]]
];
diff --git a/docs/3.1/struct_c_h_s_v-members.html b/docs/3.1/struct_c_h_s_v-members.html
index 896b4902..030e9921 100644
--- a/docs/3.1/struct_c_h_s_v-members.html
+++ b/docs/3.1/struct_c_h_s_v-members.html
@@ -109,7 +109,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/struct_c_h_s_v.html b/docs/3.1/struct_c_h_s_v.html
index 52627402..f3b1828d 100644
--- a/docs/3.1/struct_c_h_s_v.html
+++ b/docs/3.1/struct_c_h_s_v.html
@@ -111,53 +111,53 @@ Public Member Functions</h2></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:afa6c4547f28905a0e24d3442812d6796"><td class="memItemLeft" ><a class="anchor" id="afa6c4547f28905a0e24d3442812d6796"></a>
+<tr class="memitem:a75981833b6ce61cc7fdcf1d7d816ec29"><td class="memItemLeft" ><a class="anchor" id="a75981833b6ce61cc7fdcf1d7d816ec29"></a>
union {</td></tr>
-<tr class="memitem:a03f1db326406a8ebfe13b7ba28cfca84"><td class="memItemLeft" ><a class="anchor" id="a03f1db326406a8ebfe13b7ba28cfca84"></a>
+<tr class="memitem:ab727f5903b4440fca8f3ace5cf302573"><td class="memItemLeft" ><a class="anchor" id="ab727f5903b4440fca8f3ace5cf302573"></a>
&#160;&#160;&#160;struct {</td></tr>
-<tr class="memitem:a3e6c96b070e3398ca221109c1234dc71"><td class="memItemLeft" ><a class="anchor" id="a3e6c96b070e3398ca221109c1234dc71"></a>
+<tr class="memitem:a97fdc684d1dce0a41cb0fa8ac92bbcea"><td class="memItemLeft" ><a class="anchor" id="a97fdc684d1dce0a41cb0fa8ac92bbcea"></a>
&#160;&#160;&#160;&#160;&#160;&#160;union {</td></tr>
-<tr class="memitem:aa973d0a8d1c1f77e273ad4d9e7a418c6"><td class="memItemLeft" >
+<tr class="memitem:a82723371778984deee5ccf492c806683"><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:aa973d0a8d1c1f77e273ad4d9e7a418c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9ad328aece294b6d85736e0d515588a4"><td class="memItemLeft" >
+<tr class="separator:a82723371778984deee5ccf492c806683"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b146384ce56bb89a31378faf7b5755e"><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:a9ad328aece294b6d85736e0d515588a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3e6c96b070e3398ca221109c1234dc71"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:a3e6c96b070e3398ca221109c1234dc71"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afb7437565deb3c00132bfde4939e1759"><td class="memItemLeft" ><a class="anchor" id="afb7437565deb3c00132bfde4939e1759"></a>
+<tr class="separator:a7b146384ce56bb89a31378faf7b5755e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97fdc684d1dce0a41cb0fa8ac92bbcea"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a97fdc684d1dce0a41cb0fa8ac92bbcea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c760b63956ae52467388eea79e1341a"><td class="memItemLeft" ><a class="anchor" id="a5c760b63956ae52467388eea79e1341a"></a>
&#160;&#160;&#160;&#160;&#160;&#160;union {</td></tr>
-<tr class="memitem:aa631f3293492b17784d1c2a62132dcb9"><td class="memItemLeft" >
+<tr class="memitem:a6bb25397c811d9495f175e220b99120c"><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:aa631f3293492b17784d1c2a62132dcb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a623597209c08fdbae16b17796c8a1d5a"><td class="memItemLeft" >
+<tr class="separator:a6bb25397c811d9495f175e220b99120c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc44be1bdf01b2c55cc9a3e18d4dca0e"><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:a623597209c08fdbae16b17796c8a1d5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a024cb5dc30a56f90279e114b8864fce0"><td class="memItemLeft" >
+<tr class="separator:acc44be1bdf01b2c55cc9a3e18d4dca0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a95199ac968486eeaf977e71e9ee8a7aa"><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:a024cb5dc30a56f90279e114b8864fce0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afb7437565deb3c00132bfde4939e1759"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:afb7437565deb3c00132bfde4939e1759"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad6ef321ad857104eff992eb7c8eb2683"><td class="memItemLeft" ><a class="anchor" id="ad6ef321ad857104eff992eb7c8eb2683"></a>
+<tr class="separator:a95199ac968486eeaf977e71e9ee8a7aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c760b63956ae52467388eea79e1341a"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a5c760b63956ae52467388eea79e1341a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5adf6732ba466e79086fd5d07ee7de6b"><td class="memItemLeft" ><a class="anchor" id="a5adf6732ba466e79086fd5d07ee7de6b"></a>
&#160;&#160;&#160;&#160;&#160;&#160;union {</td></tr>
-<tr class="memitem:a9418876a1a5449e3e0882a352b6254c0"><td class="memItemLeft" >
+<tr class="memitem:af8184c5f10416b9c3c27f83bcae6fb3a"><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:a9418876a1a5449e3e0882a352b6254c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4e253bba65e196eb7d9f9e1b2cb7331a"><td class="memItemLeft" >
+<tr class="separator:af8184c5f10416b9c3c27f83bcae6fb3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5bd48acce5de761fe64754b5673f16eb"><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:a4e253bba65e196eb7d9f9e1b2cb7331a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2298b3faa6b151a63e2bd8d183c1bdfd"><td class="memItemLeft" >
+<tr class="separator:a5bd48acce5de761fe64754b5673f16eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1bf119eb95f301198b7c692ba709b7c8"><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:a2298b3faa6b151a63e2bd8d183c1bdfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad6ef321ad857104eff992eb7c8eb2683"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:ad6ef321ad857104eff992eb7c8eb2683"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a03f1db326406a8ebfe13b7ba28cfca84"><td class="memItemLeft" valign="top">&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:a03f1db326406a8ebfe13b7ba28cfca84"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a056d380576671ed93859408204c52a99"><td class="memItemLeft" >
+<tr class="separator:a1bf119eb95f301198b7c692ba709b7c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5adf6732ba466e79086fd5d07ee7de6b"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a5adf6732ba466e79086fd5d07ee7de6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab727f5903b4440fca8f3ace5cf302573"><td class="memItemLeft" valign="top">&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:ab727f5903b4440fca8f3ace5cf302573"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57d0b146d1ac02ac567ca574f3f704d8"><td class="memItemLeft" >
&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>raw</b> [3]</td></tr>
-<tr class="separator:a056d380576671ed93859408204c52a99"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afa6c4547f28905a0e24d3442812d6796"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:afa6c4547f28905a0e24d3442812d6796"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="separator:a57d0b146d1ac02ac567ca574f3f704d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a75981833b6ce61cc7fdcf1d7d816ec29"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a75981833b6ce61cc7fdcf1d7d816ec29"><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>
@@ -165,7 +165,7 @@ union {</td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/struct_c_r_g_b-members.html b/docs/3.1/struct_c_r_g_b-members.html
index 925988b4..47da9c27 100644
--- a/docs/3.1/struct_c_r_g_b-members.html
+++ b/docs/3.1/struct_c_r_g_b-members.html
@@ -158,8 +158,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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>getAverageLight</b>() const (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>() const (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>getParity</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>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" class="even"><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>
@@ -299,7 +299,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/struct_c_r_g_b.html b/docs/3.1/struct_c_r_g_b.html
index 3d5e90db..2b0007f3 100644
--- a/docs/3.1/struct_c_r_g_b.html
+++ b/docs/3.1/struct_c_r_g_b.html
@@ -405,12 +405,12 @@ const uint8_t &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operat
<tr class="memitem:a84965381e0a989945231def23eb19150"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84965381e0a989945231def23eb19150"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>operator rgb24</b> () const </td></tr>
<tr class="separator:a84965381e0a989945231def23eb19150"><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:abd395f8a00bd4f9539f04200df1975f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abd395f8a00bd4f9539f04200df1975f4"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getLuma</b> () const </td></tr>
+<tr class="separator:abd395f8a00bd4f9539f04200df1975f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a070437bde8dbf6ae34934f5f1b72ad32"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a070437bde8dbf6ae34934f5f1b72ad32"></a>
+uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>getAverageLight</b> () const </td></tr>
+<tr class="separator:a070437bde8dbf6ae34934f5f1b72ad32"><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>
@@ -429,47 +429,47 @@ void&#160;</td><td class="memItemRight" valign="bottom"><b>setParity</b> (uint8_
</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:ac20bc0b3e222982ffd6d1b04dc285ef0"><td class="memItemLeft" ><a class="anchor" id="ac20bc0b3e222982ffd6d1b04dc285ef0"></a>
+<tr class="memitem:a13feb5e21536c8f16ba7dcab8ba8a190"><td class="memItemLeft" ><a class="anchor" id="a13feb5e21536c8f16ba7dcab8ba8a190"></a>
union {</td></tr>
-<tr class="memitem:aaa7008820ce0d42c2adaf09f20647e65"><td class="memItemLeft" ><a class="anchor" id="aaa7008820ce0d42c2adaf09f20647e65"></a>
+<tr class="memitem:a72d5ae25f6edde6d7724f4e0164a4982"><td class="memItemLeft" ><a class="anchor" id="a72d5ae25f6edde6d7724f4e0164a4982"></a>
&#160;&#160;&#160;struct {</td></tr>
-<tr class="memitem:a772d704f5f50d81d12cd0e71a6b92745"><td class="memItemLeft" ><a class="anchor" id="a772d704f5f50d81d12cd0e71a6b92745"></a>
+<tr class="memitem:a60ad44e81b34645e50970253b7450cc9"><td class="memItemLeft" ><a class="anchor" id="a60ad44e81b34645e50970253b7450cc9"></a>
&#160;&#160;&#160;&#160;&#160;&#160;union {</td></tr>
-<tr class="memitem:ad0da106f0b9b12e3ef31e877a881656e"><td class="memItemLeft" >
+<tr class="memitem:ab9847f30e2b4db8fa759ae9646938f6c"><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:ad0da106f0b9b12e3ef31e877a881656e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acf90612d6ef7ad0bc68e87c20f3883a4"><td class="memItemLeft" >
+<tr class="separator:ab9847f30e2b4db8fa759ae9646938f6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3effe16a013cffb57adc3bfb0ddac2c1"><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:acf90612d6ef7ad0bc68e87c20f3883a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a772d704f5f50d81d12cd0e71a6b92745"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:a772d704f5f50d81d12cd0e71a6b92745"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac17e41cf468d8d60357d90bc89013b8d"><td class="memItemLeft" ><a class="anchor" id="ac17e41cf468d8d60357d90bc89013b8d"></a>
+<tr class="separator:a3effe16a013cffb57adc3bfb0ddac2c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60ad44e81b34645e50970253b7450cc9"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a60ad44e81b34645e50970253b7450cc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0dc21fa013faf84c656b3b2983d057b7"><td class="memItemLeft" ><a class="anchor" id="a0dc21fa013faf84c656b3b2983d057b7"></a>
&#160;&#160;&#160;&#160;&#160;&#160;union {</td></tr>
-<tr class="memitem:a1a5209c78c8d98149e7cb8ec0c07c5a7"><td class="memItemLeft" >
+<tr class="memitem:a419c3bddc49818a283c4011ec8004cb7"><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:a1a5209c78c8d98149e7cb8ec0c07c5a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6e6af804cef66e612ab99001acf1c45a"><td class="memItemLeft" >
+<tr class="separator:a419c3bddc49818a283c4011ec8004cb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a26421bb15dd8b4c025608511c016eb2d"><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:a6e6af804cef66e612ab99001acf1c45a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac17e41cf468d8d60357d90bc89013b8d"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:ac17e41cf468d8d60357d90bc89013b8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3e60351de35384e429ab6626b56c8f7e"><td class="memItemLeft" ><a class="anchor" id="a3e60351de35384e429ab6626b56c8f7e"></a>
+<tr class="separator:a26421bb15dd8b4c025608511c016eb2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0dc21fa013faf84c656b3b2983d057b7"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a0dc21fa013faf84c656b3b2983d057b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a234b601e587e06c6983f6ff885abb706"><td class="memItemLeft" ><a class="anchor" id="a234b601e587e06c6983f6ff885abb706"></a>
&#160;&#160;&#160;&#160;&#160;&#160;union {</td></tr>
-<tr class="memitem:a70f1fa7ff445cd2007896441aeeb6c22"><td class="memItemLeft" >
+<tr class="memitem:aa3fa2f70ae077419f5736f39506f62e3"><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:a70f1fa7ff445cd2007896441aeeb6c22"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aecafaa2a7d2773b55e61afd034817c1c"><td class="memItemLeft" >
+<tr class="separator:aa3fa2f70ae077419f5736f39506f62e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab869a432ad78e2e4435bf162a31ba278"><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:aecafaa2a7d2773b55e61afd034817c1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3e60351de35384e429ab6626b56c8f7e"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:a3e60351de35384e429ab6626b56c8f7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aaa7008820ce0d42c2adaf09f20647e65"><td class="memItemLeft" valign="top">&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:aaa7008820ce0d42c2adaf09f20647e65"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5b4d0fa1343a8dadbe97533463fe86b6"><td class="memItemLeft" >
+<tr class="separator:ab869a432ad78e2e4435bf162a31ba278"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a234b601e587e06c6983f6ff885abb706"><td class="memItemLeft" valign="top">&#160;&#160;&#160;&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a234b601e587e06c6983f6ff885abb706"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72d5ae25f6edde6d7724f4e0164a4982"><td class="memItemLeft" valign="top">&#160;&#160;&#160;}&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a72d5ae25f6edde6d7724f4e0164a4982"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a160e37fa9b880743da0e3c83fe956914"><td class="memItemLeft" >
&#160;&#160;&#160;uint8_t&#160;&#160;&#160;<b>raw</b> [3]</td></tr>
-<tr class="separator:a5b4d0fa1343a8dadbe97533463fe86b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac20bc0b3e222982ffd6d1b04dc285ef0"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:ac20bc0b3e222982ffd6d1b04dc285ef0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="separator:a160e37fa9b880743da0e3c83fe956914"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13feb5e21536c8f16ba7dcab8ba8a190"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a13feb5e21536c8f16ba7dcab8ba8a190"><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>
@@ -477,7 +477,7 @@ union {</td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/struct_multi_pixel_controller-members.html b/docs/3.1/struct_multi_pixel_controller-members.html
index 2b4b4330..2bed0e80 100644
--- a/docs/3.1/struct_multi_pixel_controller-members.html
+++ b/docs/3.1/struct_multi_pixel_controller-members.html
@@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/struct_multi_pixel_controller.html b/docs/3.1/struct_multi_pixel_controller.html
index ece76616..da4386e9 100644
--- a/docs/3.1/struct_multi_pixel_controller.html
+++ b/docs/3.1/struct_multi_pixel_controller.html
@@ -250,16 +250,16 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>b</b> { return b ?
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>
+uint8_t uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>scale</b> { return <a class="el" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(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>
+int uint8_t uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>scale</b> { return <a class="el" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(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>
+int uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>scale</b> { return <a class="el" href="group___scaling.html#ga6c160f8c36ce9b3c5eda68e4992010af">scale8</a>(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>
@@ -268,7 +268,7 @@ int uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>scale</b> { re
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/struct_pixel_controller-members.html b/docs/3.1/struct_pixel_controller-members.html
index c321534f..40a12487 100644
--- a/docs/3.1/struct_pixel_controller-members.html
+++ b/docs/3.1/struct_pixel_controller-members.html
@@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/struct_pixel_controller.html b/docs/3.1/struct_pixel_controller.html
index e449faab..b1f0f98c 100644
--- a/docs/3.1/struct_pixel_controller.html
+++ b/docs/3.1/struct_pixel_controller.html
@@ -302,7 +302,7 @@ template&lt;EOrder RGB_ORDER&gt; </div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/structsub4-members.html b/docs/3.1/structsub4-members.html
index 78c8e027..cab3d1f9 100644
--- a/docs/3.1/structsub4-members.html
+++ b/docs/3.1/structsub4-members.html
@@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/structsub4.html b/docs/3.1/structsub4.html
index 6a6855f9..fb700443 100644
--- a/docs/3.1/structsub4.html
+++ b/docs/3.1/structsub4.html
@@ -205,7 +205,7 @@ uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>d7</b>:1</td></tr
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/todo.html b/docs/3.1/todo.html
index 2e0e2300..bf0182a5 100644
--- a/docs/3.1/todo.html
+++ b/docs/3.1/todo.html
@@ -94,7 +94,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
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
index ee9d1d68..665fbc72 100644
--- a/docs/3.1/union_i_e_e_e754binary32__t-members.html
+++ b/docs/3.1/union_i_e_e_e754binary32__t-members.html
@@ -107,7 +107,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/union_i_e_e_e754binary32__t.html b/docs/3.1/union_i_e_e_e754binary32__t.html
index 02e682ec..f38f93f3 100644
--- a/docs/3.1/union_i_e_e_e754binary32__t.html
+++ b/docs/3.1/union_i_e_e_e754binary32__t.html
@@ -89,7 +89,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
<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 class="title">IEEE754binary32_t Union Reference<div class="ingroups"><a class="el" href="group__lib8tion.html">Fast math functions</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
@@ -101,48 +101,48 @@ uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>i</b></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:a402b2b73e52027d365ab0c83c6195768"><td class="memItemLeft" ><a class="anchor" id="a402b2b73e52027d365ab0c83c6195768"></a>
+<tr class="memitem:ab3345ca6c497eed2d9ba568aa1f483b5"><td class="memItemLeft" ><a class="anchor" id="ab3345ca6c497eed2d9ba568aa1f483b5"></a>
struct {</td></tr>
-<tr class="memitem:aa99081b8f1b9bccdccc76db6a5ce1a7e"><td class="memItemLeft" >
+<tr class="memitem:a7c4daa76091326c6c0c516d8b48253d9"><td class="memItemLeft" >
&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>mantissa</b>: 23</td></tr>
-<tr class="separator:aa99081b8f1b9bccdccc76db6a5ce1a7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aff51733c00d7317e4920ae621ba3895f"><td class="memItemLeft" >
+<tr class="separator:a7c4daa76091326c6c0c516d8b48253d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a30ccc56c867effd31f6cac6e122fb95f"><td class="memItemLeft" >
&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>exponent</b>: 8</td></tr>
-<tr class="separator:aff51733c00d7317e4920ae621ba3895f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad1e3fe410546c4110cd9653019d15af3"><td class="memItemLeft" >
+<tr class="separator:a30ccc56c867effd31f6cac6e122fb95f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3e1b7e59dea702e066999a2b593aa30e"><td class="memItemLeft" >
&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>signbit</b>: 1</td></tr>
-<tr class="separator:ad1e3fe410546c4110cd9653019d15af3"><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>
-<tr class="memitem:ab3345ca6c497eed2d9ba568aa1f483b5"><td class="memItemLeft" ><a class="anchor" id="ab3345ca6c497eed2d9ba568aa1f483b5"></a>
+<tr class="separator:a3e1b7e59dea702e066999a2b593aa30e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3345ca6c497eed2d9ba568aa1f483b5"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:ab3345ca6c497eed2d9ba568aa1f483b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e0fbdfa71dcdbc86e7f4324ae3d3e86"><td class="memItemLeft" ><a class="anchor" id="a0e0fbdfa71dcdbc86e7f4324ae3d3e86"></a>
struct {</td></tr>
-<tr class="memitem:a77101a13bddb13555165c6b600d2accf"><td class="memItemLeft" >
+<tr class="memitem:acc93919e1465e12cb85744bedbca7a11"><td class="memItemLeft" >
&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>mant7</b>: 7</td></tr>
-<tr class="separator:a77101a13bddb13555165c6b600d2accf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8605611969929487b60533b3a52aac36"><td class="memItemLeft" >
+<tr class="separator:acc93919e1465e12cb85744bedbca7a11"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1deb49bfc606041b7517e150675144b5"><td class="memItemLeft" >
&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>mant16</b>: 16</td></tr>
-<tr class="separator:a8605611969929487b60533b3a52aac36"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af6b12d336017180efea8cce2b790c978"><td class="memItemLeft" >
+<tr class="separator:a1deb49bfc606041b7517e150675144b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a228e3e0bdbe141bf1c0e1bf96b2f7612"><td class="memItemLeft" >
&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>exp_</b>: 8</td></tr>
-<tr class="separator:af6b12d336017180efea8cce2b790c978"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aed828e90412aff92ab7fc6a8f3002c1d"><td class="memItemLeft" >
+<tr class="separator:a228e3e0bdbe141bf1c0e1bf96b2f7612"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44c24e40c0a1d9caf36a87f9f102a93a"><td class="memItemLeft" >
&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>sb_</b>: 1</td></tr>
-<tr class="separator:aed828e90412aff92ab7fc6a8f3002c1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab3345ca6c497eed2d9ba568aa1f483b5"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:ab3345ca6c497eed2d9ba568aa1f483b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0e0fbdfa71dcdbc86e7f4324ae3d3e86"><td class="memItemLeft" ><a class="anchor" id="a0e0fbdfa71dcdbc86e7f4324ae3d3e86"></a>
+<tr class="separator:a44c24e40c0a1d9caf36a87f9f102a93a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e0fbdfa71dcdbc86e7f4324ae3d3e86"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a0e0fbdfa71dcdbc86e7f4324ae3d3e86"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a88163870d8284427ead5e745c0c22e38"><td class="memItemLeft" ><a class="anchor" id="a88163870d8284427ead5e745c0c22e38"></a>
struct {</td></tr>
-<tr class="memitem:a07531c1ea4dc07a40e40d90ca493c53d"><td class="memItemLeft" >
+<tr class="memitem:acf52019c6fde137c150380a6dc53312c"><td class="memItemLeft" >
&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>mant_lo8</b>: 8</td></tr>
-<tr class="separator:a07531c1ea4dc07a40e40d90ca493c53d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad4e4399d5a944ad5496e4ac708483125"><td class="memItemLeft" >
+<tr class="separator:acf52019c6fde137c150380a6dc53312c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa60045926b5683f9c7f136be39f3d556"><td class="memItemLeft" >
&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>mant_hi16_exp_lo1</b>: 16</td></tr>
-<tr class="separator:ad4e4399d5a944ad5496e4ac708483125"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a784deaf1d8b9c2f32981a8b7c200a912"><td class="memItemLeft" >
+<tr class="separator:aa60045926b5683f9c7f136be39f3d556"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad2dd11e3bb7d23c33280951b771ebd46"><td class="memItemLeft" >
&#160;&#160;&#160;uint32_t&#160;&#160;&#160;<b>sb_exphi7</b>: 8</td></tr>
-<tr class="separator:a784deaf1d8b9c2f32981a8b7c200a912"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0e0fbdfa71dcdbc86e7f4324ae3d3e86"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
-<tr class="separator:a0e0fbdfa71dcdbc86e7f4324ae3d3e86"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="separator:ad2dd11e3bb7d23c33280951b771ebd46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a88163870d8284427ead5e745c0c22e38"><td class="memItemLeft" valign="top">};&#160;</td><td class="memItemRight" valign="bottom"></td></tr>
+<tr class="separator:a88163870d8284427ead5e745c0c22e38"><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>
@@ -150,7 +150,7 @@ struct {</td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/unionbitswap__type-members.html b/docs/3.1/unionbitswap__type-members.html
index ebfb5090..06645145 100644
--- a/docs/3.1/unionbitswap__type-members.html
+++ b/docs/3.1/unionbitswap__type-members.html
@@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/unionbitswap__type.html b/docs/3.1/unionbitswap__type.html
index 21729f59..7dd90d55 100644
--- a/docs/3.1/unionbitswap__type.html
+++ b/docs/3.1/unionbitswap__type.html
@@ -132,7 +132,7 @@ struct {</td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/unionjust8bits-members.html b/docs/3.1/unionjust8bits-members.html
index 2c0ae32f..f8a2954f 100644
--- a/docs/3.1/unionjust8bits-members.html
+++ b/docs/3.1/unionjust8bits-members.html
@@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/unionjust8bits.html b/docs/3.1/unionjust8bits.html
index 4aa7b869..dda51098 100644
--- a/docs/3.1/unionjust8bits.html
+++ b/docs/3.1/unionjust8bits.html
@@ -140,7 +140,7 @@ struct {</td></tr>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/uniont_bytes_for_long-members.html b/docs/3.1/uniont_bytes_for_long-members.html
index 5dae3d6a..c1396921 100644
--- a/docs/3.1/uniont_bytes_for_long-members.html
+++ b/docs/3.1/uniont_bytes_for_long-members.html
@@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
diff --git a/docs/3.1/uniont_bytes_for_long.html b/docs/3.1/uniont_bytes_for_long.html
index 01f2457e..bc46fb23 100644
--- a/docs/3.1/uniont_bytes_for_long.html
+++ b/docs/3.1/uniont_bytes_for_long.html
@@ -108,7 +108,7 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>raw</b> [4]</td></
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
-Generated on Mon Feb 16 2015 20:05:25 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Mon Aug 10 2015 21:53:28 for FastLED by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>