From f63b876b71eb79991ff46d7877bccdbc1f135998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Thu, 16 Jun 2022 21:56:18 +0200 Subject: [PATCH] Send config chunks one by one --- src/mesh/PhoneAPI.cpp | 36 +++++++++++++++++++++++++++++++++--- src/mesh/PhoneAPI.h | 2 ++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/mesh/PhoneAPI.cpp b/src/mesh/PhoneAPI.cpp index 406963951..25569b18f 100644 --- a/src/mesh/PhoneAPI.cpp +++ b/src/mesh/PhoneAPI.cpp @@ -148,13 +148,43 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf) case STATE_SEND_CONFIG: fromRadioScratch.which_payloadVariant = FromRadio_config_tag; - fromRadioScratch.config = config; + switch (config_state) { + case Config_device_tag: + fromRadioScratch.config.which_payloadVariant = Config_device_tag; + fromRadioScratch.config.payloadVariant.device = config.device; + break; + case Config_position_tag: + fromRadioScratch.config.which_payloadVariant = Config_position_tag; + fromRadioScratch.config.payloadVariant.position = config.position; + break; + case Config_power_tag: + fromRadioScratch.config.which_payloadVariant = Config_power_tag; + fromRadioScratch.config.payloadVariant.power = config.power; + fromRadioScratch.config.payloadVariant.power.ls_secs = default_ls_secs; + break; + case Config_wifi_tag: + fromRadioScratch.config.which_payloadVariant = Config_wifi_tag; + fromRadioScratch.config.payloadVariant.wifi = config.wifi; + break; + case Config_display_tag: + fromRadioScratch.config.which_payloadVariant = Config_display_tag; + fromRadioScratch.config.payloadVariant.display = config.display; + break; + case Config_lora_tag: + fromRadioScratch.config.which_payloadVariant = Config_lora_tag; + fromRadioScratch.config.payloadVariant.lora = config.lora; + break; + } // NOTE: The phone app needs to know the ls_secs value so it can properly expect sleep behavior. // So even if we internally use 0 to represent 'use default' we still need to send the value we are // using to the app (so that even old phone apps work with new device loads). - fromRadioScratch.config.power.ls_secs = default_ls_secs; - state = STATE_SEND_NODEINFO; + + config_state++; + // Advance when we have sent all of our config objects + if (config_state > Config_lora_tag) { + state = STATE_SEND_NODEINFO; + } break; case STATE_SEND_NODEINFO: { diff --git a/src/mesh/PhoneAPI.h b/src/mesh/PhoneAPI.h index f17ed26c0..3109a5e89 100644 --- a/src/mesh/PhoneAPI.h +++ b/src/mesh/PhoneAPI.h @@ -31,6 +31,8 @@ class PhoneAPI State state = STATE_SEND_NOTHING; + int8_t config_state = Config_device_tag; + /** * Each packet sent to the phone has an incrementing count */