#pragma once #include "Arduino.h" #include "Observer.h" #include "configuration.h" void doDeepSleep(uint32_t msecToWake, bool skipPreflight, bool skipSaveNodeDb), cpuDeepSleep(uint32_t msecToWake); #ifdef ARCH_ESP32 #include "esp_sleep.h" esp_sleep_wakeup_cause_t doLightSleep(uint64_t msecToWake); extern esp_sleep_source_t wakeCause; #endif #ifdef HAS_PMU #include "XPowersLibInterface.hpp" extern XPowersLibInterface *PMU; #endif // Perform power on init that we do on each wake from deep sleep void initDeepSleep(); void setCPUFast(bool on); /** return true if sleep is allowed right now */ bool doPreflightSleep(); extern int bootCount; // is bluetooth sw currently running? extern bool bluetoothOn; /// Called to ask any observers if they want to veto sleep. Return 1 to veto or 0 to allow sleep to happen extern Observable preflightSleep; /// Called to tell observers we are now entering (deep) sleep and you should prepare. Must return 0 extern Observable notifyDeepSleep; /// Called to tell observers we are rebooting ASAP. Must return 0 extern Observable notifyReboot; #ifdef ARCH_ESP32 /// Called to tell observers that light sleep is about to begin extern Observable notifyLightSleep; /// Called to tell observers that light sleep has just ended, and why it ended extern Observable notifyLightSleepEnd; #endif void enableModemSleep(); #ifdef ARCH_ESP32 void enableLoraInterrupt(); bool shouldLoraWake(uint32_t msecToWake); #endif