From 71479a6b17f1afc0d2e2184288f6b1890e6f8e4a Mon Sep 17 00:00:00 2001 From: Manuel Verch Date: Sun, 2 Apr 2023 21:28:12 +0200 Subject: [PATCH 1/8] 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 2/8] 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 3/8] [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 4/8] 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 5/8] 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 6/8] 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 7/8] 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 8/8] 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); } }