diff --git a/esphome/components/light/color_mode.h b/esphome/components/light/color_mode.h index 059996b740..c542984d1b 100644 --- a/esphome/components/light/color_mode.h +++ b/esphome/components/light/color_mode.h @@ -194,6 +194,19 @@ class ColorModeMask { return (mask & (1 << mode_to_bit(mode))) != 0; } + /// Check if any mode in the bitmask has a specific capability + /// Used for checking if a light supports a capability (e.g., BRIGHTNESS, RGB) + bool has_capability(ColorCapability capability) const { + uint8_t cap_mask = static_cast(capability); + // Check each set bit to see if any mode has this capability + for (int bit = 1; bit < COLOR_MODE_COUNT; ++bit) { + if ((this->mask_ & (1 << bit)) && (static_cast(bit_to_mode(bit)) & cap_mask)) { + return true; + } + } + return false; + } + /// Build a bitmask of modes that match the given capability requirements /// @param require_caps Capabilities that must be present in the mode /// @param exclude_caps Capabilities that must not be present in the mode (for none case) diff --git a/esphome/components/light/light_traits.h b/esphome/components/light/light_traits.h index 0db028598c..c83d8ad2a9 100644 --- a/esphome/components/light/light_traits.h +++ b/esphome/components/light/light_traits.h @@ -28,11 +28,7 @@ class LightTraits { bool supports_color_mode(ColorMode color_mode) const { return this->supported_color_modes_.contains(color_mode); } bool supports_color_capability(ColorCapability color_capability) const { - for (auto mode : this->supported_color_modes_) { - if (mode & color_capability) - return true; - } - return false; + return this->supported_color_modes_.has_capability(color_capability); } ESPDEPRECATED("get_supports_brightness() is deprecated, use color modes instead.", "v1.21")