10#ifndef M5_UNIT_RGB_UNIT_LED_HPP
11#define M5_UNIT_RGB_UNIT_LED_HPP
13#include <M5UnitComponent.hpp>
36 constexpr Color(
const uint8_t rr,
const uint8_t gg,
const uint8_t bb,
const uint8_t ww = 0)
37 :
b{bb},
g{gg},
r{rr},
w{ww}
45 static Color fromHSV(
const uint8_t h,
const uint8_t s,
const uint8_t v);
56constexpr bool operator==(
const Color& lhs,
const Color& rhs)
107int8_t offsetR(
const Order f);
109int8_t offsetG(
const Order f);
111int8_t offsetB(
const Order f);
113int8_t offsetW(
const Order f);
120class UnitLED :
public Component {
121 M5_UNIT_COMPONENT_HPP_BUILDER(
UnitLED, 0x00);
126 PixelProxy(UnitLED& u,
const uint32_t i) : _u(u), _i(i), _c{u.color(i)}
130 inline operator rgb::Color()
const
135 PixelProxy& operator=(
const rgb::Color& c)
138 _u.setPixelColor(_i, _c);
141 PixelProxy& operator=(
const PixelProxy& o)
143 _c =
static_cast<rgb::Color
>(o);
144 _u.setPixelColor(_i, _c);
189 : Component(0x00), _order{
order}, _numPixels{num_of_pixels}
191 _offsetR = rgb::offsetR(_order);
192 _offsetG = rgb::offsetG(_order);
193 _offsetB = rgb::offsetB(_order);
194 _offsetW = rgb::offsetW(_order);
195 _pixels.resize(_numPixels * (3 +
hasWhite()));
203 virtual bool begin()
override;
221 inline virtual uint16_t
width()
const
233 return (_order >= rgb::Order::hasWhite);
274 return (n < _numPixels) ? get_pixel_color(index_of(n)) :
rgb::Color();
284 return (n < _numPixels) ? get_pixel_color(n) :
rgb::Color();
323 bool setPixelColor(
const uint16_t n,
const uint8_t r,
const uint8_t g,
const uint8_t b);
335 inline bool setPixelColor(
const uint16_t n,
const uint8_t r,
const uint8_t g,
const uint8_t b,
const uint8_t w)
361 return set_pixel_color(index_of(n), c);
372 bool fill(
const rgb::Color& c,
const uint16_t first = 0,
const uint16_t count = 0);
389 bool fillRainbow(
const uint16_t first = 0,
const uint16_t count = 0,
const uint8_t firstHue = 0);
400 const uint16_t count = 0);
408 bool fillRandom(
const uint16_t first = 0,
const uint16_t count = 0);
417 shift_left(count,
false);
427 shift_right(count,
false);
436 shift_left(count,
true);
445 shift_right(count,
true);
484 return PixelProxy(*
this, i);
492 explicit Interface(
UnitLED& u) : _unit{u}
498 virtual bool write(
const uint8_t*,
const uint32_t) = 0;
500 virtual UnitLED::item_container_type items()
504 virtual UnitLED::item_container_type items_from_root()
509 virtual UnitLED::container_type rgb888_items()
513 virtual UnitLED::container_type rgb888_items_from_root()
519 virtual bool writePixelsDirect()
530 inline virtual types::category_t unit_category()
const override
532 return types::category_t::UnitLED;
534 inline virtual gpio::adapter_config_t rmt_config()
536 return gpio::adapter_config_t{};
538 inline virtual gpio::m5_rmt_item_t rmt_item_one()
540 return gpio::m5_rmt_item_t{};
542 inline virtual gpio::m5_rmt_item_t rmt_item_zero()
544 return gpio::m5_rmt_item_t{};
546 inline virtual gpio::m5_rmt_item_t rmt_item_reset()
548 return gpio::m5_rmt_item_t{};
556 rgb::Color get_pixel_color(
const uint16_t n)
const;
557 bool set_pixel_color(
const uint16_t n,
const rgb::Color& c);
559 inline uint8_t rotation_of(
const int8_t r)
const
564 inline virtual uint16_t index_of(
const uint16_t n)
const
567 return _rot ? _numPixels - (n % _numPixels) - 1 : n;
573 void shift_left(
const uint16_t count,
const bool wrap);
574 void shift_right(
const uint16_t count,
const bool wrap);
577 rgb::Order _order{rgb::Order::unknown};
578 uint8_t _brightness{10};
580 int8_t _offsetR{-1}, _offsetG{-1}, _offsetB{-1}, _offsetW{-1};
581 uint16_t _numPixels{};
583 std::unique_ptr<Interface> _interface{};
586 friend class InterfaceGPIO;
587 friend class InterfacePbHub;
bool fillRandom(const uint16_t first=0, const uint16_t count=0)
Fill the specified range to random color pixels.
Definition unit_LED.cpp:612
bool setPixelColor(const uint16_t n, const rgb::wrgb32_color_t c)
Set pixel color.
Definition unit_LED.hpp:347
int8_t rotation() const
Get the rotation.
Definition unit_LED.hpp:465
void setBrightness(const uint8_t b)
Set the brightness.
Definition unit_LED.hpp:309
int8_t offsetW() const
Offset of white.
Definition unit_LED.hpp:256
rgb::Color color(const uint16_t n) const
Get the Color.
Definition unit_LED.hpp:272
virtual uint16_t height() const
Number of the pixels.
Definition unit_LED.hpp:225
void rotateRight(const uint16_t count=1)
Rotate pixels right.
Definition unit_LED.hpp:443
std::vector< uint8_t > container_type
pixel container
Definition unit_LED.hpp:156
void shiftRight(const uint16_t count=1)
Shift pixels right.
Definition unit_LED.hpp:425
virtual bool begin() override
Begin the unit.
Definition unit_LED.cpp:481
int8_t offsetB() const
Offset of blue.
Definition unit_LED.hpp:251
PixelProxy operator[](const uint16_t i)
lvalue
Definition unit_LED.hpp:482
int8_t offsetR() const
Offset of red.
Definition unit_LED.hpp:241
bool setPixelColor(const uint16_t n, const rgb::Color &c)
Set pixel color.
Definition unit_LED.hpp:359
void setRotation(const int8_t rot)
Set the rotation.
Definition unit_LED.cpp:625
int8_t offsetG() const
Offset of green.
Definition unit_LED.hpp:246
bool fill(const rgb::Color &c, const uint16_t first=0, const uint16_t count=0)
Fill the specified range with the specified color.
Definition unit_LED.cpp:562
config_t config()
Gets the configuration.
Definition unit_LED.hpp:174
virtual uint16_t width() const
Number of the pixels.
Definition unit_LED.hpp:221
bool show()
Write pixel color to LED (alias)
Definition unit_LED.hpp:293
UnitLED(const uint16_t num_of_pixels, const rgb::Order order)
Constructor.
Definition unit_LED.hpp:188
bool hasWhite() const
Has white data?
Definition unit_LED.hpp:231
uint8_t brightness() const
Brightness.
Definition unit_LED.hpp:216
void clear(void)
Clear pixels.
Definition unit_LED.hpp:377
rgb::Color operator[](const uint16_t i) const
rvalue
Definition unit_LED.hpp:477
void config(const config_t &cfg)
Set the configuration.
Definition unit_LED.hpp:179
virtual uint8_t maxRotation() const
Get the max rotation.
Definition unit_LED.hpp:455
bool setPixelColor(const uint16_t n, const uint8_t r, const uint8_t g, const uint8_t b)
Set pixel color (RGB)
Definition unit_LED.cpp:549
void shiftLeft(const uint16_t count=1)
Shift pixels left.
Definition unit_LED.hpp:415
bool fillRainbow(const uint16_t first=0, const uint16_t count=0, const uint8_t firstHue=0)
Fill the specified range to rainbow.
Definition unit_LED.cpp:574
rgb::Color absoluteColor(const uint16_t n) const
Get the Color.
Definition unit_LED.hpp:282
void rotateLeft(const uint16_t count=1)
Rotate pixels left.
Definition unit_LED.hpp:434
rgb::Order order() const
Color order.
Definition unit_LED.hpp:236
uint16_t numPixels() const
Number of the pixels.
Definition unit_LED.hpp:208
bool writePixels()
Write pixel color to LED.
Definition unit_LED.cpp:528
std::vector< gpio::m5_rmt_item_t > item_container_type
item container
Definition unit_LED.hpp:157
const container_type & pixels() const
pixels container
Definition unit_LED.hpp:262
float rotationDegree() const
Get the rotation angle per 1 (degree)
Definition unit_LED.hpp:460
bool fillGradation(const rgb::Color &firstClr, const rgb::Color &lastClr, const uint16_t first=0, const uint16_t count=0)
Fill the specified range to gradation pixels.
Definition unit_LED.cpp:591
bool setPixelColor(const uint16_t n, const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t w)
Set pixel color (RGBW)
Definition unit_LED.hpp:335
Top level namespace of M5stack.
Settings for begin.
Definition unit_LED.hpp:163
bool with_dma
Use DMA for RMT (RMT v2 only, e.g. ESP32-S3/C6). Ignored via PbHub.
Definition unit_LED.hpp:168
uint8_t mem_blocks
RMT memory blocks (0 = use chip default). Ignored via PbHub.
Definition unit_LED.hpp:166
uint8_t brightness
Definition unit_LED.hpp:164
WRGB 32bits.
Definition unit_LED.hpp:32
uint8_t b
Blue.
Definition unit_LED.hpp:49
wrgb32_color_t wrgb
WRGB 32bits.
Definition unit_LED.hpp:47
uint8_t a[4]
Array.
Definition unit_LED.hpp:54
uint8_t w
White.
Definition unit_LED.hpp:52
uint8_t g
Green.
Definition unit_LED.hpp:50
uint8_t r
Red.
Definition unit_LED.hpp:51
static Color fromHSV(const uint8_t h, const uint8_t s, const uint8_t v)
Make Color from HSV.
Definition unit_LED.cpp:143
uint32_t wrgb32_color_t
WRGB 32bits.
Definition unit_LED.hpp:26
Order
Color order.
Definition unit_LED.hpp:65