FastLED 3.9.15
Loading...
Searching...
No Matches
engine_events.h
Go to the documentation of this file.
1#pragma once
2
3#include "fl/math/screenmap.h" // IWYU pragma: keep
4#include "fl/stl/singleton.h"
5#include "fl/stl/vector.h"
6#include "fl/math/xymap.h" // IWYU pragma: keep
7#include "fl/stl/string.h" // IWYU pragma: keep
8#include "fl/stl/int.h"
10#include "fl/stl/noexcept.h"
11
12#ifndef FASTLED_HAS_ENGINE_EVENTS
13#define FASTLED_HAS_ENGINE_EVENTS SKETCH_HAS_LARGE_MEMORY
14#endif // FASTLED_HAS_ENGINE_EVENTS
15
16
17namespace fl {
18
19class CLEDController; // forward declaration
20
22 public:
23 class Listener {
24 public:
25 // Note that the subclass must call EngineEvents::addListener(this) to
26 // start listening. In the subclass destructor, the subclass should call
27 // EngineEvents::removeListener(this).
29 virtual ~Listener() FL_NOEXCEPT;
30 virtual void onBeginFrame() FL_NOEXCEPT {}
31 virtual void onEndShowLeds() FL_NOEXCEPT {}
32 virtual void onEndFrame() FL_NOEXCEPT {}
33 virtual void onStripAdded(CLEDController *strip, fl::u32 num_leds) FL_NOEXCEPT {
34 (void)strip;
35 (void)num_leds;
36 }
37 // Called to set the canvas for UI elements for a particular strip.
38 virtual void onCanvasUiSet(CLEDController *strip,
40 (void)strip;
41 (void)screenmap;
42 }
45 virtual void onExit() FL_NOEXCEPT {} // Called before engine shutdown
46 };
47
48 static void addListener(Listener *listener, int priority = 0) FL_NOEXCEPT {
49#if FASTLED_HAS_ENGINE_EVENTS
50 EngineEvents::getInstance()->_addListener(listener, priority);
51#else
52 (void)listener;
53 (void)priority;
54#endif
55 }
56
57 static void removeListener(Listener *listener) FL_NOEXCEPT {
58#if FASTLED_HAS_ENGINE_EVENTS
59 EngineEvents::getInstance()->_removeListener(listener);
60#else
61 (void)listener;
62#endif
63 }
64
65 static bool hasListener(Listener *listener) FL_NOEXCEPT {
66#if FASTLED_HAS_ENGINE_EVENTS
67 return EngineEvents::getInstance()->_hasListener(listener);
68#else
69 (void)listener;
70 return false;
71#endif
72 }
73
74 static void onBeginFrame() FL_NOEXCEPT {
75#if FASTLED_HAS_ENGINE_EVENTS
76 EngineEvents::getInstance()->_onBeginFrame();
77#endif
78 }
79
80 static void onEndShowLeds() FL_NOEXCEPT {
81#if FASTLED_HAS_ENGINE_EVENTS
82 EngineEvents::getInstance()->_onEndShowLeds();
83#endif
84 }
85
86 static void onEndFrame() FL_NOEXCEPT {
87#if FASTLED_HAS_ENGINE_EVENTS
88 EngineEvents::getInstance()->_onEndFrame();
89#endif
90 }
91
92 static void onStripAdded(CLEDController *strip, fl::u32 num_leds) FL_NOEXCEPT {
93#if FASTLED_HAS_ENGINE_EVENTS
94 EngineEvents::getInstance()->_onStripAdded(strip, num_leds);
95#else
96 (void)strip;
97 (void)num_leds;
98#endif
99 }
100
102#if FASTLED_HAS_ENGINE_EVENTS
103 EngineEvents::getInstance()->_onCanvasUiSet(strip, xymap);
104#else
105 (void)strip;
106 (void)xymap;
107#endif
108 }
109
111#if FASTLED_HAS_ENGINE_EVENTS
112 EngineEvents::getInstance()->_onPlatformPreLoop();
113#endif
114 }
115
116 static void onExit() FL_NOEXCEPT {
117#if FASTLED_HAS_ENGINE_EVENTS
118 EngineEvents::getInstance()->_onExit();
119#endif
120 }
121
122 // Needed by fl::vector<T>
125
126 private:
127 // Safe to add a listeners during a callback.
128 void _addListener(Listener *listener, int priority) FL_NOEXCEPT;
129 // Safe to remove self during a callback.
134 void _onStripAdded(CLEDController *strip, fl::u32 num_leds) FL_NOEXCEPT;
139#if FASTLED_HAS_ENGINE_EVENTS
140 struct Pair {
141 Pair() FL_NOEXCEPT = default;
142 Listener *listener = nullptr;
143 int priority = 0;
144 Pair(Listener *listener, int priority) FL_NOEXCEPT
145 : listener(listener), priority(priority) {}
146 };
147
148 typedef fl::vector_inlined<Pair, 16> ListenerList;
149 ListenerList mListeners;
150
151
152 static EngineEvents *getInstance() FL_NOEXCEPT;
153
154 friend class fl::Singleton<EngineEvents>;
155#endif // FASTLED_HAS_ENGINE_EVENTS
156};
157
158} // namespace fl
XYMap xymap
fl::ScreenMap screenmap
virtual void onBeginFrame() FL_NOEXCEPT
virtual void onExit() FL_NOEXCEPT
virtual void onCanvasUiSet(CLEDController *strip, const ScreenMap &screenmap) FL_NOEXCEPT
virtual void onStripAdded(CLEDController *strip, fl::u32 num_leds) FL_NOEXCEPT
virtual void onPlatformPreLoop2() FL_NOEXCEPT
virtual void onEndShowLeds() FL_NOEXCEPT
virtual void onEndFrame() FL_NOEXCEPT
virtual ~Listener() FL_NOEXCEPT
virtual void onPlatformPreLoop() FL_NOEXCEPT
static void onStripAdded(CLEDController *strip, fl::u32 num_leds) FL_NOEXCEPT
static void onEndShowLeds() FL_NOEXCEPT
void _onStripAdded(CLEDController *strip, fl::u32 num_leds) FL_NOEXCEPT
EngineEvents() FL_NOEXCEPT
static void onExit() FL_NOEXCEPT
void _onCanvasUiSet(CLEDController *strip, const ScreenMap &xymap) FL_NOEXCEPT
void _addListener(Listener *listener, int priority) FL_NOEXCEPT
void _onEndShowLeds() FL_NOEXCEPT
void _onPlatformPreLoop() FL_NOEXCEPT
static void onCanvasUiSet(CLEDController *strip, const ScreenMap &xymap) FL_NOEXCEPT
void _removeListener(Listener *listener) FL_NOEXCEPT
static void removeListener(Listener *listener) FL_NOEXCEPT
static bool hasListener(Listener *listener) FL_NOEXCEPT
static void addListener(Listener *listener, int priority=0) FL_NOEXCEPT
bool _hasListener(Listener *listener) FL_NOEXCEPT
void _onBeginFrame() FL_NOEXCEPT
static void onEndFrame() FL_NOEXCEPT
static void onBeginFrame() FL_NOEXCEPT
static void onPlatformPreLoop() FL_NOEXCEPT
void _onEndFrame() FL_NOEXCEPT
void _onExit() FL_NOEXCEPT
fl::CLEDController CLEDController
pair< T1, T2 > Pair
Definition pair.h:207
VectorN< T, INLINED_SIZE > vector_inlined
Definition vector.h:1133
Base definition for an LED controller.
Definition crgb.hpp:179
#define FL_NOEXCEPT