10#ifndef M5_UNIT_RGB_UNIT_RECT_LED_HPP
11#define M5_UNIT_RGB_UNIT_RECT_LED_HPP
27template <const u
int8_t WIDTH, const u
int8_t HEIGHT,
class BaseClass>
28class UnitRectLED :
public BaseClass {
29 static_assert(WIDTH > 0,
"WIDTH must be greater than 0");
30 static_assert(HEIGHT > 0,
"HEIGHT must be greater than 0");
31 static_assert(std::is_base_of<UnitLED, BaseClass>::value,
"BaseClass must derive from UnitLED");
35 using BaseClass::BaseClass;
40 static constexpr uint8_t LED_WIDTH{WIDTH};
41 static constexpr uint8_t LED_HEIGHT{HEIGHT};
47 inline virtual uint16_t
width()
const override
49 return (this->rotation() & 1) ? HEIGHT : WIDTH;
55 inline virtual uint16_t
height()
const override
57 return (this->rotation() & 1) ? WIDTH : HEIGHT;
71 virtual uint16_t index_of(
const uint16_t n)
const override
73 switch (this->rotation()) {
75 uint8_t x = n % HEIGHT;
76 uint8_t y = n / HEIGHT;
77 return x * WIDTH + (WIDTH - 1 - y);
80 uint8_t x = n % WIDTH;
81 uint8_t y = n / WIDTH;
82 return (HEIGHT - 1 - y) * WIDTH + (WIDTH - 1 - x);
85 uint8_t x = n % HEIGHT;
86 uint8_t y = n / HEIGHT;
87 return (HEIGHT - 1 - x) * WIDTH + y;
97using m5::utility::mmh3::operator
"" _mmh3;
99template <const u
int8_t WIDTH, const u
int8_t HEIGHT,
class BaseClass>
100const char UnitRectLED<WIDTH, HEIGHT, BaseClass>::name[] =
"UnitRectLED";
101template <const u
int8_t WIDTH, const u
int8_t HEIGHT,
class BaseClass>
102const types::uid_t UnitRectLED<WIDTH, HEIGHT, BaseClass>::uid{
"UnitRectLED"_mmh3};
103template <const u
int8_t WIDTH, const u
int8_t HEIGHT,
class BaseClass>
104const types::attr_t UnitRectLED<WIDTH, HEIGHT, BaseClass>::attr{types::attribute::AccessGPIO};
virtual uint8_t maxRotation() const override
Get the max rotation (4 steps: 0/90/180/270 deg)
Definition unit_RectLED.hpp:64
UnitRectLED()
Default constructor (uses WIDTH x HEIGHT pixels)
Definition unit_RectLED.hpp:37
virtual uint16_t height() const override
Logical height considering rotation (0/180: HEIGHT, 90/270: WIDTH)
Definition unit_RectLED.hpp:55
virtual uint16_t width() const override
Logical width considering rotation (0/180: WIDTH, 90/270: HEIGHT)
Definition unit_RectLED.hpp:47
Top level namespace of M5Stack.
LED base unit for M5UnitUnified.
SK6812 unit for M5UnitUnified.
WS2812 unit for M5UnitUnified.