#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