|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <Kaleidoscope.h>
|
|
|
|
|
|
|
|
#define LED_MAX_MODES 24
|
|
|
|
|
|
|
|
#define LED_TOGGLE B00000001 // Synthetic, internal
|
|
|
|
|
|
|
|
#define Key_LEDEffectNext (Key) { 0, KEY_FLAGS | SYNTHETIC | IS_INTERNAL | LED_TOGGLE }
|
|
|
|
|
|
|
|
class LEDMode : public KaleidoscopePlugin {
|
|
|
|
public:
|
|
|
|
virtual void begin(void);
|
|
|
|
virtual void setup(void) {};
|
|
|
|
virtual void init(void) {};
|
|
|
|
virtual void update(void) {};
|
|
|
|
virtual void activate(void);
|
|
|
|
};
|
|
|
|
|
|
|
|
class LEDControl_ : public KaleidoscopePlugin {
|
|
|
|
public:
|
|
|
|
LEDControl_(void);
|
|
|
|
|
|
|
|
virtual void begin(void) final;
|
|
|
|
|
|
|
|
static void next_mode(void);
|
|
|
|
static void setup(void);
|
|
|
|
static void update(void);
|
|
|
|
static void set_mode(uint8_t mode);
|
|
|
|
static uint8_t get_mode();
|
|
|
|
|
|
|
|
static int8_t mode_add(LEDMode *mode);
|
|
|
|
|
|
|
|
static void led_set_crgb_at(uint8_t i, cRGB crgb);
|
|
|
|
static void led_set_crgb_at(byte row, byte col, cRGB color);
|
|
|
|
static cRGB led_get_crgb_at(uint8_t i);
|
|
|
|
static void led_sync(void);
|
|
|
|
|
|
|
|
static void set_all_leds_to(uint8_t r, uint8_t g, uint8_t b);
|
|
|
|
static void set_all_leds_to(cRGB color);
|
|
|
|
|
|
|
|
static void activate(LEDMode *mode);
|
|
|
|
|
|
|
|
static uint16_t syncDelay;
|
|
|
|
|
|
|
|
static bool focusHook(const char *command);
|
|
|
|
|
|
|
|
private:
|
|
|
|
static uint32_t syncTimer;
|
|
|
|
static LEDMode *modes[LED_MAX_MODES];
|
|
|
|
static uint8_t previousMode, mode;
|
|
|
|
|
|
|
|
static Key eventHandler(Key mappedKey, byte row, byte col, uint8_t keyState);
|
|
|
|
static void loopHook(bool postClear);
|
|
|
|
};
|
|
|
|
|
|
|
|
extern LEDControl_ LEDControl;
|
|
|
|
|
|
|
|
#define FOCUS_HOOK_LEDCONTROL FOCUS_HOOK (LEDControl.focusHook, \
|
|
|
|
"led.at\n" \
|
|
|
|
"led.setAll\n" \
|
|
|
|
"led.theme\n" \
|
|
|
|
"led.mode")
|