Merge remote-tracking branch 'iotthinks/PowerSaving-v16' into keymindCascade

# Conflicts:
#	examples/simple_repeater/MyMesh.cpp
#	src/helpers/CommonCLI.cpp
#	src/helpers/CommonCLI.h
#	src/helpers/radiolib/RadioLibWrappers.cpp
This commit is contained in:
mikecarper committed 2026-07-06 15:27:14 -07:00
commit 84a4794282
12 files changed
+35 -43

No files matched your search

+2
View File
@@ -77,6 +77,8 @@ public:
virtual const char* getResetReasonString(uint32_t reason) { return "Not available"; }
virtual uint8_t getShutdownReason() const { return 0; }
virtual const char* getShutdownReasonString(uint8_t reason) { return "Not available"; }
inline static uint32_t n_cad_busy = 0;
};
/**
+1 -1
View File
@@ -1653,7 +1653,7 @@ void CommonCLI::handleGetCmd(uint32_t sender_timestamp, char* command, char* rep
} else if (memcmp(config, "int.thresh", 10) == 0) {
sprintf(reply, "> %d", (uint32_t) _prefs->interference_threshold);
} else if (memcmp(config, "cad", 3) == 0) {
sprintf(reply, "> %s", _prefs->cad_enabled ? "on" : "off");
sprintf(reply, "> %s. # channel busy: %u", _prefs->cad_enabled ? "on" : "off", _board->n_cad_busy);
} else if (memcmp(config, "agc.reset.interval", 18) == 0) {
sprintf(reply, "> %d", ((uint32_t) _prefs->agc_reset_interval) * 4);
} else if (memcmp(config, "multi.acks", 10) == 0) {
+1 -1
View File
@@ -89,7 +89,7 @@ void ESP32Board::enterDeepSleep(uint32_t secs) {
#ifdef P_LORA_NSS
// Keep LoRa inactive during deepsleep
digitalWrite(P_LORA_NSS, HIGH);
#if CONFIG_IDF_TARGET_ESP32C3
#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);
+6 -3
View File
@@ -69,8 +69,8 @@ void RadioLibWrapper::doResetAGC() {
}
void RadioLibWrapper::resetAGC() {
// make sure we're not mid-receive of packet!
if ((state & STATE_INT_READY) != 0 || isReceivingPacket()) return;
// make sure we're not mid-receiving and mid-sending of packet!
if ((state & STATE_INT_READY) != 0 || isReceivingPacket() || (state == STATE_TX_WAIT)) return;
doResetAGC();
state = STATE_IDLE; // trigger a startReceive()
@@ -195,7 +195,10 @@ bool RadioLibWrapper::isChannelActive() {
// try to read a non-existent packet and count a spurious recv error.
state = STATE_IDLE;
startRecv();
if (result != RADIOLIB_CHANNEL_FREE) return true;
if (result != RADIOLIB_CHANNEL_FREE) {
_board->n_cad_busy++;
return true;
}
}
return false;
+1
View File
@@ -7,6 +7,7 @@ build_flags =
-I variants/heltec_v4
-D HELTEC_LORA_V4
-D USE_SX1262
-D ARDUINO_USB_MODE=1
-D ESP32_CPU_FREQ=80
-D RADIO_CLASS=CustomSX1262
-D WRAPPER_CLASS=CustomSX1262Wrapper
@@ -48,12 +48,10 @@ public:
}
void powerOff() override {
// turn off 3.3v
digitalWrite(RT9080_EN, LOW);
// power off system
NRF52Board::powerOff();
// turn off 3.3v
digitalWrite(RT9080_EN, LOW);
}
};
+1 -1
View File
@@ -24,6 +24,7 @@ public:
}
void powerOff() override {
NRF52Board::powerOff();
#ifdef LED_RED
digitalWrite(LED_RED, HIGH);
#endif
@@ -39,6 +40,5 @@ public:
#ifdef PIN_PWR_EN
digitalWrite(PIN_PWR_EN, LOW);
#endif
NRF52Board::powerOff();
}
};
+2 -1
View File
@@ -22,6 +22,8 @@ public:
}
void powerOff() override {
NRF52Board::powerOff();
digitalWrite(PIN_VBAT_MEAS_EN, LOW);
#ifdef LED_RED
digitalWrite(LED_RED, LOW);
@@ -38,6 +40,5 @@ public:
#ifdef PIN_PWR_EN
digitalWrite(PIN_PWR_EN, LOW);
#endif
NRF52Board::powerOff();
}
};
+2 -2
View File
@@ -22,8 +22,8 @@ void initVariant() {
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
digitalWrite(LED_BLUE, HIGH);
// pinMode(LED_BLUE, OUTPUT);
// digitalWrite(LED_BLUE, HIGH);
digitalWrite(LED_GREEN, HIGH);
digitalWrite(LED_RED, HIGH);
@@ -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();
}
+1 -30
View File
@@ -73,36 +73,7 @@ public:
setPrimaryLNAControl(true);
}
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1) {
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();
}
void powerOff() override;
uint16_t getBattMilliVolts() override {
return 0;
+1
View File
@@ -8,6 +8,7 @@ build_flags = ${esp32_base.build_flags}
-I variants/xiao_s3_wio
-UENV_INCLUDE_GPS
-D SEEED_XIAO_S3
-D PIN_VBAT_READ=1 ; D0
-D P_LORA_DIO_1=39
-D P_LORA_NSS=41
-D P_LORA_RESET=42 ; RADIOLIB_NC