#pragma once
|
|
|
|
namespace esphome {
|
|
namespace yeelight {
|
|
namespace bs2 {
|
|
|
|
/// A tag, used for logging.
|
|
static const char *TAG = "yeelight_bs2";
|
|
|
|
/// The minimum color temperature in mired. Same as supported by
|
|
/// the original Yeelight firmware.
|
|
static const int MIRED_MIN = 153;
|
|
|
|
/// The maximum color temperature in mired. Same as supported by
|
|
/// the original Yeelight firmware.
|
|
static const int MIRED_MAX = 588;
|
|
|
|
/// This abstract class is used for building classes that translate
|
|
/// LightColorValues into the required GPIO pin outputs to represent
|
|
/// the requested color on the device.
|
|
class GPIOOutputs {
|
|
public:
|
|
float red = 0.0f;
|
|
float green = 0.0f;
|
|
float blue = 0.0f;
|
|
float white = 0.0f;
|
|
light::LightColorValues values;
|
|
|
|
/// Set the red, green, blue, white fields to the PWM duty cycles
|
|
/// that are required to represent the requested light color for
|
|
/// the provided LightColorValues input.
|
|
/// Returns true when the class can handle the input, false otherwise.
|
|
virtual bool set_light_color_values(light::LightColorValues v) = 0;
|
|
|
|
/// Copy the output values to another GPIOOutputs object.
|
|
void copy_to(GPIOOutputs *other) {
|
|
other->red = red;
|
|
other->green = green;
|
|
other->blue = blue;
|
|
other->white = white;
|
|
other->values = values;
|
|
}
|
|
|
|
void log(const char *prefix) {
|
|
ESP_LOGD(TAG, "%s: RGB=[%f,%f,%f], white=%f",
|
|
prefix, red, green, blue, white);
|
|
}
|
|
};
|
|
|
|
} // namespace bs2
|
|
} // namespace yeelight
|
|
} // namespace esphome
|