[core] Use numeric scheduler ids instead of string names (ESP32 1/2) (#20380)

This commit is contained in:
J. Nick Koston
2026-10-09 07:07:56 -10:00
committed by GitHub
parent a0f0949078
commit d9b9ce2909
5 changed files with 24 additions and 11 deletions
@@ -10,6 +10,9 @@ namespace esphome::airthings_wave_base {
ESPHOME_LOG_TAG(TAG, "airthings_wave_base");
static constexpr uint32_t BATTERY_READ_TIMEOUT_ID = 0;
static constexpr uint32_t RESPONSE_TIMEOUT_ID = 1;
void AirthingsWaveBase::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
esp_ble_gattc_cb_param_t *param) {
switch (event) {
@@ -181,7 +184,7 @@ void AirthingsWaveBase::read_battery_(uint8_t *raw_value, uint16_t value_len) {
// read the battery again at the configured update interval
if (this->battery_update_interval_ != this->update_interval_) {
this->read_battery_next_update_ = false;
this->set_timeout("battery", this->battery_update_interval_,
this->set_timeout(BATTERY_READ_TIMEOUT_ID, this->battery_update_interval_,
[this]() { this->read_battery_next_update_ = true; });
}
}
@@ -204,7 +207,7 @@ void AirthingsWaveBase::response_received_() {
}
void AirthingsWaveBase::set_response_timeout_() {
this->set_timeout("response_timeout", 30 * 1000, [this]() {
this->set_timeout(RESPONSE_TIMEOUT_ID, 30 * 1000, [this]() {
this->responses_pending_ = 1;
this->response_received_();
});
+4 -2
View File
@@ -36,6 +36,8 @@ class DemoCover final : public cover::Cover, public Component {
}
protected:
static constexpr uint32_t MOVE_TIMEOUT_ID = 0;
void control(const cover::CoverCall &call) override {
auto pos = call.get_position();
if (pos.has_value()) {
@@ -43,7 +45,7 @@ class DemoCover final : public cover::Cover, public Component {
this->current_operation =
target > this->position ? cover::COVER_OPERATION_OPENING : cover::COVER_OPERATION_CLOSING;
this->set_timeout("move", 2000, [this, target]() {
this->set_timeout(MOVE_TIMEOUT_ID, 2000, [this, target]() {
this->current_operation = cover::COVER_OPERATION_IDLE;
this->position = target;
this->publish_state();
@@ -54,7 +56,7 @@ class DemoCover final : public cover::Cover, public Component {
this->tilt = *tilt;
}
if (call.get_stop()) {
this->cancel_timeout("move");
this->cancel_timeout(MOVE_TIMEOUT_ID);
}
this->publish_state();
@@ -21,6 +21,10 @@ namespace esphome::improv_ble {
using namespace bytebuffer;
ESPHOME_LOG_TAG(TAG, "improv_ble.component");
static constexpr uint32_t STOP_SERVICE_TIMEOUT_ID = 0;
static constexpr uint32_t WIFI_CONNECT_TIMEOUT_ID = 1;
static constexpr size_t IMPROV_MAX_LOG_BYTES = 128;
static constexpr char ESPHOME_MY_LINK[] = "https://my.home-assistant.io/redirect/config_flow_start?domain=esphome";
// command + data length + trailing byte
@@ -322,7 +326,7 @@ void ImprovBLEComponent::stop() {
// Wait before stopping the service to ensure all BLE clients see the state change.
// This prevents clients from repeatedly reconnecting and wasting resources by allowing
// them to observe that the device is provisioned before the service disappears.
this->set_timeout("end-service", STOP_ADVERTISING_DELAY, [this] {
this->set_timeout(STOP_SERVICE_TIMEOUT_ID, STOP_ADVERTISING_DELAY, [this] {
if (this->state_ == improv::STATE_STOPPED || this->service_ == nullptr)
return;
// Release first so removing the service UUID does not restart advertising on the way out
@@ -398,7 +402,7 @@ void ImprovBLEComponent::process_incoming_data_() {
ESP_LOGD(TAG, "Received Improv Wi-Fi settings ssid=%s, password=" LOG_SECRET("%s"), command.ssid.c_str(),
command.password.c_str());
this->set_timeout("wifi-connect-timeout", 30000, [this]() { this->on_wifi_connect_timeout_(); });
this->set_timeout(WIFI_CONNECT_TIMEOUT_ID, 30000, [this]() { this->on_wifi_connect_timeout_(); });
this->incoming_data_.clear();
break;
}
@@ -438,7 +442,7 @@ void ImprovBLEComponent::check_wifi_connection_() {
if (this->state_ == improv::STATE_PROVISIONING) {
wifi::global_wifi_component->save_wifi_sta(this->connecting_sta_.get_ssid(), this->connecting_sta_.get_password());
this->connecting_sta_ = {};
this->cancel_timeout("wifi-connect-timeout");
this->cancel_timeout(WIFI_CONNECT_TIMEOUT_ID);
// Build the URL list directly into a stack buffer with no heap allocation
std::array<uint8_t, improv::RPC_RESPONSE_MAX_SIZE> buf;
@@ -9,6 +9,8 @@ namespace esphome::pvvx_mithermometer {
ESPHOME_LOG_TAG(TAG, "display.pvvx_mithermometer");
static constexpr uint32_t DISCONNECT_TIMEOUT_ID = 0;
void PVVXDisplay::dump_config() {
char service_buf[ble_device_base::UUID_STR_LEN];
char char_buf[ble_device_base::UUID_STR_LEN];
@@ -39,7 +41,7 @@ void PVVXDisplay::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t
case ESP_GATTC_DISCONNECT_EVT:
ESP_LOGV(TAG, "[%s] Disconnected", this->parent_->address_str());
this->connection_established_ = false;
this->cancel_timeout("disconnect");
this->cancel_timeout(DISCONNECT_TIMEOUT_ID);
this->char_handle_ = 0;
break;
case ESP_GATTC_SEARCH_CMPL_EVT: {
@@ -147,8 +149,8 @@ void PVVXDisplay::send_to_setup_char_(uint8_t *blk, size_t size) {
void PVVXDisplay::delayed_disconnect_() {
if (this->disconnect_delay_ms_ == 0)
return;
this->cancel_timeout("disconnect");
this->set_timeout("disconnect", this->disconnect_delay_ms_, [this]() { this->parent_->set_enabled(false); });
this->cancel_timeout(DISCONNECT_TIMEOUT_ID);
this->set_timeout(DISCONNECT_TIMEOUT_ID, this->disconnect_delay_ms_, [this]() { this->parent_->set_enabled(false); });
}
void PVVXDisplay::sync_time_and_display_() {
@@ -10,6 +10,8 @@ namespace esphome::sendspin_ {
ESPHOME_LOG_TAG(TAG, "sendspin.image");
static constexpr uint32_t TRANSITION_ACK_TIMEOUT_ID = 0;
// How long a displayed frame may wait for sendspin.image.transition_finished before a warning
// names the missing ack. Generous next to a typical fade of a second or two.
static constexpr uint32_t TRANSITION_ACK_WARNING_MS = 10000;
@@ -163,7 +165,7 @@ void SendspinImageSlot::on_display_(uint32_t lateness_ms) {
// that never reaches the action stalls the slot with nothing in the log. Name the cause after
// a generous wait. Arming again replaces the previous timeout, so it cannot fire for a frame
// that was already acked and superseded.
this->set_timeout("transition_ack", TRANSITION_ACK_WARNING_MS, [this]() {
this->set_timeout(TRANSITION_ACK_TIMEOUT_ID, TRANSITION_ACK_WARNING_MS, [this]() {
if (this->transition_pending_) {
ESP_LOGW(TAG,
"Slot %u: displayed artwork was never acknowledged; no new artwork will arrive until "