FastLED 3.9.15
Loading...
Searching...
No Matches
cled_controller.h
Go to the documentation of this file.
1#pragma once
2
3#include <stddef.h>
4
7
8#include "FastLED.h"
9#include "led_sysdefs.h"
10#include "pixeltypes.h"
11#include "color.h"
12
13#include "fl/force_inline.h"
14#include "fl/unused.h"
15#include "pixel_controller.h"
16#include "dither_mode.h"
17#include "pixel_iterator.h"
18#include "fl/engine_events.h"
19#include "fl/screenmap.h"
21
23
24
26//
27// LED Controller interface definition
28//
30
37protected:
38 friend class CFastLED;
44 bool m_enabled = true;
45 int m_nLeds;
48
49public:
50
55 virtual void showColor(const CRGB & data, int nLeds, uint8_t brightness) = 0;
56
61 virtual void show(const struct CRGB *data, int nLeds, uint8_t brightness) = 0;
62
63
66 // Note that at this time (Sept 13th, 2024) this is only implemented in the ESP32 driver
67 // directly. For an emulated version please see RGBWEmulatedController in chipsets.h
68 mRgbMode = arg;
69 return *this; // builder pattern.
70 }
71
72 void setEnabled(bool enabled) { m_enabled = enabled; }
73 bool getEnabled() { return m_enabled; }
74
76 // If we added virtual to the AVR boards then we are going to add 600 bytes of memory to the binary
77 // flash size. This is because the virtual destructor pulls in malloc and free, which are the largest
78 // Testing shows that this virtual destructor adds a 600 bytes to the binary on
79 // attiny85 and about 1k for the teensy 4.X series.
80 // Attiny85:
81 // With CLEDController destructor virtual: 11018 bytes to binary.
82 // Without CLEDController destructor virtual: 10666 bytes to binary.
84
85 Rgbw getRgbw() const { return mRgbMode; }
86
88 virtual void init() = 0;
89
92 VIRTUAL_IF_NOT_AVR void clearLeds(int nLeds = -1) {
94 showLeds(0);
95 }
96
97 // Compatibility with the 3.8.x codebase.
99 void* data = beginShowLeds(m_nLeds);
101 endShowLeds(data);
102 }
103
105
113 void showInternal(const struct CRGB *data, int nLeds, uint8_t brightness) {
114 if (m_enabled) {
115 show(data, nLeds,brightness);
116 }
117 }
118
126 void showColorInternal(const struct CRGB &data, int nLeds, uint8_t brightness) {
127 if (m_enabled) {
128 showColor(data, nLeds, brightness);
129 }
130 }
131
136 if (m_enabled) {
138 }
139 }
140
146 void showColorInternal(const struct CRGB & data, uint8_t brightness) {
147 if (m_enabled) {
149 }
150 }
151
154 static CLEDController *head() { return m_pHead; }
155
159
163 CLEDController & setLeds(CRGB *data, int nLeds) {
164 m_Data = data;
165 m_nLeds = nLeds;
166 return *this;
167 }
168
170 void clearLedDataInternal(int nLeds = -1);
171
174 virtual int size() { return m_nLeds; }
175
178 virtual int lanes() { return 1; }
179
182 CRGB* leds() { return m_Data; }
183
187 CRGB &operator[](int x) { return m_Data[x]; }
188
192 inline CLEDController & setDither(uint8_t ditherMode = BINARY_DITHER) { m_DitherMode = ditherMode; return *this; }
193
195 // EngineEvents::onCanvasUiSet(this, map);
196 fl::ScreenMap screenmap = map.toScreenMap();
197 fl::EngineEvents::onCanvasUiSet(this, screenmap);
198 return *this;
199 }
200
203 return *this;
204 }
205
206 CLEDController& setScreenMap(uint16_t width, uint16_t height) {
208 }
209
212 inline uint8_t getDither() { return m_DitherMode; }
213
214 virtual void* beginShowLeds(int size) {
216 // By default, emit an integer. This integer will, by default, be passed back.
217 // If you override beginShowLeds() then
218 // you should also override endShowLeds() to match the return state.
219 //
220 // For async led controllers this should be used as a sync point to block
221 // the caller until the leds from the last draw frame have completed drawing.
222 // for each controller:
223 // beginShowLeds();
224 // for each controller:
225 // showLeds();
226 // for each controller:
227 // endShowLeds();
228 uintptr_t d = getDither();
229 void* out = reinterpret_cast<void*>(d);
230 return out;
231 }
232
233 virtual void endShowLeds(void* data) {
234 // By default recieves the integer that beginShowLeds() emitted.
235 //For async controllers this should be used to signal the controller
236 // to begin transmitting the current frame to the leds.
237 uintptr_t d = reinterpret_cast<uintptr_t>(data);
238 setDither(static_cast<uint8_t>(d));
239 }
240
244 CLEDController & setCorrection(CRGB correction) { m_ColorCorrection = correction; return *this; }
245
247 CLEDController & setCorrection(LEDColorCorrection correction) { m_ColorCorrection = correction; return *this; }
248
252
256 CLEDController & setTemperature(CRGB temperature) { m_ColorTemperature = temperature; return *this; }
257
259 CLEDController & setTemperature(ColorTemperature temperature) { m_ColorTemperature = temperature; return *this; }
260
264
271
274 virtual uint16_t getMaxRefreshRate() const { return 0; }
275};
276
278
279
central include file for FastLED, defines the CFastLED class/object
uint32_t x[NUM_LAYERS]
Definition Fire2023.ino:80
UISlider brightness("Brightness", 255, 0, 255, 1)
UISlider scale("Scale", 4,.1, 4,.1)
CLEDController & setTemperature(ColorTemperature temperature)
Set the color temperature, aka white point, for this controller.
CRGB getCorrection()
Get the correction value used by this controller.
CLEDController * next()
Get the next controller in the linked list after this one.
CLEDController & setDither(uint8_t ditherMode=BINARY_DITHER)
Set the dithering mode for this controller to use.
virtual int lanes()
How many Lanes does this controller manage?
CLEDController & setScreenMap(const fl::XYMap &map)
VIRTUAL_IF_NOT_AVR void showLeds(uint8_t brightness)
virtual uint16_t getMaxRefreshRate() const
Gets the maximum possible refresh rate of the strip.
CRGB * m_Data
pointer to the LED data used by this controller
CRGB & operator[](int x)
Reference to the n'th LED managed by the controller.
virtual void endShowLeds(void *data)
CRGB m_ColorCorrection
CRGB object representing the color correction to apply to the strip on show()
virtual int size()
How many LEDs does this controller manage?
uint8_t getDither()
Get the dithering option currently set for this controller.
CLEDController & setLeds(CRGB *data, int nLeds)
Set the default array of LEDs to be used by this controller.
VIRTUAL_IF_NOT_AVR void clearLeds(int nLeds=-1)
Clear out/zero out the given number of LEDs.
ColorAdjustment getAdjustmentData(uint8_t brightness)
CLEDController & setCorrection(CRGB correction)
The color corrction to use for this controller, expressed as a CRGB object.
static CLEDController * head()
Get the first LED controller in the linked list of controllers.
Rgbw getRgbw() const
CLEDController()
Create an led controller object, add it to the chain of controllers.
EDitherMode m_DitherMode
the current dither mode of the controller
CLEDController & setTemperature(CRGB temperature)
Set the color temperature, aka white point, for this controller.
CRGB * leds()
Pointer to the CRGB array for this controller.
CLEDController * m_pNext
pointer to the next LED controller in the linked list
int m_nLeds
the number of LEDs in the LED data array
VIRTUAL_IF_NOT_AVR ~CLEDController()
static CLEDController * m_pTail
pointer to the last LED controller in the linked list
void setEnabled(bool enabled)
void showInternal(const struct CRGB *data, int nLeds, uint8_t brightness)
CLEDController & setRgbw(const Rgbw &arg=RgbwDefault::value())
void showColorInternal(const struct CRGB &data, int nLeds, uint8_t brightness)
void showLedsInternal(uint8_t brightness)
Write the data to the LEDs managed by this controller.
void clearLedDataInternal(int nLeds=-1)
Zero out the LED data managed by this controller.
friend class CFastLED
CLEDController & setScreenMap(uint16_t width, uint16_t height)
CLEDController & setCorrection(LEDColorCorrection correction)
The color corrction to use for this controller, expressed as a CRGB object.
CRGB m_ColorTemperature
CRGB object representing the color temperature to apply to the strip on show()
void showColorInternal(const struct CRGB &data, uint8_t brightness)
virtual void showColor(const CRGB &data, int nLeds, uint8_t brightness)=0
Set all the LEDs to a given color.
CLEDController & setScreenMap(const fl::ScreenMap &map)
CRGB getAdjustment(uint8_t scale)
Get the combined brightness/color adjustment for this controller.
virtual void init()=0
Initialize the LED controller.
virtual void * beginShowLeds(int size)
static CLEDController * m_pHead
pointer to the first LED controller in the linked list
virtual void show(const struct CRGB *data, int nLeds, uint8_t brightness)=0
Write the passed in RGB data out to the LEDs managed by this controller.
CRGB getTemperature()
Get the color temperature, aka white point, for this controller.
static void onCanvasUiSet(CLEDController *strip, const ScreenMap &xymap)
static XYMap constructRectangularGrid(uint16_t width, uint16_t height, uint16_t offset=0)
Definition xymap.cpp:35
FASTLED_NAMESPACE_BEGIN typedef uint8_t EDitherMode
The dither setting, either DISABLE_DITHER or BINARY_DITHER.
Definition dither_mode.h:16
#define BINARY_DITHER
Enable dithering using binary dithering (only option)
Definition dither_mode.h:13
Declares dithering options and types.
ColorTemperature
Color temperature values.
Definition color.h:46
LEDColorCorrection
Color correction starting points.
Definition color.h:15
Determines which platform system definitions to include.
#define FASTLED_NAMESPACE_END
Definition namespace.h:22
Low level pixel data writing class.
Non-templated low level pixel data writing class.
Includes defintions for RGB and HSV pixels.
Contains definitions for color correction and temperature.
static CRGB computeAdjustment(uint8_t scale, const CRGB &colorCorrection, const CRGB &colorTemperature)
Calculates the combined color adjustment to the LEDs at a given scale, color correction,...
Definition crgb.cpp:25
Representation of an RGB pixel (Red, Green, Blue)
Definition crgb.h:54
static Rgbw value()
Definition rgbw.h:69
Definition rgbw.h:28
static Rgbw value()
Definition rgbw.h:58
#define FASTLED_UNUSED(x)
Definition unused.h:3
#define VIRTUAL_IF_NOT_AVR