From eca875a791017ee22dd468b60575732f6e395c01 Mon Sep 17 00:00:00 2001 From: Johnathon Slightham Date: Tue, 10 Mar 2026 14:06:52 -0400 Subject: [PATCH] Fix UI orientation (#4) * Correctly send connection info to UI * Fix orientation detection in UI --- src/libcontrol.cpp | 48 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/src/libcontrol.cpp b/src/libcontrol.cpp index 2c29b9d..fc6703b 100644 --- a/src/libcontrol.cpp +++ b/src/libcontrol.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include "flatbuffers_generated/SensorMessage_generated.h" #include "spdlog/spdlog.h" @@ -62,12 +63,47 @@ std::vector RobotController::getConnectio std::shared_lock module_lock(m_module_lock); std::shared_lock conn_lock(m_connection_lock); - for (auto const &[_, value] : m_connection_map) { - for (const auto conn : value) { - if (m_id_to_module.contains(conn.from_module_id) && - m_id_to_module.contains(conn.to_module_id)) { - out.push_back(conn); + for (auto const &[from_id, conns] : m_connection_map) { + for (const auto &conn : conns) { + if (!m_id_to_module.contains(conn.from_module_id) || + !m_id_to_module.contains(conn.to_module_id)) { + continue; } + + if (!m_connection_map.contains(conn.to_module_id)) { + spdlog::warn("Could not find to module id in connection map {}", conn.to_module_id); + continue; + } + + uint8_t to_socket = 0; + bool found_inverse = false; + uint16_t orientation = conn.orientation; + for (const auto &reverse_conn : m_connection_map.at(conn.to_module_id)) { + if (reverse_conn.to_module_id == conn.from_module_id) { + to_socket = reverse_conn.from_socket; + found_inverse = true; + if (reverse_conn.orientation != Orientation_Deg0) { + orientation = reverse_conn.orientation; + } + break; + } + } + + if (!found_inverse) { + spdlog::warn("Found inverse module, could not find inverse connection, {}", + conn.to_module_id); + continue; + } + + spdlog::info("Adding module connection, {} to {}", conn.from_module_id, + conn.to_module_id); + + out.push_back( + Flatbuffers::ModuleConnectionInstance{.from_module_id = conn.from_module_id, + .to_module_id = conn.to_module_id, + .from_socket = conn.from_socket, + .to_socket = to_socket, + .orientation = (Orientation)orientation}); } } return out; @@ -142,7 +178,7 @@ void RobotController::metadata_loop() { std::unique_lock conn_lock(m_connection_lock); std::vector conns; - for (uint8_t i = 1; i < NUM_CHANNELS; i++) { + for (uint8_t i = 0; i < NUM_CHANNELS; i++) { if (metadata->channel_to_module()->Get(i) > 0) { conns.push_back(Flatbuffers::ModuleConnectionInstance{ .from_module_id = metadata->module_id(),