43template<
typename PixelControllerT>
46 PixelControllerT* pc =
static_cast<PixelControllerT*
>(pixel_controller);
47 pc->loadAndScaleRGBW(
rgbw, b0_out, b1_out, b2_out, b3_out);
54 u8* b0_out,
u8* b1_out,
u8* b2_out,
56 PixelControllerT* pc =
static_cast<PixelControllerT*
>(pixel_controller);
57 pc->loadAndScaleRGBWW(rgbww, b0_out, b1_out, b2_out, b3_out, b4_out);
61 PixelControllerT* pc =
static_cast<PixelControllerT*
>(pixel_controller);
62 pc->loadAndScaleRGB(r_out, g_out, b_out);
69 PixelControllerT* pc =
static_cast<PixelControllerT*
>(pixel_controller);
74 PixelControllerT* pc =
static_cast<PixelControllerT*
>(pixel_controller);
79 PixelControllerT* pc =
static_cast<PixelControllerT*
>(pixel_controller);
83 PixelControllerT* pc =
static_cast<PixelControllerT*
>(pixel_controller);
88 #if FASTLED_HD_COLOR_MIXING
90 PixelControllerT* pc =
static_cast<PixelControllerT*
>(pixel_controller);
91 pc->loadRGBScaleAndBrightness(c0, c1, c2,
brightness);
96 loadRGBScaleAndBrightness(pixel_controller, c0, c1, c2,
brightness);
123 template<
typename PixelControllerT>
159 mSize = &Vtable::size;
161 #if FASTLED_HD_COLOR_MIXING
162 mLoadRGBScaleAndBrightness = &Vtable::loadRGBScaleAndBrightness;
163 mGetHdScale = &Vtable::getHdScale;
190 #if FASTLED_HD_COLOR_MIXING
197 loadRGBScaleAndBrightness(c0, c1, c2,
brightness);
201 template <
typename CONTAINER_UIN8_T>
209 }
else if (
mRgbw.active()) {
222 template <
typename CONTAINER_UIN8_T>
226 #if FASTLED_HD_COLOR_MIXING
232 brightness_range.first, back_ins);
237 #if FASTLED_USE_GLOBAL_BRIGHTNESS == 1
254 template <
typename CONTAINER_UIN8_T>
258 #if FASTLED_HD_COLOR_MIXING
264 brightness_range.first, back_ins);
269 #if FASTLED_USE_GLOBAL_BRIGHTNESS == 1
289 template <
typename CONTAINER_UIN8_T>
293 encodeWS2801(pixel_range.first, pixel_range.second, back_ins);
300 template <
typename CONTAINER_UIN8_T>
304 encodeWS2803(pixel_range.first, pixel_range.second, back_ins);
310 template <
typename CONTAINER_UIN8_T>
314 encodeP9813(pixel_range.first, pixel_range.second, back_ins);
320 template <
typename CONTAINER_UIN8_T>
324 encodeLPD8806(pixel_range.first, pixel_range.second, back_ins);
330 template <
typename CONTAINER_UIN8_T>
334 encodeLPD6803(pixel_range.first, pixel_range.second, back_ins);
340 template <
typename CONTAINER_UIN8_T>
344 encodeSM16716(pixel_range.first, pixel_range.second, back_ins);
350 template <
typename CONTAINER_UIN8_T>
354 #if FASTLED_HD_COLOR_MIXING
359 brightness_range.first, back_ins);
382 #if FASTLED_HD_COLOR_MIXING
406 mPixels->loadAndScaleRGB(&b0, &b1, &b2);
425 mPixels->loadAndScaleRGBW(&b0, &b1, &b2, &b3);
443 u8 b0, b1, b2, b3, b4;
444 mPixels->loadAndScaleRGBWW(&b0, &b1, &b2, &b3, &b4);
462 #if FASTLED_HD_COLOR_MIXING
469 mPixels->loadAndScaleRGB(&r, &g, &b);
471 u8 max_rg = (r > g) ? r : g;
472 mCurrent = (max_rg > b) ? max_rg : b;
494 #if FASTLED_HD_COLOR_MIXING
499 mPixels->loadAndScaleRGB(&b0, &b1, &b2);
fl::UISlider brightness("Brightness", BRIGHTNESS, 0, 255)
void writeHD108(CONTAINER_UIN8_T *out) FL_NOEXCEPT
Encode pixels in HD108 format (zero allocation)
void writeAPA102(CONTAINER_UIN8_T *out, bool hd_gamma=false) FL_NOEXCEPT
Encode pixels in APA102/DOTSTAR format (zero allocation)
void writeP9813(CONTAINER_UIN8_T *out) FL_NOEXCEPT
Encode pixels in P9813 format (zero allocation)
void writeWS2801(CONTAINER_UIN8_T *out) FL_NOEXCEPT
Encode pixels in WS2801 format (zero allocation)
void set_rgbww(Rgbww rgbww) FL_NOEXCEPT
stepDitheringFunction mStepDithering
void loadAndScaleRGBWW(u8 *b0_out, u8 *b1_out, u8 *b2_out, u8 *b3_out, u8 *b4_out) FL_NOEXCEPT
advanceDataFunction mAdvanceData
bool has(int n) FL_NOEXCEPT
void loadAndScaleRGBW(u8 *b0_out, u8 *b1_out, u8 *b2_out, u8 *w_out) FL_NOEXCEPT
void writeSM16716(CONTAINER_UIN8_T *out) FL_NOEXCEPT
Encode pixels in SM16716 format (zero allocation)
void advanceData() FL_NOEXCEPT
void set_rgbw(Rgbw rgbw) FL_NOEXCEPT
loadAndScaleRGBWWFunction mLoadAndScaleRGBWW
loadAndScaleRGBFunction mLoadAndScaleRGB
void loadAndScaleRGB(u8 *r_out, u8 *g_out, u8 *b_out) FL_NOEXCEPT
void writeLPD6803(CONTAINER_UIN8_T *out) FL_NOEXCEPT
Encode pixels in LPD6803 format (zero allocation)
void writeWS2812(CONTAINER_UIN8_T *out) FL_NOEXCEPT
void writeSK9822(CONTAINER_UIN8_T *out, bool hd_gamma=false) FL_NOEXCEPT
Encode pixels in SK9822 format (zero allocation)
Rgbw get_rgbw() const FL_NOEXCEPT
void stepDithering() FL_NOEXCEPT
Rgbww get_rgbww() const FL_NOEXCEPT
void writeWS2803(CONTAINER_UIN8_T *out) FL_NOEXCEPT
Encode pixels in WS2803 format (zero allocation)
loadAndScaleRGBWFunction mLoadAndScaleRGBW
PixelIterator(PixelControllerT *pc, Rgbw rgbw, Rgbww rgbww=RgbwwInvalid::value()) FL_NOEXCEPT
void writeLPD8806(CONTAINER_UIN8_T *out) FL_NOEXCEPT
Encode pixels in LPD8806 format (zero allocation)
A fixed-size array implementation similar to std::array.
bool mHasValue
true if current value is valid
u8 mCurrent
Current brightness value (cached)
PixelIterator * mPixels
Underlying PixelIterator.
void advance() FL_NOEXCEPT
Advance to next brightness value (or mark as end)
PixelIterator * mPixels
Underlying PixelIterator.
array< u16, 3 > mCurrent
Current pixel value (cached, wire order, 16-bit)
void advance() FL_NOEXCEPT
Advance to next pixel (or mark as end)
bool mHasValue
true if current pixel is valid
PixelIterator * mPixels
Underlying PixelIterator.
void advance() FL_NOEXCEPT
Advance to next pixel (or mark as end)
array< u8, 3 > mCurrent
Current pixel value (cached, wire order)
bool mHasValue
true if current pixel is valid
array< u8, 4 > mCurrent
Current pixel value (cached, wire order)
void advance() FL_NOEXCEPT
Advance to next pixel (or mark as end)
bool mHasValue
true if current pixel is valid
PixelIterator * mPixels
Underlying PixelIterator.
void advance() FL_NOEXCEPT
APA102/DOTSTAR SPI chipset encoder.
HD108 SPI chipset encoder.
P9813 SPI chipset encoder.
SM16716 SPI chipset encoder.
WS2801/WS2803 SPI chipset encoder.
Functions for red, green, blue, white (RGBW) output.
Integer mapping functions between different integer sizes.
u16 map8_to_16(u8 x) FL_NOEXCEPT
LPD6803 SPI chipset encoder.
LPD8806 SPI chipset encoder.
Compile-time linker keep-alive hook for a single fl::Bus.
pair< detail::ScaledPixelIteratorRGB, detail::ScaledPixelIteratorRGB > makeScaledPixelRangeRGB(PixelIterator *pixels) FL_NOEXCEPT
Create RGB input iterator range from PixelIterator.
void(* stepDitheringFunction)(void *pixel_controller)
void encodeWS2812_RGBWW(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode 5-byte pixel data in WS2812 format (issue #2558, RGBWW).
pair< detail::ScaledPixelIteratorRGBWW, detail::ScaledPixelIteratorRGBWW > makeScaledPixelRangeRGBWW(PixelIterator *pixels) FL_NOEXCEPT
Create RGBWW input iterator range from PixelIterator (issue #2558)
void encodeWS2801(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode pixel data in WS2801/WS2803 format.
void encodeAPA102(InputIterator first, InputIterator last, OutputIterator out, u8 global_brightness=31) FL_NOEXCEPT
Encode pixel data in APA102 format with global brightness.
int(* sizeFunction)(void *pixel_controller)
back_insert_iterator< Container > back_inserter(Container &c) FL_NOEXCEPT
Helper function to create a back_insert_iterator.
void(* loadAndScaleRGBWFunction)(void *pixel_controller, Rgbw rgbw, u8 *b0_out, u8 *b1_out, u8 *b2_out, u8 *b3_out)
FL_NO_INLINE_IF_AVR void encodeSK9822_AutoBrightness(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode pixel data in SK9822 format (auto-detected brightness from first pixel)
void encodeWS2812_RGB(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode 3-byte pixel data in WS2812 format.
void encodeWS2803(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode pixel data in WS2803 format (alias for WS2801)
void(* getHdScaleFunction)(void *pixel_controller, u8 *c0, u8 *c1, u8 *c2, u8 *brightness)
FL_NO_INLINE_IF_AVR FL_OPTIMIZE_O2 void encodeAPA102_AutoBrightness(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode pixel data in APA102 format (auto-detected brightness from first pixel)
void encodeLPD6803(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode pixel data in LPD6803 format.
pair< detail::ScaledPixelIteratorBrightness, detail::ScaledPixelIteratorBrightness > makeScaledBrightnessRange(PixelIterator *pixels) FL_NOEXCEPT
Create brightness input iterator range from PixelIterator.
pair< detail::ScaledPixelIteratorRGBW, detail::ScaledPixelIteratorRGBW > makeScaledPixelRangeRGBW(PixelIterator *pixels) FL_NOEXCEPT
Create RGBW input iterator range from PixelIterator.
bool(* hasFunction)(void *pixel_controller, int n)
void encodeSM16716(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode pixel data in SM16716 format.
void encodeWS2812_RGBW(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode 4-byte pixel data in WS2812 format.
void(* loadAndScaleRGBFunction)(void *pixel_controller, u8 *r_out, u8 *g_out, u8 *b_out)
void encodeHD108_HD(InputIterator first, InputIterator last, BrightnessIterator brightness_first, OutputIterator out) FL_NOEXCEPT
Encode pixel data in HD108 format with per-LED brightness.
void(* loadAndScaleRGBWWFunction)(void *pixel_controller, Rgbww rgbww, u8 *b0_out, u8 *b1_out, u8 *b2_out, u8 *b3_out, u8 *b4_out)
u8(* globalBrightness)(void *pixel_controller)
void(* advanceDataFunction)(void *pixel_controller)
void(* loadRGBScaleAndBrightnessFunction)(void *pixel_controller, u8 *c0, u8 *c1, u8 *c2, u8 *brightness)
void encodeLPD8806(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode pixel data in LPD8806 format.
void encodeAPA102_HD(InputIterator first, InputIterator last, BrightnessIterator brightness_first, OutputIterator out) FL_NOEXCEPT
Encode pixel data in APA102 format with per-LED brightness.
void encodeHD108(InputIterator first, InputIterator last, OutputIterator out, u8 global_brightness=255) FL_NOEXCEPT
Encode pixel data in HD108 format with global brightness.
void encodeP9813(InputIterator first, InputIterator last, OutputIterator out) FL_NOEXCEPT
Encode pixel data in P9813 format.
void encodeSK9822_HD(InputIterator first, InputIterator last, BrightnessIterator brightness_first, OutputIterator out) FL_NOEXCEPT
Encode pixel data in SK9822 format with per-LED brightness.
void encodeSK9822(InputIterator first, InputIterator last, OutputIterator out, u8 global_brightness=31) FL_NOEXCEPT
Encode pixel data in SK9822 format with global brightness.
Base definition for an LED controller.
Adapter layer bridging PixelIterator to encoder input iterators.
5-channel RGB + warm-W + cool-W (RGBWW / RGBCCT) configuration types (issue #2558,...
#define FL_DEPRECATED(msg)
SK9822 SPI chipset encoder.
static void loadAndScaleRGBW(void *pixel_controller, Rgbw rgbw, u8 *b0_out, u8 *b1_out, u8 *b2_out, u8 *b3_out) FL_NOEXCEPT
static bool has(void *pixel_controller, int n) FL_NOEXCEPT
static void advanceData(void *pixel_controller) FL_NOEXCEPT
static void loadAndScaleRGBWW(void *pixel_controller, Rgbww rgbww, u8 *b0_out, u8 *b1_out, u8 *b2_out, u8 *b3_out, u8 *b4_out) FL_NOEXCEPT
static int size(void *pixel_controller) FL_NOEXCEPT
static void stepDithering(void *pixel_controller) FL_NOEXCEPT
static void loadAndScaleRGB(void *pixel_controller, u8 *r_out, u8 *g_out, u8 *b_out) FL_NOEXCEPT
Per-strip RGBWW configuration.
static Rgbww value() FL_NOEXCEPT
WS2803 SPI chipset encoder (WS2801 alias)
WS2812/WS2812B/WS2813/NeoPixel encoder.