From b8057aebd53631608de7be77a28715bd6bd5207a Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Wed, 5 Jun 2019 23:02:18 +0300 Subject: [PATCH] Get connected slave details --- applications/gui/src/ctrl_window.cpp | 26 +++++++++++++++++++ applications/gui/src/main.cpp | 21 +++++++-------- components/common/cpp/include/loguru.hpp | 1 + components/control/cpp/include/ftl/master.hpp | 2 ++ components/control/cpp/src/master.cpp | 4 +++ components/control/cpp/src/slave.cpp | 9 +++++++ .../net/cpp/include/ftl/net/universe.hpp | 4 +-- .../include/ftl/rgbd_streamer.hpp | 1 + components/rgbd-sources/src/rgbd_streamer.cpp | 14 ++++++---- 9 files changed, 63 insertions(+), 19 deletions(-) diff --git a/applications/gui/src/ctrl_window.cpp b/applications/gui/src/ctrl_window.cpp index 3ab9285ed..7b4308e58 100644 --- a/applications/gui/src/ctrl_window.cpp +++ b/applications/gui/src/ctrl_window.cpp @@ -1,13 +1,39 @@ #include "ctrl_window.hpp" #include <nanogui/layout.h> +#include <nanogui/label.h> +#include <nanogui/combobox.h> + +#include <vector> +#include <string> using ftl::gui::ControlWindow; +using std::string; +using std::vector; ControlWindow::ControlWindow(nanogui::Widget *parent, ftl::ctrl::Master *ctrl) : nanogui::Window(parent, "Control"), ctrl_(ctrl) { setLayout(new nanogui::GroupLayout()); + + using namespace nanogui; + + new Label(this, "Select Node","sans-bold"); + vector<string> details = ctrl->getSlaves(); + LOG(INFO) << "Details count = " << details.size(); + + vector<string> available; + for (auto &d : details) { + auto detail = ftl::config::json_t::parse(d); + LOG(INFO) << "DETAIL RECEIVED " << detail; + available.push_back(detail["title"].get<string>()); + } + + auto select = new ComboBox(this, available); + select->setCallback([this,available](int ix) { + LOG(INFO) << "Change node: " << ix; + + }); } ControlWindow::~ControlWindow() { diff --git a/applications/gui/src/main.cpp b/applications/gui/src/main.cpp index a62a091db..5ada2cba5 100644 --- a/applications/gui/src/main.cpp +++ b/applications/gui/src/main.cpp @@ -168,6 +168,14 @@ class FTLApplication : public nanogui::Screen { imageWindow->setLayout(new GroupLayout()); imageWindow->setSize(Vector2i(400,400)); + new Label(imageWindow, "Select source","sans-bold"); + auto available = net->findAll<string>("list_streams"); + auto select = new ComboBox(imageWindow, available); + select->setCallback([this,available](int ix) { + LOG(INFO) << "Change source: " << ix; + + }); + auto imageView = new VirtualCameraView(imageWindow); //cam.view = imageView; imageView->setGridThreshold(20); @@ -179,18 +187,7 @@ class FTLApplication : public nanogui::Screen { } } - auto window = new Window(this, "Sources"); - window->setLayout(new GroupLayout()); - - new Label(window, "Select source","sans-bold"); - auto available = net->findAll<string>("list_streams"); - auto select = new ComboBox(window, available); - select->setCallback([this,available](int ix) { - LOG(INFO) << "Change source: " << ix; - - }); - - window = new ftl::gui::ControlWindow(this, controller); + auto window = new ftl::gui::ControlWindow(this, controller); setVisible(true); performLayout(); diff --git a/components/common/cpp/include/loguru.hpp b/components/common/cpp/include/loguru.hpp index e43dc742e..a65ab2be2 100644 --- a/components/common/cpp/include/loguru.hpp +++ b/components/common/cpp/include/loguru.hpp @@ -98,6 +98,7 @@ Website: www.ilikebigbits.com #define LOGURU_VERSION_PATCH 0 #define LOGURU_REPLACE_GLOG 1 +#define LOGURU_CATCH_SIGABRT 0 #if defined(_MSC_VER) #include <sal.h> // Needed for _In_z_ etc annotations diff --git a/components/control/cpp/include/ftl/master.hpp b/components/control/cpp/include/ftl/master.hpp index e069f12fc..17ca49c2c 100644 --- a/components/control/cpp/include/ftl/master.hpp +++ b/components/control/cpp/include/ftl/master.hpp @@ -37,6 +37,8 @@ class Master { std::vector<std::string> getConfigurables(const ftl::UUID &peer); + std::vector<std::string> getSlaves(); + std::vector<ftl::config::json_t> get(const std::string &uri); ftl::config::json_t getOne(const std::string &uri); diff --git a/components/control/cpp/src/master.cpp b/components/control/cpp/src/master.cpp index 1724f1dd5..5072c4155 100644 --- a/components/control/cpp/src/master.cpp +++ b/components/control/cpp/src/master.cpp @@ -47,6 +47,10 @@ void Master::set(const ftl::UUID &peer, const string &uri, json_t &value) { net_->send(peer, "update_cfg", uri, (string)value); } +vector<string> Master::getSlaves() { + return net_->findAll<string>("slave_details"); +} + vector<string> Master::getConfigurables() { return {}; } diff --git a/components/control/cpp/src/slave.cpp b/components/control/cpp/src/slave.cpp index 8a6253195..fd348c181 100644 --- a/components/control/cpp/src/slave.cpp +++ b/components/control/cpp/src/slave.cpp @@ -4,6 +4,7 @@ using ftl::Configurable; using ftl::net::Universe; using ftl::ctrl::Slave; +using std::string; static void netLog(void* user_data, const loguru::Message& message) { Universe *net = (Universe*)user_data; @@ -30,6 +31,14 @@ Slave::Slave(Universe *net, ftl::Configurable *root) { return ftl::config::resolve(uri); }); + net->bind("slave_details", [net,root]() -> std::vector<std::string> { + ftl::config::json_t json { + {"id", net->id().to_string()}, + {"title", root->value("title", *root->get<string>("$id"))} + }; + return {json.dump()}; + }); + loguru::add_callback("net_log", netLog, net, loguru::Verbosity_INFO); } diff --git a/components/net/cpp/include/ftl/net/universe.hpp b/components/net/cpp/include/ftl/net/universe.hpp index 169eff589..5ce99f3a5 100644 --- a/components/net/cpp/include/ftl/net/universe.hpp +++ b/components/net/cpp/include/ftl/net/universe.hpp @@ -278,7 +278,7 @@ template <typename R, typename... ARGS> R Universe::call(const ftl::UUID &pid, const std::string &name, ARGS... args) { Peer *p = getPeer(pid); if (p == nullptr) { - LOG(ERROR) << "Attempting to call an unknown peer : " << pid.to_string(); + DLOG(WARNING) << "Attempting to call an unknown peer : " << pid.to_string(); throw -1; } return p->call<R>(name, args...); @@ -288,7 +288,7 @@ template <typename... ARGS> void Universe::send(const ftl::UUID &pid, const std::string &name, ARGS... args) { Peer *p = getPeer(pid); if (p == nullptr) { - LOG(ERROR) << "Attempting to call an unknown peer : " << pid.to_string(); + DLOG(WARNING) << "Attempting to call an unknown peer : " << pid.to_string(); throw -1; } p->send(name, args...); diff --git a/components/rgbd-sources/include/ftl/rgbd_streamer.hpp b/components/rgbd-sources/include/ftl/rgbd_streamer.hpp index 3d6272189..51c7a2e58 100644 --- a/components/rgbd-sources/include/ftl/rgbd_streamer.hpp +++ b/components/rgbd-sources/include/ftl/rgbd_streamer.hpp @@ -61,6 +61,7 @@ class Streamer : public ftl::Configurable { std::shared_mutex mutex_; bool active_; ftl::net::Universe *net_; + bool late_; void _schedule(); void _swap(detail::StreamSource &); diff --git a/components/rgbd-sources/src/rgbd_streamer.cpp b/components/rgbd-sources/src/rgbd_streamer.cpp index 472f05cf2..6d6157936 100644 --- a/components/rgbd-sources/src/rgbd_streamer.cpp +++ b/components/rgbd-sources/src/rgbd_streamer.cpp @@ -24,7 +24,7 @@ using std::chrono::milliseconds; #define THREAD_POOL_SIZE 6 Streamer::Streamer(nlohmann::json &config, Universe *net) - : ftl::Configurable(config), pool_(THREAD_POOL_SIZE) { + : ftl::Configurable(config), pool_(THREAD_POOL_SIZE), late_(false) { active_ = false; net_ = net; @@ -169,11 +169,15 @@ void Streamer::_schedule() { shared_lock<shared_mutex> slk(s.second->mutex); if (s.second->state != 0) { - LOG(WARNING) << "Stream not ready to schedule on time: " << uri; + if (!late_) LOG(WARNING) << "Stream not ready to schedule on time: " << uri; + late_ = true; continue; + } else { + late_ = false; } + if (s.second->clients[0].size() == 0) { - LOG(ERROR) << "Stream has no clients: " << uri; + //LOG(ERROR) << "Stream has no clients: " << uri; continue; } slk.unlock(); @@ -184,7 +188,7 @@ void Streamer::_schedule() { src->src->grab(); unique_lock<shared_mutex> lk(src->mutex); - LOG(INFO) << "Grab frame"; + //LOG(INFO) << "Grab frame"; src->state |= ftl::rgbd::detail::kGrabbed; _swap(*src); }); @@ -225,7 +229,7 @@ void Streamer::_schedule() { } unique_lock<shared_mutex> lk(src->mutex); - LOG(INFO) << "Tx Frame: " << uri; + DLOG(2) << "Tx Frame: " << uri; src->state |= ftl::rgbd::detail::kTransmitted; _swap(*src); }); -- GitLab