mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-08 22:22:05 +00:00
Merge remote-tracking branch 'remotes/origin/master' into develop
This commit is contained in:
commit
d566457f0c
1
.gitignore
vendored
1
.gitignore
vendored
@ -29,3 +29,4 @@ __pycache__
|
|||||||
|
|
||||||
venv/
|
venv/
|
||||||
release/
|
release/
|
||||||
|
.vscode/extensions.json
|
||||||
|
@ -102,6 +102,10 @@ class AnalogBatteryLevel : public HasBatteryLevel
|
|||||||
#define ADC_MULTIPLIER 2.0
|
#define ADC_MULTIPLIER 2.0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef BATTERY_SENSE_SAMPLES
|
||||||
|
#define BATTERY_SENSE_SAMPLES 30
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef BATTERY_PIN
|
#ifdef BATTERY_PIN
|
||||||
// Override variant or default ADC_MULTIPLIER if we have the override pref
|
// Override variant or default ADC_MULTIPLIER if we have the override pref
|
||||||
float operativeAdcMultiplier = config.power.adc_multiplier_override > 0
|
float operativeAdcMultiplier = config.power.adc_multiplier_override > 0
|
||||||
@ -112,16 +116,12 @@ class AnalogBatteryLevel : public HasBatteryLevel
|
|||||||
if (millis() - last_read_time_ms > min_read_interval) {
|
if (millis() - last_read_time_ms > min_read_interval) {
|
||||||
last_read_time_ms = millis();
|
last_read_time_ms = millis();
|
||||||
|
|
||||||
#ifdef BATTERY_SENSE_SAMPLES
|
|
||||||
//Set the number of samples, it has an effect of increasing sensitivity, especially in complex electromagnetic environment.
|
//Set the number of samples, it has an effect of increasing sensitivity, especially in complex electromagnetic environment.
|
||||||
uint32_t raw = 0;
|
uint32_t raw = 0;
|
||||||
for(uint32_t i=0; i<BATTERY_SENSE_SAMPLES; i++){
|
for(uint32_t i=0; i<BATTERY_SENSE_SAMPLES; i++){
|
||||||
raw += analogRead(BATTERY_PIN);
|
raw += analogRead(BATTERY_PIN);
|
||||||
}
|
}
|
||||||
raw = raw/BATTERY_SENSE_SAMPLES;
|
raw = raw/BATTERY_SENSE_SAMPLES;
|
||||||
#else
|
|
||||||
uint32_t raw = analogRead(BATTERY_PIN);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
float scaled;
|
float scaled;
|
||||||
#ifndef VBAT_RAW_TO_SCALED
|
#ifndef VBAT_RAW_TO_SCALED
|
||||||
@ -299,8 +299,12 @@ void Power::readPowerStatus()
|
|||||||
if (powerStatus2.getHasBattery() && !powerStatus2.getHasUSB()) {
|
if (powerStatus2.getHasBattery() && !powerStatus2.getHasUSB()) {
|
||||||
if (batteryLevel->getBattVoltage() < MIN_BAT_MILLIVOLTS) {
|
if (batteryLevel->getBattVoltage() < MIN_BAT_MILLIVOLTS) {
|
||||||
low_voltage_counter++;
|
low_voltage_counter++;
|
||||||
if (low_voltage_counter > 3)
|
DEBUG_MSG("Warning RAK4631 Low voltage counter: %d/10\n", low_voltage_counter);
|
||||||
powerFSM.trigger(EVENT_LOW_BATTERY);
|
if (low_voltage_counter > 10) {
|
||||||
|
// We can't trigger deep sleep on NRF52, it's freezing the board
|
||||||
|
//powerFSM.trigger(EVENT_LOW_BATTERY);
|
||||||
|
DEBUG_MSG("Low voltage detected, but not triggering deep sleep\n");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
low_voltage_counter = 0;
|
low_voltage_counter = 0;
|
||||||
}
|
}
|
||||||
@ -573,11 +577,15 @@ bool Power::axpChipInit()
|
|||||||
}
|
}
|
||||||
DEBUG_MSG("=======================================================================\n");
|
DEBUG_MSG("=======================================================================\n");
|
||||||
|
|
||||||
|
// We can safely ignore this approach for most (or all) boards because MCU turned off
|
||||||
|
// earlier than battery discharged to 2.6V.
|
||||||
|
//
|
||||||
|
// Unfortanly for now we can't use this killswitch for RAK4630-based boards because they have a bug with
|
||||||
|
// battery voltage measurement. Probably it sometimes drops to low values.
|
||||||
|
#ifndef RAK4630
|
||||||
// Set PMU shutdown voltage at 2.6V to maximize battery utilization
|
// Set PMU shutdown voltage at 2.6V to maximize battery utilization
|
||||||
PMU->setSysPowerDownVoltage(2600);
|
PMU->setSysPowerDownVoltage(2600);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef PMU_IRQ
|
#ifdef PMU_IRQ
|
||||||
|
@ -34,7 +34,7 @@ static void sdsEnter()
|
|||||||
{
|
{
|
||||||
DEBUG_MSG("Enter state: SDS\n");
|
DEBUG_MSG("Enter state: SDS\n");
|
||||||
// FIXME - make sure GPS and LORA radio are off first - because we want close to zero current draw
|
// FIXME - make sure GPS and LORA radio are off first - because we want close to zero current draw
|
||||||
doDeepSleep(config.power.sds_secs * 1000);
|
doDeepSleep(getConfiguredOrDefaultMs(config.power.sds_secs));
|
||||||
}
|
}
|
||||||
|
|
||||||
extern Power *power;
|
extern Power *power;
|
||||||
@ -324,11 +324,6 @@ void PowerFSM_setup()
|
|||||||
|
|
||||||
powerFSM.add_transition(&stateDARK, &stateDARK, EVENT_CONTACT_FROM_PHONE, NULL, "Contact from phone");
|
powerFSM.add_transition(&stateDARK, &stateDARK, EVENT_CONTACT_FROM_PHONE, NULL, "Contact from phone");
|
||||||
|
|
||||||
// each time we get a new update packet make sure we are staying in the ON state so the screen stays awake (also we don't
|
|
||||||
// shutdown bluetooth if is_router)
|
|
||||||
powerFSM.add_transition(&stateDARK, &stateON, EVENT_FIRMWARE_UPDATE, NULL, "Got firmware update");
|
|
||||||
powerFSM.add_transition(&stateON, &stateON, EVENT_FIRMWARE_UPDATE, NULL, "Got firmware update");
|
|
||||||
|
|
||||||
powerFSM.add_timed_transition(&stateON, &stateDARK, getConfiguredOrDefaultMs(config.display.screen_on_secs, default_screen_on_secs), NULL, "Screen-on timeout");
|
powerFSM.add_timed_transition(&stateON, &stateDARK, getConfiguredOrDefaultMs(config.display.screen_on_secs, default_screen_on_secs), NULL, "Screen-on timeout");
|
||||||
|
|
||||||
// On most boards we use light-sleep to be our main state, but on NRF52 we just stay in DARK
|
// On most boards we use light-sleep to be our main state, but on NRF52 we just stay in DARK
|
||||||
@ -343,12 +338,13 @@ void PowerFSM_setup()
|
|||||||
powerFSM.add_timed_transition(&stateDARK, &stateLS, getConfiguredOrDefaultMs(config.power.wait_bluetooth_secs, default_wait_bluetooth_secs), NULL, "Bluetooth timeout");
|
powerFSM.add_timed_transition(&stateDARK, &stateLS, getConfiguredOrDefaultMs(config.power.wait_bluetooth_secs, default_wait_bluetooth_secs), NULL, "Bluetooth timeout");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config.power.sds_secs != UINT32_MAX)
|
||||||
|
powerFSM.add_timed_transition(lowPowerState, &stateSDS, getConfiguredOrDefaultMs(config.power.sds_secs), NULL, "mesh timeout");
|
||||||
|
|
||||||
#elif defined (ARCH_NRF52)
|
#elif defined (ARCH_NRF52)
|
||||||
lowPowerState = &stateDARK;
|
lowPowerState = &stateDARK;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (config.power.sds_secs != UINT32_MAX)
|
|
||||||
powerFSM.add_timed_transition(lowPowerState, &stateSDS, config.power.sds_secs * 1000, NULL, "mesh timeout");
|
|
||||||
|
|
||||||
powerFSM.run_machine(); // run one interation of the state machine, so we run our on enter tasks for the initial DARK state
|
powerFSM.run_machine(); // run one interation of the state machine, so we run our on enter tasks for the initial DARK state
|
||||||
}
|
}
|
||||||
|
@ -27,10 +27,8 @@ class PowerFSMThread : public OSThread
|
|||||||
if (powerStatus->getHasUSB()) {
|
if (powerStatus->getHasUSB()) {
|
||||||
timeLastPowered = millis();
|
timeLastPowered = millis();
|
||||||
} else if (config.power.on_battery_shutdown_after_secs > 0 &&
|
} else if (config.power.on_battery_shutdown_after_secs > 0 &&
|
||||||
millis() >
|
config.power.on_battery_shutdown_after_secs != UINT32_MAX &&
|
||||||
timeLastPowered +
|
millis() > (timeLastPowered + getConfiguredOrDefaultMs(config.power.on_battery_shutdown_after_secs))) { // shutdown after 30 minutes unpowered
|
||||||
(1000 *
|
|
||||||
config.power.on_battery_shutdown_after_secs)) { // shutdown after 30 minutes unpowered
|
|
||||||
powerFSM.trigger(EVENT_SHUTDOWN);
|
powerFSM.trigger(EVENT_SHUTDOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#define LED_PIN LED
|
#define LED_PIN LED
|
||||||
|
|
||||||
#define HAS_GPS 0
|
|
||||||
|
|
||||||
#define RESET_OLED RST_OLED
|
#define RESET_OLED RST_OLED
|
||||||
#define I2C_SDA SDA_OLED // I2C pins for this board
|
#define I2C_SDA SDA_OLED // I2C pins for this board
|
||||||
#define I2C_SCL SCL_OLED
|
#define I2C_SCL SCL_OLED
|
||||||
|
@ -127,7 +127,7 @@ static const uint8_t SCK = PIN_SPI_SCK;
|
|||||||
* eink display pins
|
* eink display pins
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PIN_EINK_EN (0 + 2) // (0 + 2) Note: this is really just backlight power
|
#define PIN_EINK_EN (32 + 2) // (0 + 2) Note: this is really just backlight power
|
||||||
#define PIN_EINK_CS (0 + 26)
|
#define PIN_EINK_CS (0 + 26)
|
||||||
#define PIN_EINK_BUSY (0 + 4)
|
#define PIN_EINK_BUSY (0 + 4)
|
||||||
#define PIN_EINK_DC (0 + 17)
|
#define PIN_EINK_DC (0 + 17)
|
||||||
|
@ -127,7 +127,7 @@ static const uint8_t SCK = PIN_SPI_SCK;
|
|||||||
* eink display pins
|
* eink display pins
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PIN_EINK_EN (0 + 2) // (0 + 2) Note: this is really just backlight power
|
#define PIN_EINK_EN (32 + 2) // (0 + 2) Note: this is really just backlight power
|
||||||
#define PIN_EINK_CS (0 + 26)
|
#define PIN_EINK_CS (0 + 26)
|
||||||
#define PIN_EINK_BUSY (0 + 4)
|
#define PIN_EINK_BUSY (0 + 4)
|
||||||
#define PIN_EINK_DC (0 + 17)
|
#define PIN_EINK_DC (0 + 17)
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
[env:tlora-v2-1-1.8]
|
[env:tlora-v2-1-1.8]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-lora32-v21
|
board = ttgo-lora32-v21
|
||||||
|
lib_deps =
|
||||||
|
${esp32_base.lib_deps}
|
||||||
|
caveman99/ESP32 Codec2@^1.0.1
|
||||||
|
|
||||||
|
; the RADIOLIB_GODMODE flag can be removed once the next version of RadioLib is released. (>5.5.0)
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags} -D TLORA_V2_1_18 -I variants/tlora_v2_1_18 -D RADIOLIB_GODMODE
|
${esp32_base.build_flags} -D TLORA_V2_1_18 -I variants/tlora_v2_1_18 -D RADIOLIB_GODMODE
|
@ -1,4 +1,4 @@
|
|||||||
[VERSION]
|
[VERSION]
|
||||||
major = 2
|
major = 2
|
||||||
minor = 0
|
minor = 0
|
||||||
build = 7
|
build = 8
|
||||||
|
Loading…
Reference in New Issue
Block a user