|
- #pragma once
-
- #include <cstdint>
- #include <string>
-
-
- struct Color {
- uint8_t r, g, b;
- } __attribute__ ((packed));
-
-
- typedef uint16_t Fixed;
- constexpr int factor = 65536;
- constexpr int shift = 16;
-
-
- class Pattern {
- public:
- virtual ~Pattern() = default;
-
- struct State {
- virtual ~State() = default;
- };
-
- virtual State* start(int) const = 0;
-
- virtual void step(Color[], int, State*) const = 0;
- };
-
-
- class LEDStrip {
- public:
- LEDStrip(int length = 0);
- ~LEDStrip() { if (state) delete state; }
-
- void step();
-
- virtual void show() = 0;
- virtual void length_changing(int) {};
-
- void setPattern(const Pattern *_pattern) { pattern = _pattern; update_state(); }
- const Pattern* getPattern() const { return pattern; }
-
- void setLength(int length);
- int getLength() const { return length; }
-
- protected:
- int length;
- const Pattern *pattern;
- Color *pixels;
-
- private:
- void update_state();
-
- Pattern::State *state;
- };
-
- class TerminalLEDs : public LEDStrip {
- public:
- TerminalLEDs(int length = 0) : LEDStrip(length) {}
- void show();
- };
|