mirror of
https://github.com/esphome/esphome.git
synced 2026-10-07 11:26:39 +00:00
[light] Fix ambiguous set_effect overload for const char* (#14732)
This commit is contained in:
@@ -33,7 +33,7 @@ class AddressableLightDisplay : public display::DisplayBuffer {
|
|||||||
// - Save the current effect index.
|
// - Save the current effect index.
|
||||||
this->last_effect_index_ = light_state_->get_current_effect_index();
|
this->last_effect_index_ = light_state_->get_current_effect_index();
|
||||||
// - Disable any current effect.
|
// - Disable any current effect.
|
||||||
light_state_->make_call().set_effect(0).perform();
|
light_state_->make_call().set_effect(uint32_t{0}).perform();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
enabled_ = enabled;
|
enabled_ = enabled;
|
||||||
|
|||||||
@@ -506,7 +506,7 @@ color_mode_bitmask_t LightCall::get_suitable_color_modes_mask_() {
|
|||||||
|
|
||||||
LightCall &LightCall::set_effect(const char *effect, size_t len) {
|
LightCall &LightCall::set_effect(const char *effect, size_t len) {
|
||||||
if (len == 4 && strncasecmp(effect, "none", 4) == 0) {
|
if (len == 4 && strncasecmp(effect, "none", 4) == 0) {
|
||||||
this->set_effect(0);
|
this->set_effect(uint32_t{0});
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -130,6 +130,8 @@ class LightCall {
|
|||||||
LightCall &set_effect(optional<std::string> effect);
|
LightCall &set_effect(optional<std::string> effect);
|
||||||
/// Set the effect of the light by its name.
|
/// Set the effect of the light by its name.
|
||||||
LightCall &set_effect(const std::string &effect) { return this->set_effect(effect.data(), effect.size()); }
|
LightCall &set_effect(const std::string &effect) { return this->set_effect(effect.data(), effect.size()); }
|
||||||
|
/// Set the effect of the light by its name (const char * overload to resolve ambiguity).
|
||||||
|
LightCall &set_effect(const char *effect) { return this->set_effect(effect, strlen(effect)); }
|
||||||
/// Set the effect of the light by its name and length (zero-copy from API).
|
/// Set the effect of the light by its name and length (zero-copy from API).
|
||||||
LightCall &set_effect(const char *effect, size_t len);
|
LightCall &set_effect(const char *effect, size_t len);
|
||||||
/// Set the effect of the light by its internal index number (only for internal use).
|
/// Set the effect of the light by its internal index number (only for internal use).
|
||||||
|
|||||||
@@ -60,6 +60,12 @@ esphome:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Test set_effect with const char* doesn't cause ambiguous overload (issue #14728)
|
||||||
|
- lambda: |-
|
||||||
|
auto call = id(test_monochromatic_light).turn_on();
|
||||||
|
call.set_effect("None");
|
||||||
|
call.perform();
|
||||||
|
|
||||||
- light.toggle: test_binary_light
|
- light.toggle: test_binary_light
|
||||||
- light.turn_off: test_rgb_light
|
- light.turn_off: test_rgb_light
|
||||||
- light.turn_on:
|
- light.turn_on:
|
||||||
|
|||||||
Reference in New Issue
Block a user