- #pragma once
-
- namespace esphome {
- namespace xiaomi {
- namespace bslamp2 {
-
- // Light modes that can be reported by implementations of GPIOOutputs.
- static const std::string LIGHT_MODE_UNKNOWN { "unknown" };
- static const std::string LIGHT_MODE_OFF { "off" };
- static const std::string LIGHT_MODE_RGB { "rgb" };
- static const std::string LIGHT_MODE_WHITE { "white" };
- static const std::string LIGHT_MODE_NIGHT { "night" };
-
- /**
- * This abstract class is used for implementing classes that translate
- * LightColorValues into the required GPIO PWM duty cycle levels to represent
- * the requested color on the physical device.
- */
- class GPIOOutputs {
- public:
- float red = 0.0f;
- float green = 0.0f;
- float blue = 0.0f;
- float white = 0.0f;
- std::string light_mode = LIGHT_MODE_OFF;
-
- /**
- * Sets 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 input can be handled, false otherwise.
- */
- virtual bool set_light_color_values(light::LightColorValues v) = 0;
-
- /**
- * Copies the current output values to another GPIOOutputs object.
- */
- void copy_to(GPIOOutputs *other) {
- other->red = red;
- other->green = green;
- other->blue = blue;
- other->white = white;
- other->light_mode = light_mode;
- }
-
- void log(const char *prefix) {
- ESP_LOGD(TAG, "%s: RGB=[%f,%f,%f], white=%f",
- prefix, red, green, blue, white);
- }
- };
-
- } // namespace bslamp2
- } // namespace xiaomi
- } // namespace esphome
|