Welcome to Renderbug’s documentation!
API Documentation
-
struct AnimatedNumber
- #include <Animation.h>
Public Functions
-
inline void set(uint8_t v)
-
inline void set(uint8_t start, uint8_t end)
-
uint8_t value() const
-
inline void update()
-
inline void update(uint8_t speed)
-
inline bool isFinished() const
-
inline AnimatedNumber()
-
inline AnimatedNumber(uint8_t v)
-
inline AnimatedNumber &operator=(uint8_t v)
-
inline AnimatedNumber &operator+=(uint8_t v)
-
inline operator uint8_t() const
-
inline operator int() const
-
inline operator unsigned int() const
-
inline bool operator==(int other) const
-
inline uint8_t operator+(uint8_t other) const
-
inline int operator+(int other) const
-
inline void set(uint8_t v)
-
struct AnimatedRGB
- #include <Animation.h>
-
class ArduinoOTAUpdater : public BufferedInputSource
- #include <OTA.h>
Public Functions
-
ArduinoOTAUpdater()
-
virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
Private Members
-
bool m_online = false
-
ArduinoOTAUpdater()
-
struct AutoTaskRegistration : public Platform::TaskRegistration
- #include <Static.h>
-
template<typename T, uint8_t Size = 8>
struct Averager - #include <BluetoothSerialTelemetry.h>
-
class BluetoothSerialTelemetry : public InputSource
- #include <BluetoothSerialTelemetry.h>
Public Functions
-
BluetoothSerialTelemetry()
-
virtual void onStart() override
Implement in a subclass to run when the task is started The default implementation does nothing.
-
virtual InputEvent read() override
-
BluetoothSerialTelemetry()
-
struct BootOptions
- #include <BootOptions.h>
Public Members
-
bool isSetup = false
-
bool isSerial = false
-
bool isFlash = false
-
bool lastBootWasFlash = false
-
bool isSafeMode = false
-
uint8_t crashCount = 0
-
uint8_t resetReason = 0
Public Static Functions
-
static void initPins()
-
bool isSetup = false
-
class Bounce
- #include <Buttons.h>
Public Functions
-
inline void attach(int pin, int buttonPinMode)
-
inline void update()
-
inline void interval(uint8_t v)
-
inline bool fell() const
-
inline bool rose() const
-
inline bool held() const
Private Types
-
inline void attach(int pin, int buttonPinMode)
-
class BPM : public InputSource, private ConfigTaskMixin
- #include <BPM.h>
Public Functions
-
inline BPM()
-
inline virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
-
inline virtual void handleConfigChange(const Configuration &cfg) override
-
inline virtual InputEvent read() override
-
inline BPM()
-
class BufferedInputSource : public InputSource
- #include <Input.h>
Subclassed by ArduinoOTAUpdater, ConfigInputTask, InputMapper, MQTTTelemetry
Protected Functions
-
void setEvent(InputEvent &&evt)
-
void setEvent(InputEvent::Intent intent, Variant &&v)
Private Members
-
Ringbuf<InputEvent, 12> m_eventQueue
-
void setEvent(InputEvent &&evt)
-
class Buttons : public InputSource
- #include <Buttons.h>
Public Types
Public Functions
-
inline Buttons()
-
virtual void onStart() override
Implement in a subclass to run when the task is started The default implementation does nothing.
-
virtual InputEvent read() override
-
inline Buttons()
-
template<int ChimeLength>
class Chime - #include <Chime.h>
Public Functions
-
inline Chime()
-
inline void setSaturation(uint8_t i)
-
inline void setSpeed(uint8_t i)
-
inline void setOffset(unsigned int i)
-
inline void setPos(uint8_t i)
-
inline void setHue(uint8_t i)
-
inline void setBrightness(uint8_t i)
-
inline void update()
Public Static Attributes
-
static const int Length = ChimeLength
-
inline Chime()
-
class ChimesAnimation : public Figment
- #include <Chimes.h>
Public Functions
-
ChimesAnimation()
-
virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
Private Functions
-
void randomize()
Private Members
-
SpriteList<Chime<CHIME_LENGTH>, CHIME_COUNT> m_chimes
-
SpriteList<Blob, BLOB_COUNT> m_blobs
-
AnimatedRGB m_flashColor
-
AnimatedNumber m_flashBrightness
-
bool m_isRandom = false
-
ChimesAnimation()
-
class CircadianRhythm : public InputSource
- #include <CircadianRhythm.h>
Public Functions
-
inline CircadianRhythm()
-
inline virtual void onStart()
Implement in a subclass to run when the task is started The default implementation does nothing.
-
inline uint8_t brightnessForTime(uint8_t hour, uint8_t minute) const
-
inline virtual InputEvent read()
Private Members
-
bool needsUpdate = true
-
inline CircadianRhythm()
-
template<int Period>
class ColorSequenceInput : public InputSource - #include <ColorCycle.h>
Public Functions
-
inline ColorSequenceInput(const std::vector<CRGB> &colors, const char *name)
-
inline virtual InputEvent read() override
-
inline virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
-
inline virtual void onStart() override
Implement in a subclass to run when the task is started The default implementation does nothing.
-
inline ColorSequenceInput(const std::vector<CRGB> &colors, const char *name)
-
class ConfigInputTask : public BufferedInputSource
- #include <ConfigInput.h>
Public Functions
-
inline ConfigInputTask()
-
inline virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
Private Functions
-
inline void decrement()
-
inline void increment()
-
inline InputEvent::Intent nextIntent()
Private Members
-
InputEvent::Intent m_currentIntent = InputEvent::SetDisplayLength
-
inline ConfigInputTask()
-
struct ConfigService : public Task
- #include <Config.h>
Public Functions
-
inline ConfigService()
-
virtual void onStart()
Implement in a subclass to run when the task is started The default implementation does nothing.
-
virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
-
inline const CoordinateMapping *coordMap() const
-
const char *loadedProfile() const
-
void overrideProfile(const char *profileName)
-
const char *getConfigValue(const char *key) const
Private Members
-
HardwareConfig m_config
-
JsonCoordinateMapping m_jsonMap
-
const char *m_overrideProfile = nullptr
-
inline ConfigService()
-
class ConfigTaskMixin : public virtual Loopable
- #include <Config.h>
Subclassed by BPM, MQTTTelemetry, Power
Public Functions
-
virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
-
inline virtual void handleConfigChange(const Configuration &config)
-
virtual void handleEvent(const InputEvent &evt) override
-
class Configuration
- #include <Config.h>
Public Functions
-
Configuration(const JsonObject &data)
-
const char *get(const char *key, const char *defaultVal) const
-
int get(const char *key, int defaultVal) const
-
bool get(const char *key, bool defaultVal) const
Private Members
-
const JsonObject &m_json
-
Configuration(const JsonObject &data)
-
struct CoordinateMapping
- #include <Display.h>
Generic interface for converting between virtual and physical coordinates
Subclassed by JsonCoordinateMapping, LinearCoordinateMapping
Public Functions
-
virtual VirtualCoordinates physicalToVirtualCoords(const PhysicalCoordinates localCoords) const = 0
Maps physical coordinates to virtual coordinates. Virtual coordinates range from 0 to 255. Physical coordinates are hardware-dependent.
-
virtual PhysicalCoordinates virtualToPhysicalCoords(const VirtualCoordinates virtualCoords) const = 0
Maps virtual coordinates to physical (aka, hardware) coordinates. Virtual coordinates range from 0 to 255. Physical coordinates are hardware-dependent.
-
virtual int physicalCoordsToIndex(const PhysicalCoordinates localCoords) const = 0
Returns the index of the underlying FastLED array, i.e., the physical hardware pixel.
-
virtual unsigned int physicalPixelCount() const = 0
-
virtual VirtualCoordinates physicalToVirtualCoords(const PhysicalCoordinates localCoords) const = 0
-
template<typename T>
struct Coordinates - #include <Geometry.h>
-
class Display
- #include <Display.h>
The connection between the rendering engine and the physical hardware. Provides direct access to the underlying FastLED array.
Public Functions
-
inline Display(CRGB *pixels, int pixelCount, const CoordinateMapping *map)
-
CRGB &pixelAt(const PhysicalCoordinates coords)
Returns the physical pixel at the given physical coordinates
-
CRGB &pixelAt(const VirtualCoordinates coords)
Returns the physical pixel at the given virtual coordinates
-
CRGB &pixelAt(int idx)
Returns the physical pixel in the underlying FastLED array
-
int pixelCount() const
Returns how many pixels are in this display
-
CRGB *pixelBacking() const
Returns the raw underlying FastLED array
-
const CoordinateMapping *coordinateMapping() const
-
void clear()
Sets every pixel to (0, 0, 0)
-
void clear(const CRGB &color)
Sets every pixel to the given display
-
inline Display(CRGB *pixels, int pixelCount, const CoordinateMapping *map)
-
class DrainAnimation : public Figment
- #include <Drain.h>
Public Functions
-
DrainAnimation()
-
virtual void handleEvent(const InputEvent &event) override
Called by the MainLoop to process events
Private Functions
-
void fillRange(Display *dpy, const PhysicalCoordinates &start, const PhysicalCoordinates &end, const CHSV &baseColor) const
-
DrainAnimation()
-
struct Figment : public Task
- #include <Figment.h>
A Task with a graphical output
Subclassed by ChimesAnimation, DrainAnimation, FigmentFunc, Flashlight, InputBlip, Power, SolidAnimation, TestAnimation, UpdateStatus
-
struct figment_iterator : public std::iterator<std::input_iterator_tag, Figment*>
- #include <Platform.h>
Public Functions
-
inline explicit figment_iterator()
-
inline explicit figment_iterator(TaskRegistration *head)
-
inline figment_iterator &operator++()
-
inline figment_iterator operator++(int)
-
inline bool operator==(figment_iterator other) const
-
inline bool operator!=(figment_iterator other) const
Public Members
-
TaskRegistration *cur
-
inline explicit figment_iterator()
-
struct FigmentFunc : public Figment
- #include <Figment.h>
Functional lambda interface for creating Figments
Public Functions
-
class Flashlight : public Figment
- #include <Flashlight.h>
Public Functions
-
Flashlight()
-
virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
Private Members
-
SpriteList<Blob, blobCount> m_blobs
Private Static Attributes
-
static constexpr int blobCount = 30
-
Flashlight()
-
struct HardwareConfig
- #include <Config.h>
Public Static Functions
-
static HardwareConfig load()
Public Static Attributes
-
static constexpr uint16_t MAX_LED_NUM = 255
Private Functions
-
uint8_t getCRC() const
Private Static Attributes
-
static constexpr uint8_t CRC7_POLY = 0x91
-
static HardwareConfig load()
-
class InputBlip : public Figment
- #include <InputBlip.h>
Public Functions
-
InputBlip()
-
virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
Private Members
-
uint8_t m_time = 0
-
InputBlip()
-
struct InputEvent : public Variant
- #include <Input.h>
Public Types
-
enum Intent
Values:
-
enumerator None
-
enumerator UserInput
-
enumerator ButtonPress
-
enumerator Acceleration
-
enumerator NetworkStatus
-
enumerator NetworkActivity
-
enumerator PowerToggle
-
enumerator SetPower
-
enumerator SetBrightness
-
enumerator PreviousPattern
-
enumerator NextPattern
-
enumerator SetPattern
-
enumerator PreviousScene
-
enumerator NextScene
-
enumerator SetScene
-
enumerator ScheduleChange
-
enumerator Beat
-
enumerator BeatDetect
-
enumerator StartThing
-
enumerator StopThing
-
enumerator SetDisplayOffset
-
enumerator SetDisplayLength
-
enumerator LoadConfigurationByName
-
enumerator SetColor
-
enumerator SaveConfigurationRequest
-
enumerator ConfigurationChanged
-
enumerator FirmwareUpdate
-
enumerator ReadyToRoll
-
enumerator None
Public Functions
-
inline InputEvent()
-
enum Intent
-
class InputFunc : public InputSource
- #include <Input.h>
Public Functions
-
inline InputFunc(std::function<InputEvent(void)> f)
-
inline InputFunc(std::function<InputEvent(void)> f, const char *name)
-
inline virtual InputEvent read() override
Private Members
-
std::function<InputEvent(void)> m_func
-
inline InputFunc(std::function<InputEvent(void)> f)
-
class InputMapper : public BufferedInputSource
- #include <Input.h>
Public Functions
-
inline InputMapper(std::function<InputEvent(const InputEvent)> f, const char *name)
-
inline virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
Private Members
-
std::function<InputEvent(const InputEvent)> m_func
-
inline InputMapper(std::function<InputEvent(const InputEvent)> f, const char *name)
-
class InputSource : public Task
- #include <Input.h>
Subclassed by BluetoothSerialTelemetry, BPM, BufferedInputSource, Buttons, CircadianRhythm, ColorSequenceInput< Period >, InputFunc, MPU5060, SerialInput, WiFiTask
Public Functions
-
inline InputSource()
-
inline explicit InputSource(const char *name)
-
virtual void onStart() override
Implement in a subclass to run when the task is started The default implementation does nothing.
-
virtual InputEvent read() = 0
Private Functions
-
void init()
-
inline InputSource()
-
struct iterator : public std::iterator<std::input_iterator_tag, Task*>
- #include <MainLoop.h>
Public Functions
-
inline int nextEnabled(int start) const
-
inline int nextEnabled(int start) const
-
struct JsonCoordinateMapping : public CoordinateMapping
- #include <JsonCoordinateMapping.h>
Public Functions
-
void load(const JsonArray &strides)
-
void loadDefault()
-
virtual VirtualCoordinates physicalToVirtualCoords(const PhysicalCoordinates localCoords) const override
Maps physical coordinates to virtual coordinates. Virtual coordinates range from 0 to 255. Physical coordinates are hardware-dependent.
-
virtual PhysicalCoordinates virtualToPhysicalCoords(const VirtualCoordinates virtualCoords) const override
Maps virtual coordinates to physical (aka, hardware) coordinates. Virtual coordinates range from 0 to 255. Physical coordinates are hardware-dependent.
-
virtual int physicalCoordsToIndex(const PhysicalCoordinates localCoords) const override
Returns the index of the underlying FastLED array, i.e., the physical hardware pixel.
-
virtual unsigned int physicalPixelCount() const override
-
void load(const JsonArray &strides)
-
struct LinearCoordinateMapping : public CoordinateMapping
- #include <Display.h>
Basic mapping for a contiguous 1-d linear display, eg, an LED strip.
X value ranges from 0 to 255; all Y values are flattened to Y=0
Public Functions
-
inline LinearCoordinateMapping()
-
inline LinearCoordinateMapping(unsigned int count, unsigned int start)
-
inline virtual VirtualCoordinates physicalToVirtualCoords(const PhysicalCoordinates localCoords) const override
Maps physical coordinates to virtual coordinates. Virtual coordinates range from 0 to 255. Physical coordinates are hardware-dependent.
-
inline virtual PhysicalCoordinates virtualToPhysicalCoords(const VirtualCoordinates virtualCoords) const override
Maps virtual coordinates to physical (aka, hardware) coordinates. Virtual coordinates range from 0 to 255. Physical coordinates are hardware-dependent.
-
inline virtual int physicalCoordsToIndex(const PhysicalCoordinates localCoords) const override
Returns the index of the underlying FastLED array, i.e., the physical hardware pixel.
-
inline virtual unsigned int physicalPixelCount() const override
-
inline LinearCoordinateMapping()
-
class LogPrinter : public Print
- #include <MQTTTelemetry.h>
-
class LogService : public Task
- #include <LogService.h>
Public Functions
-
inline LogService()
-
virtual void handleEvent(const InputEvent &event) override
Called by the MainLoop to process events
Public Static Functions
-
static const char *intentName(InputEvent::Intent intent)
-
static const char *eventValue(const InputEvent &evt)
Private Static Attributes
-
static char s_valueBuf[255]
-
inline LogService()
-
struct Loopable
- #include <Figment.h>
A generic interface for anything that can be executed and respond to events.
Subclassed by ConfigTaskMixin, OnlineTaskMixin, Task
Public Functions
-
inline virtual void handleEvent(const InputEvent &event)
Called by the MainLoop to process events
-
inline virtual void handleEvent(const InputEvent &event)
-
struct MainLoop
- #include <MainLoop.h>
Public Functions
-
void start()
-
void loop()
-
void dispatch(const InputEvent &event)
-
void dispatchSync(const InputEvent &event)
Private Members
-
Ringbuf<InputEvent, 32> m_eventBuf
-
void start()
-
class MPU5060 : public InputSource
- #include <MPU6050.h>
Public Functions
-
MPU5060()
-
virtual void onStart() override
Implement in a subclass to run when the task is started The default implementation does nothing.
-
virtual void onStop() override
Implement in a subclass to run when the task is stopped. The default implementation does nothing.
-
virtual InputEvent read() override
Private Members
-
const int ACCEL_XOUT_HIGH = 0x3B
-
const int ACCEL_XOUT_LOW = 0x3C
-
const int ACCEL_YOUT_HIGH = 0x3D
-
const int ACCEL_YOUT_LOW = 0x3E
-
const int ACCEL_ZOUT_HIGH = 0x3F
-
const int ACCEL_ZOUT_LOW = 0x40
-
const int I2C_ADDRESS = 0x68
-
const int PWR_MGMT_1 = 0x6B
-
const int CONFIG_REG = 0x1A
-
const int ACCEL_CONFIG_REG = 0x1C
-
MPU5060()
-
struct MQTTEntity
Public Functions
-
inline MQTTEntity(const String &domain, const MQTTDevice &device, const String &name)
-
inline String configTopic() const
-
inline String commandTopic() const
-
inline String heartbeatTopic() const
-
inline String statTopic() const
-
inline bool isCommandTopic(const char *topic) const
-
inline void toJson(JsonDocument &jsonBuf, bool isInteractive = true) const
-
inline MQTTEntity(const String &domain, const MQTTDevice &device, const String &name)
-
class MQTTTelemetry : public BufferedInputSource, private OnlineTaskMixin, private ConfigTaskMixin
- #include <MQTTTelemetry.h>
Public Functions
-
MQTTTelemetry()
-
inline Print *logPrinter()
-
virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
-
virtual void handleEventOnline(const InputEvent &evt) override
-
virtual void handleConfigChange(const Configuration &cfg) override
-
virtual void loopOnline() override
-
virtual void onOnline() override
-
virtual void onOffline() override
Private Functions
-
void callback(char *topic, const char *payload)
-
void publishDoc(const char *topic)
-
void publishDoc(const char *topic, bool retain)
Private Members
-
String m_rootTopic
-
String m_debugTopic
-
char m_patternBuf[48]
-
bool m_needHeartbeat = false
-
bool m_isOn = true
-
char m_hostBuf[15]
-
WiFiClient m_wifi
-
PubSubClient m_mqtt
-
LogPrinter m_logPrinter
Private Static Functions
-
static void s_callback(char *topic, byte *payload, unsigned int length)
-
MQTTTelemetry()
-
class OnlineTaskMixin : public virtual Loopable
- #include <Input.h>
Subclassed by MQTTTelemetry
Public Functions
-
inline virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
-
inline virtual void onOnline()
-
inline virtual void onOffline()
-
inline virtual void handleEventOnline(const InputEvent &evt)
-
inline virtual void loopOnline()
Private Members
-
bool m_online = false
-
inline virtual void handleEvent(const InputEvent &evt) override
-
struct PerfCounter
- #include <Perfcounter.h>
-
struct PhysicalCoordinates : public Coordinates<uint16_t>
- #include <Geometry.h>
Public Functions
-
inline PhysicalCoordinates(uint16_t _x, uint16_t _y)
-
inline PhysicalCoordinates(uint16_t _x, uint16_t _y)
-
class Platform : public Task
- #include <Platform.h>
Public Static Functions
-
static inline void setTimezone(int tz)
-
static inline int getTimezone()
-
static void addLEDs(CRGB *leds, unsigned int ledCount)
-
static const char *name()
-
static const char *version()
-
static const String model()
-
static inline const String deviceName()
-
static void preSetup()
-
static void bootSplash()
-
static void setup()
-
static bool getLocalTime(struct tm *timedata)
-
static const char *deviceID()
-
static int freeRam()
-
static inline void registerTask(TaskRegistration *reg)
-
static inline figment_iterator beginFigments()
-
static inline figment_iterator endFigments()
-
static inline task_iterator beginTasks()
-
static inline task_iterator endTasks()
-
static void restart()
Public Static Attributes
-
static BootOptions bootopts
-
static TaskRegistration *firstTask = NULL
-
static TaskRegistration *lastTask = NULL
-
static inline void setTimezone(int tz)
-
class Power : public Figment, private ConfigTaskMixin
- #include <Power.h>
Public Functions
-
inline Power()
-
inline virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
-
virtual void handleConfigChange(const Configuration &config) override
Private Members
-
AnimatedNumber m_powerState = 255
-
AnimatedNumber m_brightness = 255
-
AnimatedNumber m_beatDecay = 255
-
uint8_t m_voltage = 5
-
uint16_t m_milliamps = 500
-
bool m_valid = true
-
bool m_useBPM = false
-
inline Power()
-
struct Renderer : public Task
- #include <Renderer.h>
Public Functions
-
virtual void onStart() override
Implement in a subclass to run when the task is started The default implementation does nothing.
-
virtual void onStart() override
-
template<typename T, int Size>
struct Ringbuf - #include <Ringbuf.h>
A simple ring buffer structure
Public Functions
-
inline Ringbuf()
-
inline void clear()
Clears the buffer’s contents
-
inline bool take(T &dest)
Removes and returns the next available item, if any.
- Returns
false if no data is available, true otherwise
-
inline void insert(const T &src)
Inserts an item into the buffer. If the buffer is full, the oldest item is overwritten.
-
inline size_t write(Print &stream)
Consumes the entire buffer and writes it to the given output
-
inline size_t size()
Returns how many items are available in the buffer
-
inline Ringbuf()
-
class SafeMode
- #include <SafeMode.h>
-
class Scene
- #include <Sequencer.h>
-
struct ScheduleEntry
- #include <CircadianRhythm.h>
-
struct Scheduler
- #include <MainLoop.h>
Public Functions
-
class Sequencer : public Task
- #include <Sequencer.h>
-
class SerialInput : public InputSource
- #include <Serial.h>
Public Functions
-
inline virtual void onStart() override
Implement in a subclass to run when the task is started The default implementation does nothing.
-
virtual InputEvent read()
Private Functions
-
void doCommand()
Private Members
-
String m_buf
-
inline virtual void onStart() override
-
class SolidAnimation : public Figment
- #include <SolidAnimation.h>
Public Functions
-
SolidAnimation()
-
virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
Private Functions
-
void randomize()
Private Members
-
AnimatedNumber m_red
-
AnimatedNumber m_green
-
AnimatedNumber m_blue
-
AnimatedNumber m_changePct
-
CRGB m_curColor
-
CRGB m_prevColor
-
SpriteList<Blob, blobCount> m_blobs
-
bool m_isRandom = false
-
bool m_horizontal = false
Private Static Attributes
-
static constexpr int blobCount = 20
-
SolidAnimation()
-
struct Span
- #include <JsonCoordinateMapping.h>
-
template<typename T, int Size>
struct SpriteList - #include <Animation.h>
-
template<typename T>
struct StaticTaskRegistration : public Platform::TaskRegistration - #include <Static.h>
Public Functions
-
inline StaticTaskRegistration()
-
inline StaticTaskRegistration()
-
class Surface
- #include <Surface.h>
A high performance and hardware-independent rendering surface which represents a full 2d display ranging from (0,0) to (255, 255), that may be rotated.
Simple brushes and complex shaders may be applied to a Surface using and . The Surface will only execute each shader or brush once for each physical pixel in the display, allowing you to design display-independent graphics.
Public Types
-
using Shader = std::function<void(CRGB&, const VirtualCoordinates &virtPos, const PhysicalCoordinates &realPos, const VirtualCoordinates &surfacePos)>
A lambda function that maps coordinates to colors.
-
using BrushFunc = std::function<void(CRGB&)>
A simple lambda that is called for every pixel in a surface. Commonly used for solid fills; if you want to map pixel coordinates to colors or textures, you probably want to use a Shader instead.
Public Functions
-
Surface(Display *dpy, const VirtualCoordinates &start, const VirtualCoordinates &end)
-
Surface(Display *dpy, const VirtualCoordinates &start, const VirtualCoordinates &end, uint8_t rotation)
Public Members
-
const PhysicalCoordinates start
-
const PhysicalCoordinates end
-
const VirtualCoordinates virtStart
-
const VirtualCoordinates virtEnd
-
using Shader = std::function<void(CRGB&, const VirtualCoordinates &virtPos, const PhysicalCoordinates &realPos, const VirtualCoordinates &surfacePos)>
-
struct Task : public virtual Loopable
- #include <Figment.h>
A Loopable that can be named and may be started or stopped in a MainLoop.
Subclassed by ConfigService, Figment, InputSource, LogService, Platform, Renderer, Sequencer, TaskFunc, U8Display
Public Functions
-
inline virtual void onStart()
Implement in a subclass to run when the task is started The default implementation does nothing.
-
inline virtual void onStop()
Implement in a subclass to run when the task is stopped. The default implementation does nothing.
-
inline Task()
-
inline explicit Task(const char *name)
-
inline void start()
Starts the task and makes it schedulable
-
inline void stop()
Stops the task and makes it unschedulable
-
inline virtual void onStart()
-
struct task_iterator : public std::iterator<std::input_iterator_tag, Task*>
- #include <Platform.h>
Public Functions
-
inline explicit task_iterator()
-
inline explicit task_iterator(TaskRegistration *head)
-
inline task_iterator &operator++()
-
inline task_iterator operator++(int)
-
inline bool operator==(task_iterator other) const
-
inline bool operator!=(task_iterator other) const
Public Members
-
TaskRegistration *cur
-
inline explicit task_iterator()
-
struct TaskFunc : public Task
- #include <Figment.h>
Functional lambda interface for creating Tasks
Public Functions
-
inline TaskFunc(std::function<void()> func)
Public Members
-
std::function<void()> func
-
inline TaskFunc(std::function<void()> func)
-
struct TaskRegistration
- #include <Platform.h>
Subclassed by AutoTaskRegistration, StaticTaskRegistration< T >
-
class TestAnimation : public Figment
- #include <TestAnimation.h>
Public Functions
-
const char *name() const
-
virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
Private Members
-
AnimatedNumber m_hue
-
AnimatedNumber m_saturation
-
AnimatedNumber m_brightness
-
uint8_t m_x
-
uint8_t m_y
-
const char *name() const
-
class U8Display : public Task
Public Types
Public Functions
-
inline U8Display()
-
inline virtual void onStart()
Implement in a subclass to run when the task is started The default implementation does nothing.
-
inline virtual void onStop()
Implement in a subclass to run when the task is stopped. The default implementation does nothing.
-
inline virtual void handleEvent(const InputEvent &evt)
Called by the MainLoop to process events
-
inline void drawSplash()
-
inline void drawMessage()
-
inline void drawTime()
-
inline void drawState(ScreenState state)
Private Functions
-
inline void redraw()
Private Members
-
ScreenState m_state = BootSplash
-
ScreenState m_nextState = BootSplash
-
uint8_t m_transitionFrame = 0
-
uint8_t m_screenStartTime = 0
-
InputEvent m_lastEvent
-
String m_message
-
TaskHandle_t m_renderTask
Private Static Functions
-
static inline void redrawTask(void *data)
-
inline U8Display()
-
class UpdateStatus : public Figment
- #include <UpdateStatus.h>
Public Functions
-
inline UpdateStatus()
-
virtual void handleEvent(const InputEvent &evt) override
Called by the MainLoop to process events
-
inline UpdateStatus()
-
struct Variant
- #include <Input.h>
Subclassed by InputEvent
Public Types
-
template<typename T>
struct Vector3d - #include <Geometry.h>
Public Functions
-
inline Vector3d()
-
inline Vector3d()
-
struct VirtualCoordinates : public Coordinates<uint8_t>
- #include <Geometry.h>
Public Functions
-
inline VirtualCoordinates(uint8_t _x, uint8_t _y)
-
inline VirtualCoordinates(uint8_t _x, uint8_t _y)
-
class WiFiTask : public InputSource
- #include <WiFiTask.h>
Public Functions
-
WiFiTask()
-
virtual void onStart() override
Implement in a subclass to run when the task is started The default implementation does nothing.
-
virtual InputEvent read() override
Private Members
-
uint8_t m_lastStatus
-
WiFiTask()
- file Animation.cpp
- #include “./Animation.h”#include “./Input.h”#include “./Display.h”#include <algorithm>
- file Animation.h
- #include <FastLED.h>#include “./Figment.h”
- file Display.cpp
- #include “Display.h”#include <math.h>
- file Display.h
- #include <FastLED.h>#include “Geometry.h”
- file Figment.h
- #include <Arduino.h>#include <functional>#include <ArduinoLog.h>
- file Figments.h
- #include “./Display.h”#include “./Input.h”#include “./Figment.h”#include “./Animation.h”#include “./MainLoop.h”#include “./Renderer.h”#include “./Surface.h”
- file Geometry.h
- #include <stdint.h>
- file Input.cpp
- #include <Arduino.h>#include “./Input.h”#include “./MainLoop.h”
- file Input.h
- #include <Arduino.h>#include “./Geometry.h”#include “./Figment.h”#include “./Ringbuf.h”#include <FastLED.h>
- file MainLoop.cpp
- #include “./MainLoop.h”#include “./Input.h”#include “./Figment.h”#include <ArduinoLog.h>
Defines
-
__NOINIT_ATTR
Variables
- __NOINIT_ATTR const char * s_lastTaskName
-
__NOINIT_ATTR
- file MainLoop.h
- #include <vector>#include <algorithm>#include “./Input.h”#include “./Ringbuf.h”
- file Perfcounter.h
- #include <ArduinoLog.h>
- file Renderer.cpp
- #include “./Renderer.h”#include “./Display.h”#include <ArduinoLog.h>
- file Renderer.h
- #include “./Figment.h”#include <vector>
- file Ringbuf.h
- #include <array>
- file Service.h
- file Surface.cpp
- #include “./Surface.h”#include “./Display.h”#include <ArduinoLog.h>#include “Perfcounter.h”
- file Surface.h
- #include <FastLED.h>#include “./Geometry.h”#include <functional>
- file Chimes.cpp
- #include “Chimes.h”#include “../Static.h”
- file Chimes.h
- #include “../Figments/Figments.h”#include “../sprites/Chime.h”#include “../sprites/Blob.h”
- file Drain.cpp
- #include “Drain.h”#include “../Static.h”
- file Drain.h
- #include <Figments.h>#include <ArduinoLog.h>
- file Flashlight.cpp
- #include “Flashlight.h”#include “../Static.h”
- file Flashlight.h
- #include <Figments.h>#include “../sprites/Blob.h”
- file InputBlip.cpp
- #include “InputBlip.h”
- file InputBlip.h
- #include “../Figments/Figments.h”#include “../Static.h”
- file Power.cpp
- #include “./Power.h”#include “../Static.h”#include <ArduinoJson.h>
- file Power.h
- #include <Figments.h>#include “../Config.h”
- file SolidAnimation.cpp
- #include “SolidAnimation.h”#include “../Static.h”#include <Perfcounter.h>
- file SolidAnimation.h
- #include <Figments.h>#include “../sprites/Blob.h”
- file TestAnimation.cpp
- #include “./TestAnimation.h”#include <FastLED.h>
- file TestAnimation.h
- #include <Figments.h>
- file UpdateStatus.cpp
- #include “./UpdateStatus.h”#include <FastLED.h>#include “../Static.h”
- file UpdateStatus.h
- #include <Figments.h>
- file BootOptions.cpp
- #include “BootOptions.h”#include “Config.h”#include <EEPROM.h>
- file BootOptions.h
- #include <Arduino.h>
- file colors.cpp
- #include “colors.h”
- file colors.h
- #include <FastLED.h>
Typedefs
-
typedef struct ColorInfo ColorInfo
-
typedef struct ColorInfo ColorInfo
- file Config.cpp
- #include “./Config.h”#include “./Static.h”#include “./Sequencer.h”#include <ArduinoLog.h>#include <ArduinoJson.h>#include <EEPROM.h>#include <LittleFS.h>#include <vector>
Variables
-
StaticJsonDocument<1024> jsonConfig
-
StaticJsonDocument<1024> jsonConfig
- file Config.h
- #include <Figments.h>#include “JsonCoordinateMapping.h”#include <ArduinoJson.h>
- file BPM.cpp
- #include “./BPM.h”#include “../Static.h”
- file BPM.h
- #include <Figments.h>#include <ArduinoJson.h>#include “../Config.h”
- file Buttons.cpp
- #include “./Buttons.h”#include “../Static.h”
- file Buttons.h
- #include <Input.h>
- file CircadianRhythm.cpp
- #include “./CircadianRhythm.h”#include “../Static.h”
- file CircadianRhythm.h
- #include <Figments.h>
Variables
-
std::array<ScheduleEntry, 10> schedule{{{0, 0}, {5, 0}, {6, 0}, {7, 10}, {8, 80}, {11, 120}, {18, 200}, {19, 255}, {22, 120}, {23, 20}}}
-
std::array<ScheduleEntry, 10> schedule{{{0, 0}, {5, 0}, {6, 0}, {7, 10}, {8, 80}, {11, 120}, {18, 200}, {19, 255}, {22, 120}, {23, 20}}}
- file ColorCycle.cpp
- file ColorCycle.h
- #include <Figments.h>#include <ArduinoLog.h>
- file ConfigInput.cpp
- #include “./ConfigInput.h”#include “./Static.h”
- file ConfigInput.h
- #include <Figments.h>
- file DMX.cpp
- file MPU6050.cpp
- #include “MPU6050.h”#include <Wire.h>#include “../Config.h”#include “../Static.h”
- file MPU6050.h
- #include <Figments.h>
- file Serial.cpp
- #include “Serial.h”
- file Serial.h
- #include “../Figments/Figments.h”
- file JsonCoordinateMapping.cpp
- #include “./JsonCoordinateMapping.h”
- file JsonCoordinateMapping.h
- #include <Figments.h>#include <ArduinoJson.h>
- file LogService.cpp
- #include “LogService.h”#include “Static.h”#include <ArduinoLog.h>
Functions
-
static const char *eventValue(const InputEvent &evt)
-
STATIC_ALLOC(LogService)
-
STATIC_TASK(LogService)
-
static const char *eventValue(const InputEvent &evt)
- file LogService.h
- #include <Figments.h>
- file main.cpp
- #include “Arduino.h”#include <FastLED.h>#include <Figments.h>#include <ArduinoLog.h>#include “Platform.h”#include “Static.h”#include “Config.h”#include “LogService.h”#include <time.h>#include “inputs/ColorCycle.h”#include “inputs/Buttons.h”#include “SafeMode.h”
Functions
-
Display dpy(leds, HardwareConfig::MAX_LED_NUM, Static<ConfigService>::instance() -> coordMap())
-
REGISTER_TASK(keyMap)
-
REGISTER_TASK(rainbowCycle)
-
void setup()
-
void loop()
Variables
-
CRGB leds[HardwareConfig::MAX_LED_NUM]
- InputMapper keyMap ([](const InputEvent &evt) { if(evt.intent==InputEvent::UserInput) { Buttons::Chord chord=(Buttons::Chord) evt.asInt();switch(chord) { case Buttons::Circle:return InputEvent::PowerToggle;break;case Buttons::Triangle:return InputEvent::NextPattern;break;case Buttons::Cross:return InputEvent::UserInput;break;default:break;} } return InputEvent::None;}, "Keymap")
-
ColorSequenceInput<9> idleCycle{{CRGB(0, 123, 167), CRGB(80, 200, 120), CRGB(207, 113, 175), CRGB(128, 0, 128), CRGB(255, 255, 255), CRGB(0, 255, 255),}, "IdleColors"}
-
ColorSequenceInput<7> rainbowCycle{{CRGB(255, 0, 0), CRGB(255, 127, 0), CRGB(0, 255, 0), CRGB(0, 0, 255), CRGB(128, 0, 128),}, "Rainbow"}
-
MainLoop *runner = &SafeMode::safeModeApp
-
Display dpy(leds, HardwareConfig::MAX_LED_NUM, Static<ConfigService>::instance() -> coordMap())
- file Platform.cpp
- #include “Platform.h”#include <ArduinoLog.h>#include “Static.h”#include <time.h>
- file Platform.h
- #include <FastLED.h>#include <Figments.h>#include “BootOptions.h”
- file BluetoothSerialTelemetry.cpp
- #include “BluetoothSerialTelemetry.h”#include “../../Static.h”#include “../../Platform.h”#include <ArduinoLog.h>#include “../../inputs/Buttons.h”#include <cstdlib>
- file BluetoothSerialTelemetry.h
- #include <Figments.h>#include <BluetoothSerial.h>#include <Ringbuf.h>
- file MQTTTelemetry.cpp
- #include “MQTTTelemetry.h”#include <ArduinoJson.h>#include “../../Static.h”#include “../../Config.h”#include “../../Platform.h”
Variables
-
StaticJsonDocument<1024> m_json
-
const MQTTDevice Device = {Platform::deviceID(), Platform::deviceName(), Platform::model(), "", "Phong Robotics", availTopic}
-
const MQTTEntity Lightswitch{"light", Device, "lightswitch"}
-
const MQTTEntity flashlightSwitch{"switch", Device, "flashlight"}
-
const MQTTEntity FPSSensor{"sensor", Device, "fps"}
-
StaticJsonDocument<1024> m_json
- file MQTTTelemetry.h
- #include <Figments.h>#include <Ringbuf.h>#include <PubSubClient.h>#include <ArduinoLog.h>#include “../../Config.h”#include “../../Sequencer.h”
- file OTA.cpp
- #include “OTA.h”#include “../../Static.h”
- file OTA.h
- #include <ArduinoOTA.h>#include <Figments.h>
- file U8Display.cpp
- #include <Figments.h>#include <U8g2lib.h>#include “../../Static.h”#include <ArduinoLog.h>#include “../../LogService.h”
- file WiFiTask.cpp
- #include <Input.h>#include <ArduinoLog.h>#include “Static.h”#include “WiFiTask.h”
- file SafeMode.cpp
- #include “./SafeMode.h”#include “./LogService.h”#include “./Platform.h”#include “./Static.h”#include “./Config.h”
Variables
- TaskFunc safeModeNag ([]{ static uint8_t frame=0;static CRGB *leds=FastLED.leds();EVERY_N_SECONDS(30) { Log.fatal("I am running in safe mode!");} EVERY_N_MILLISECONDS(16) { frame++;for(int i=0;i< HardwareConfig::MAX_LED_NUM;i++) { leds[i]=CRGB(0, 0, 0);} for(int idx=0;idx< 3;idx++) { uint8_t length=beatsin8(5, 3, HardwareConfig::MAX_LED_NUM, 0, idx *5);for(int i=0;i< length;i++) { leds[i]+=CRGB(scale8(5, beatsin8(5+i *7, 0, 255, 0, i *3)), 0, 0);} } FastLED.show();} })
- file SafeMode.h
- #include <Figments.h>
- file Sequencer.cpp
- #include “Sequencer.h”#include <MainLoop.h>#include “Static.h”
- file Sequencer.h
- #include <Figment.h>#include <vector>
- file Blob.h
- #include <Figments.h>#include <ArduinoLog.h>#include <Perfcounter.h>
- file Chime.h
- file Static.h
- #include “Platform.h”
- dir src/animations
- dir src/platform/arduino
- dir lib/Figments
- dir src/inputs
- dir lib
- dir src/platform
- dir src/sprites
- dir src