From 460b6f86bb8e2f76215439b25efea550901eb0f3 Mon Sep 17 00:00:00 2001 From: acidburns Date: Fri, 23 Jan 2026 17:32:40 +0100 Subject: [PATCH] Improve power saving and payload safety --- src/main.cpp | 5 ++++- src/power_manager.cpp | 1 + src/test_mode.cpp | 5 ++++- src/wifi_manager.cpp | 7 ++++++- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index dfa06b8..5e54a96 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -134,7 +134,10 @@ static void receiver_loop() { if (lora_receive(pkt, 0) && pkt.protocol_version == PROTOCOL_VERSION && pkt.payload_type == PayloadType::MeterData) { uint8_t decompressed[256]; size_t decompressed_len = 0; - if (decompressBuffer(pkt.payload, pkt.payload_len, decompressed, sizeof(decompressed), decompressed_len)) { + if (decompressBuffer(pkt.payload, pkt.payload_len, decompressed, sizeof(decompressed) - 1, decompressed_len)) { + if (decompressed_len >= sizeof(decompressed)) { + return; + } decompressed[decompressed_len] = '\0'; MeterData data = {}; if (jsonToMeterData(String(reinterpret_cast(decompressed)), data)) { diff --git a/src/power_manager.cpp b/src/power_manager.cpp index 9d4701c..adc9885 100644 --- a/src/power_manager.cpp +++ b/src/power_manager.cpp @@ -17,6 +17,7 @@ void power_sender_init() { } void power_receiver_init() { + btStop(); analogReadResolution(12); pinMode(PIN_BAT_ADC, INPUT); } diff --git a/src/test_mode.cpp b/src/test_mode.cpp index 8710338..1cc89f6 100644 --- a/src/test_mode.cpp +++ b/src/test_mode.cpp @@ -95,7 +95,10 @@ void test_receiver_loop(SenderStatus *statuses, uint8_t count, uint16_t self_sho uint8_t decompressed[160]; size_t decompressed_len = 0; - if (!decompressBuffer(pkt.payload, pkt.payload_len, decompressed, sizeof(decompressed), decompressed_len)) { + if (!decompressBuffer(pkt.payload, pkt.payload_len, decompressed, sizeof(decompressed) - 1, decompressed_len)) { + return; + } + if (decompressed_len >= sizeof(decompressed)) { return; } decompressed[decompressed_len] = '\0'; diff --git a/src/wifi_manager.cpp b/src/wifi_manager.cpp index d6bd162..5d5494a 100644 --- a/src/wifi_manager.cpp +++ b/src/wifi_manager.cpp @@ -1,5 +1,6 @@ #include "wifi_manager.h" #include +#include static Preferences prefs; @@ -43,7 +44,11 @@ bool wifi_connect_sta(const WifiMqttConfig &config, uint32_t timeout_ms) { while (WiFi.status() != WL_CONNECTED && millis() - start < timeout_ms) { delay(200); } - return WiFi.status() == WL_CONNECTED; + bool connected = WiFi.status() == WL_CONNECTED; + if (connected) { + esp_wifi_set_ps(WIFI_PS_MIN_MODEM); + } + return connected; } void wifi_start_ap(const char *ap_ssid, const char *ap_pass) {