6#define FASTLED_INTERNAL
16inline uint8_t
min3(uint8_t a, uint8_t b, uint8_t c) {
33 uint16_t
y = (uint16_t(
x) * 85) >> 8;
34 return static_cast<uint8_t
>(
y);
42 uint8_t b, uint8_t r_scale, uint8_t g_scale,
43 uint8_t b_scale, uint8_t *out_r, uint8_t *out_g,
44 uint8_t *out_b, uint8_t *out_w) {
45 (void)w_color_temperature;
49 uint8_t min_component = min3(r, g, b);
50 *out_r = r - min_component;
51 *out_g = g - min_component;
52 *out_b = b - min_component;
53 *out_w = min_component;
57 uint8_t g, uint8_t b, uint8_t r_scale,
58 uint8_t g_scale, uint8_t b_scale, uint8_t *out_r,
59 uint8_t *out_g, uint8_t *out_b, uint8_t *out_w) {
60 (void)w_color_temperature;
61 *out_r =
scale8(r, r_scale);
62 *out_g =
scale8(g, g_scale);
63 *out_b =
scale8(b, b_scale);
64 *out_w = min3(r, g, b);
68 uint8_t g, uint8_t b, uint8_t r_scale,
69 uint8_t g_scale, uint8_t b_scale,
70 uint8_t *out_r, uint8_t *out_g, uint8_t *out_b,
72 (void)w_color_temperature;
73 *out_r =
scale8(r, r_scale);
74 *out_g =
scale8(g, g_scale);
75 *out_b =
scale8(b, b_scale);
80 uint8_t g, uint8_t b, uint8_t r_scale,
81 uint8_t g_scale, uint8_t b_scale, uint8_t *out_r,
82 uint8_t *out_g, uint8_t *out_b, uint8_t *out_w) {
83 (void)w_color_temperature;
87 uint8_t min_component = min3(r, g, b);
90 if (min_component <= 84) {
91 w = 3 * min_component;
100 r_prime = r - min_component;
101 g_prime = g - min_component;
102 b_prime = b - min_component;
104 uint8_t w3 = divide_by_3(w);
119 if (func ==
nullptr) {
127 uint8_t g, uint8_t b, uint8_t r_scale,
128 uint8_t g_scale, uint8_t b_scale, uint8_t *out_r,
129 uint8_t *out_g, uint8_t *out_b, uint8_t *out_w) {
130 g_user_function(w_color_temperature, r, g, b, r_scale, g_scale, b_scale,
131 out_r, out_g, out_b, out_w);
135 uint8_t b2, uint8_t w, uint8_t *out_b0,
136 uint8_t *out_b1, uint8_t *out_b2, uint8_t *out_b3) {
138 uint8_t out[4] = {b0, b1, b2, 0};
139 switch (w_placement) {
central include file for FastLED, defines the CFastLED class/object
Functions for red, green, blue, white (RGBW) output.
LIB8STATIC_ALWAYS_INLINE uint8_t scale8(uint8_t i, fract8 scale)
Scale one byte by a second one, which is treated as the numerator of a fraction whose denominator is ...
uint8_t min3(uint8_t a, uint8_t b, uint8_t c)
uint8_t divide_by_3(uint8_t x)
rgb_2_rgbw_function g_user_function
void(* rgb_2_rgbw_function)(uint16_t w_color_temperature, uint8_t r, uint8_t g, uint8_t b, uint8_t r_scale, uint8_t g_scale, uint8_t b_scale, uint8_t *out_r, uint8_t *out_g, uint8_t *out_b, uint8_t *out_w)
void rgb_2_rgbw_user_function(uint16_t w_color_temperature, uint8_t r, uint8_t g, uint8_t b, uint8_t r_scale, uint8_t g_scale, uint8_t b_scale, uint8_t *out_r, uint8_t *out_g, uint8_t *out_b, uint8_t *out_w)
void rgb_2_rgbw_exact(uint16_t w_color_temperature, uint8_t r, uint8_t g, uint8_t b, uint8_t r_scale, uint8_t g_scale, uint8_t b_scale, uint8_t *out_r, uint8_t *out_g, uint8_t *out_b, uint8_t *out_w)
Converts RGB to RGBW using a color transfer method from saturated color channels to white.
void rgb_2_rgbw_null_white_pixel(uint16_t w_color_temperature, uint8_t r, uint8_t g, uint8_t b, uint8_t r_scale, uint8_t g_scale, uint8_t b_scale, uint8_t *out_r, uint8_t *out_g, uint8_t *out_b, uint8_t *out_w)
Converts RGB to RGBW with the W channel set to black, always.
void rgb_2_rgbw_max_brightness(uint16_t w_color_temperature, uint8_t r, uint8_t g, uint8_t b, uint8_t r_scale, uint8_t g_scale, uint8_t b_scale, uint8_t *out_r, uint8_t *out_g, uint8_t *out_b, uint8_t *out_w)
The minimum brigthness of the RGB channels is used to set the W channel.
void rgb_2_rgbw_white_boosted(uint16_t w_color_temperature, uint8_t r, uint8_t g, uint8_t b, uint8_t r_scale, uint8_t g_scale, uint8_t b_scale, uint8_t *out_r, uint8_t *out_g, uint8_t *out_b, uint8_t *out_w)
Converts RGB to RGBW with a boosted white channel.
void rgbw_partial_reorder(EOrderW w_placement, uint8_t b0, uint8_t b1, uint8_t b2, uint8_t w, uint8_t *out_b0, uint8_t *out_b1, uint8_t *out_b2, uint8_t *out_b3)
void set_rgb_2_rgbw_function(rgb_2_rgbw_function func)