From ed96321406921dbcef173d00fc9bb7c1f22af66f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Fri, 31 Mar 2023 10:41:25 +0200 Subject: [PATCH 01/15] fix newline detection in error printing Our code check for newline in the format string, not in the parameter --- src/mesh/RadioInterface.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesh/RadioInterface.cpp b/src/mesh/RadioInterface.cpp index 063ae5374..0d53dc887 100644 --- a/src/mesh/RadioInterface.cpp +++ b/src/mesh/RadioInterface.cpp @@ -281,8 +281,8 @@ void printPacket(const char *prefix, const meshtastic_MeshPacket *p) if (p->priority != 0) out += DEBUG_PORT.mt_sprintf(" priority=%d", p->priority); - out += ")\n"; - LOG_DEBUG("%s", out.c_str()); + out += ")"; + LOG_DEBUG("%s\n", out.c_str()); } RadioInterface::RadioInterface() From 713b5fbe96991dcd897d033222c914d94bfca893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Fri, 31 Mar 2023 12:51:26 +0200 Subject: [PATCH 02/15] try to update trunk to latest version. --- .trunk/configs/.flake8 | 3 +++ .trunk/configs/.isort.cfg | 2 ++ .trunk/configs/.yamllint.yaml | 10 ++++++++++ .trunk/configs/ruff.toml | 5 +++++ .trunk/trunk.yaml | 24 +++++++++++++++++++----- 5 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 .trunk/configs/.flake8 create mode 100644 .trunk/configs/.isort.cfg create mode 100644 .trunk/configs/.yamllint.yaml create mode 100644 .trunk/configs/ruff.toml diff --git a/.trunk/configs/.flake8 b/.trunk/configs/.flake8 new file mode 100644 index 000000000..5ba6e2ffe --- /dev/null +++ b/.trunk/configs/.flake8 @@ -0,0 +1,3 @@ +# Autoformatter friendly flake8 config (all formatting rules disabled) +[flake8] +extend-ignore = D1, D2, E1, E2, E3, E501, W1, W2, W3, W5 diff --git a/.trunk/configs/.isort.cfg b/.trunk/configs/.isort.cfg new file mode 100644 index 000000000..b9fb3f3e8 --- /dev/null +++ b/.trunk/configs/.isort.cfg @@ -0,0 +1,2 @@ +[settings] +profile=black diff --git a/.trunk/configs/.yamllint.yaml b/.trunk/configs/.yamllint.yaml new file mode 100644 index 000000000..4d444662d --- /dev/null +++ b/.trunk/configs/.yamllint.yaml @@ -0,0 +1,10 @@ +rules: + quoted-strings: + required: only-when-needed + extra-allowed: ["{|}"] + empty-values: + forbid-in-block-mappings: true + forbid-in-flow-mappings: true + key-duplicates: {} + octal-values: + forbid-implicit-octal: true diff --git a/.trunk/configs/ruff.toml b/.trunk/configs/ruff.toml new file mode 100644 index 000000000..346b1d9aa --- /dev/null +++ b/.trunk/configs/ruff.toml @@ -0,0 +1,5 @@ +# Generic, formatter-friendly config. +select = ["B", "D3", "D4", "E", "F"] + +# Never enforce `E501` (line length violations). This should be handled by formatters. +ignore = ["E501"] diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 70acfd11b..519a9181e 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -1,18 +1,31 @@ version: 0.1 cli: - version: 1.3.1 + version: 1.7.0 plugins: sources: - id: trunk - ref: v0.0.8 + ref: v0.0.14 uri: https://github.com/trunk-io/plugins lint: enabled: + - ruff@0.0.260 + - yamllint@1.30.0 + - isort@5.12.0 + - markdownlint@0.33.0 + - oxipng@8.0.0 + - svgo@3.0.2 + - actionlint@1.6.23 + - flake8@6.0.0 + - hadolint@2.12.0 + - shfmt@3.5.0 + - shellcheck@0.9.0 + - black@23.3.0 - git-diff-check - - gitleaks@8.15.2 + - gitleaks@8.16.2 - clang-format@14.0.0 - - prettier@2.8.3 + - prettier@2.8.7 disabled: + - taplo@0.7.0 - shellcheck@0.9.0 - shfmt@3.5.0 - oxipng@8.0.0 @@ -22,7 +35,8 @@ lint: - svgo@3.0.2 runtimes: enabled: - - go@1.18.3 + - python@3.10.8 + - go@1.19.5 - node@18.12.1 actions: disabled: From 6bf538e26fa9ee25ece0982079f129951c759a7b Mon Sep 17 00:00:00 2001 From: Vladislav Osmanov <7123463+osmanovv@users.noreply.github.com> Date: Fri, 31 Mar 2023 13:43:42 +0300 Subject: [PATCH 03/15] `EXT_PWR_DETECT` pin to detect external power source for boards without the power management chip --- src/Power.cpp | 10 ++++++++++ src/PowerFSM.cpp | 3 +++ variants/diy/v1/variant.h | 1 + 3 files changed, 14 insertions(+) diff --git a/src/Power.cpp b/src/Power.cpp index d6dbd05d9..3a3ceedab 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -160,8 +160,18 @@ class AnalogBatteryLevel : public HasBatteryLevel /// If we see a battery voltage higher than physics allows - assume charger is pumping /// in power + /// On some boards we don't have the power management chip (like AXPxxxx) + /// so we use EXT_PWR_DETECT GPIO pin to detect external power source virtual bool isVbusIn() override { +#ifdef EXT_PWR_DETECT + // if external powered that pin will be pulled up + if (digitalRead(EXT_PWR_DETECT) == HIGH) { + return true; + } + // if it's not HIGH - check the battery +#endif + return getBattVoltage() > chargingVolt; } diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 73fb7e87b..8d9304e8c 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -26,6 +26,9 @@ static bool isPowered() 1) If we're powered up and there's no battery, we must be getting power externally. (because we'd be dead otherwise) 2) If we detect USB power from the power management chip, we must be getting power externally. + + 3) On some boards we don't have the power management chip (like AXPxxxx) so we use EXT_PWR_DETECT GPIO pin to detect external power source + (see `isVbusIn()` in `Power.cpp`) */ return !isPowerSavingMode && powerStatus && (!powerStatus->getHasBattery() || powerStatus->getHasUSB()); } diff --git a/variants/diy/v1/variant.h b/variants/diy/v1/variant.h index 712a88091..541edfa91 100644 --- a/variants/diy/v1/variant.h +++ b/variants/diy/v1/variant.h @@ -12,6 +12,7 @@ #define BUTTON_PIN 39 // The middle button GPIO on the T-Beam #define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage #define ADC_MULTIPLIER 1.85 // (R1 = 470k, R2 = 680k) +#define EXT_PWR_DETECT 4 // Pin to detect connected external power source for LILYGO® TTGO T-Energy T18 and other DIY boards #define EXT_NOTIFY_OUT 12 // Overridden default pin to use for Ext Notify Module (#975). #define LED_PIN 2 // add status LED (compatible with core-pcb and DIY targets) From fbc3b2beee7bb80243b2c2a4212b38dac802ae81 Mon Sep 17 00:00:00 2001 From: Vladislav Osmanov <7123463+osmanovv@users.noreply.github.com> Date: Fri, 31 Mar 2023 14:42:50 +0300 Subject: [PATCH 04/15] missing `EXT_PWR_DETECT` pinMode definition --- src/Power.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Power.cpp b/src/Power.cpp index 3a3ceedab..179e4533a 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -218,6 +218,10 @@ Power::Power() : OSThread("Power") bool Power::analogInit() { +#ifdef EXT_PWR_DETECT + pinMode(EXT_PWR_DETECT, INPUT); +#endif + #ifdef BATTERY_PIN LOG_DEBUG("Using analog input %d for battery level\n", BATTERY_PIN); From 13986112766765e3e5d853cf01aa646803a6d99c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Sun, 2 Apr 2023 10:34:31 +0200 Subject: [PATCH 05/15] trunk fmt --- src/Power.cpp | 10 +++++----- src/PowerFSM.cpp | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index 179e4533a..6c4851c11 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -165,11 +165,11 @@ class AnalogBatteryLevel : public HasBatteryLevel virtual bool isVbusIn() override { #ifdef EXT_PWR_DETECT - // if external powered that pin will be pulled up - if (digitalRead(EXT_PWR_DETECT) == HIGH) { - return true; - } - // if it's not HIGH - check the battery + // if external powered that pin will be pulled up + if (digitalRead(EXT_PWR_DETECT) == HIGH) { + return true; + } + // if it's not HIGH - check the battery #endif return getBattVoltage() > chargingVolt; diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 8d9304e8c..518c94d92 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -27,8 +27,8 @@ static bool isPowered() 2) If we detect USB power from the power management chip, we must be getting power externally. - 3) On some boards we don't have the power management chip (like AXPxxxx) so we use EXT_PWR_DETECT GPIO pin to detect external power source - (see `isVbusIn()` in `Power.cpp`) + 3) On some boards we don't have the power management chip (like AXPxxxx) so we use EXT_PWR_DETECT GPIO pin to detect + external power source (see `isVbusIn()` in `Power.cpp`) */ return !isPowerSavingMode && powerStatus && (!powerStatus->getHasBattery() || powerStatus->getHasUSB()); } From 294771cb44d07e43a0198f7fc83707cab5ff0291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Sun, 2 Apr 2023 15:04:50 +0200 Subject: [PATCH 06/15] fix -705 error on SX128x and some SX126x --- platformio.ini | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index aaebceedc..d8c55fb78 100644 --- a/platformio.ini +++ b/platformio.ini @@ -66,7 +66,9 @@ lib_deps = https://github.com/meshtastic/ArduinoThread.git#72921ac222eed6f526ba1682023cee290d9aa1b3 nanopb/Nanopb@^0.4.7 erriez/ErriezCRC32@^1.0.1 - jgromes/RadioLib@^5.7.0 + ; temp: do this till > 5.7.0 release to keep (some) SX1262 and SX1280 working - resolves -705 error during init + https://github.com/jgromes/RadioLib.git#45c5859338590b7eede23cb2f95284c3fb0cf08e + ; jgromes/RadioLib@^5.7.0 ; Used for the code analysis in PIO Home / Inspect check_tool = cppcheck From b4bcae98cd290e0a027940ce7d68623fb64a1edf Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 2 Apr 2023 08:33:38 -0500 Subject: [PATCH 07/15] Fixed invalid channel name text (#2400) --- src/mesh/Channels.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mesh/Channels.cpp b/src/mesh/Channels.cpp index 1b090a28f..5e2cb41ba 100644 --- a/src/mesh/Channels.cpp +++ b/src/mesh/Channels.cpp @@ -260,6 +260,9 @@ const char *Channels::getName(size_t chIndex) case meshtastic_Config_LoRaConfig_ModemPreset_LONG_FAST: channelName = "LongFast"; break; + case meshtastic_Config_LoRaConfig_ModemPreset_LONG_MODERATE: + channelName = "LongMod"; + break; case meshtastic_Config_LoRaConfig_ModemPreset_VERY_LONG_SLOW: channelName = "VLongSlow"; break; From 71479a6b17f1afc0d2e2184288f6b1890e6f8e4a Mon Sep 17 00:00:00 2001 From: Manuel Verch Date: Sun, 2 Apr 2023 21:28:12 +0200 Subject: [PATCH 08/15] Fix for device display issues --- src/PowerFSM.cpp | 19 ++++++++++++++++--- src/graphics/Screen.cpp | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 518c94d92..48a94444b 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -172,7 +172,13 @@ static void powerEnter() } else { screen->setOn(true); setBluetoothEnable(true); - screen->print("Powered...\n"); + // within enter() the function getState() returns the state we came from + if (strcmp(powerFSM.getState()->name, "BOOT") != 0 && + strcmp(powerFSM.getState()->name, "POWER") != 0 && + strcmp(powerFSM.getState()->name, "DARK") != 0) + { + screen->print("Powered...\n"); + } } } @@ -189,7 +195,8 @@ static void powerExit() { screen->setOn(true); setBluetoothEnable(true); - screen->print("Unpowered...\n"); + if (!isPowered()) + screen->print("Unpowered...\n"); } static void onEnter() @@ -249,7 +256,7 @@ void PowerFSM_setup() // Handle press events - note: we ignore button presses when in API mode powerFSM.add_transition(&stateLS, &stateON, EVENT_PRESS, NULL, "Press"); powerFSM.add_transition(&stateNB, &stateON, EVENT_PRESS, NULL, "Press"); - powerFSM.add_transition(&stateDARK, &stateON, EVENT_PRESS, NULL, "Press"); + powerFSM.add_transition(&stateDARK, isPowered() ? &statePOWER : &stateON, EVENT_PRESS, NULL, "Press"); powerFSM.add_transition(&statePOWER, &statePOWER, EVENT_PRESS, screenPress, "Press"); powerFSM.add_transition(&stateON, &stateON, EVENT_PRESS, screenPress, "Press"); // reenter On to restart our timers powerFSM.add_transition(&stateSERIAL, &stateSERIAL, EVENT_PRESS, screenPress, @@ -322,6 +329,12 @@ void PowerFSM_setup() powerFSM.add_timed_transition(&stateON, &stateDARK, getConfiguredOrDefaultMs(config.display.screen_on_secs, default_screen_on_secs), NULL, "Screen-on timeout"); + powerFSM.add_timed_transition(&statePOWER, &stateDARK, + getConfiguredOrDefaultMs(config.display.screen_on_secs, default_screen_on_secs), NULL, + "Screen-on timeout"); + powerFSM.add_timed_transition(&stateDARK, &stateDARK, + getConfiguredOrDefaultMs(config.display.screen_on_secs, default_screen_on_secs), NULL, + "Screen-on timeout"); #ifdef ARCH_ESP32 State *lowPowerState = &stateLS; diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index b5a74b386..482e76450 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -1206,7 +1206,7 @@ void Screen::setFrames() LOG_DEBUG("Total frame count: %d\n", totalFrameCount); // We don't show the node info our our node (if we have it yet - we should) - size_t numnodes = nodeStatus->getNumTotal(); + size_t numnodes = nodeDB.getNumNodes(); if (numnodes > 0) numnodes--; From 923969800438304db6a78ae004ad62ba357a3c96 Mon Sep 17 00:00:00 2001 From: Manuel Verch Date: Mon, 3 Apr 2023 08:52:21 +0200 Subject: [PATCH 09/15] make trunk happy --- src/PowerFSM.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 48a94444b..1c3441769 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -173,10 +173,8 @@ static void powerEnter() screen->setOn(true); setBluetoothEnable(true); // within enter() the function getState() returns the state we came from - if (strcmp(powerFSM.getState()->name, "BOOT") != 0 && - strcmp(powerFSM.getState()->name, "POWER") != 0 && - strcmp(powerFSM.getState()->name, "DARK") != 0) - { + if (strcmp(powerFSM.getState()->name, "BOOT") != 0 && strcmp(powerFSM.getState()->name, "POWER") != 0 && + strcmp(powerFSM.getState()->name, "DARK") != 0) { screen->print("Powered...\n"); } } From 918b509be8c2730489feac888981187facb694c9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 10:45:37 -0500 Subject: [PATCH 10/15] [create-pull-request] automated change (#2408) Co-authored-by: thebentern --- protobufs | 2 +- src/mesh/generated/meshtastic/deviceonly.pb.h | 2 +- src/mesh/generated/meshtastic/localonly.pb.h | 2 +- src/mesh/generated/meshtastic/module_config.pb.h | 14 +++++++++----- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/protobufs b/protobufs index ef83ba1d9..641d7c3a4 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit ef83ba1d913941e8cb9a5a5973009c37765c46fa +Subproject commit 641d7c3a460de9cc580bc2b8a0812e8b9d417b05 diff --git a/src/mesh/generated/meshtastic/deviceonly.pb.h b/src/mesh/generated/meshtastic/deviceonly.pb.h index 40523a07a..6788bd426 100644 --- a/src/mesh/generated/meshtastic/deviceonly.pb.h +++ b/src/mesh/generated/meshtastic/deviceonly.pb.h @@ -188,7 +188,7 @@ extern const pb_msgdesc_t meshtastic_OEMStore_msg; /* Maximum encoded size of messages (where known) */ #define meshtastic_ChannelFile_size 638 #define meshtastic_DeviceState_size 22040 -#define meshtastic_OEMStore_size 3022 +#define meshtastic_OEMStore_size 3024 #ifdef __cplusplus } /* extern "C" */ diff --git a/src/mesh/generated/meshtastic/localonly.pb.h b/src/mesh/generated/meshtastic/localonly.pb.h index cf97544e0..23865f47d 100644 --- a/src/mesh/generated/meshtastic/localonly.pb.h +++ b/src/mesh/generated/meshtastic/localonly.pb.h @@ -157,7 +157,7 @@ extern const pb_msgdesc_t meshtastic_LocalModuleConfig_msg; /* Maximum encoded size of messages (where known) */ #define meshtastic_LocalConfig_size 456 -#define meshtastic_LocalModuleConfig_size 420 +#define meshtastic_LocalModuleConfig_size 422 #ifdef __cplusplus } /* extern "C" */ diff --git a/src/mesh/generated/meshtastic/module_config.pb.h b/src/mesh/generated/meshtastic/module_config.pb.h index 82d8e8d04..f94114e15 100644 --- a/src/mesh/generated/meshtastic/module_config.pb.h +++ b/src/mesh/generated/meshtastic/module_config.pb.h @@ -96,6 +96,8 @@ typedef struct _meshtastic_ModuleConfig_MQTTConfig { bool encryption_enabled; /* Whether to send / consume json packets on MQTT */ bool json_enabled; + /* If true, we attempt to establish a secure connection using TLS */ + bool tls_enabled; } meshtastic_ModuleConfig_MQTTConfig; /* RemoteHardwareModule Config */ @@ -323,7 +325,7 @@ extern "C" { /* Initializer values for message structs */ #define meshtastic_ModuleConfig_init_default {0, {meshtastic_ModuleConfig_MQTTConfig_init_default}} -#define meshtastic_ModuleConfig_MQTTConfig_init_default {0, "", "", "", 0, 0} +#define meshtastic_ModuleConfig_MQTTConfig_init_default {0, "", "", "", 0, 0, 0} #define meshtastic_ModuleConfig_RemoteHardwareConfig_init_default {0} #define meshtastic_ModuleConfig_AudioConfig_init_default {0, 0, _meshtastic_ModuleConfig_AudioConfig_Audio_Baud_MIN, 0, 0, 0, 0} #define meshtastic_ModuleConfig_SerialConfig_init_default {0, 0, 0, 0, _meshtastic_ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _meshtastic_ModuleConfig_SerialConfig_Serial_Mode_MIN} @@ -333,7 +335,7 @@ extern "C" { #define meshtastic_ModuleConfig_TelemetryConfig_init_default {0, 0, 0, 0, 0, 0, 0} #define meshtastic_ModuleConfig_CannedMessageConfig_init_default {0, 0, 0, 0, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0} #define meshtastic_ModuleConfig_init_zero {0, {meshtastic_ModuleConfig_MQTTConfig_init_zero}} -#define meshtastic_ModuleConfig_MQTTConfig_init_zero {0, "", "", "", 0, 0} +#define meshtastic_ModuleConfig_MQTTConfig_init_zero {0, "", "", "", 0, 0, 0} #define meshtastic_ModuleConfig_RemoteHardwareConfig_init_zero {0} #define meshtastic_ModuleConfig_AudioConfig_init_zero {0, 0, _meshtastic_ModuleConfig_AudioConfig_Audio_Baud_MIN, 0, 0, 0, 0} #define meshtastic_ModuleConfig_SerialConfig_init_zero {0, 0, 0, 0, _meshtastic_ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _meshtastic_ModuleConfig_SerialConfig_Serial_Mode_MIN} @@ -350,6 +352,7 @@ extern "C" { #define meshtastic_ModuleConfig_MQTTConfig_password_tag 4 #define meshtastic_ModuleConfig_MQTTConfig_encryption_enabled_tag 5 #define meshtastic_ModuleConfig_MQTTConfig_json_enabled_tag 6 +#define meshtastic_ModuleConfig_MQTTConfig_tls_enabled_tag 7 #define meshtastic_ModuleConfig_RemoteHardwareConfig_enabled_tag 1 #define meshtastic_ModuleConfig_AudioConfig_codec2_enabled_tag 1 #define meshtastic_ModuleConfig_AudioConfig_ptt_pin_tag 2 @@ -444,7 +447,8 @@ X(a, STATIC, SINGULAR, STRING, address, 2) \ X(a, STATIC, SINGULAR, STRING, username, 3) \ X(a, STATIC, SINGULAR, STRING, password, 4) \ X(a, STATIC, SINGULAR, BOOL, encryption_enabled, 5) \ -X(a, STATIC, SINGULAR, BOOL, json_enabled, 6) +X(a, STATIC, SINGULAR, BOOL, json_enabled, 6) \ +X(a, STATIC, SINGULAR, BOOL, tls_enabled, 7) #define meshtastic_ModuleConfig_MQTTConfig_CALLBACK NULL #define meshtastic_ModuleConfig_MQTTConfig_DEFAULT NULL @@ -562,13 +566,13 @@ extern const pb_msgdesc_t meshtastic_ModuleConfig_CannedMessageConfig_msg; #define meshtastic_ModuleConfig_AudioConfig_size 19 #define meshtastic_ModuleConfig_CannedMessageConfig_size 49 #define meshtastic_ModuleConfig_ExternalNotificationConfig_size 40 -#define meshtastic_ModuleConfig_MQTTConfig_size 201 +#define meshtastic_ModuleConfig_MQTTConfig_size 203 #define meshtastic_ModuleConfig_RangeTestConfig_size 10 #define meshtastic_ModuleConfig_RemoteHardwareConfig_size 2 #define meshtastic_ModuleConfig_SerialConfig_size 26 #define meshtastic_ModuleConfig_StoreForwardConfig_size 22 #define meshtastic_ModuleConfig_TelemetryConfig_size 26 -#define meshtastic_ModuleConfig_size 204 +#define meshtastic_ModuleConfig_size 206 #ifdef __cplusplus } /* extern "C" */ From 038ff0f6cb7ef0816de363f396ef5dff9f3bb88a Mon Sep 17 00:00:00 2001 From: Manuel Verch Date: Sun, 2 Apr 2023 21:28:12 +0200 Subject: [PATCH 11/15] Fix for device display issues --- src/PowerFSM.cpp | 19 ++++++++++++++++--- src/graphics/Screen.cpp | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 518c94d92..48a94444b 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -172,7 +172,13 @@ static void powerEnter() } else { screen->setOn(true); setBluetoothEnable(true); - screen->print("Powered...\n"); + // within enter() the function getState() returns the state we came from + if (strcmp(powerFSM.getState()->name, "BOOT") != 0 && + strcmp(powerFSM.getState()->name, "POWER") != 0 && + strcmp(powerFSM.getState()->name, "DARK") != 0) + { + screen->print("Powered...\n"); + } } } @@ -189,7 +195,8 @@ static void powerExit() { screen->setOn(true); setBluetoothEnable(true); - screen->print("Unpowered...\n"); + if (!isPowered()) + screen->print("Unpowered...\n"); } static void onEnter() @@ -249,7 +256,7 @@ void PowerFSM_setup() // Handle press events - note: we ignore button presses when in API mode powerFSM.add_transition(&stateLS, &stateON, EVENT_PRESS, NULL, "Press"); powerFSM.add_transition(&stateNB, &stateON, EVENT_PRESS, NULL, "Press"); - powerFSM.add_transition(&stateDARK, &stateON, EVENT_PRESS, NULL, "Press"); + powerFSM.add_transition(&stateDARK, isPowered() ? &statePOWER : &stateON, EVENT_PRESS, NULL, "Press"); powerFSM.add_transition(&statePOWER, &statePOWER, EVENT_PRESS, screenPress, "Press"); powerFSM.add_transition(&stateON, &stateON, EVENT_PRESS, screenPress, "Press"); // reenter On to restart our timers powerFSM.add_transition(&stateSERIAL, &stateSERIAL, EVENT_PRESS, screenPress, @@ -322,6 +329,12 @@ void PowerFSM_setup() powerFSM.add_timed_transition(&stateON, &stateDARK, getConfiguredOrDefaultMs(config.display.screen_on_secs, default_screen_on_secs), NULL, "Screen-on timeout"); + powerFSM.add_timed_transition(&statePOWER, &stateDARK, + getConfiguredOrDefaultMs(config.display.screen_on_secs, default_screen_on_secs), NULL, + "Screen-on timeout"); + powerFSM.add_timed_transition(&stateDARK, &stateDARK, + getConfiguredOrDefaultMs(config.display.screen_on_secs, default_screen_on_secs), NULL, + "Screen-on timeout"); #ifdef ARCH_ESP32 State *lowPowerState = &stateLS; diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index b5a74b386..482e76450 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -1206,7 +1206,7 @@ void Screen::setFrames() LOG_DEBUG("Total frame count: %d\n", totalFrameCount); // We don't show the node info our our node (if we have it yet - we should) - size_t numnodes = nodeStatus->getNumTotal(); + size_t numnodes = nodeDB.getNumNodes(); if (numnodes > 0) numnodes--; From 9a42861766f9db7f0ffc863e700b8e775a81385a Mon Sep 17 00:00:00 2001 From: Manuel Verch Date: Mon, 3 Apr 2023 08:52:21 +0200 Subject: [PATCH 12/15] make trunk happy --- src/PowerFSM.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 48a94444b..1c3441769 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -173,10 +173,8 @@ static void powerEnter() screen->setOn(true); setBluetoothEnable(true); // within enter() the function getState() returns the state we came from - if (strcmp(powerFSM.getState()->name, "BOOT") != 0 && - strcmp(powerFSM.getState()->name, "POWER") != 0 && - strcmp(powerFSM.getState()->name, "DARK") != 0) - { + if (strcmp(powerFSM.getState()->name, "BOOT") != 0 && strcmp(powerFSM.getState()->name, "POWER") != 0 && + strcmp(powerFSM.getState()->name, "DARK") != 0) { screen->print("Powered...\n"); } } From 3c0817340a722149d30b5fa4e0583987085b46a8 Mon Sep 17 00:00:00 2001 From: Manuel Verch Date: Mon, 3 Apr 2023 19:45:12 +0200 Subject: [PATCH 13/15] Fixed blank screen button issue and SX126x wakeup --- src/PowerFSM.cpp | 24 +++++++++--------------- src/sleep.cpp | 5 ++++- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 1c3441769..66dfdc9fd 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -93,24 +93,18 @@ static void lsIdle() powerFSM.trigger(EVENT_SERIAL_CONNECTED); break; + case ESP_SLEEP_WAKEUP_GPIO: + // GPIO of BUTTON_PIN (if available) triggered the wakeup + powerFSM.trigger(EVENT_PRESS); + break; + default: - // We woke for some other reason (button press, device interrupt) + // We woke for some other reason (device interrupt) // uint64_t status = esp_sleep_get_ext1_wakeup_status(); LOG_INFO("wakeCause2 %d\n", wakeCause2); - -#ifdef BUTTON_PIN - bool pressed = !digitalRead(BUTTON_PIN); -#else - bool pressed = false; -#endif - if (pressed) // If we woke because of press, instead generate a PRESS event. - { - powerFSM.trigger(EVENT_PRESS); - } else { - // Otherwise let the NB state handle the IRQ (and that state will handle stuff like IRQs etc) - // we lie and say "wake timer" because the interrupt will be handled by the regular IRQ code - powerFSM.trigger(EVENT_WAKE_TIMER); - } + // Let the NB state handle the IRQ (and that state will handle stuff like IRQs etc) + // we lie and say "wake timer" because the interrupt will be handled by the regular IRQ code + powerFSM.trigger(EVENT_WAKE_TIMER); break; } } else { diff --git a/src/sleep.cpp b/src/sleep.cpp index 8b6346038..e3f042a27 100644 --- a/src/sleep.cpp +++ b/src/sleep.cpp @@ -301,7 +301,10 @@ esp_sleep_wakeup_cause_t doLightSleep(uint64_t sleepMsec) // FIXME, use a more r // assert(esp_sleep_enable_uart_wakeup(0) == ESP_OK); #endif #ifdef BUTTON_PIN - gpio_wakeup_enable((gpio_num_t)BUTTON_PIN, GPIO_INTR_LOW_LEVEL); // when user presses, this button goes low + esp_sleep_enable_ext0_wakeup((gpio_num_t)BUTTON_PIN, LOW); // when user presses, this button goes low +#endif +#if defined(LORA_DIO1) && (LORA_DIO1 != RADIOLIB_NC) + gpio_wakeup_enable((gpio_num_t)LORA_DIO1, GPIO_INTR_HIGH_LEVEL); // SX126x/SX128x interrupt, active high #endif #ifdef RF95_IRQ gpio_wakeup_enable((gpio_num_t)RF95_IRQ, GPIO_INTR_HIGH_LEVEL); // RF95 interrupt, active high From 23e6bc32c08670b8655c2523cfb187907b1d0604 Mon Sep 17 00:00:00 2001 From: Manuel Verch Date: Mon, 3 Apr 2023 20:14:57 +0200 Subject: [PATCH 14/15] make cpptools happy --- src/PowerFSM.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 66dfdc9fd..2139d9d8f 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -69,11 +69,11 @@ static void lsIdle() // Do we have more sleeping to do? if (secsSlept < config.power.ls_secs) { - // Briefly come out of sleep long enough to blink the led once every few seconds - uint32_t sleepTime = 30; - // If some other service would stall sleep, don't let sleep happen yet if (doPreflightSleep()) { + // Briefly come out of sleep long enough to blink the led once every few seconds + uint32_t sleepTime = 30; + setLed(false); // Never leave led on while in light sleep esp_sleep_source_t wakeCause2 = doLightSleep(sleepTime * 1000LL); From b1937e03ace9268b6c4c93b43e0dfdcb9090d9cc Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Mon, 3 Apr 2023 23:01:05 +0200 Subject: [PATCH 15/15] fix: store NodeDB persistently (#2405) * fix for 2404 * fix for 2404 * removed superfluous saveToDisk in reloadOwner() --- src/mesh/MeshService.cpp | 1 - src/mesh/NodeDB.cpp | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/mesh/MeshService.cpp b/src/mesh/MeshService.cpp index 6a49294cd..3b9ae26d2 100644 --- a/src/mesh/MeshService.cpp +++ b/src/mesh/MeshService.cpp @@ -125,7 +125,6 @@ void MeshService::reloadOwner(bool shouldSave) // update everyone else and save to disk if (nodeInfoModule && shouldSave) { nodeInfoModule->sendOurNodeInfo(); - nodeDB.saveToDisk(SEGMENT_DEVICESTATE); } } diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index c620295c2..c7a42cb09 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -710,9 +710,8 @@ void NodeDB::updateUser(uint32_t nodeId, const meshtastic_User &p) powerFSM.trigger(EVENT_NODEDB_UPDATED); notifyObservers(true); // Force an update whether or not our node counts have changed - // Not really needed - we will save anyways when we go to sleep // We just changed something important about the user, store our DB - // saveToDisk(); + saveToDisk(SEGMENT_DEVICESTATE); } }