10#ifndef M5_UNIT_RGB_UNIT_LED_HPP
11#define M5_UNIT_RGB_UNIT_LED_HPP
13#include <M5UnitComponent.hpp>
47 constexpr Color(
const uint8_t rr,
const uint8_t gg,
const uint8_t bb,
const uint8_t ww = 0)
48 :
b{bb},
g{gg},
r{rr},
w{ww}
66 static Color fromHSV(
const uint8_t h,
const uint8_t s,
const uint8_t v);
138int8_t offsetR(
const Order f);
144int8_t offsetG(
const Order f);
150int8_t offsetB(
const Order f);
156int8_t offsetW(
const Order f);
163class UnitLED :
public Component {
164 M5_UNIT_COMPONENT_HPP_BUILDER(UnitLED, 0x00);
169 PixelProxy(UnitLED& u,
const uint32_t i) : _u(u), _i(i), _c{u.color(i)}
173 inline operator rgb::Color()
const
178 PixelProxy& operator=(
const rgb::Color& c)
181 _u.setPixelColor(_i, _c);
184 PixelProxy& operator=(
const PixelProxy& o)
186 _c =
static_cast<rgb::Color
>(o);
187 _u.setPixelColor(_i, _c);
252 virtual bool begin()
override;
278 inline virtual uint16_t
width()
const
297 return (_order >= rgb::Order::hasWhite);
356 return (n < _numPixels) ? get_pixel_color(index_of(n)) :
rgb::Color();
366 return (n < _numPixels) ? get_pixel_color(n) :
rgb::Color();
411 bool setPixelColor(
const uint16_t n,
const uint8_t r,
const uint8_t g,
const uint8_t b);
423 inline bool setPixelColor(
const uint16_t n,
const uint8_t r,
const uint8_t g,
const uint8_t b,
const uint8_t w)
449 if (n >= _numPixels) {
452 return set_pixel_color(index_of(n), c);
463 bool fill(
const rgb::Color& c,
const uint16_t first = 0,
const uint16_t count = 0);
480 bool fillRainbow(
const uint16_t first = 0,
const uint16_t count = 0,
const uint8_t firstHue = 0);
491 const uint16_t count = 0);
499 bool fillRandom(
const uint16_t first = 0,
const uint16_t count = 0);
508 shift_left(count,
false);
518 shift_right(count,
false);
527 shift_left(count,
true);
536 shift_right(count,
true);
595 return PixelProxy(*
this, i);
603 explicit Interface(
UnitLED& u) : _unit{u}
609 virtual bool write(
const uint8_t*,
const uint32_t) = 0;
611 virtual UnitLED::item_container_type items()
615 virtual UnitLED::item_container_type items_from_root()
620 virtual UnitLED::container_type rgb888_items()
624 virtual UnitLED::container_type rgb888_items_from_root()
630 virtual bool writePixelsDirect()
641 inline virtual types::category_t unit_category()
const override
643 return types::category_t::UnitLED;
645 inline virtual gpio::adapter_config_t rmt_config()
647 return gpio::adapter_config_t{};
649 inline virtual gpio::m5_rmt_item_t rmt_item_one()
651 return gpio::m5_rmt_item_t{};
653 inline virtual gpio::m5_rmt_item_t rmt_item_zero()
655 return gpio::m5_rmt_item_t{};
657 inline virtual gpio::m5_rmt_item_t rmt_item_reset()
659 return gpio::m5_rmt_item_t{};
667 rgb::Color get_pixel_color(
const uint16_t n)
const;
668 bool set_pixel_color(
const uint16_t n,
const rgb::Color& c);
670 inline uint8_t rotation_of(
const int8_t r)
const
675 inline virtual uint16_t index_of(
const uint16_t n)
const
678 return _rot ? _numPixels - (n % _numPixels) - 1 : n;
684 void shift_left(
const uint16_t count,
const bool wrap);
685 void shift_right(
const uint16_t count,
const bool wrap);
689 explicit UnitLED(
const uint16_t num_of_pixels,
const rgb::Order
order)
690 : Component(0x00), _order{
order}, _numPixels{num_of_pixels}
692 _offsetR = rgb::offsetR(_order);
693 _offsetG = rgb::offsetG(_order);
694 _offsetB = rgb::offsetB(_order);
695 _offsetW = rgb::offsetW(_order);
696 _pixels.resize(_numPixels * (3 +
hasWhite()));
700 rgb::Order _order{rgb::Order::unknown};
701 uint8_t _brightness{10};
703 int8_t _offsetR{-1}, _offsetG{-1}, _offsetB{-1}, _offsetW{-1};
704 uint16_t _numPixels{};
707 std::unique_ptr<Interface> _interface{};
710 friend class InterfaceGPIO;
711 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:680
bool setPixelColor(const uint16_t n, const rgb::wrgb32_color_t c)
Set pixel color.
Definition unit_LED.hpp:435
int8_t rotation() const
Get the rotation.
Definition unit_LED.hpp:565
void setBrightness(const uint8_t b)
Set the brightness.
Definition unit_LED.hpp:397
int8_t offsetW() const
Offset of white.
Definition unit_LED.hpp:335
rgb::Color color(const uint16_t n) const
Get the Color.
Definition unit_LED.hpp:354
virtual uint16_t height() const
Logical height in pixels.
Definition unit_LED.hpp:286
void rotateRight(const uint16_t count=1)
Rotate pixels right.
Definition unit_LED.hpp:534
std::vector< uint8_t > container_type
pixel container
Definition unit_LED.hpp:199
void shiftRight(const uint16_t count=1)
Shift pixels right.
Definition unit_LED.hpp:516
virtual bool begin() override
Begin the unit.
Definition unit_LED.cpp:530
int8_t offsetB() const
Offset of blue.
Definition unit_LED.hpp:327
PixelProxy operator[](const uint16_t i)
lvalue
Definition unit_LED.hpp:593
int8_t offsetR() const
Offset of red.
Definition unit_LED.hpp:311
bool setPixelColor(const uint16_t n, const rgb::Color &c)
Set pixel color.
Definition unit_LED.hpp:447
bool add(UnitLED &c, const int16_t channel)
Connect an LED unit as a daisy-chained child.
Definition unit_LED.cpp:525
void setRotation(const int8_t rot)
Set the rotation.
Definition unit_LED.cpp:694
int8_t offsetG() const
Offset of green.
Definition unit_LED.hpp:319
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:624
config_t config()
Gets the configuration.
Definition unit_LED.hpp:220
virtual uint16_t width() const
Logical width in pixels.
Definition unit_LED.hpp:278
bool show()
Write pixel color to LED (alias)
Definition unit_LED.hpp:381
bool hasWhite() const
Has white data?
Definition unit_LED.hpp:295
uint8_t brightness() const
Brightness.
Definition unit_LED.hpp:269
void clear(void)
Clear pixels.
Definition unit_LED.hpp:468
rgb::Color operator[](const uint16_t i) const
rvalue
Definition unit_LED.hpp:584
void config(const config_t &cfg)
Set the configuration.
Definition unit_LED.hpp:228
virtual uint8_t maxRotation() const
Get the max rotation.
Definition unit_LED.hpp:549
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:611
void shiftLeft(const uint16_t count=1)
Shift pixels left.
Definition unit_LED.hpp:506
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:637
rgb::Color absoluteColor(const uint16_t n) const
Get the Color.
Definition unit_LED.hpp:364
void rotateLeft(const uint16_t count=1)
Rotate pixels left.
Definition unit_LED.hpp:525
rgb::Order order() const
Color order.
Definition unit_LED.hpp:303
uint16_t numPixels() const
Number of the pixels.
Definition unit_LED.hpp:260
bool writePixels()
Write pixel color to LED.
Definition unit_LED.cpp:587
virtual ~UnitLED()
Destructor.
Definition unit_LED.hpp:235
std::vector< gpio::m5_rmt_item_t > item_container_type
item container
Definition unit_LED.hpp:200
const container_type & pixels() const
pixels container
Definition unit_LED.hpp:344
float rotationDegree() const
Get the rotation angle per 1.
Definition unit_LED.hpp:557
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:655
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:423
Top level namespace of M5Stack.
Settings for begin.
Definition unit_LED.hpp:206
bool with_dma
Use DMA for RMT (RMT v2 only, e.g. ESP32-S3/C6). Ignored via PbHub.
Definition unit_LED.hpp:211
uint8_t mem_blocks
RMT memory blocks (0 = use chip default). Ignored via PbHub.
Definition unit_LED.hpp:209
uint8_t brightness
Definition unit_LED.hpp:207
WRGB 32bits.
Definition unit_LED.hpp:32
uint8_t b
Blue.
Definition unit_LED.hpp:70
wrgb32_color_t wrgb
WRGB 32bits.
Definition unit_LED.hpp:68
uint8_t a[4]
Array.
Definition unit_LED.hpp:75
uint8_t w
White.
Definition unit_LED.hpp:73
uint8_t g
Green.
Definition unit_LED.hpp:71
uint8_t r
Red.
Definition unit_LED.hpp:72
constexpr Color(const uint8_t rr, const uint8_t gg, const uint8_t bb, const uint8_t ww=0)
Constructor from RGB / RGBW components.
Definition unit_LED.hpp:47
constexpr Color(const wrgb32_color_t c=0)
Constructor from packed WRGB.
Definition unit_LED.hpp:37
static Color fromHSV(const uint8_t h, const uint8_t s, const uint8_t v)
Make Color from HSV.
Definition unit_LED.cpp:149
constexpr bool operator==(const Color &lhs, const Color &rhs)
Compare two Colors.
Definition unit_LED.hpp:83
uint32_t wrgb32_color_t
WRGB 32bits.
Definition unit_LED.hpp:26
Order
Color order.
Definition unit_LED.hpp:92