ESPHome 2025.12.1
Loading...
Searching...
No Matches
esp_color_view.h
Go to the documentation of this file.
1#pragma once
2
4#include "esp_hsv_color.h"
6
7namespace esphome::light {
8
10 public:
11 virtual void set(const Color &color) = 0;
12 virtual void set_red(uint8_t red) = 0;
13 virtual void set_green(uint8_t green) = 0;
14 virtual void set_blue(uint8_t blue) = 0;
15 virtual void set_white(uint8_t white) = 0;
16 virtual void set_effect_data(uint8_t effect_data) = 0;
17 virtual void fade_to_white(uint8_t amnt) = 0;
18 virtual void fade_to_black(uint8_t amnt) = 0;
19 virtual void lighten(uint8_t delta) = 0;
20 virtual void darken(uint8_t delta) = 0;
21 void set(const ESPHSVColor &color) { this->set_hsv(color); }
22 void set_hsv(const ESPHSVColor &color) {
23 Color rgb = color.to_rgb();
24 this->set_rgb(rgb.r, rgb.g, rgb.b);
25 }
26 void set_rgb(uint8_t red, uint8_t green, uint8_t blue) {
27 this->set_red(red);
28 this->set_green(green);
29 this->set_blue(blue);
30 }
31 void set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) {
32 this->set_rgb(red, green, blue);
33 this->set_white(white);
34 }
35};
36
38 public:
39 ESPColorView(uint8_t *red, uint8_t *green, uint8_t *blue, uint8_t *white, uint8_t *effect_data,
40 const ESPColorCorrection *color_correction)
41 : red_(red),
42 green_(green),
43 blue_(blue),
44 white_(white),
45 effect_data_(effect_data),
46 color_correction_(color_correction) {}
48 this->set(rhs);
49 return *this;
50 }
52 this->set_hsv(rhs);
53 return *this;
54 }
55 void set(const Color &color) override { this->set_rgbw(color.r, color.g, color.b, color.w); }
56 void set_red(uint8_t red) override { *this->red_ = this->color_correction_->color_correct_red(red); }
57 void set_green(uint8_t green) override { *this->green_ = this->color_correction_->color_correct_green(green); }
58 void set_blue(uint8_t blue) override { *this->blue_ = this->color_correction_->color_correct_blue(blue); }
59 void set_white(uint8_t white) override {
60 if (this->white_ == nullptr)
61 return;
62 *this->white_ = this->color_correction_->color_correct_white(white);
63 }
64 void set_effect_data(uint8_t effect_data) override {
65 if (this->effect_data_ == nullptr)
66 return;
67 *this->effect_data_ = effect_data;
68 }
69 void fade_to_white(uint8_t amnt) override { this->set(this->get().fade_to_white(amnt)); }
70 void fade_to_black(uint8_t amnt) override { this->set(this->get().fade_to_black(amnt)); }
71 void lighten(uint8_t delta) override { this->set(this->get().lighten(delta)); }
72 void darken(uint8_t delta) override { this->set(this->get().darken(delta)); }
73 Color get() const { return Color(this->get_red(), this->get_green(), this->get_blue(), this->get_white()); }
74 uint8_t get_red() const { return this->color_correction_->color_uncorrect_red(*this->red_); }
75 uint8_t get_red_raw() const { return *this->red_; }
76 uint8_t get_green() const { return this->color_correction_->color_uncorrect_green(*this->green_); }
77 uint8_t get_green_raw() const { return *this->green_; }
78 uint8_t get_blue() const { return this->color_correction_->color_uncorrect_blue(*this->blue_); }
79 uint8_t get_blue_raw() const { return *this->blue_; }
80 uint8_t get_white() const {
81 if (this->white_ == nullptr)
82 return 0;
84 }
85 uint8_t get_white_raw() const {
86 if (this->white_ == nullptr)
87 return 0;
88 return *this->white_;
89 }
90 uint8_t get_effect_data() const {
91 if (this->effect_data_ == nullptr)
92 return 0;
93 return *this->effect_data_;
94 }
95 void raw_set_color_correction(const ESPColorCorrection *color_correction) {
96 this->color_correction_ = color_correction;
97 }
98
99 protected:
100 uint8_t *const red_;
101 uint8_t *const green_;
102 uint8_t *const blue_;
103 uint8_t *const white_;
104 uint8_t *const effect_data_;
106};
107
108} // namespace esphome::light
uint8_t color_uncorrect_red(uint8_t red) const ESPHOME_ALWAYS_INLINE
uint8_t color_correct_blue(uint8_t blue) const ESPHOME_ALWAYS_INLINE
uint8_t color_correct_red(uint8_t red) const ESPHOME_ALWAYS_INLINE
uint8_t color_uncorrect_blue(uint8_t blue) const ESPHOME_ALWAYS_INLINE
uint8_t color_uncorrect_green(uint8_t green) const ESPHOME_ALWAYS_INLINE
uint8_t color_correct_green(uint8_t green) const ESPHOME_ALWAYS_INLINE
uint8_t color_correct_white(uint8_t white) const ESPHOME_ALWAYS_INLINE
uint8_t color_uncorrect_white(uint8_t white) const ESPHOME_ALWAYS_INLINE
virtual void set(const Color &color)=0
void set_rgb(uint8_t red, uint8_t green, uint8_t blue)
void set_hsv(const ESPHSVColor &color)
void set_rgbw(uint8_t red, uint8_t green, uint8_t blue, uint8_t white)
virtual void darken(uint8_t delta)=0
virtual void lighten(uint8_t delta)=0
virtual void set_red(uint8_t red)=0
virtual void fade_to_white(uint8_t amnt)=0
void set(const ESPHSVColor &color)
virtual void set_green(uint8_t green)=0
virtual void set_blue(uint8_t blue)=0
virtual void set_white(uint8_t white)=0
virtual void fade_to_black(uint8_t amnt)=0
virtual void set_effect_data(uint8_t effect_data)=0
ESPColorView & operator=(const ESPHSVColor &rhs)
ESPColorView(uint8_t *red, uint8_t *green, uint8_t *blue, uint8_t *white, uint8_t *effect_data, const ESPColorCorrection *color_correction)
void fade_to_black(uint8_t amnt) override
void fade_to_white(uint8_t amnt) override
void darken(uint8_t delta) override
void set(const Color &color) override
void set_effect_data(uint8_t effect_data) override
void set_white(uint8_t white) override
ESPColorView & operator=(const Color &rhs)
const ESPColorCorrection * color_correction_
void raw_set_color_correction(const ESPColorCorrection *color_correction)
void set_red(uint8_t red) override
void lighten(uint8_t delta) override
void set_blue(uint8_t blue) override
void set_green(uint8_t green) override
uint8_t w
Definition color.h:42
uint8_t g
Definition color.h:34
uint8_t b
Definition color.h:38
uint8_t r
Definition color.h:30