mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-09-26 20:56:37 +00:00
Put powerOff and enterDeepSleep to ESP32Board
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
#ifdef ESP_PLATFORM
|
#ifdef ESP_PLATFORM
|
||||||
|
|
||||||
#include "ESP32Board.h"
|
#include "ESP32Board.h"
|
||||||
|
#include <target.h>
|
||||||
|
|
||||||
#if defined(ADMIN_PASSWORD) && !defined(DISABLE_WIFI_OTA) // Repeater or Room Server only
|
#if defined(ADMIN_PASSWORD) && !defined(DISABLE_WIFI_OTA) // Repeater or Room Server only
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
@@ -44,4 +45,45 @@ bool ESP32Board::startOTAUpdate(const char* id, char reply[]) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void ESP32Board::powerOff() {
|
||||||
|
enterDeepSleep(0); // Do not wakeup
|
||||||
|
}
|
||||||
|
|
||||||
|
void ESP32Board::enterDeepSleep(uint32_t secs) {
|
||||||
|
// Power off the display if any
|
||||||
|
#ifdef DISPLAY_CLASS
|
||||||
|
display.turnOff();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Power off LoRa
|
||||||
|
radio_driver.powerOff();
|
||||||
|
|
||||||
|
// Keep LoRa inactive during deepsleep
|
||||||
|
digitalWrite(P_LORA_NSS, HIGH);
|
||||||
|
#if defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||||
|
gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
||||||
|
#else
|
||||||
|
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Power off GPS if any
|
||||||
|
if (sensors.getLocationProvider() != NULL) {
|
||||||
|
sensors.getLocationProvider()->stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flush serial buffers
|
||||||
|
Serial.flush();
|
||||||
|
delay(100);
|
||||||
|
|
||||||
|
// Clear stale wakeup sources to avoid ghost wakeup
|
||||||
|
// This is required when Power Management and automatic lightsleep are enabled
|
||||||
|
esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_ALL);
|
||||||
|
|
||||||
|
if (secs > 0) {
|
||||||
|
esp_sleep_enable_timer_wakeup(secs * 1000000ULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finally set ESP32 into deepsleep
|
||||||
|
esp_deep_sleep_start(); // CPU halts here and never returns!
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -62,6 +62,9 @@ public:
|
|||||||
return raw / 4;
|
return raw / 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void powerOff() override;
|
||||||
|
void enterDeepSleep(uint32_t secs);
|
||||||
|
|
||||||
uint32_t getIRQGpio() override {
|
uint32_t getIRQGpio() override {
|
||||||
return P_LORA_DIO_1; // default for SX1262
|
return P_LORA_DIO_1; // default for SX1262
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user