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