1 #ifndef _library__gamepad__hpp__included__
2 #define _library__gamepad__hpp__included__
15 pad(const JSON::node
& state
, unsigned jnum
);
16 pad(const std::string
& _name
, unsigned jnum
);
18 unsigned add_axis(uint64_t id
, int64_t min
, int64_t max
, bool pressure
, const std::string
& name
);
19 unsigned add_button(uint64_t id
, const std::string
& name
);
20 unsigned add_hat(uint64_t id
, const std::string
& name
);
21 unsigned add_hat(uint64_t idx
, uint64_t idy
, int64_t mindev
, const std::string
& namex
,
22 const std::string
& namey
);
23 unsigned axes() { return next_axis
; }
24 unsigned buttons() { return next_button
; }
25 unsigned hats() { return next_hat
; }
26 void calibrate_axis(unsigned num
, int64_t minus
, int64_t zero
, int64_t plus
, int64_t neutral
,
27 double threshold
, bool pressure
, bool disabled
);
28 void get_calibration(unsigned num
, int64_t& minus
, int64_t& zero
, int64_t& plus
, int64_t& neutral
,
29 double& threshold
, bool& pressure
, bool& disabled
);
30 double get_tolerance(unsigned num
);
31 int get_mode(unsigned num
);
32 std::set
<unsigned> online_axes();
33 std::set
<unsigned> online_buttons();
34 std::set
<unsigned> online_hats();
35 void axis_status(unsigned num
, int64_t& raw
, int16_t& scaled
);
36 int button_status(unsigned num
);
37 int hat_status(unsigned num
);
38 void report_axis(uint64_t id
, int64_t val
);
39 void report_button(uint64_t id
, bool val
);
40 void report_hat(uint64_t id
, int angle
);
41 void set_online(bool status
);
42 bool online() { return online_flag
; }
43 const std::string
& name() { return _name
; }
44 void set_axis_cb(std::function
<void(unsigned jnum
, unsigned num
, int16_t val
)> fn
)
48 void set_button_cb(std::function
<void(unsigned jnum
, unsigned num
, bool val
)> fn
) { button_fn
= fn
; }
49 void set_hat_cb(std::function
<void(unsigned jnum
, unsigned num
, unsigned val
)> fn
) { hat_fn
= fn
; }
50 void set_axismode_cb(std::function
<void(unsigned jnum
, unsigned num
, int mode
, double tolerance
)> fn
)
54 void set_newitem_cb(std::function
<void(unsigned jnum
, unsigned num
, int type
)> fn
) { newitem_fn
= fn
; }
55 void load(const JSON::node
& state
);
57 std::string
get_summary();
96 pad
& operator=(const pad
&);
97 std::function
<void(unsigned jnum
, unsigned num
, int16_t val
)> axis_fn
;
98 std::function
<void(unsigned jnum
, unsigned num
, bool val
)> button_fn
;
99 std::function
<void(unsigned jnum
, unsigned num
, unsigned val
)> hat_fn
;
100 std::function
<void(unsigned jnum
, unsigned num
, int mode
, double tolerance
)> amode_fn
;
101 std::function
<void(unsigned jnum
, unsigned num
, int type
)> newitem_fn
;
104 std::map
<uint64_t, axis_info
> _axes
;
105 std::map
<uint64_t, hat_info
*> _axes_hat
;
106 std::map
<uint64_t, button_info
> _buttons
;
107 std::map
<uint64_t, hat_info
> _hats
;
109 unsigned next_button
;
120 void load(const JSON::node
& state
);
123 pad
& operator[](unsigned gpnum
);
124 unsigned add(const std::string
& name
);
125 void set_axis_cb(std::function
<void(unsigned jnum
, unsigned num
, int16_t val
)> fn
);
126 void set_button_cb(std::function
<void(unsigned jnum
, unsigned num
, bool val
)> fn
);
127 void set_hat_cb(std::function
<void(unsigned jnum
, unsigned num
, unsigned val
)> fn
);
128 void set_axismode_cb(std::function
<void(unsigned jnum
, unsigned num
, int mode
, double tolerance
)> fn
);
129 void set_newitem_cb(std::function
<void(unsigned jnum
, unsigned num
, int type
)> fn
);
130 std::string
get_summary();
134 set
& operator=(const set
&);
135 std::function
<void(unsigned jnum
, unsigned num
, int16_t val
)> axis_fn
;
136 std::function
<void(unsigned jnum
, unsigned num
, bool val
)> button_fn
;
137 std::function
<void(unsigned jnum
, unsigned num
, unsigned val
)> hat_fn
;
138 std::function
<void(unsigned jnum
, unsigned num
, int mode
, double tolerance
)> amode_fn
;
139 std::function
<void(unsigned jnum
, unsigned num
, int type
)> newitem_fn
;
140 std::vector
<pad
*> _gamepads
;