mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-09 06:32:06 +00:00
Fix missing IFNDEF and IFDEF in main-esp32.cpp when EXCLUDE_WIFI is defined.
Moved IFDEF HAS_NETWORK to beginning of MQTT:runOnce (to catch when EXCLUDE_WIFI is defined)
This commit is contained in:
parent
1f9f885aca
commit
a5c96a29d5
@ -396,6 +396,7 @@ bool MQTT::wantsLink() const
|
|||||||
|
|
||||||
int32_t MQTT::runOnce()
|
int32_t MQTT::runOnce()
|
||||||
{
|
{
|
||||||
|
#ifdef HAS_NETWORKING
|
||||||
if (!moduleConfig.mqtt.enabled || !(moduleConfig.mqtt.map_reporting_enabled || channels.anyMqttEnabled()))
|
if (!moduleConfig.mqtt.enabled || !(moduleConfig.mqtt.map_reporting_enabled || channels.anyMqttEnabled()))
|
||||||
return disable();
|
return disable();
|
||||||
|
|
||||||
@ -408,7 +409,7 @@ int32_t MQTT::runOnce()
|
|||||||
publishQueuedMessages();
|
publishQueuedMessages();
|
||||||
return 200;
|
return 200;
|
||||||
}
|
}
|
||||||
#ifdef HAS_NETWORKING
|
|
||||||
else if (!pubSub.loop()) {
|
else if (!pubSub.loop()) {
|
||||||
if (!wantConnection)
|
if (!wantConnection)
|
||||||
return 5000; // If we don't want connection now, check again in 5 secs
|
return 5000; // If we don't want connection now, check again in 5 secs
|
||||||
|
@ -24,121 +24,126 @@
|
|||||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !MESHTASTIC_EXCLUDE_BLUETOOTH
|
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !MESHTASTIC_EXCLUDE_BLUETOOTH
|
||||||
void setBluetoothEnable(bool enable)
|
void setBluetoothEnable(bool enable)
|
||||||
{
|
{
|
||||||
|
#ifndef MESHTASTIC_EXCLUDE_WIFI
|
||||||
if (!isWifiAvailable() && config.bluetooth.enabled == true) {
|
if (!isWifiAvailable() && config.bluetooth.enabled == true) {
|
||||||
if (!nimbleBluetooth) {
|
#endif
|
||||||
nimbleBluetooth = new NimbleBluetooth();
|
#ifdef MESHTASTIC_EXCLUDE_WIFI
|
||||||
|
if (config.bluetooth.enabled == true) {
|
||||||
|
#endif
|
||||||
|
if (!nimbleBluetooth) {
|
||||||
|
nimbleBluetooth = new NimbleBluetooth();
|
||||||
|
}
|
||||||
|
if (enable && !nimbleBluetooth->isActive()) {
|
||||||
|
nimbleBluetooth->setup();
|
||||||
|
}
|
||||||
|
// For ESP32, no way to recover from bluetooth shutdown without reboot
|
||||||
|
// BLE advertising automatically stops when MCU enters light-sleep(?)
|
||||||
|
// For deep-sleep, shutdown hardware with nimbleBluetooth->deinit(). Requires reboot to reverse
|
||||||
}
|
}
|
||||||
if (enable && !nimbleBluetooth->isActive()) {
|
|
||||||
nimbleBluetooth->setup();
|
|
||||||
}
|
|
||||||
// For ESP32, no way to recover from bluetooth shutdown without reboot
|
|
||||||
// BLE advertising automatically stops when MCU enters light-sleep(?)
|
|
||||||
// For deep-sleep, shutdown hardware with nimbleBluetooth->deinit(). Requires reboot to reverse
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
void setBluetoothEnable(bool enable) {}
|
void setBluetoothEnable(bool enable) {}
|
||||||
void updateBatteryLevel(uint8_t level) {}
|
void updateBatteryLevel(uint8_t level) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void getMacAddr(uint8_t *dmac)
|
void getMacAddr(uint8_t * dmac)
|
||||||
{
|
{
|
||||||
assert(esp_efuse_mac_get_default(dmac) == ESP_OK);
|
assert(esp_efuse_mac_get_default(dmac) == ESP_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAS_32768HZ
|
#ifdef HAS_32768HZ
|
||||||
#define CALIBRATE_ONE(cali_clk) calibrate_one(cali_clk, #cali_clk)
|
#define CALIBRATE_ONE(cali_clk) calibrate_one(cali_clk, #cali_clk)
|
||||||
|
|
||||||
static uint32_t calibrate_one(rtc_cal_sel_t cal_clk, const char *name)
|
static uint32_t calibrate_one(rtc_cal_sel_t cal_clk, const char *name)
|
||||||
{
|
{
|
||||||
const uint32_t cal_count = 1000;
|
const uint32_t cal_count = 1000;
|
||||||
// const float factor = (1 << 19) * 1000.0f; unused var?
|
// const float factor = (1 << 19) * 1000.0f; unused var?
|
||||||
uint32_t cali_val;
|
uint32_t cali_val;
|
||||||
for (int i = 0; i < 5; ++i) {
|
for (int i = 0; i < 5; ++i) {
|
||||||
cali_val = rtc_clk_cal(cal_clk, cal_count);
|
cali_val = rtc_clk_cal(cal_clk, cal_count);
|
||||||
|
}
|
||||||
|
return cali_val;
|
||||||
}
|
}
|
||||||
return cali_val;
|
|
||||||
}
|
|
||||||
|
|
||||||
void enableSlowCLK()
|
void enableSlowCLK()
|
||||||
{
|
{
|
||||||
rtc_clk_32k_enable(true);
|
rtc_clk_32k_enable(true);
|
||||||
|
|
||||||
CALIBRATE_ONE(RTC_CAL_RTC_MUX);
|
CALIBRATE_ONE(RTC_CAL_RTC_MUX);
|
||||||
uint32_t cal_32k = CALIBRATE_ONE(RTC_CAL_32K_XTAL);
|
uint32_t cal_32k = CALIBRATE_ONE(RTC_CAL_32K_XTAL);
|
||||||
|
|
||||||
if (cal_32k == 0) {
|
if (cal_32k == 0) {
|
||||||
LOG_DEBUG("32K XTAL OSC has not started up\n");
|
LOG_DEBUG("32K XTAL OSC has not started up\n");
|
||||||
} else {
|
} else {
|
||||||
rtc_clk_slow_freq_set(RTC_SLOW_FREQ_32K_XTAL);
|
rtc_clk_slow_freq_set(RTC_SLOW_FREQ_32K_XTAL);
|
||||||
LOG_DEBUG("Switching RTC Source to 32.768Khz succeeded, using 32K XTAL\n");
|
LOG_DEBUG("Switching RTC Source to 32.768Khz succeeded, using 32K XTAL\n");
|
||||||
|
CALIBRATE_ONE(RTC_CAL_RTC_MUX);
|
||||||
|
CALIBRATE_ONE(RTC_CAL_32K_XTAL);
|
||||||
|
}
|
||||||
CALIBRATE_ONE(RTC_CAL_RTC_MUX);
|
CALIBRATE_ONE(RTC_CAL_RTC_MUX);
|
||||||
CALIBRATE_ONE(RTC_CAL_32K_XTAL);
|
CALIBRATE_ONE(RTC_CAL_32K_XTAL);
|
||||||
|
if (rtc_clk_slow_freq_get() != RTC_SLOW_FREQ_32K_XTAL) {
|
||||||
|
LOG_WARN("Failed to switch 32K XTAL RTC source to 32.768Khz !!! \n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
CALIBRATE_ONE(RTC_CAL_RTC_MUX);
|
|
||||||
CALIBRATE_ONE(RTC_CAL_32K_XTAL);
|
|
||||||
if (rtc_clk_slow_freq_get() != RTC_SLOW_FREQ_32K_XTAL) {
|
|
||||||
LOG_WARN("Failed to switch 32K XTAL RTC source to 32.768Khz !!! \n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void esp32Setup()
|
void esp32Setup()
|
||||||
{
|
{
|
||||||
uint32_t seed = esp_random();
|
uint32_t seed = esp_random();
|
||||||
LOG_DEBUG("Setting random seed %u\n", seed);
|
LOG_DEBUG("Setting random seed %u\n", seed);
|
||||||
|
|
||||||
LOG_DEBUG("Total heap: %d\n", ESP.getHeapSize());
|
LOG_DEBUG("Total heap: %d\n", ESP.getHeapSize());
|
||||||
LOG_DEBUG("Free heap: %d\n", ESP.getFreeHeap());
|
LOG_DEBUG("Free heap: %d\n", ESP.getFreeHeap());
|
||||||
LOG_DEBUG("Total PSRAM: %d\n", ESP.getPsramSize());
|
LOG_DEBUG("Total PSRAM: %d\n", ESP.getPsramSize());
|
||||||
LOG_DEBUG("Free PSRAM: %d\n", ESP.getFreePsram());
|
LOG_DEBUG("Free PSRAM: %d\n", ESP.getFreePsram());
|
||||||
|
|
||||||
nvs_stats_t nvs_stats;
|
nvs_stats_t nvs_stats;
|
||||||
auto res = nvs_get_stats(NULL, &nvs_stats);
|
auto res = nvs_get_stats(NULL, &nvs_stats);
|
||||||
assert(res == ESP_OK);
|
assert(res == ESP_OK);
|
||||||
LOG_DEBUG("NVS: UsedEntries %d, FreeEntries %d, AllEntries %d, NameSpaces %d\n", nvs_stats.used_entries,
|
LOG_DEBUG("NVS: UsedEntries %d, FreeEntries %d, AllEntries %d, NameSpaces %d\n", nvs_stats.used_entries,
|
||||||
nvs_stats.free_entries, nvs_stats.total_entries, nvs_stats.namespace_count);
|
nvs_stats.free_entries, nvs_stats.total_entries, nvs_stats.namespace_count);
|
||||||
|
|
||||||
LOG_DEBUG("Setup Preferences in Flash Storage\n");
|
LOG_DEBUG("Setup Preferences in Flash Storage\n");
|
||||||
|
|
||||||
// Create object to store our persistent data
|
// Create object to store our persistent data
|
||||||
Preferences preferences;
|
Preferences preferences;
|
||||||
preferences.begin("meshtastic", false);
|
preferences.begin("meshtastic", false);
|
||||||
|
|
||||||
uint32_t rebootCounter = preferences.getUInt("rebootCounter", 0);
|
uint32_t rebootCounter = preferences.getUInt("rebootCounter", 0);
|
||||||
rebootCounter++;
|
rebootCounter++;
|
||||||
preferences.putUInt("rebootCounter", rebootCounter);
|
preferences.putUInt("rebootCounter", rebootCounter);
|
||||||
preferences.end();
|
preferences.end();
|
||||||
LOG_DEBUG("Number of Device Reboots: %d\n", rebootCounter);
|
LOG_DEBUG("Number of Device Reboots: %d\n", rebootCounter);
|
||||||
#if !MESHTASTIC_EXCLUDE_BLUETOOTH
|
#if !MESHTASTIC_EXCLUDE_BLUETOOTH
|
||||||
String BLEOTA = BleOta::getOtaAppVersion();
|
String BLEOTA = BleOta::getOtaAppVersion();
|
||||||
if (BLEOTA.isEmpty()) {
|
if (BLEOTA.isEmpty()) {
|
||||||
LOG_DEBUG("No OTA firmware available\n");
|
LOG_DEBUG("No OTA firmware available\n");
|
||||||
} else {
|
} else {
|
||||||
LOG_DEBUG("OTA firmware version %s\n", BLEOTA.c_str());
|
LOG_DEBUG("OTA firmware version %s\n", BLEOTA.c_str());
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
LOG_DEBUG("No OTA firmware available\n");
|
LOG_DEBUG("No OTA firmware available\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// enableModemSleep();
|
// enableModemSleep();
|
||||||
|
|
||||||
// Since we are turning on watchdogs rather late in the release schedule, we really don't want to catch any
|
// Since we are turning on watchdogs rather late in the release schedule, we really don't want to catch any
|
||||||
// false positives. The wait-to-sleep timeout for shutting down radios is 30 secs, so pick 45 for now.
|
// false positives. The wait-to-sleep timeout for shutting down radios is 30 secs, so pick 45 for now.
|
||||||
// #define APP_WATCHDOG_SECS 45
|
// #define APP_WATCHDOG_SECS 45
|
||||||
#define APP_WATCHDOG_SECS 90
|
#define APP_WATCHDOG_SECS 90
|
||||||
|
|
||||||
res = esp_task_wdt_init(APP_WATCHDOG_SECS, true);
|
res = esp_task_wdt_init(APP_WATCHDOG_SECS, true);
|
||||||
assert(res == ESP_OK);
|
assert(res == ESP_OK);
|
||||||
|
|
||||||
res = esp_task_wdt_add(NULL);
|
res = esp_task_wdt_add(NULL);
|
||||||
assert(res == ESP_OK);
|
assert(res == ESP_OK);
|
||||||
|
|
||||||
#ifdef HAS_32768HZ
|
#ifdef HAS_32768HZ
|
||||||
enableSlowCLK();
|
enableSlowCLK();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// Turn off for now
|
// Turn off for now
|
||||||
@ -160,76 +165,76 @@ uint32_t axpDebugRead()
|
|||||||
Periodic axpDebugOutput(axpDebugRead);
|
Periodic axpDebugOutput(axpDebugRead);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// loop code specific to ESP32 targets
|
/// loop code specific to ESP32 targets
|
||||||
void esp32Loop()
|
void esp32Loop()
|
||||||
{
|
{
|
||||||
esp_task_wdt_reset(); // service our app level watchdog
|
esp_task_wdt_reset(); // service our app level watchdog
|
||||||
|
|
||||||
// for debug printing
|
// for debug printing
|
||||||
// radio.radioIf.canSleep();
|
// radio.radioIf.canSleep();
|
||||||
}
|
}
|
||||||
|
|
||||||
void cpuDeepSleep(uint32_t msecToWake)
|
void cpuDeepSleep(uint32_t msecToWake)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Some ESP32 IOs have internal pullups or pulldowns, which are enabled by default.
|
Some ESP32 IOs have internal pullups or pulldowns, which are enabled by default.
|
||||||
If an external circuit drives this pin in deep sleep mode, current consumption may
|
If an external circuit drives this pin in deep sleep mode, current consumption may
|
||||||
increase due to current flowing through these pullups and pulldowns.
|
increase due to current flowing through these pullups and pulldowns.
|
||||||
|
|
||||||
To isolate a pin, preventing extra current draw, call rtc_gpio_isolate() function.
|
To isolate a pin, preventing extra current draw, call rtc_gpio_isolate() function.
|
||||||
For example, on ESP32-WROVER module, GPIO12 is pulled up externally.
|
For example, on ESP32-WROVER module, GPIO12 is pulled up externally.
|
||||||
GPIO12 also has an internal pulldown in the ESP32 chip. This means that in deep sleep,
|
GPIO12 also has an internal pulldown in the ESP32 chip. This means that in deep sleep,
|
||||||
some current will flow through these external and internal resistors, increasing deep
|
some current will flow through these external and internal resistors, increasing deep
|
||||||
sleep current above the minimal possible value.
|
sleep current above the minimal possible value.
|
||||||
|
|
||||||
Note: we don't isolate pins that are used for the LORA, LED, i2c, or ST7735 Display for the Chatter2, spi or the wake
|
Note: we don't isolate pins that are used for the LORA, LED, i2c, or ST7735 Display for the Chatter2, spi or the wake
|
||||||
button(s), maybe we should not include any other GPIOs...
|
button(s), maybe we should not include any other GPIOs...
|
||||||
*/
|
*/
|
||||||
#if SOC_RTCIO_HOLD_SUPPORTED
|
#if SOC_RTCIO_HOLD_SUPPORTED
|
||||||
static const uint8_t rtcGpios[] = {/* 0, */ 2,
|
static const uint8_t rtcGpios[] = {/* 0, */ 2,
|
||||||
/* 4, */
|
/* 4, */
|
||||||
#ifndef USE_JTAG
|
#ifndef USE_JTAG
|
||||||
13,
|
13,
|
||||||
/* 14, */ /* 15, */
|
/* 14, */ /* 15, */
|
||||||
#endif
|
#endif
|
||||||
/* 25, */ /* 26, */ /* 27, */
|
/* 25, */ /* 26, */ /* 27, */
|
||||||
/* 32, */ /* 33, */ 34, 35,
|
/* 32, */ /* 33, */ 34, 35,
|
||||||
/* 36, */ 37
|
/* 36, */ 37
|
||||||
/* 38, 39 */};
|
/* 38, 39 */};
|
||||||
|
|
||||||
for (int i = 0; i < sizeof(rtcGpios); i++)
|
for (int i = 0; i < sizeof(rtcGpios); i++)
|
||||||
rtc_gpio_isolate((gpio_num_t)rtcGpios[i]);
|
rtc_gpio_isolate((gpio_num_t)rtcGpios[i]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// FIXME, disable internal rtc pullups/pulldowns on the non isolated pins. for inputs that we aren't using
|
// FIXME, disable internal rtc pullups/pulldowns on the non isolated pins. for inputs that we aren't using
|
||||||
// to detect wake and in normal operation the external part drives them hard.
|
// to detect wake and in normal operation the external part drives them hard.
|
||||||
#ifdef BUTTON_PIN
|
#ifdef BUTTON_PIN
|
||||||
// Only GPIOs which are have RTC functionality can be used in this bit map: 0,2,4,12-15,25-27,32-39.
|
// Only GPIOs which are have RTC functionality can be used in this bit map: 0,2,4,12-15,25-27,32-39.
|
||||||
#if SOC_RTCIO_HOLD_SUPPORTED
|
#if SOC_RTCIO_HOLD_SUPPORTED
|
||||||
uint64_t gpioMask = (1ULL << (config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN));
|
uint64_t gpioMask = (1ULL << (config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BUTTON_NEED_PULLUP
|
#ifdef BUTTON_NEED_PULLUP
|
||||||
gpio_pullup_en((gpio_num_t)BUTTON_PIN);
|
gpio_pullup_en((gpio_num_t)BUTTON_PIN);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Not needed because both of the current boards have external pullups
|
// Not needed because both of the current boards have external pullups
|
||||||
// FIXME change polarity in hw so we can wake on ANY_HIGH instead - that would allow us to use all three buttons (instead of
|
// FIXME change polarity in hw so we can wake on ANY_HIGH instead - that would allow us to use all three buttons (instead
|
||||||
// just the first) gpio_pullup_en((gpio_num_t)BUTTON_PIN);
|
// of just the first) gpio_pullup_en((gpio_num_t)BUTTON_PIN);
|
||||||
|
|
||||||
#if SOC_PM_SUPPORT_EXT_WAKEUP
|
#if SOC_PM_SUPPORT_EXT_WAKEUP
|
||||||
#ifdef CONFIG_IDF_TARGET_ESP32
|
#ifdef CONFIG_IDF_TARGET_ESP32
|
||||||
// ESP_EXT1_WAKEUP_ALL_LOW has been deprecated since esp-idf v5.4 for any other target.
|
// ESP_EXT1_WAKEUP_ALL_LOW has been deprecated since esp-idf v5.4 for any other target.
|
||||||
esp_sleep_enable_ext1_wakeup(gpioMask, ESP_EXT1_WAKEUP_ALL_LOW);
|
esp_sleep_enable_ext1_wakeup(gpioMask, ESP_EXT1_WAKEUP_ALL_LOW);
|
||||||
#else
|
#else
|
||||||
esp_sleep_enable_ext1_wakeup(gpioMask, ESP_EXT1_WAKEUP_ANY_LOW);
|
esp_sleep_enable_ext1_wakeup(gpioMask, ESP_EXT1_WAKEUP_ANY_LOW);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// We want RTC peripherals to stay on
|
// We want RTC peripherals to stay on
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
||||||
|
|
||||||
esp_sleep_enable_timer_wakeup(msecToWake * 1000ULL); // call expects usecs
|
esp_sleep_enable_timer_wakeup(msecToWake * 1000ULL); // call expects usecs
|
||||||
esp_deep_sleep_start(); // TBD mA sleep current (battery)
|
esp_deep_sleep_start(); // TBD mA sleep current (battery)
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user