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");
32 M5_UNIT_COMPONENT_HPP_BUILDER(UnitRectLED, 0x00);
35 using BaseClass::BaseClass;
36 UnitRectLED() : BaseClass(WIDTH * HEIGHT)
39 static constexpr uint8_t LED_WIDTH{WIDTH};
40 static constexpr uint8_t LED_HEIGHT{HEIGHT};
43 inline virtual uint16_t
width()
const override
45 return (this->rotation() & 1) ? HEIGHT : WIDTH;
48 inline virtual uint16_t
height()
const override
50 return (this->rotation() & 1) ? WIDTH : HEIGHT;
53 inline virtual uint8_t maxRotation()
const
60 virtual uint16_t index_of(
const uint16_t n)
const override
62 switch (this->rotation()) {
64 uint8_t x = n % HEIGHT;
65 uint8_t y = n / HEIGHT;
66 return x * WIDTH + (WIDTH - 1 - y);
69 uint8_t x = n % WIDTH;
70 uint8_t y = n / WIDTH;
71 return (HEIGHT - 1 - y) * WIDTH + (WIDTH - 1 - x);
74 uint8_t x = n % HEIGHT;
75 uint8_t y = n / HEIGHT;
76 return (HEIGHT - 1 - x) * WIDTH + y;
86using m5::utility::mmh3::operator
"" _mmh3;
88template <const u
int8_t WIDTH, const u
int8_t HEIGHT,
class BaseClass>
89const char UnitRectLED<WIDTH, HEIGHT, BaseClass>::name[] =
"UnitRectLED";
90template <const u
int8_t WIDTH, const u
int8_t HEIGHT,
class BaseClass>
91const types::uid_t UnitRectLED<WIDTH, HEIGHT, BaseClass>::uid{
"UnitRectLED"_mmh3};
92template <const u
int8_t WIDTH, const u
int8_t HEIGHT,
class BaseClass>
93const types::attr_t UnitRectLED<WIDTH, HEIGHT, BaseClass>::attr{types::attribute::AccessGPIO};
virtual uint16_t height() const override
Logical height considering rotation (0/180: HEIGHT, 90/270: WIDTH)
Definition unit_RectLED.hpp:48
virtual uint16_t width() const override
Logical width considering rotation (0/180: WIDTH, 90/270: HEIGHT)
Definition unit_RectLED.hpp:43
Top level namespace of M5stack.
LED base unit for M5UnitUnified.
SK6812 unit for M5UnitUnified.
WS2812 unit for M5UnitUnified.