From 1fe4161f39605e0e4c7f5c615c571d84b29b6041 Mon Sep 17 00:00:00 2001 From: Hector van der Aa Date: Tue, 24 Mar 2026 09:14:27 +0100 Subject: [PATCH] Initial impl for config with queue system --- src/modules/config/config.h | 91 ++++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/src/modules/config/config.h b/src/modules/config/config.h index eba4f99..94df087 100644 --- a/src/modules/config/config.h +++ b/src/modules/config/config.h @@ -2,35 +2,37 @@ // Copyright (C) 2026 Association Exergie // SPDX-License-Identifier: GPL-3.0-or-later #pragma once +#include "base/module_base.h" +#include "base/ring_buffer.h" +#include "base/task.h" #include "custom_types.h" #include "flags.h" #include "modules/logger/system_logger.h" -#include "base/task.h" -#include "base/ring_buffer.h" -#include "base/module_base.h" #include -class config : public module_base{ +class config : public module_base { private: vehicle_config _config; system_logger *_logger; - bool _valid_config; - track_data _loaded_track; + bool _valid_config; + track_data _loaded_track; ring_buffer _queue; - int read_cfg(); - int write_cfg(); - int write_cfg(const vehicle_config& new_config); + Task _active_task = {}; + int read_cfg(); + int write_cfg(); + int write_cfg(const vehicle_config &new_config); + int handle_active_task(); + public: - int push(const Task& task) override; + int push(const Task &task) override; config(); config(system_logger *logger); ~config(); int auto_init(); + int loop(unsigned long timeout_ms = 500); }; -int config::push(const Task& task) { - return _queue.push(task); -} +int config::push(const Task &task) { return _queue.push(task); } config::config() : _logger(nullptr), _valid_config(true) {} config::config(system_logger *logger) : _logger(logger), _valid_config(true) {} @@ -38,35 +40,52 @@ config::config(system_logger *logger) : _logger(logger), _valid_config(true) {} config::~config() {} int config::read_cfg() { - EEPROM.get(0, _config); - return 0; + EEPROM.get(0, _config); + return 0; } -int config::write_cfg(const vehicle_config& new_config) { - EEPROM.put(0, new_config); - return 0; +int config::write_cfg(const vehicle_config &new_config) { + EEPROM.put(0, new_config); + return 0; +} + +int config::handle_active_task() { + //TODO: handle active task + return 0; } int config::auto_init() { + this->read_cfg(); + if (_config.magic != CONFIG_MAGIC) { +#ifdef WARN + if (_logger != nullptr) { + _logger->warn("Config invalid, overwriting"); + } +#endif + vehicle_config clean_config; + this->write_cfg(clean_config); this->read_cfg(); if (_config.magic != CONFIG_MAGIC) { - #ifdef WARN - if (_logger != nullptr) { - _logger->warn("Config invalid, overwriting"); - } - #endif - vehicle_config clean_config; - this->write_cfg(clean_config); - this->read_cfg(); - if (_config.magic != CONFIG_MAGIC) { - #ifdef ERROR - if (_logger != nullptr) { - _logger->error("Config write failed, EEPROM may be burnt"); - } - #endif - return 1; - } +#ifdef ERROR + if (_logger != nullptr) { + _logger->error("Config write failed, EEPROM may be burnt"); + } +#endif + return 1; } - _valid_config = true; - return 0; + } + _valid_config = true; + return 0; +} + +int config::loop(unsigned long timeout_ms) { + unsigned long now = millis(); + unsigned long task_timeout = now + timeout_ms; + if (_active_task.type != TASK_NULL && _active_task.target != MOD_NULL) { + this->handle_active_task(); + return 0; + } + _queue.pop(_active_task); + this->handle_active_task(); + return 0; }