#pragma once #include #include #include class SleepTimer { public: SleepTimer(int seconds_to_light_sleep = 20, int seconds_to_deep_sleep = -1); ~SleepTimer(); void SetEnabled(bool enabled); void OnEnterLightSleepMode(std::function callback); void OnExitLightSleepMode(std::function callback); void OnEnterDeepSleepMode(std::function callback); void WakeUp(); private: void CheckTimer(); esp_timer_handle_t sleep_timer_ = nullptr; bool enabled_ = false; int ticks_ = 0; int seconds_to_light_sleep_; int seconds_to_deep_sleep_; bool in_light_sleep_mode_ = false; std::function on_enter_light_sleep_mode_; std::function on_exit_light_sleep_mode_; std::function on_enter_deep_sleep_mode_; };