mirror of
https://github.com/esphome/esphome.git
synced 2025-09-10 07:12:21 +01:00
feat: implement add_lamp method to manage active lamps in DynamicLamp
This commit is contained in:
@@ -24,10 +24,12 @@ void DynamicLamp::setup() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// for testing only
|
// for testing only
|
||||||
this->add_lamp_output_(0, this->available_outputs_[0]);
|
uint8_t first_lamp;
|
||||||
this->add_lamp_output_(0, this->available_outputs_[1]);
|
first_lamp = this->add_lamp();
|
||||||
this->add_lamp_output_(0, this->available_outputs_[2]);
|
this->add_lamp_output_(first_lamp, this->available_outputs_[0]);
|
||||||
this->add_lamp_output_(0, this->available_outputs_[3]);
|
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() {
|
void DynamicLamp::loop() {
|
||||||
@@ -36,8 +38,8 @@ void DynamicLamp::loop() {
|
|||||||
if (this->active_lamps_[i].active) {
|
if (this->active_lamps_[i].active) {
|
||||||
uint8_t j = 0;
|
uint8_t j = 0;
|
||||||
for (j = 0; j < 16; j++) {
|
for (j = 0; j < 16; j++) {
|
||||||
if (this->active_lamps_[i].used_outputs[j].active) {
|
if (this->active_lamps_[i].used_outputs[j]) {
|
||||||
if (this->active_lamps_[i].used_outputs[j].update_level) {
|
if (this->available_outputs_[j].update_level) {
|
||||||
// Update level
|
// Update level
|
||||||
switch (this->active_lamps_[i].used_outputs[j].mode) {
|
switch (this->active_lamps_[i].used_outputs[j].mode) {
|
||||||
case MODE_EQUAL:
|
case MODE_EQUAL:
|
||||||
@@ -105,6 +107,18 @@ void DynamicLamp::set_available_outputs(std::string output_list) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t DynamicLamp::add_lamp() {
|
||||||
|
uint8_t i = 0;
|
||||||
|
while (i < 16) {
|
||||||
|
if (!this->active_lamps_[i].active) {
|
||||||
|
this->active_lamps_[i].active = true;
|
||||||
|
this->lamp_count_++;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DynamicLamp::add_lamp_output_(uint8_t lamp_number, LinkedOutput output) {
|
void DynamicLamp::add_lamp_output_(uint8_t lamp_number, LinkedOutput output) {
|
||||||
this->active_lamps_[lamp_number].used_outputs[output.output_index] = true;
|
this->active_lamps_[lamp_number].used_outputs[output.output_index] = true;
|
||||||
}
|
}
|
||||||
|
@@ -41,6 +41,7 @@ class DynamicLamp : public Component {
|
|||||||
void set_save_mode(uint8_t save_mode);
|
void set_save_mode(uint8_t save_mode);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
uint8_t add_lamp();
|
||||||
bool[16] get_lamp_outputs_(uint8_t lamp_number);
|
bool[16] get_lamp_outputs_(uint8_t lamp_number);
|
||||||
void add_lamp_output_(uint8_t lamp_number, LinkedOutput output);
|
void add_lamp_output_(uint8_t lamp_number, LinkedOutput output);
|
||||||
void restore_lamp_values_(uint8_t lamp_number);
|
void restore_lamp_values_(uint8_t lamp_number);
|
||||||
@@ -52,6 +53,7 @@ class DynamicLamp : public Component {
|
|||||||
CombinedLamp active_lamps_[16];
|
CombinedLamp active_lamps_[16];
|
||||||
LinkedOutput available_outputs_[16];
|
LinkedOutput available_outputs_[16];
|
||||||
uint8_t save_mode_;
|
uint8_t save_mode_;
|
||||||
|
uint8_t lamp_count_ = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user