mirror of
https://github.com/esphome/esphome.git
synced 2025-09-08 14:22:21 +01:00
fix: refactor add_lamp_output to use reference and add remove_lamp method for better lamp management
This commit is contained in:
@@ -32,6 +32,13 @@ void DynamicLamp::begin() {
|
||||
this->restore_lamp_values_(i);
|
||||
}
|
||||
}
|
||||
/* keep example for future reference
|
||||
this->add_lamp_("First Lamp");
|
||||
this->add_lamp_output_("First Lamp", this->available_outputs_[0]);
|
||||
this->add_lamp_output_("First Lamp", this->available_outputs_[1]);
|
||||
this->add_lamp_output_("First Lamp", this->available_outputs_[2]);
|
||||
this->add_lamp_output_("First Lamp", this->available_outputs_[3]);
|
||||
*/
|
||||
}
|
||||
|
||||
void DynamicLamp::loop() {
|
||||
@@ -85,10 +92,10 @@ void DynamicLamp::dump_config() {
|
||||
}
|
||||
}
|
||||
this->add_lamp_("First Lamp");
|
||||
this->add_lamp_output_("First Lamp", this->available_outputs_[0]);
|
||||
this->add_lamp_output_("First Lamp", this->available_outputs_[1]);
|
||||
this->add_lamp_output_("First Lamp", this->available_outputs_[2]);
|
||||
this->add_lamp_output_("First Lamp", this->available_outputs_[3]);
|
||||
this->add_lamp_output_("First Lamp", &this->available_outputs_[0]);
|
||||
this->add_lamp_output_("First Lamp", &this->available_outputs_[1]);
|
||||
this->add_lamp_output_("First Lamp", &this->available_outputs_[2]);
|
||||
this->add_lamp_output_("First Lamp", &this->available_outputs_[3]);
|
||||
}
|
||||
|
||||
void DynamicLamp::set_save_mode(uint8_t save_mode) {
|
||||
@@ -117,20 +124,38 @@ void DynamicLamp::add_lamp_(std::string name) {
|
||||
this->active_lamps_[this->lamp_count_].active = true;
|
||||
this->active_lamps_[this->lamp_count_].name = name;
|
||||
this->active_lamps_[this->lamp_count_].lamp_index = this->lamp_count_;
|
||||
for (uint8_t i = 0; i < 16; i++) {
|
||||
this->active_lamps_[this->lamp_count_].used_outputs[i] = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
ESP_LOGW(TAG, "No more lamps available, max 16 lamps supported!");
|
||||
this->status_set_warning();
|
||||
}
|
||||
|
||||
void DynamicLamp::add_lamp_output_(std::string lamp_name, LinkedOutput output) {
|
||||
void DynamicLamp::remove_lamp_(std::string name) {
|
||||
uint8_t i = 0;
|
||||
while (i < this->lamp_count_) {
|
||||
if (this->active_lamps_[i].name == name) {
|
||||
for (uint8_t j = i; j < this->lamp_count_; j++) {
|
||||
this->active_lamps_[i].used_outputs[j] = false;
|
||||
this->available_outputs_[j].in_use = false;
|
||||
}
|
||||
this->active_lamps_[i].active = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
this->status_set_warning();
|
||||
ESP_LOGW(TAG, "No lamp with name %s defined !", lamp_name.c_str());
|
||||
}
|
||||
|
||||
void DynamicLamp::add_lamp_output_(std::string lamp_name, LinkedOutput &output) {
|
||||
uint8_t i = 0;
|
||||
while (i < 16) {
|
||||
if (this->active_lamps_[i].name == lamp_name) {
|
||||
this->active_lamps_[i].used_outputs[output.output_index] = true;
|
||||
output.in_use = true;
|
||||
//ESP_LOGV(TAG, "Added output %s to lamp %s", output.output_id.c_str(), lamp_name.c_str());
|
||||
ESP_LOGCONFIG(TAG, "Added output %s to lamp %s", output.output_id.c_str(), lamp_name.c_str());
|
||||
ESP_LOGV(TAG, "Added output %s to lamp %s", output.output_id.c_str(), lamp_name.c_str());
|
||||
return;
|
||||
}
|
||||
i++;
|
||||
|
Reference in New Issue
Block a user