From 00f88fa3f8b12b0121992e623e66eba35a0ff76c Mon Sep 17 00:00:00 2001 From: Oliver Kleinecke Date: Wed, 19 Feb 2025 11:08:55 +0100 Subject: [PATCH] fix: update lamp list handling in add_timer and build_lamp_list_from_list_str_ for improved clarity and correctness --- esphome/components/dynamic_lamp/dynamic_lamp.cpp | 10 +++++----- esphome/components/dynamic_lamp/dynamic_lamp.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/esphome/components/dynamic_lamp/dynamic_lamp.cpp b/esphome/components/dynamic_lamp/dynamic_lamp.cpp index 8c23bfc7b5..d72c9f0abd 100644 --- a/esphome/components/dynamic_lamp/dynamic_lamp.cpp +++ b/esphome/components/dynamic_lamp/dynamic_lamp.cpp @@ -240,10 +240,10 @@ bool DynamicLampComponent::add_timer(std::string lamp_list_str, bool timer_activ bool friday, bool saturday, bool sunday) { std::vector lamp_list = this->build_lamp_list_from_list_str_(lamp_list_str); DynamicLampTimer new_timer; - uint8_t lamp_list_bytes[2]; - for (uint8_t i = 0; i < 16; i++) { + unsigned char lamp_list_bytes[2] = {0, 0}; + for (uint8_t i = 0; i < lamp_list.size(); i++) { if (!this->active_lamps_[i].active) { - ESP_LOGW(TAG, "Ignoring lamp number %" PRIu8 " as there is no active lamp with that index!", lamp_list_vector[i]); + ESP_LOGW(TAG, "Ignoring lamp number %" PRIu8 " as there is no active lamp with that index!", i); continue; } if (lamp_list[i]) { @@ -281,7 +281,7 @@ std::vector DynamicLampComponent::build_lamp_list_from_list_str_(std::stri std::string delimiter = ","; std::vector lamp_list_vector = this->split_to_int_vector_(lamp_list_str, delimiter); std::vector lamp_list; - memset(&lamp_list, 0, sizeof(lamp_list)); + memset(&lamp_list, 0, 16); if (lamp_list_vector.size() > 16) { ESP_LOGW(TAG, "Too many lamps in list, only 16 supported!"); this->status_set_warning(); @@ -342,7 +342,7 @@ std::vector DynamicLampComponent::split_to_int_vector_(const std::strin size_t pos = 0; std::string token; while ((pos = s.find(delimiter)) != std::string::npos) { - token = static_cast(atoi(s.substr(0, pos))); + token = static_cast(atoi(s.substr(0, pos).c_str())); tokens.push_back(token); s.erase(0, pos + delimiter.length()); } diff --git a/esphome/components/dynamic_lamp/dynamic_lamp.h b/esphome/components/dynamic_lamp/dynamic_lamp.h index 5ff2db9861..249e5153f1 100644 --- a/esphome/components/dynamic_lamp/dynamic_lamp.h +++ b/esphome/components/dynamic_lamp/dynamic_lamp.h @@ -70,7 +70,7 @@ struct CombinedLamp { struct DynamicLampTimer { unsigned char validation[3] = { 'D', 'L', 'T' }; - uint8_t lamp_list[2]; + unsigned char lamp_list[2]; uint8_t action : 3; uint8_t hour : 5; uint8_t minute : 6;