10#ifndef M5_UNIT_RGB_UNIT_LED_HPP
11#define M5_UNIT_RGB_UNIT_LED_HPP
14#include <M5UnitComponent.hpp>
73int8_t offsetR(
const Order f);
79int8_t offsetG(
const Order f);
85int8_t offsetB(
const Order f);
91int8_t offsetW(
const Order f);
98class UnitLED :
public Component {
99 M5_UNIT_COMPONENT_HPP_BUILDER(UnitLED, 0x00);
104 PixelProxy(UnitLED& u,
const uint32_t i) : _u(u), _i(i), _c{u.color(i)}
108 inline operator rgb::Color()
const
113 PixelProxy& operator=(
const rgb::Color& c)
116 _u.setPixelColor(_i, _c);
119 PixelProxy& operator=(
const PixelProxy& o)
121 _c =
static_cast<rgb::Color
>(o);
122 _u.setPixelColor(_i, _c);
187 virtual bool begin()
override;
212 inline virtual uint16_t
width()
const
231 return (_order >= rgb::Order::hasWhite);
290 return (n < _numPixels) ? get_pixel_color(index_of(n)) :
rgb::Color();
300 return (n < _numPixels) ? get_pixel_color(n) :
rgb::Color();
344 bool setPixelColor(
const uint16_t n,
const uint8_t r,
const uint8_t g,
const uint8_t b);
356 inline bool setPixelColor(
const uint16_t n,
const uint8_t r,
const uint8_t g,
const uint8_t b,
const uint8_t w)
382 if (n >= _numPixels) {
385 return set_pixel_color(index_of(n), c);
396 bool fill(
const rgb::Color& c,
const uint16_t first = 0,
const uint16_t count = 0);
413 bool fillRainbow(
const uint16_t first = 0,
const uint16_t count = 0,
const uint8_t firstHue = 0);
424 const uint16_t count = 0);
432 bool fillRandom(
const uint16_t first = 0,
const uint16_t count = 0);
441 shift_left(count,
false);
451 shift_right(count,
false);
460 shift_left(count,
true);
469 shift_right(count,
true);
528 return PixelProxy(*
this, i);
536 explicit Interface(
UnitLED& u) : _unit{u}
542 virtual bool write(
const uint8_t*,
const uint32_t) = 0;
544 virtual UnitLED::container_type rgb888_items()
548 virtual UnitLED::container_type rgb888_items_from_root()
554 virtual bool writePixelsDirect()
565 inline virtual types::category_t unit_category()
const override
567 return types::category_t::UnitLED;
569 inline virtual gpio::adapter_config_t rmt_config()
571 return gpio::adapter_config_t{};
573 inline virtual gpio::m5_rmt_item_t rmt_item_one()
575 return gpio::m5_rmt_item_t{};
577 inline virtual gpio::m5_rmt_item_t rmt_item_zero()
579 return gpio::m5_rmt_item_t{};
581 inline virtual gpio::m5_rmt_item_t rmt_item_reset()
583 return gpio::m5_rmt_item_t{};
587 uint32_t rmt_resolution_hz();
589 gpio::m5_rmt_item_t rmt_item_from_ns(
const uint32_t high_ns,
const uint32_t low_ns);
591 gpio::m5_rmt_item_t rmt_item_low_from_ns(
const uint32_t low_ns);
598 rgb::Color get_pixel_color(
const uint16_t n)
const;
599 bool set_pixel_color(
const uint16_t n,
const rgb::Color& c);
601 inline uint8_t rotation_of(
const int8_t r)
const
606 inline virtual uint16_t index_of(
const uint16_t n)
const
609 return _rot ? _numPixels - (n % _numPixels) - 1 : n;
614 void shift_left(
const uint16_t count,
const bool wrap);
615 void shift_right(
const uint16_t count,
const bool wrap);
619 explicit UnitLED(
const uint16_t num_of_pixels,
const rgb::Order
order)
620 : Component(0x00), _order{
order}, _numPixels{num_of_pixels}
622 _offsetR = rgb::offsetR(_order);
623 _offsetG = rgb::offsetG(_order);
624 _offsetB = rgb::offsetB(_order);
625 _offsetW = rgb::offsetW(_order);
626 _pixels.resize(_numPixels * (3 +
hasWhite()));
630 rgb::Order _order{rgb::Order::unknown};
631 uint8_t _brightness{10};
633 int8_t _offsetR{-1}, _offsetG{-1}, _offsetB{-1}, _offsetW{-1};
634 uint16_t _numPixels{};
637 std::unique_ptr<Interface> _interface{};
639 uint32_t _rmt_resolution_hz{};
641 friend class InterfaceGPIO;
642 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:615
bool setPixelColor(const uint16_t n, const rgb::wrgb32_color_t c)
Set pixel color.
Definition unit_LED.hpp:368
int8_t rotation() const
Get the rotation.
Definition unit_LED.hpp:498
void setBrightness(const uint8_t b)
Set the brightness.
Definition unit_LED.hpp:330
int8_t offsetW() const
Offset of white.
Definition unit_LED.hpp:269
rgb::Color color(const uint16_t n) const
Get the Color.
Definition unit_LED.hpp:288
virtual uint16_t height() const
Logical height in pixels.
Definition unit_LED.hpp:220
void rotateRight(const uint16_t count=1)
Rotate pixels right.
Definition unit_LED.hpp:467
std::vector< uint8_t > container_type
pixel container
Definition unit_LED.hpp:134
void shiftRight(const uint16_t count=1)
Shift pixels right.
Definition unit_LED.hpp:449
virtual bool begin() override
Begin the unit.
Definition unit_LED.cpp:460
int8_t offsetB() const
Offset of blue.
Definition unit_LED.hpp:261
PixelProxy operator[](const uint16_t i)
lvalue
Definition unit_LED.hpp:526
int8_t offsetR() const
Offset of red.
Definition unit_LED.hpp:245
bool setPixelColor(const uint16_t n, const rgb::Color &c)
Set pixel color.
Definition unit_LED.hpp:380
bool add(UnitLED &c, const int16_t channel)
Connect an LED unit as a daisy-chained child.
Definition unit_LED.cpp:455
void setRotation(const int8_t rot)
Set the rotation.
Definition unit_LED.cpp:629
int8_t offsetG() const
Offset of green.
Definition unit_LED.hpp:253
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:559
virtual uint16_t width() const
Logical width in pixels.
Definition unit_LED.hpp:212
bool show()
Write pixel color to LED (alias)
Definition unit_LED.hpp:315
bool hasWhite() const
Has white data?
Definition unit_LED.hpp:229
uint8_t brightness() const
Brightness.
Definition unit_LED.hpp:203
void clear(void)
Clear pixels.
Definition unit_LED.hpp:401
rgb::Color operator[](const uint16_t i) const
rvalue
Definition unit_LED.hpp:517
void config(const config_t &cfg)
Set the configuration.
Definition unit_LED.hpp:163
virtual uint8_t maxRotation() const
Get the max rotation.
Definition unit_LED.hpp:482
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:546
void shiftLeft(const uint16_t count=1)
Shift pixels left.
Definition unit_LED.hpp:439
config_t config() const
Gets the configuration.
Definition unit_LED.hpp:155
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:572
rgb::Color absoluteColor(const uint16_t n) const
Get the Color.
Definition unit_LED.hpp:298
void rotateLeft(const uint16_t count=1)
Rotate pixels left.
Definition unit_LED.hpp:458
rgb::Order order() const
Color order.
Definition unit_LED.hpp:237
uint16_t numPixels() const
Number of the pixels.
Definition unit_LED.hpp:195
bool writePixels()
Write pixel color to LED.
Definition unit_LED.cpp:522
virtual ~UnitLED()
Destructor.
Definition unit_LED.hpp:170
std::vector< gpio::m5_rmt_item_t > item_container_type
RMT item container (unused, for compatibility)
Definition unit_LED.hpp:135
const container_type & pixels() const
pixels container
Definition unit_LED.hpp:278
float rotationDegree() const
Get the rotation angle per 1.
Definition unit_LED.hpp:490
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:590
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:356
Top level namespace of M5Stack.
Settings for begin.
Definition unit_LED.hpp:141
bool with_dma
Use DMA for RMT (RMT v2 only, e.g. ESP32-S3/C6). Ignored via PbHub.
Definition unit_LED.hpp:146
uint8_t mem_blocks
RMT memory blocks (0 = use chip default). Ignored via PbHub.
Definition unit_LED.hpp:144
uint8_t brightness
Definition unit_LED.hpp:142
WRGB 32bits.
Definition unit_LED_data.hpp:35
Order
Color order.
Definition unit_LED.hpp:27
@ wrgb32
Same value as hasWhite.
@ hasWhite
First 32-bit order; orders >= hasWhite carry a white channel.
@ unknown
Not set (begin() fails)
Color type and data line timing for M5Unit-RGB.
uint32_t wrgb32_color_t
WRGB 32bits.
Definition unit_LED_data.hpp:29