RPC calls

This commit is contained in:
Johnathon Slightham
2026-02-10 23:08:41 -05:00
committed by Johnathon Slightham
parent 52ff24e649
commit 649669d598
12 changed files with 466 additions and 37 deletions

View File

@@ -19,11 +19,12 @@
[[noreturn]] void LoopManager::control_loop() const {
uint8_t buffer[512];
while (true) {
m_messaging_interface->recv(reinterpret_cast<char *>(buffer), 512, PC_ADDR,
ACTUATOR_CMD_TAG);
m_actuator->actuate(buffer);
send_sensor_reading(false);
}
if (m_messaging_interface->recv(buffer, 512,
ACTUATOR_CMD_TAG)) {
m_actuator->actuate(buffer);
send_sensor_reading(false);
}
}
}
[[noreturn]] void LoopManager::sensor_loop(char *args) {
@@ -53,7 +54,7 @@
that->m_config_manager.get_module_id(), that->m_config_manager.get_module_type(),
module_ids, casted_orientations, that->m_messaging_interface->get_connection_type(),
that->m_messaging_interface->get_leader());
that->m_messaging_interface->send(static_cast<char *>(data), size, PC_ADDR,
that->m_messaging_interface->send((uint8_t *)data, size, PC_ADDR,
TOPOLOGY_CMD_TAG, false);
vTaskDelay(METADATA_PERIOD_MS / portTICK_PERIOD_MS);
}
@@ -61,10 +62,10 @@
[[noreturn]] void LoopManager::metadata_rx_loop(char *args) {
const auto that = reinterpret_cast<LoopManager *>(args);
const auto buffer = std::make_unique<std::vector<char>>();
const auto buffer = std::make_unique<std::vector<uint8_t>>();
buffer->resize(512);
while (true) {
that->m_messaging_interface->recv(buffer->data(), 512, PC_ADDR, METADATA_RX_TAG);
that->m_messaging_interface->recv(buffer->data(), 512, METADATA_RX_TAG);
}
}
@@ -74,6 +75,6 @@ void LoopManager::send_sensor_reading(bool durable) const {
if (m_actuator) {
auto data = m_actuator->get_sensor_data();
const auto [ptr, size] = smb.build_sensor_message(data);
m_messaging_interface->send(reinterpret_cast<char *>(ptr), size, PC_ADDR, SENSOR_TAG, durable);
m_messaging_interface->send((uint8_t *)ptr, size, PC_ADDR, SENSOR_TAG, durable);
}
}

View File

@@ -6,6 +6,8 @@
#define LOOPMANAGER_H
#include <memory>
#include <vector>
#include <cstdint>
#include "MessagingInterface.h"
#include "control/ActuatorFactory.h"
@@ -15,7 +17,18 @@ class LoopManager {
public:
LoopManager() : m_config_manager(ConfigManager::get_instance()),
m_messaging_interface(std::make_unique<MessagingInterface>()),
m_actuator(ActuatorFactory::create_actuator(m_config_manager.get_module_type())) {}
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<uint8_t> 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)