// // Created by Johnathon Slightham on 2025-07-05. // #ifndef LOOPMANAGER_H #define LOOPMANAGER_H #include #include #include #include "MessagingInterface.h" #include "control/ActuatorFactory.h" #include "control/IActuator.h" class LoopManager { public: LoopManager() : m_config_manager(ConfigManager::get_instance()), m_messaging_interface(std::make_unique()), m_actuator(ActuatorFactory::create_actuator(m_config_manager.get_module_type())) { // todo: temporary demo register_function call. const auto function_tag = 100; m_messaging_interface->register_function(function_tag, [](const uint8_t *parameters, size_t parameter_size, Writer& writer) { ESP_LOGI("TMP", "%s", (char*)parameters); std::string msg = "Hello from board!"; std::vector return_value(msg.begin(), msg.end()); writer.write(return_value); }); } [[noreturn]] void control_loop() const; // gets control commands [[noreturn]] static void sensor_loop(char * args); // sends sensor data commands continually [[noreturn]] static void metadata_tx_loop(char * args); // sends metadata continually (low duty cycle) [[noreturn]] static void metadata_rx_loop(char * args); // gets other commands from PC (ie. f/w updates, nvs updates) private: ConfigManager& m_config_manager; std::unique_ptr m_messaging_interface; std::unique_ptr m_actuator; void send_sensor_reading(bool durable) const; }; #endif //LOOPMANAGER_H