Loading...
Searching...
No Matches
BitfocusProtocol.hpp
1#pragma once
2#include <Protocols/Bitfocus/BitfocusContext.hpp>
3
4#include <ossia/detail/flat_map.hpp>
5#include <ossia/network/base/protocol.hpp>
6#include <ossia/network/context.hpp>
7#include <ossia/network/generic/generic_device.hpp>
8
9#include <QObject>
10
11#include <atomic>
12#include <mutex>
13#include <set>
14#include <tuple>
15#include <unordered_map>
16
17namespace ossia::net
18{
20 : public QObject
21 , public ossia::net::protocol_base
22{
23public:
25 std::shared_ptr<bitfocus::module_handler> rc,
26 ossia::net::network_context_ptr ctx);
28
29 bool pull(ossia::net::parameter_base&) override;
30 bool push(const ossia::net::parameter_base& p, const ossia::value& v) override;
31 bool push_raw(const ossia::net::full_parameter_data&) override;
32 bool observe(ossia::net::parameter_base&, bool) override;
33 bool update(ossia::net::node_base& node_base) override;
34 void set_device(ossia::net::device_base& dev) override;
35
37 void init_device(int categories = bitfocus::module_handler::All);
38
40 static ossia::value optionDefault(const bitfocus::module_data::config_field& opt);
41
43 QVariantMap collectOptions(
44 const ossia::net::node_base& node,
45 const std::vector<bitfocus::module_data::config_field>& defs,
46 const std::string& group);
47
48private:
49 void run_action(const std::string& id);
50 void forget_touched(const std::string& group, const std::string& name);
51 void sync_actions();
52 void sync_feedbacks();
53 void sync_variables();
54 void sync_variable(
55 ossia::net::node_base& node, const QString& id,
57 void sync_options(
58 ossia::net::node_base& node,
59 const std::vector<bitfocus::module_data::config_field>& options);
60 void subscribe_feedbacks(const std::vector<std::string>& ids);
61 void set_received_value(ossia::net::parameter_base& p, ossia::value v);
62
63 std::shared_ptr<bitfocus::module_handler> m_rc;
64 ossia::net::network_context_ptr m_context;
65 ossia::net::device_base* m_dev{};
66 struct
67 {
68 ossia::net::node_base* actions{};
69 ossia::net::node_base* feedbacks{};
70 ossia::net::node_base* variables{};
71 } nodes;
72
73 std::atomic<ossia::net::node_base*> m_actionsNode{};
74 std::atomic<ossia::net::node_base*> m_feedbacksNode{};
75
77 std::set<std::tuple<std::string, std::string, std::string>> m_touched;
78 std::mutex m_touchedMutex;
79
81 std::unordered_map<QString, QVariantMap> m_subscribed;
82
83 std::unordered_map<QString, ossia::net::parameter_base*> m_variables_recv;
84 std::unordered_map<QString, ossia::net::parameter_base*> m_feedbacks_recv;
85};
86}
Definition BitfocusProtocol.hpp:22
static ossia::value optionDefault(const bitfocus::module_data::config_field &opt)
The value an option parameter starts with.
Definition BitfocusProtocol.cpp:138
QVariantMap collectOptions(const ossia::net::node_base &node, const std::vector< bitfocus::module_data::config_field > &defs, const std::string &group)
Option values of an action or feedback node, typed as the module expects.
Definition BitfocusProtocol.cpp:232
void init_device(int categories=bitfocus::module_handler::All)
Creates or updates the tree from the module's current definitions.
Definition BitfocusProtocol.cpp:544
Definition BitfocusContext.hpp:42
Definition BitfocusContext.hpp:83