diff --git a/esphome/components/cover/cover.cpp b/esphome/components/cover/cover.cpp index 0d9e7e8ffb..186db73da5 100644 --- a/esphome/components/cover/cover.cpp +++ b/esphome/components/cover/cover.cpp @@ -22,17 +22,14 @@ const LogString *cover_command_to_str(float pos) { return LOG_STR("UNKNOWN"); } } +// Cover operation strings indexed by CoverOperation enum (0-2): IDLE, OPENING, CLOSING, plus UNKNOWN +PROGMEM_STRING_TABLE(CoverOperationStrings, "IDLE", "OPENING", "CLOSING", "UNKNOWN"); + const LogString *cover_operation_to_str(CoverOperation op) { - switch (op) { - case COVER_OPERATION_IDLE: - return LOG_STR("IDLE"); - case COVER_OPERATION_OPENING: - return LOG_STR("OPENING"); - case COVER_OPERATION_CLOSING: - return LOG_STR("CLOSING"); - default: - return LOG_STR("UNKNOWN"); - } + uint8_t index = static_cast(op); + if (index > COVER_OPERATION_LAST) + index = COVER_OPERATION_UNKNOWN_INDEX; + return CoverOperationStrings::get_log_str(index); } Cover::Cover() : position{COVER_OPEN} {} diff --git a/esphome/components/cover/cover.h b/esphome/components/cover/cover.h index e5427ceaa8..a94df7f771 100644 --- a/esphome/components/cover/cover.h +++ b/esphome/components/cover/cover.h @@ -84,6 +84,8 @@ enum CoverOperation : uint8_t { /// The cover is currently closing. COVER_OPERATION_CLOSING, }; +constexpr uint8_t COVER_OPERATION_LAST = static_cast(COVER_OPERATION_CLOSING); +constexpr uint8_t COVER_OPERATION_UNKNOWN_INDEX = COVER_OPERATION_LAST + 1; const LogString *cover_operation_to_str(CoverOperation op); diff --git a/esphome/components/valve/valve.h b/esphome/components/valve/valve.h index cd46144372..9b904c45a8 100644 --- a/esphome/components/valve/valve.h +++ b/esphome/components/valve/valve.h @@ -79,6 +79,8 @@ enum ValveOperation : uint8_t { /// The valve is currently closing. VALVE_OPERATION_CLOSING, }; +constexpr uint8_t VALVE_OPERATION_LAST = static_cast(VALVE_OPERATION_CLOSING); +constexpr uint8_t VALVE_OPERATION_UNKNOWN_INDEX = VALVE_OPERATION_LAST + 1; const LogString *valve_operation_to_str(ValveOperation op);