1 #ifndef _library__joystick__hpp__included__
2 #define _library__joystick__hpp__included__
7 #include "threadtypes.hpp"
12 hw_gamepad(const JSON::node
& state
, unsigned jnum
);
13 hw_gamepad(const std::string
& _name
, unsigned jnum
);
15 unsigned add_axis(uint64_t id
, int64_t min
, int64_t max
, bool pressure
, const std::string
& name
);
16 unsigned add_button(uint64_t id
, const std::string
& name
);
17 unsigned add_hat(uint64_t id
, const std::string
& name
);
18 unsigned add_hat(uint64_t idx
, uint64_t idy
, int64_t mindev
, const std::string
& namex
,
19 const std::string
& namey
);
20 unsigned axes() { return next_axis
; }
21 unsigned buttons() { return next_button
; }
22 unsigned hats() { return next_hat
; }
23 void calibrate_axis(unsigned num
, int64_t minus
, int64_t zero
, int64_t plus
, int64_t neutral
,
24 double threshold
, bool pressure
, bool disabled
);
25 void get_calibration(unsigned num
, int64_t& minus
, int64_t& zero
, int64_t& plus
, int64_t& neutral
,
26 double& threshold
, bool& pressure
, bool& disabled
);
27 double get_tolerance(unsigned num
);
28 int get_mode(unsigned num
);
29 std::set
<unsigned> online_axes();
30 std::set
<unsigned> online_buttons();
31 std::set
<unsigned> online_hats();
32 void axis_status(unsigned num
, int64_t& raw
, int16_t& scaled
);
33 int button_status(unsigned num
);
34 int hat_status(unsigned num
);
35 void report_axis(uint64_t id
, int64_t val
);
36 void report_button(uint64_t id
, bool val
);
37 void report_hat(uint64_t id
, int angle
);
38 void set_online(bool status
);
39 bool online() { return online_flag
; }
40 const std::string
& name() { return _name
; }
41 void set_axis_cb(std::function
<void(unsigned jnum
, unsigned num
, int16_t val
)> fn
)
45 void set_button_cb(std::function
<void(unsigned jnum
, unsigned num
, bool val
)> fn
) { button_fn
= fn
; }
46 void set_hat_cb(std::function
<void(unsigned jnum
, unsigned num
, unsigned val
)> fn
) { hat_fn
= fn
; }
47 void set_axismode_cb(std::function
<void(unsigned jnum
, unsigned num
, int mode
, double tolerance
)> fn
)
51 void set_newitem_cb(std::function
<void(unsigned jnum
, unsigned num
, int type
)> fn
) { newitem_fn
= fn
; }
52 void load(const JSON::node
& state
);
54 std::string
get_summary();
92 hw_gamepad(const hw_gamepad
&);
93 hw_gamepad
& operator=(const hw_gamepad
&);
94 std::function
<void(unsigned jnum
, unsigned num
, int16_t val
)> axis_fn
;
95 std::function
<void(unsigned jnum
, unsigned num
, bool val
)> button_fn
;
96 std::function
<void(unsigned jnum
, unsigned num
, unsigned val
)> hat_fn
;
97 std::function
<void(unsigned jnum
, unsigned num
, int mode
, double tolerance
)> amode_fn
;
98 std::function
<void(unsigned jnum
, unsigned num
, int type
)> newitem_fn
;
101 std::map
<uint64_t, axis_info
> _axes
;
102 std::map
<uint64_t, hat_info
*> _axes_hat
;
103 std::map
<uint64_t, button_info
> _buttons
;
104 std::map
<uint64_t, hat_info
> _hats
;
106 unsigned next_button
;
117 void load(const JSON::node
& state
);
120 hw_gamepad
& operator[](unsigned gpnum
);
121 unsigned add(const std::string
& name
);
122 void set_axis_cb(std::function
<void(unsigned jnum
, unsigned num
, int16_t val
)> fn
);
123 void set_button_cb(std::function
<void(unsigned jnum
, unsigned num
, bool val
)> fn
);
124 void set_hat_cb(std::function
<void(unsigned jnum
, unsigned num
, unsigned val
)> fn
);
125 void set_axismode_cb(std::function
<void(unsigned jnum
, unsigned num
, int mode
, double tolerance
)> fn
);
126 void set_newitem_cb(std::function
<void(unsigned jnum
, unsigned num
, int type
)> fn
);
127 std::string
get_summary();
129 hw_gamepad_set(const hw_gamepad_set
&);
130 hw_gamepad_set
& operator=(const hw_gamepad_set
&);
131 std::function
<void(unsigned jnum
, unsigned num
, int16_t val
)> axis_fn
;
132 std::function
<void(unsigned jnum
, unsigned num
, bool val
)> button_fn
;
133 std::function
<void(unsigned jnum
, unsigned num
, unsigned val
)> hat_fn
;
134 std::function
<void(unsigned jnum
, unsigned num
, int mode
, double tolerance
)> amode_fn
;
135 std::function
<void(unsigned jnum
, unsigned num
, int type
)> newitem_fn
;
136 std::vector
<hw_gamepad
*> _gamepads
;