From 29b79fbbb5bcfd5f479e5195dfbabee03373b6a2 Mon Sep 17 00:00:00 2001 From: Johnathon Slightham Date: Wed, 18 Feb 2026 23:42:19 -0500 Subject: [PATCH] Remote configuration --- main/RemoteConfig.cpp | 51 +++++++++++++++++++++++++++++++++++++ main/include/RemoteConfig.h | 18 +++++++++++++ main/main.cpp | 6 +++-- 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 main/RemoteConfig.cpp create mode 100644 main/include/RemoteConfig.h diff --git a/main/RemoteConfig.cpp b/main/RemoteConfig.cpp new file mode 100644 index 0000000..2abdf3b --- /dev/null +++ b/main/RemoteConfig.cpp @@ -0,0 +1,51 @@ + +#include "RemoteConfig.h" +#include "ConfigManager.h" + +void RemoteConfig::register_calls(MessagingInterface &messaging_interface, ConfigManager& config_manager) { + messaging_interface.register_function(8, [&config_manager](const uint8_t *parameters, size_t parameter_size, Writer& writer) { + uint16_t value; + if (parameter_size < sizeof(value)) { + std::vector out{0}; + writer.write(out); + return; + } + std::memcpy(&value, parameters, sizeof(value)); + config_manager.set_module_id(value); + std::vector out{0}; + writer.write(out); + esp_restart(); + }); + messaging_interface.register_function(9, [&config_manager](const uint8_t *parameters, size_t parameter_size, Writer& writer) { + if (parameter_size < 1) { + std::vector out{0}; + writer.write(out); + return; + } + config_manager.set_module_type((ModuleType)parameters[0]); + std::vector out{1}; + writer.write(out); + esp_restart(); + }); + messaging_interface.register_function(10, [&config_manager](const uint8_t *parameters, size_t parameter_size, Writer& writer) { + config_manager.set_wifi_ssid((char*)parameters); + std::vector out{1}; + writer.write(out); + }); + messaging_interface.register_function(11, [&config_manager](const uint8_t *parameters, size_t parameter_size, Writer& writer) { + config_manager.set_wifi_password((char*)parameters); + std::vector out{1}; + writer.write(out); + }); + messaging_interface.register_function(12, [&config_manager](const uint8_t *parameters, size_t parameter_size, Writer& writer) { + if (parameter_size < 1) { + std::vector out{0}; + writer.write(out); + return; + } + config_manager.set_communication_method((CommunicationMethod)parameters[0]); + std::vector out{1}; + writer.write(out); + esp_restart(); + }); +} diff --git a/main/include/RemoteConfig.h b/main/include/RemoteConfig.h new file mode 100644 index 0000000..8fc421a --- /dev/null +++ b/main/include/RemoteConfig.h @@ -0,0 +1,18 @@ +#ifndef REMOTECONFIG_H +#define REMOTECONFIG_H + +#include + +#include "MessagingInterface.h" +#include "control/ActuatorFactory.h" +#include "control/IActuator.h" +#include "util/ring_buffer.h" + +class RemoteConfig { +public: + static void register_calls(MessagingInterface &messaging_interface, ConfigManager& config_manager); +private: + +}; + +#endif // REMOTECONFIG_H diff --git a/main/main.cpp b/main/main.cpp index e7ca201..c0414c4 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1,5 +1,3 @@ -#include "RemoteDebugging.h" -#include "RemoteManagement.h" #if !defined(RMT_TEST) || (defined(RMT_TEST) && RMT_TEST == 0) // #include // #include @@ -9,6 +7,9 @@ #include "ConfigManager.h" #include "LoopManager.h" #include "esp_log.h" +#include "RemoteDebugging.h" +#include "RemoteManagement.h" +#include "RemoteConfig.h" extern "C" [[noreturn]] void app_main(void) { ESP_LOGI("MEM", "Free internal RAM: %d", @@ -23,6 +24,7 @@ extern "C" [[noreturn]] void app_main(void) { RemoteDebugging::register_calls(loop_manager->get_messaging_interface()); RemoteManagement::register_calls(loop_manager->get_messaging_interface()); + RemoteConfig::register_calls(loop_manager->get_messaging_interface(), config_manager); RemoteManagement::mark_ota_success(); loop_manager->control_loop();