mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-07-11 23:28:48 +00:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 102f1d2a47 | |||
| 4605d3b6ce | |||
| fec88e1300 | |||
| 3ee2f77877 | |||
| 9e66a2e246 | |||
| 35f654ced3 | |||
| 6b205da4e9 | |||
| eec75eab31 | |||
| 7d7de88707 | |||
| 73b7367e45 | |||
| a92046b0eb |
@@ -697,8 +697,10 @@ void UITask::shutdown(bool restart){
|
|||||||
if (restart) {
|
if (restart) {
|
||||||
_board->reboot();
|
_board->reboot();
|
||||||
} else {
|
} else {
|
||||||
|
// still necessary until all boards are refactored to use poweroff
|
||||||
_display->turnOff();
|
_display->turnOff();
|
||||||
radio_driver.powerOff();
|
radio_driver.powerOff();
|
||||||
|
// Power off board including radio, display, GPS and components
|
||||||
_board->powerOff();
|
_board->powerOff();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -307,7 +307,9 @@ void UITask::shutdown(bool restart){
|
|||||||
if (restart) {
|
if (restart) {
|
||||||
_board->reboot();
|
_board->reboot();
|
||||||
} else {
|
} else {
|
||||||
|
_display->turnOff();
|
||||||
radio_driver.powerOff();
|
radio_driver.powerOff();
|
||||||
|
// Power off board including radio, display, GPS and components
|
||||||
_board->powerOff();
|
_board->powerOff();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,6 +568,7 @@ void UITask::shutdown(bool restart){
|
|||||||
} else {
|
} else {
|
||||||
_display->turnOff();
|
_display->turnOff();
|
||||||
radio_driver.powerOff();
|
radio_driver.powerOff();
|
||||||
|
// Power off board including radio, display, GPS and components
|
||||||
_board->powerOff();
|
_board->powerOff();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include "soc/rtc.h"
|
#include "soc/rtc.h"
|
||||||
#include "esp_system.h"
|
#include "esp_system.h"
|
||||||
|
#include <driver/rtc_io.h>
|
||||||
|
|
||||||
class ESP32Board : public mesh::MainBoard {
|
class ESP32Board : public mesh::MainBoard {
|
||||||
protected:
|
protected:
|
||||||
@@ -62,6 +63,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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,8 +15,6 @@
|
|||||||
|
|
||||||
#include "ESP32Board.h"
|
#include "ESP32Board.h"
|
||||||
|
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
|
|
||||||
class MeshadventurerBoard : public ESP32Board {
|
class MeshadventurerBoard : public ESP32Board {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -35,34 +33,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1) {
|
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
|
||||||
|
|
||||||
// Make sure the DIO1 and NSS GPIOs are held on required levels during deep sleep
|
|
||||||
rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY);
|
|
||||||
rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1);
|
|
||||||
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
|
||||||
|
|
||||||
if (pin_wake_btn < 0) {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
|
|
||||||
} else {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally set ESP32 into sleep
|
|
||||||
esp_deep_sleep_start(); // CPU halts here and never returns!
|
|
||||||
}
|
|
||||||
|
|
||||||
void powerOff() override {
|
|
||||||
// TODO: re-enable this when there is a definite wake-up source pin:
|
|
||||||
// enterDeepSleep(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t getBattMilliVolts() override {
|
uint16_t getBattMilliVolts() override {
|
||||||
analogReadResolution(12);
|
analogReadResolution(12);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#if defined(NRF52_PLATFORM)
|
#if defined(NRF52_PLATFORM)
|
||||||
#include "NRF52Board.h"
|
#include "NRF52Board.h"
|
||||||
|
#include <target.h>
|
||||||
|
|
||||||
#include <bluefruit.h>
|
#include <bluefruit.h>
|
||||||
#include <nrf_soc.h>
|
#include <nrf_soc.h>
|
||||||
@@ -297,6 +298,37 @@ float NRF52Board::getMCUTemperature() {
|
|||||||
return temp * 0.25f; // Convert to *C
|
return temp * 0.25f; // Convert to *C
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NRF52Board::powerOff() {
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
// Power off GPS if any
|
||||||
|
if(sensors.getLocationProvider() != NULL) {
|
||||||
|
sensors.getLocationProvider()->stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flush serial buffers
|
||||||
|
Serial.flush();
|
||||||
|
delay(100);
|
||||||
|
|
||||||
|
// Enter SYSTEMOFF
|
||||||
|
uint8_t sd_enabled = 0;
|
||||||
|
sd_softdevice_is_enabled(&sd_enabled);
|
||||||
|
if (sd_enabled) { // SoftDevice is enabled
|
||||||
|
sd_power_system_off();
|
||||||
|
} else { // SoftDevice is not enable
|
||||||
|
NRF_POWER->SYSTEMOFF = POWER_SYSTEMOFF_SYSTEMOFF_Enter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool NRF52Board::getBootloaderVersion(char* out, size_t max_len) {
|
bool NRF52Board::getBootloaderVersion(char* out, size_t max_len) {
|
||||||
static const char BOOTLOADER_MARKER[] = "UF2 Bootloader ";
|
static const char BOOTLOADER_MARKER[] = "UF2 Bootloader ";
|
||||||
const uint8_t* flash = (const uint8_t*)0x000FB000; // earliest known info.txt location is 0xFB90B, latest is 0xFCC4B
|
const uint8_t* flash = (const uint8_t*)0x000FB000; // earliest known info.txt location is 0xFB90B, latest is 0xFCC4B
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ public:
|
|||||||
virtual uint8_t getStartupReason() const override { return startup_reason; }
|
virtual uint8_t getStartupReason() const override { return startup_reason; }
|
||||||
virtual float getMCUTemperature() override;
|
virtual float getMCUTemperature() override;
|
||||||
virtual void reboot() override { NVIC_SystemReset(); }
|
virtual void reboot() override { NVIC_SystemReset(); }
|
||||||
|
virtual void powerOff() override;
|
||||||
virtual bool getBootloaderVersion(char* version, size_t max_len) override;
|
virtual bool getBootloaderVersion(char* version, size_t max_len) override;
|
||||||
virtual bool startOTAUpdate(const char *id, char reply[]) override;
|
virtual bool startOTAUpdate(const char *id, char reply[]) override;
|
||||||
virtual void sleep(uint32_t secs) override;
|
virtual void sleep(uint32_t secs) override;
|
||||||
|
|||||||
@@ -66,11 +66,11 @@ class CustomLLCC68 : public LLCC68 {
|
|||||||
setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
|
setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
|
||||||
#endif
|
#endif
|
||||||
#if defined(SX126X_RXEN) || defined(SX126X_TXEN)
|
#if defined(SX126X_RXEN) || defined(SX126X_TXEN)
|
||||||
#ifndef SX1262X_RXEN
|
#ifndef SX126X_RXEN
|
||||||
#define SX1262X_RXEN RADIOLIB_NC
|
#define SX126X_RXEN RADIOLIB_NC
|
||||||
#endif
|
#endif
|
||||||
#ifndef SX1262X_TXEN
|
#ifndef SX126X_TXEN
|
||||||
#define SX1262X_TXEN RADIOLIB_NC
|
#define SX126X_TXEN RADIOLIB_NC
|
||||||
#endif
|
#endif
|
||||||
setRfSwitchPins(SX126X_RXEN, SX126X_TXEN);
|
setRfSwitchPins(SX126X_RXEN, SX126X_TXEN);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -66,11 +66,11 @@ class CustomSX1268 : public SX1268 {
|
|||||||
setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
|
setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
|
||||||
#endif
|
#endif
|
||||||
#if defined(SX126X_RXEN) || defined(SX126X_TXEN)
|
#if defined(SX126X_RXEN) || defined(SX126X_TXEN)
|
||||||
#ifndef SX1262X_RXEN
|
#ifndef SX126X_RXEN
|
||||||
#define SX1262X_RXEN RADIOLIB_NC
|
#define SX126X_RXEN RADIOLIB_NC
|
||||||
#endif
|
#endif
|
||||||
#ifndef SX1262X_TXEN
|
#ifndef SX126X_TXEN
|
||||||
#define SX1262X_TXEN RADIOLIB_NC
|
#define SX126X_TXEN RADIOLIB_NC
|
||||||
#endif
|
#endif
|
||||||
setRfSwitchPins(SX126X_RXEN, SX126X_TXEN);
|
setRfSwitchPins(SX126X_RXEN, SX126X_TXEN);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -50,14 +50,14 @@ class CustomSX1276 : public SX1276 {
|
|||||||
setCurrentLimit(SX127X_CURRENT_LIMIT);
|
setCurrentLimit(SX127X_CURRENT_LIMIT);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(SX176X_RXEN) || defined(SX176X_TXEN)
|
#if defined(SX127X_RXEN) || defined(SX127X_TXEN)
|
||||||
#ifndef SX176X_RXEN
|
#ifndef SX127X_RXEN
|
||||||
#define SX176X_RXEN RADIOLIB_NC
|
#define SX127X_RXEN RADIOLIB_NC
|
||||||
#endif
|
#endif
|
||||||
#ifndef SX176X_TXEN
|
#ifndef SX127X_TXEN
|
||||||
#define SX176X_TXEN RADIOLIB_NC
|
#define SX127X_TXEN RADIOLIB_NC
|
||||||
#endif
|
#endif
|
||||||
setRfSwitchPins(SX176X_RXEN, SX176X_TXEN);
|
setRfSwitchPins(SX127X_RXEN, SX127X_TXEN);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
setCRC(1);
|
setCRC(1);
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public:
|
|||||||
uint32_t button_pin = PIN_BUTTON1;
|
uint32_t button_pin = PIN_BUTTON1;
|
||||||
nrf_gpio_cfg_input(button_pin, NRF_GPIO_PIN_PULLUP);
|
nrf_gpio_cfg_input(button_pin, NRF_GPIO_PIN_PULLUP);
|
||||||
nrf_gpio_cfg_sense_set(button_pin, NRF_GPIO_PIN_SENSE_LOW);
|
nrf_gpio_cfg_sense_set(button_pin, NRF_GPIO_PIN_SENSE_LOW);
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public:
|
|||||||
uint32_t button_pin = PIN_BUTTON1;
|
uint32_t button_pin = PIN_BUTTON1;
|
||||||
nrf_gpio_cfg_input(button_pin, NRF_GPIO_PIN_PULLUP);
|
nrf_gpio_cfg_input(button_pin, NRF_GPIO_PIN_PULLUP);
|
||||||
nrf_gpio_cfg_sense_set(button_pin, NRF_GPIO_PIN_SENSE_LOW);
|
nrf_gpio_cfg_sense_set(button_pin, NRF_GPIO_PIN_SENSE_LOW);
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public:
|
|||||||
uint32_t button_pin = PIN_BUTTON1;
|
uint32_t button_pin = PIN_BUTTON1;
|
||||||
nrf_gpio_cfg_input(button_pin, NRF_GPIO_PIN_PULLUP);
|
nrf_gpio_cfg_input(button_pin, NRF_GPIO_PIN_PULLUP);
|
||||||
nrf_gpio_cfg_sense_set(button_pin, NRF_GPIO_PIN_SENSE_LOW);
|
nrf_gpio_cfg_sense_set(button_pin, NRF_GPIO_PIN_SENSE_LOW);
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public:
|
|||||||
uint32_t button_pin = PIN_BUTTON1;
|
uint32_t button_pin = PIN_BUTTON1;
|
||||||
nrf_gpio_cfg_input(button_pin, NRF_GPIO_PIN_PULLUP);
|
nrf_gpio_cfg_input(button_pin, NRF_GPIO_PIN_PULLUP);
|
||||||
nrf_gpio_cfg_sense_set(button_pin, NRF_GPIO_PIN_SENSE_LOW);
|
nrf_gpio_cfg_sense_set(button_pin, NRF_GPIO_PIN_SENSE_LOW);
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,33 +20,6 @@ void HeltecE213Board::begin() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HeltecE213Board::enterDeepSleep(uint32_t secs, int pin_wake_btn) {
|
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
|
||||||
|
|
||||||
// Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep
|
|
||||||
rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY);
|
|
||||||
rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1);
|
|
||||||
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
|
||||||
|
|
||||||
if (pin_wake_btn < 0) {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
|
|
||||||
} else {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally set ESP32 into sleep
|
|
||||||
esp_deep_sleep_start(); // CPU halts here and never returns!
|
|
||||||
}
|
|
||||||
|
|
||||||
void HeltecE213Board::powerOff() {
|
|
||||||
enterDeepSleep(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t HeltecE213Board::getBattMilliVolts() {
|
uint16_t HeltecE213Board::getBattMilliVolts() {
|
||||||
analogReadResolution(10);
|
analogReadResolution(10);
|
||||||
digitalWrite(PIN_ADC_CTRL, HIGH);
|
digitalWrite(PIN_ADC_CTRL, HIGH);
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <helpers/RefCountedDigitalPin.h>
|
#include <helpers/RefCountedDigitalPin.h>
|
||||||
#include <helpers/ESP32Board.h>
|
#include <helpers/ESP32Board.h>
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
|
|
||||||
class HeltecE213Board : public ESP32Board {
|
class HeltecE213Board : public ESP32Board {
|
||||||
|
|
||||||
@@ -13,8 +12,6 @@ public:
|
|||||||
HeltecE213Board() : periph_power(PIN_VEXT_EN,PIN_VEXT_EN_ACTIVE) { }
|
HeltecE213Board() : periph_power(PIN_VEXT_EN,PIN_VEXT_EN_ACTIVE) { }
|
||||||
|
|
||||||
void begin();
|
void begin();
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1);
|
|
||||||
void powerOff() override;
|
|
||||||
uint16_t getBattMilliVolts() override;
|
uint16_t getBattMilliVolts() override;
|
||||||
const char* getManufacturerName() const override ;
|
const char* getManufacturerName() const override ;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,33 +20,6 @@ void HeltecE290Board::begin() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HeltecE290Board::enterDeepSleep(uint32_t secs, int pin_wake_btn) {
|
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
|
||||||
|
|
||||||
// Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep
|
|
||||||
rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY);
|
|
||||||
rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1);
|
|
||||||
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
|
||||||
|
|
||||||
if (pin_wake_btn < 0) {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
|
|
||||||
} else {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally set ESP32 into sleep
|
|
||||||
esp_deep_sleep_start(); // CPU halts here and never returns!
|
|
||||||
}
|
|
||||||
|
|
||||||
void HeltecE290Board::powerOff() {
|
|
||||||
enterDeepSleep(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t HeltecE290Board::getBattMilliVolts() {
|
uint16_t HeltecE290Board::getBattMilliVolts() {
|
||||||
analogReadResolution(10);
|
analogReadResolution(10);
|
||||||
digitalWrite(PIN_ADC_CTRL, HIGH);
|
digitalWrite(PIN_ADC_CTRL, HIGH);
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <helpers/RefCountedDigitalPin.h>
|
#include <helpers/RefCountedDigitalPin.h>
|
||||||
#include <helpers/ESP32Board.h>
|
#include <helpers/ESP32Board.h>
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
|
|
||||||
class HeltecE290Board : public ESP32Board {
|
class HeltecE290Board : public ESP32Board {
|
||||||
|
|
||||||
@@ -13,8 +12,6 @@ public:
|
|||||||
HeltecE290Board() : periph_power(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE) { }
|
HeltecE290Board() : periph_power(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE) { }
|
||||||
|
|
||||||
void begin();
|
void begin();
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1);
|
|
||||||
void powerOff() override;
|
|
||||||
uint16_t getBattMilliVolts() override;
|
uint16_t getBattMilliVolts() override;
|
||||||
const char* getManufacturerName() const override ;
|
const char* getManufacturerName() const override ;
|
||||||
|
|
||||||
|
|||||||
@@ -112,13 +112,9 @@ void T096Board::variant_shutdown() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void T096Board::powerOff() {
|
void T096Board::powerOff() {
|
||||||
#if ENV_INCLUDE_GPS == 1
|
loRaFEMControl.setSleepModeEnable();
|
||||||
pinMode(PIN_GPS_EN, OUTPUT);
|
nrf_gpio_cfg_default(PIN_GPS_EN); // 363uA down to 39uA
|
||||||
digitalWrite(PIN_GPS_EN, !PIN_GPS_EN_ACTIVE);
|
NRF52Board::powerOff();
|
||||||
#endif
|
|
||||||
loRaFEMControl.setSleepModeEnable();
|
|
||||||
variant_shutdown();
|
|
||||||
sd_power_system_off();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* T096Board::getManufacturerName() const {
|
const char* T096Board::getManufacturerName() const {
|
||||||
|
|||||||
@@ -81,34 +81,6 @@ uint16_t T1Board::getBattMilliVolts() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void T1Board::variant_shutdown() {
|
void T1Board::variant_shutdown() {
|
||||||
nrf_gpio_cfg_default(PIN_TFT_CS);
|
|
||||||
nrf_gpio_cfg_default(PIN_TFT_DC);
|
|
||||||
nrf_gpio_cfg_default(PIN_TFT_SDA);
|
|
||||||
nrf_gpio_cfg_default(PIN_TFT_SCL);
|
|
||||||
nrf_gpio_cfg_default(PIN_TFT_RST);
|
|
||||||
nrf_gpio_cfg_default(PIN_TFT_LEDA_CTL);
|
|
||||||
nrf_gpio_cfg_default(PIN_TFT_VDD_CTL);
|
|
||||||
|
|
||||||
nrf_gpio_cfg_default(PIN_WIRE_SDA);
|
|
||||||
nrf_gpio_cfg_default(PIN_WIRE_SCL);
|
|
||||||
|
|
||||||
nrf_gpio_cfg_default(LORA_CS);
|
|
||||||
nrf_gpio_cfg_default(SX126X_DIO1);
|
|
||||||
nrf_gpio_cfg_default(SX126X_BUSY);
|
|
||||||
nrf_gpio_cfg_default(SX126X_RESET);
|
|
||||||
nrf_gpio_cfg_default(PIN_SPI_MISO);
|
|
||||||
nrf_gpio_cfg_default(PIN_SPI_MOSI);
|
|
||||||
nrf_gpio_cfg_default(PIN_SPI_SCK);
|
|
||||||
|
|
||||||
nrf_gpio_cfg_default(PIN_SPI1_MOSI);
|
|
||||||
nrf_gpio_cfg_default(PIN_SPI1_SCK);
|
|
||||||
|
|
||||||
nrf_gpio_cfg_default(PIN_GPS_RESET);
|
|
||||||
nrf_gpio_cfg_default(PIN_GPS_EN);
|
|
||||||
nrf_gpio_cfg_default(PIN_GPS_PPS);
|
|
||||||
nrf_gpio_cfg_default(PIN_GPS_RX);
|
|
||||||
nrf_gpio_cfg_default(PIN_GPS_TX);
|
|
||||||
|
|
||||||
nrf_gpio_cfg_default(PIN_BUZZER_VOLTAGE_MULTIPLIER_1);
|
nrf_gpio_cfg_default(PIN_BUZZER_VOLTAGE_MULTIPLIER_1);
|
||||||
nrf_gpio_cfg_default(PIN_BUZZER_VOLTAGE_MULTIPLIER_2);
|
nrf_gpio_cfg_default(PIN_BUZZER_VOLTAGE_MULTIPLIER_2);
|
||||||
|
|
||||||
@@ -127,7 +99,7 @@ void T1Board::variant_shutdown() {
|
|||||||
|
|
||||||
void T1Board::powerOff() {
|
void T1Board::powerOff() {
|
||||||
variant_shutdown();
|
variant_shutdown();
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* T1Board::getManufacturerName() const {
|
const char* T1Board::getManufacturerName() const {
|
||||||
|
|||||||
@@ -50,10 +50,7 @@ public:
|
|||||||
#ifdef LED_PIN
|
#ifdef LED_PIN
|
||||||
digitalWrite(LED_PIN, HIGH);
|
digitalWrite(LED_PIN, HIGH);
|
||||||
#endif
|
#endif
|
||||||
#if ENV_INCLUDE_GPS == 1
|
|
||||||
pinMode(GPS_EN, OUTPUT);
|
NRF52Board::powerOff();
|
||||||
digitalWrite(GPS_EN, LOW);
|
|
||||||
#endif
|
|
||||||
sd_power_system_off();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,33 +20,6 @@ void HeltecT190Board::begin() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HeltecT190Board::enterDeepSleep(uint32_t secs, int pin_wake_btn) {
|
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
|
||||||
|
|
||||||
// Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep
|
|
||||||
rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY);
|
|
||||||
rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1);
|
|
||||||
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
|
||||||
|
|
||||||
if (pin_wake_btn < 0) {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
|
|
||||||
} else {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally set ESP32 into sleep
|
|
||||||
esp_deep_sleep_start(); // CPU halts here and never returns!
|
|
||||||
}
|
|
||||||
|
|
||||||
void HeltecT190Board::powerOff() {
|
|
||||||
enterDeepSleep(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t HeltecT190Board::getBattMilliVolts() {
|
uint16_t HeltecT190Board::getBattMilliVolts() {
|
||||||
analogReadResolution(10);
|
analogReadResolution(10);
|
||||||
digitalWrite(PIN_ADC_CTRL, HIGH);
|
digitalWrite(PIN_ADC_CTRL, HIGH);
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <helpers/RefCountedDigitalPin.h>
|
#include <helpers/RefCountedDigitalPin.h>
|
||||||
#include <helpers/ESP32Board.h>
|
#include <helpers/ESP32Board.h>
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
|
|
||||||
class HeltecT190Board : public ESP32Board {
|
class HeltecT190Board : public ESP32Board {
|
||||||
|
|
||||||
@@ -13,8 +12,6 @@ public:
|
|||||||
HeltecT190Board() : periph_power(PIN_VEXT_EN,PIN_VEXT_EN_ACTIVE) { }
|
HeltecT190Board() : periph_power(PIN_VEXT_EN,PIN_VEXT_EN_ACTIVE) { }
|
||||||
|
|
||||||
void begin();
|
void begin();
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1);
|
|
||||||
void powerOff() override;
|
|
||||||
uint16_t getBattMilliVolts() override;
|
uint16_t getBattMilliVolts() override;
|
||||||
const char* getManufacturerName() const override ;
|
const char* getManufacturerName() const override ;
|
||||||
|
|
||||||
|
|||||||
@@ -35,33 +35,12 @@ void HeltecTrackerV2Board::begin() {
|
|||||||
loRaFEMControl.setRxModeEnable();
|
loRaFEMControl.setRxModeEnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HeltecTrackerV2Board::enterDeepSleep(uint32_t secs, int pin_wake_btn) {
|
void HeltecTrackerV2Board::powerOff() {
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
// Turn off PA
|
||||||
|
digitalWrite(P_LORA_PA_POWER, LOW);
|
||||||
|
rtc_gpio_hold_en((gpio_num_t)P_LORA_PA_POWER);
|
||||||
|
|
||||||
// Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep
|
ESP32Board::powerOff();
|
||||||
rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY);
|
|
||||||
rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1);
|
|
||||||
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
|
||||||
|
|
||||||
loRaFEMControl.setRxModeEnableWhenMCUSleep();//It also needs to be enabled in receive mode
|
|
||||||
|
|
||||||
if (pin_wake_btn < 0) {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
|
|
||||||
} else {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally set ESP32 into sleep
|
|
||||||
esp_deep_sleep_start(); // CPU halts here and never returns!
|
|
||||||
}
|
|
||||||
|
|
||||||
void HeltecTrackerV2Board::powerOff() {
|
|
||||||
enterDeepSleep(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t HeltecTrackerV2Board::getBattMilliVolts() {
|
uint16_t HeltecTrackerV2Board::getBattMilliVolts() {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <helpers/RefCountedDigitalPin.h>
|
#include <helpers/RefCountedDigitalPin.h>
|
||||||
#include <helpers/ESP32Board.h>
|
#include <helpers/ESP32Board.h>
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
#include "LoRaFEMControl.h"
|
#include "LoRaFEMControl.h"
|
||||||
|
|
||||||
class HeltecTrackerV2Board : public ESP32Board {
|
class HeltecTrackerV2Board : public ESP32Board {
|
||||||
@@ -17,7 +16,6 @@ public:
|
|||||||
void begin();
|
void begin();
|
||||||
void onBeforeTransmit(void) override;
|
void onBeforeTransmit(void) override;
|
||||||
void onAfterTransmit(void) override;
|
void onAfterTransmit(void) override;
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1);
|
|
||||||
void powerOff() override;
|
void powerOff() override;
|
||||||
uint16_t getBattMilliVolts() override;
|
uint16_t getBattMilliVolts() override;
|
||||||
const char* getManufacturerName() const override ;
|
const char* getManufacturerName() const override ;
|
||||||
|
|||||||
@@ -7,8 +7,6 @@
|
|||||||
#define PIN_VBAT_READ 37
|
#define PIN_VBAT_READ 37
|
||||||
#define PIN_LED_BUILTIN 25
|
#define PIN_LED_BUILTIN 25
|
||||||
|
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
|
|
||||||
class HeltecV2Board : public ESP32Board {
|
class HeltecV2Board : public ESP32Board {
|
||||||
public:
|
public:
|
||||||
void begin() {
|
void begin() {
|
||||||
@@ -26,29 +24,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1) {
|
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
|
||||||
|
|
||||||
// Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep
|
|
||||||
rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_0, RTC_GPIO_MODE_INPUT_ONLY);
|
|
||||||
rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_0);
|
|
||||||
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
|
||||||
|
|
||||||
if (pin_wake_btn < 0) {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_0), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
|
|
||||||
} else {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_0) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally set ESP32 into sleep
|
|
||||||
esp_deep_sleep_start(); // CPU halts here and never returns!
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t getBattMilliVolts() override {
|
uint16_t getBattMilliVolts() override {
|
||||||
analogReadResolution(10);
|
analogReadResolution(10);
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,6 @@
|
|||||||
#define PIN_ADC_CTRL_ACTIVE LOW
|
#define PIN_ADC_CTRL_ACTIVE LOW
|
||||||
#define PIN_ADC_CTRL_INACTIVE HIGH
|
#define PIN_ADC_CTRL_INACTIVE HIGH
|
||||||
|
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
|
|
||||||
class HeltecV3Board : public ESP32Board {
|
class HeltecV3Board : public ESP32Board {
|
||||||
private:
|
private:
|
||||||
bool adc_active_state;
|
bool adc_active_state;
|
||||||
@@ -52,33 +50,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1) {
|
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
|
||||||
|
|
||||||
// Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep
|
|
||||||
rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY);
|
|
||||||
rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1);
|
|
||||||
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
|
||||||
|
|
||||||
if (pin_wake_btn < 0) {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
|
|
||||||
} else {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally set ESP32 into sleep
|
|
||||||
esp_deep_sleep_start(); // CPU halts here and never returns!
|
|
||||||
}
|
|
||||||
|
|
||||||
void powerOff() override {
|
|
||||||
enterDeepSleep(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t getBattMilliVolts() override {
|
uint16_t getBattMilliVolts() override {
|
||||||
analogReadResolution(10);
|
analogReadResolution(10);
|
||||||
digitalWrite(PIN_ADC_CTRL, adc_active_state);
|
digitalWrite(PIN_ADC_CTRL, adc_active_state);
|
||||||
|
|||||||
@@ -32,33 +32,12 @@ void HeltecV4Board::begin() {
|
|||||||
loRaFEMControl.setRxModeEnable();
|
loRaFEMControl.setRxModeEnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HeltecV4Board::enterDeepSleep(uint32_t secs, int pin_wake_btn) {
|
void HeltecV4Board::powerOff() {
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
// Turn off PA
|
||||||
|
digitalWrite(P_LORA_PA_POWER, LOW);
|
||||||
|
rtc_gpio_hold_en((gpio_num_t)P_LORA_PA_POWER);
|
||||||
|
|
||||||
// Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep
|
ESP32Board::powerOff();
|
||||||
rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY);
|
|
||||||
rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1);
|
|
||||||
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
|
||||||
|
|
||||||
loRaFEMControl.setRxModeEnableWhenMCUSleep();//It also needs to be enabled in receive mode
|
|
||||||
|
|
||||||
if (pin_wake_btn < 0) {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
|
|
||||||
} else {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally set ESP32 into sleep
|
|
||||||
esp_deep_sleep_start(); // CPU halts here and never returns!
|
|
||||||
}
|
|
||||||
|
|
||||||
void HeltecV4Board::powerOff() {
|
|
||||||
enterDeepSleep(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t HeltecV4Board::getBattMilliVolts() {
|
uint16_t HeltecV4Board::getBattMilliVolts() {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <helpers/RefCountedDigitalPin.h>
|
#include <helpers/RefCountedDigitalPin.h>
|
||||||
#include <helpers/ESP32Board.h>
|
#include <helpers/ESP32Board.h>
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
#include "LoRaFEMControl.h"
|
#include "LoRaFEMControl.h"
|
||||||
|
|
||||||
#ifndef ADC_MULTIPLIER
|
#ifndef ADC_MULTIPLIER
|
||||||
@@ -23,7 +22,6 @@ public:
|
|||||||
void begin();
|
void begin();
|
||||||
void onBeforeTransmit(void) override;
|
void onBeforeTransmit(void) override;
|
||||||
void onAfterTransmit(void) override;
|
void onAfterTransmit(void) override;
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1);
|
|
||||||
void powerOff() override;
|
void powerOff() override;
|
||||||
bool setLoRaFemLnaEnabled(bool enable) override;
|
bool setLoRaFemLnaEnabled(bool enable) override;
|
||||||
bool canControlLoRaFemLna() const override;
|
bool canControlLoRaFemLna() const override;
|
||||||
|
|||||||
@@ -37,8 +37,4 @@ public:
|
|||||||
digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED off
|
digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED off
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void powerOff() override {
|
|
||||||
sd_power_system_off();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ build_flags =
|
|||||||
-D RADIO_CLASS=CustomSX1276
|
-D RADIO_CLASS=CustomSX1276
|
||||||
-D WRAPPER_CLASS=CustomSX1276Wrapper
|
-D WRAPPER_CLASS=CustomSX1276Wrapper
|
||||||
-D SX127X_CURRENT_LIMIT=120
|
-D SX127X_CURRENT_LIMIT=120
|
||||||
-D SX176X_RXEN=21
|
-D SX127X_RXEN=21
|
||||||
-D SX176X_TXEN=10
|
-D SX127X_TXEN=10
|
||||||
-D LORA_TX_POWER=20
|
-D LORA_TX_POWER=20
|
||||||
build_src_filter = ${esp32_base.build_src_filter}
|
build_src_filter = ${esp32_base.build_src_filter}
|
||||||
+<../variants/lilygo_t3s3_sx1276>
|
+<../variants/lilygo_t3s3_sx1276>
|
||||||
|
|||||||
@@ -48,12 +48,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void powerOff() override {
|
void powerOff() override {
|
||||||
|
// power off system
|
||||||
|
NRF52Board::powerOff();
|
||||||
|
|
||||||
// turn off 3.3v
|
// turn off 3.3v
|
||||||
digitalWrite(RT9080_EN, LOW);
|
digitalWrite(RT9080_EN, LOW);
|
||||||
|
|
||||||
// power off system
|
|
||||||
sd_power_system_off();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "helpers/ESP32Board.h"
|
#include "helpers/ESP32Board.h"
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
|
|
||||||
#define PIN_VBAT_READ 4
|
#define PIN_VBAT_READ 4
|
||||||
#define BATTERY_SAMPLES 8
|
#define BATTERY_SAMPLES 8
|
||||||
@@ -23,29 +22,6 @@ public:
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn) {
|
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
|
||||||
|
|
||||||
// Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep
|
|
||||||
rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY);
|
|
||||||
rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1);
|
|
||||||
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
|
||||||
|
|
||||||
if (pin_wake_btn < 0) {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
|
|
||||||
} else {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally set ESP32 into sleep
|
|
||||||
esp_deep_sleep_start(); // CPU halts here and never returns!
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t getBattMilliVolts() {
|
uint16_t getBattMilliVolts() {
|
||||||
#if defined(PIN_VBAT_READ) && defined(ADC_MULTIPLIER)
|
#if defined(PIN_VBAT_READ) && defined(ADC_MULTIPLIER)
|
||||||
analogReadResolution(12);
|
analogReadResolution(12);
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void powerOff() override {
|
void powerOff() override {
|
||||||
|
NRF52Board::powerOff();
|
||||||
#ifdef LED_RED
|
#ifdef LED_RED
|
||||||
digitalWrite(LED_RED, HIGH);
|
digitalWrite(LED_RED, HIGH);
|
||||||
#endif
|
#endif
|
||||||
@@ -39,6 +40,5 @@ public:
|
|||||||
#ifdef PIN_PWR_EN
|
#ifdef PIN_PWR_EN
|
||||||
digitalWrite(PIN_PWR_EN, LOW);
|
digitalWrite(PIN_PWR_EN, LOW);
|
||||||
#endif
|
#endif
|
||||||
sd_power_system_off();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ void TechoCardBoard::powerOff() {
|
|||||||
nrf_gpio_cfg_sense_input(BUTTON_PIN, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW);
|
nrf_gpio_cfg_sense_input(BUTTON_PIN, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW);
|
||||||
turnOffLeds();
|
turnOffLeds();
|
||||||
digitalWrite(PIN_PWR_EN, LOW);
|
digitalWrite(PIN_PWR_EN, LOW);
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void powerOff() override {
|
void powerOff() override {
|
||||||
|
NRF52Board::powerOff();
|
||||||
|
|
||||||
digitalWrite(PIN_VBAT_MEAS_EN, LOW);
|
digitalWrite(PIN_VBAT_MEAS_EN, LOW);
|
||||||
#ifdef LED_RED
|
#ifdef LED_RED
|
||||||
digitalWrite(LED_RED, LOW);
|
digitalWrite(LED_RED, LOW);
|
||||||
@@ -38,6 +40,5 @@ public:
|
|||||||
#ifdef PIN_PWR_EN
|
#ifdef PIN_PWR_EN
|
||||||
digitalWrite(PIN_PWR_EN, LOW);
|
digitalWrite(PIN_PWR_EN, LOW);
|
||||||
#endif
|
#endif
|
||||||
sd_power_system_off();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -32,8 +32,4 @@ public:
|
|||||||
const char* getManufacturerName() const override {
|
const char* getManufacturerName() const override {
|
||||||
return "Heltec MeshPocket";
|
return "Heltec MeshPocket";
|
||||||
}
|
}
|
||||||
|
|
||||||
void powerOff() override {
|
|
||||||
sd_power_system_off();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public:
|
|||||||
nrf_gpio_cfg_sense_input(g_ADigitalPinMap[PIN_USER_BTN], NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW);
|
nrf_gpio_cfg_sense_input(g_ADigitalPinMap[PIN_USER_BTN], NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ public:
|
|||||||
#ifdef BUTTON_PIN
|
#ifdef BUTTON_PIN
|
||||||
nrf_gpio_cfg_sense_input(digitalPinToInterrupt(BUTTON_PIN), NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW);
|
nrf_gpio_cfg_sense_input(digitalPinToInterrupt(BUTTON_PIN), NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW);
|
||||||
#endif
|
#endif
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(P_LORA_TX_LED)
|
#if defined(P_LORA_TX_LED)
|
||||||
|
|||||||
@@ -52,6 +52,6 @@ public:
|
|||||||
nrf_gpio_cfg_sense_input(digitalPinToInterrupt(PIN_USER_BTN), NRF_GPIO_PIN_NOPULL,
|
nrf_gpio_cfg_sense_input(digitalPinToInterrupt(PIN_USER_BTN), NRF_GPIO_PIN_NOPULL,
|
||||||
NRF_GPIO_PIN_SENSE_LOW);
|
NRF_GPIO_PIN_SENSE_LOW);
|
||||||
|
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -72,8 +72,4 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void powerOff() override {
|
|
||||||
sd_power_system_off();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -16,8 +16,6 @@
|
|||||||
#define ADC_MULTIPLIER (3 * 1.73 * 1.187 * 1000)
|
#define ADC_MULTIPLIER (3 * 1.73 * 1.187 * 1000)
|
||||||
#define BATTERY_SAMPLES 8
|
#define BATTERY_SAMPLES 8
|
||||||
|
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
|
|
||||||
class RAK3112Board : public ESP32Board {
|
class RAK3112Board : public ESP32Board {
|
||||||
private:
|
private:
|
||||||
bool adc_active_state;
|
bool adc_active_state;
|
||||||
@@ -51,33 +49,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1) {
|
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
|
||||||
|
|
||||||
// Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep
|
|
||||||
rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY);
|
|
||||||
rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1);
|
|
||||||
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
|
||||||
|
|
||||||
if (pin_wake_btn < 0) {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
|
|
||||||
} else {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally set ESP32 into sleep
|
|
||||||
esp_deep_sleep_start(); // CPU halts here and never returns!
|
|
||||||
}
|
|
||||||
|
|
||||||
void powerOff() override {
|
|
||||||
enterDeepSleep(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t getBattMilliVolts() override {
|
uint16_t getBattMilliVolts() override {
|
||||||
analogReadResolution(12);
|
analogReadResolution(12);
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,6 @@ public:
|
|||||||
nrf_gpio_cfg_sense_input(digitalPinToInterrupt(BUTTON_PIN), NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW);
|
nrf_gpio_cfg_sense_input(digitalPinToInterrupt(BUTTON_PIN), NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ public:
|
|||||||
#ifdef NRF52_POWER_MANAGEMENT
|
#ifdef NRF52_POWER_MANAGEMENT
|
||||||
initiateShutdown(SHUTDOWN_REASON_USER);
|
initiateShutdown(SHUTDOWN_REASON_USER);
|
||||||
#else
|
#else
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <helpers/ESP32Board.h>
|
#include <helpers/ESP32Board.h>
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
|
|
||||||
class StationG2Board : public ESP32Board {
|
class StationG2Board : public ESP32Board {
|
||||||
public:
|
public:
|
||||||
@@ -21,29 +20,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1) {
|
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
|
||||||
|
|
||||||
// Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep
|
|
||||||
rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY);
|
|
||||||
rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1);
|
|
||||||
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
|
||||||
|
|
||||||
if (pin_wake_btn < 0) {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
|
|
||||||
} else {
|
|
||||||
esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally set ESP32 into sleep
|
|
||||||
esp_deep_sleep_start(); // CPU halts here and never returns!
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t getBattMilliVolts() override {
|
uint16_t getBattMilliVolts() override {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#include "StationG3Board.h"
|
||||||
|
|
||||||
|
void StationG3Board::powerOff() {
|
||||||
|
#ifdef P_PA1_EN
|
||||||
|
setPAModeHigh(false);
|
||||||
|
rtc_gpio_hold_en((gpio_num_t)P_PA1_EN);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef P_PRIMARY_LNA_EN
|
||||||
|
setPrimaryLNAControl(true);
|
||||||
|
rtc_gpio_hold_en((gpio_num_t)P_PRIMARY_LNA_EN);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ESP32Board::powerOff();
|
||||||
|
}
|
||||||
@@ -73,36 +73,7 @@ public:
|
|||||||
setPrimaryLNAControl(true);
|
setPrimaryLNAControl(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1) {
|
void powerOff() override;
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
|
||||||
|
|
||||||
rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY);
|
|
||||||
rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1);
|
|
||||||
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
|
|
||||||
|
|
||||||
#ifdef P_PA1_EN
|
|
||||||
setPAModeHigh(false);
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_PA1_EN);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef P_PRIMARY_LNA_EN
|
|
||||||
setPrimaryLNAControl(true);
|
|
||||||
rtc_gpio_hold_en((gpio_num_t)P_PRIMARY_LNA_EN);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (pin_wake_btn < 0) {
|
|
||||||
esp_sleep_enable_ext1_wakeup((1ULL << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH);
|
|
||||||
} else {
|
|
||||||
esp_sleep_enable_ext1_wakeup((1ULL << P_LORA_DIO_1) | (1ULL << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
esp_deep_sleep_start();
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t getBattMilliVolts() override {
|
uint16_t getBattMilliVolts() override {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -88,6 +88,6 @@ public:
|
|||||||
nrf_gpio_cfg_sense_input(BUTTON_PIN, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH);
|
nrf_gpio_cfg_sense_input(BUTTON_PIN, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#define RADIOLIB_STATIC_ONLY 1
|
#define RADIOLIB_STATIC_ONLY 1
|
||||||
#include <RadioLib.h>
|
#include <RadioLib.h>
|
||||||
#include <helpers/radiolib/RadioLibWrappers.h>
|
#include <helpers/radiolib/RadioLibWrappers.h>
|
||||||
#include <helpers/XiaoC3Board.h>
|
#include <../variants/xiao_c3/XiaoC3Board.h>
|
||||||
#include <helpers/radiolib/CustomSX1262Wrapper.h>
|
#include <helpers/radiolib/CustomSX1262Wrapper.h>
|
||||||
#include <helpers/radiolib/CustomSX1268Wrapper.h>
|
#include <helpers/radiolib/CustomSX1268Wrapper.h>
|
||||||
#include <helpers/AutoDiscoverRTCClock.h>
|
#include <helpers/AutoDiscoverRTCClock.h>
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// power off board
|
// power off board
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,40 +1,30 @@
|
|||||||
#include "ThinknodeM2Board.h"
|
#include "ThinknodeM2Board.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ThinknodeM2Board::begin() {
|
void ThinknodeM2Board::begin() {
|
||||||
pinMode(PIN_VEXT_EN, OUTPUT);
|
pinMode(PIN_VEXT_EN, OUTPUT);
|
||||||
digitalWrite(PIN_VEXT_EN, !PIN_VEXT_EN_ACTIVE); // force power cycle
|
digitalWrite(PIN_VEXT_EN, !PIN_VEXT_EN_ACTIVE); // force power cycle
|
||||||
delay(20); // allow power rail to discharge
|
delay(20); // allow power rail to discharge
|
||||||
digitalWrite(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE); // turn backlight back on
|
digitalWrite(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE); // turn backlight back on
|
||||||
delay(120); // give display time to bias on cold boot
|
delay(120); // give display time to bias on cold boot
|
||||||
ESP32Board::begin();
|
ESP32Board::begin();
|
||||||
pinMode(PIN_STATUS_LED, OUTPUT); // init power led
|
pinMode(PIN_STATUS_LED, OUTPUT); // init power led
|
||||||
}
|
|
||||||
|
|
||||||
void ThinknodeM2Board::enterDeepSleep(uint32_t secs, int pin_wake_btn) {
|
|
||||||
esp_deep_sleep_start();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ThinknodeM2Board::powerOff() {
|
|
||||||
enterDeepSleep(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t ThinknodeM2Board::getBattMilliVolts() {
|
|
||||||
analogReadResolution(12);
|
|
||||||
analogSetPinAttenuation(PIN_VBAT_READ, ADC_11db);
|
|
||||||
|
|
||||||
uint32_t mv = 0;
|
|
||||||
for (int i = 0; i < 8; ++i) {
|
|
||||||
mv += analogReadMilliVolts(PIN_VBAT_READ);
|
|
||||||
delayMicroseconds(200);
|
|
||||||
}
|
|
||||||
mv /= 8;
|
|
||||||
|
|
||||||
analogReadResolution(10);
|
|
||||||
return static_cast<uint16_t>(mv * ADC_MULTIPLIER );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* ThinknodeM2Board::getManufacturerName() const {
|
uint16_t ThinknodeM2Board::getBattMilliVolts() {
|
||||||
return "Elecrow ThinkNode M2";
|
analogReadResolution(12);
|
||||||
|
analogSetPinAttenuation(PIN_VBAT_READ, ADC_11db);
|
||||||
|
|
||||||
|
uint32_t mv = 0;
|
||||||
|
for (int i = 0; i < 8; ++i) {
|
||||||
|
mv += analogReadMilliVolts(PIN_VBAT_READ);
|
||||||
|
delayMicroseconds(200);
|
||||||
}
|
}
|
||||||
|
mv /= 8;
|
||||||
|
|
||||||
|
analogReadResolution(10);
|
||||||
|
return static_cast<uint16_t>(mv * ADC_MULTIPLIER);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *ThinknodeM2Board::getManufacturerName() const {
|
||||||
|
return "Elecrow ThinkNode M2";
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,15 +3,11 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <helpers/RefCountedDigitalPin.h>
|
#include <helpers/RefCountedDigitalPin.h>
|
||||||
#include <helpers/ESP32Board.h>
|
#include <helpers/ESP32Board.h>
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
|
|
||||||
class ThinknodeM2Board : public ESP32Board {
|
class ThinknodeM2Board : public ESP32Board {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void begin();
|
void begin();
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1);
|
|
||||||
void powerOff() override;
|
|
||||||
uint16_t getBattMilliVolts() override;
|
uint16_t getBattMilliVolts() override;
|
||||||
const char* getManufacturerName() const override ;
|
const char* getManufacturerName() const override ;
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,6 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// power off board
|
// power off board
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,14 +19,6 @@ void ThinknodeM5Board::begin() {
|
|||||||
ESP32Board::begin();
|
ESP32Board::begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThinknodeM5Board::enterDeepSleep(uint32_t secs, int pin_wake_btn) {
|
|
||||||
esp_deep_sleep_start();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ThinknodeM5Board::powerOff() {
|
|
||||||
enterDeepSleep(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t ThinknodeM5Board::getBattMilliVolts() {
|
uint16_t ThinknodeM5Board::getBattMilliVolts() {
|
||||||
analogReadResolution(12);
|
analogReadResolution(12);
|
||||||
analogSetPinAttenuation(PIN_VBAT_READ, ADC_11db);
|
analogSetPinAttenuation(PIN_VBAT_READ, ADC_11db);
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <helpers/RefCountedDigitalPin.h>
|
#include <helpers/RefCountedDigitalPin.h>
|
||||||
#include <helpers/ESP32Board.h>
|
#include <helpers/ESP32Board.h>
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
#include <PCA9557.h>
|
#include <PCA9557.h>
|
||||||
|
|
||||||
extern PCA9557 expander;
|
extern PCA9557 expander;
|
||||||
@@ -13,8 +12,6 @@ class ThinknodeM5Board : public ESP32Board {
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
void begin();
|
void begin();
|
||||||
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1);
|
|
||||||
void powerOff() override;
|
|
||||||
uint16_t getBattMilliVolts() override;
|
uint16_t getBattMilliVolts() override;
|
||||||
const char* getManufacturerName() const override ;
|
const char* getManufacturerName() const override ;
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,6 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// power off board
|
// power off board
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -35,6 +35,6 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void powerOff() override {
|
void powerOff() override {
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#include <helpers/ESP32Board.h>
|
#include <helpers/ESP32Board.h>
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
#include <driver/rtc_io.h>
|
|
||||||
#include <driver/uart.h>
|
#include <driver/uart.h>
|
||||||
|
|
||||||
class XiaoC3Board : public ESP32Board {
|
class XiaoC3Board : public ESP32Board {
|
||||||
@@ -40,37 +39,6 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void enterDeepSleep(uint32_t secs, int8_t wake_pin = -1) {
|
|
||||||
gpio_set_direction(gpio_num_t(P_LORA_DIO_1), GPIO_MODE_INPUT);
|
|
||||||
if (wake_pin >= 0) {
|
|
||||||
gpio_set_direction((gpio_num_t)wake_pin, GPIO_MODE_INPUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
//hold disable, isolate and power domain config functions may be unnecessary
|
|
||||||
//gpio_deep_sleep_hold_dis();
|
|
||||||
//esp_sleep_config_gpio_isolate();
|
|
||||||
gpio_deep_sleep_hold_en();
|
|
||||||
|
|
||||||
#if defined(LORA_TX_BOOST_PIN)
|
|
||||||
gpio_hold_en((gpio_num_t) LORA_TX_BOOST_PIN);
|
|
||||||
gpio_deep_sleep_hold_en();
|
|
||||||
#endif
|
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
|
||||||
|
|
||||||
if (wake_pin >= 0) {
|
|
||||||
esp_deep_sleep_enable_gpio_wakeup((1 << P_LORA_DIO_1) | (1 << wake_pin), ESP_GPIO_WAKEUP_GPIO_HIGH);
|
|
||||||
} else {
|
|
||||||
esp_deep_sleep_enable_gpio_wakeup(1 << P_LORA_DIO_1, ESP_GPIO_WAKEUP_GPIO_HIGH);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secs > 0) {
|
|
||||||
esp_sleep_enable_timer_wakeup(secs * 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally set ESP32 into sleep
|
|
||||||
esp_deep_sleep_start(); // CPU halts here and never returns!
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(LORA_TX_BOOST_PIN) || defined(P_LORA_TX_LED)
|
#if defined(LORA_TX_BOOST_PIN) || defined(P_LORA_TX_LED)
|
||||||
void onBeforeTransmit() override {
|
void onBeforeTransmit() override {
|
||||||
#if defined(P_LORA_TX_LED)
|
#if defined(P_LORA_TX_LED)
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public:
|
|||||||
nrf_gpio_cfg_sense_input(digitalPinToInterrupt(g_ADigitalPinMap[PIN_USER_BTN]), NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW);
|
nrf_gpio_cfg_sense_input(digitalPinToInterrupt(g_ADigitalPinMap[PIN_USER_BTN]), NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sd_power_system_off();
|
NRF52Board::powerOff();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user