OSSIA
Open Scenario System for Interactive Application
joystick_protocol.hpp
1 #pragma once
2 
3 #include <ossia/network/base/protocol.hpp>
4 #include <ossia/network/common/complex_type.hpp>
5 #include <ossia/network/common/device_parameter.hpp>
6 #include <ossia/network/context_functions.hpp>
7 #include <ossia/network/domain/domain.hpp>
8 
9 #include <vector>
10 
11 typedef struct _SDL_Joystick SDL_Joystick;
12 
13 namespace ossia::net
14 {
15 class joystick_protocol_manager;
16 struct joystick_event_processor;
17 
18 struct OSSIA_EXPORT joystick_info
19 {
20  static unsigned int get_joystick_count();
21  static const char* get_joystick_name(const int index);
22  static int32_t get_joystick_id(const int index);
23  static void write_joystick_uuid(const int index, uint8_t* dst);
24 
25  // {device id, device index} or {-1, -1} if no suitable joystick is available
26  static std::pair<int32_t, int32_t> get_available_id_for_uid(const uint8_t* uid);
27 };
28 
29 class OSSIA_EXPORT joystick_protocol final : public ossia::net::protocol_base
30 {
31  friend class joystick_protocol_manager;
32  friend struct joystick_event_processor;
33 
34 public:
35  joystick_protocol(
36  ossia::net::network_context_ptr, const int32_t joystick_id,
37  const int joystick_index);
38  joystick_protocol(const joystick_protocol&) = delete;
39  joystick_protocol(joystick_protocol&&) = delete;
40  joystick_protocol& operator=(const joystick_protocol&) = delete;
41  joystick_protocol& operator=(joystick_protocol&&) = delete;
42  ~joystick_protocol() override;
43 
44  void set_device(ossia::net::device_base& dev) override;
45 
46  bool pull(ossia::net::parameter_base& param) override;
47  bool push(const ossia::net::parameter_base& param, const ossia::value& v) override;
48  bool push_raw(const ossia::net::full_parameter_data&) override;
49  bool observe(ossia::net::parameter_base& param, bool enable) override;
50 
51  bool update(ossia::net::node_base&) override;
52  void stop() override;
53 
54 private:
55  joystick_protocol_manager& m_manager;
56  joystick_event_processor& m_processor;
57  ossia::net::network_context_ptr m_ctx{};
58 
59  ossia::net::device_base* m_device{};
60 
61  std::vector<device_parameter*> m_axis_parameters;
62  std::vector<device_parameter*> m_hat_parameters;
63  std::vector<device_parameter*> m_ball_parameters;
64  std::vector<device_parameter*> m_button_parameters;
65 
66  int32_t m_joystick_id{};
67  SDL_Joystick* m_joystick{};
68 };
69 }
Root of a device tree.
Definition: ossia/network/base/device.hpp:58
The node_base class.
Definition: network/base/node.hpp:48
The parameter_base class.
Definition: ossia/network/base/parameter.hpp:48
The protocol_base class.
Definition: protocol.hpp:40
The value class.
Definition: value.hpp:173
Full information about a parameter.
Definition: parameter_data.hpp:61