ESPHome  2025.4.0
scheduler.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 #include <memory>
5 
7 #include "esphome/core/helpers.h"
8 
9 namespace esphome {
10 
11 class Component;
12 
13 class Scheduler {
14  public:
15  void set_timeout(Component *component, const std::string &name, uint32_t timeout, std::function<void()> func);
16  bool cancel_timeout(Component *component, const std::string &name);
17  void set_interval(Component *component, const std::string &name, uint32_t interval, std::function<void()> func);
18  bool cancel_interval(Component *component, const std::string &name);
19 
20  void set_retry(Component *component, const std::string &name, uint32_t initial_wait_time, uint8_t max_attempts,
21  std::function<RetryResult(uint8_t)> func, float backoff_increase_factor = 1.0f);
22  bool cancel_retry(Component *component, const std::string &name);
23 
25 
26  void call();
27 
28  void process_to_add();
29 
30  protected:
31  struct SchedulerItem {
33  std::string name;
35  uint32_t interval;
36  uint64_t next_execution_;
37  std::function<void()> callback;
38  bool remove;
39 
40  static bool cmp(const std::unique_ptr<SchedulerItem> &a, const std::unique_ptr<SchedulerItem> &b);
41  const char *get_type_str() {
42  switch (this->type) {
44  return "interval";
46  return "timeout";
47  default:
48  return "";
49  }
50  }
51  const char *get_source() {
52  return this->component != nullptr ? this->component->get_component_source() : "unknown";
53  }
54  };
55 
56  uint64_t millis_();
57  void cleanup_();
58  void pop_raw_();
59  void push_(std::unique_ptr<SchedulerItem> item);
60  bool cancel_item_(Component *component, const std::string &name, SchedulerItem::Type type);
61  bool empty_() {
62  this->cleanup_();
63  return this->items_.empty();
64  }
65 
67  std::vector<std::unique_ptr<SchedulerItem>> items_;
68  std::vector<std::unique_ptr<SchedulerItem>> to_add_;
69  uint32_t last_millis_{0};
70  uint16_t millis_major_{0};
71  uint32_t to_remove_{0};
72 };
73 
74 } // namespace esphome
std::function< void()> callback
Definition: scheduler.h:37
uint32_t to_remove_
Definition: scheduler.h:71
const char * name
Definition: stm32flash.h:78
RetryResult
Definition: component.h:66
void push_(std::unique_ptr< SchedulerItem > item)
Definition: scheduler.cpp:291
uint16_t millis_major_
Definition: scheduler.h:70
bool cancel_timeout(Component *component, const std::string &name)
Definition: scheduler.cpp:45
optional< uint32_t > next_schedule_in()
Definition: scheduler.cpp:136
void set_retry(Component *component, const std::string &name, uint32_t initial_wait_time, uint8_t max_attempts, std::function< RetryResult(uint8_t)> func, float backoff_increase_factor=1.0f)
Definition: scheduler.cpp:101
uint64_t millis_()
Definition: scheduler.cpp:315
std::vector< std::unique_ptr< SchedulerItem > > to_add_
Definition: scheduler.h:68
const char * get_component_source() const
Get the integration where this component was declared as a string.
Definition: component.cpp:113
bool cancel_retry(Component *component, const std::string &name)
Definition: scheduler.cpp:132
uint32_t last_millis_
Definition: scheduler.h:69
bool cancel_item_(Component *component, const std::string &name, SchedulerItem::Type type)
Definition: scheduler.cpp:295
static bool cmp(const std::unique_ptr< SchedulerItem > &a, const std::unique_ptr< SchedulerItem > &b)
Definition: scheduler.cpp:326
bool cancel_interval(Component *component, const std::string &name)
Definition: scheduler.cpp:77
void set_timeout(Component *component, const std::string &name, uint32_t timeout, std::function< void()> func)
Definition: scheduler.cpp:23
Implementation of SPI Controller mode.
Definition: a01nyub.cpp:7
enum esphome::Scheduler::SchedulerItem::Type type
std::vector< std::unique_ptr< SchedulerItem > > items_
Definition: scheduler.h:67
void set_interval(Component *component, const std::string &name, uint32_t interval, std::function< void()> func)
Definition: scheduler.cpp:48
Mutex implementation, with API based on the unavailable std::mutex.
Definition: helpers.h:561