1 #ifndef _library__joyfun__hpp__included__
2 #define _library__joyfun__hpp__included__
10 * Perform axis calibration correction.
12 * Parameter v: The raw value read.
13 * Parameter low: The low limit.
14 * Parameter high: The high limit.
15 * Returns: The calibrated read value.
17 short calibration_correction(int64_t v
, int64_t low
, int64_t high
);
20 * Translate hundredths of degree position into hat bitmask.
22 * 0 is assumed to be up, and values are assumed to be clockwise. Negative values are centered.
24 * Parameter angle: The angle.
25 * Returns: The hat bitmask.
27 short angle_to_bitmask(int angle
);
30 * If a != b, a <- b and return true. Otherwise return false.
32 * Parameter a: The target.
33 * Parameter b: The source.
34 * Returns: a was not equal to b?
36 template<typename T
> bool make_equal(T
& a
, const T
& b
)
51 * Set name of joystick field.
53 void name(const std::string
& newn
);
55 * Get name of joystick field.
57 const std::string
& name();
61 * Parameter id: The id of the axis.
62 * Parameter minv: The minimal calibration value.
63 * Parameter maxv: The maximal calibration value.
64 * Parameter xname: The name of axis.
65 * Returns: The number of axis.
67 unsigned new_axis(uint64_t id
, int64_t minv
, int64_t maxv
, const std::string
& xname
);
69 * Create a new button.
71 * Parameter id: The id of button.
72 * Parameter xname: The name of button.
73 * Returns: The number of button.
75 unsigned new_button(uint64_t id
, const std::string
& xname
);
77 * Create a new hat from pair of axes.
79 * Parameter id_x: The id of x axis of the hat.
80 * Parameter id_y: The id of y axis of the hat.
81 * Parameter min_dev: The smallest deviation from zero to react to.
82 * Parameter xname_x: The name of x axis.
83 * Parameter xname_y: The name of y axis.
84 * Returns: The number of hat.
86 unsigned new_hat(uint64_t id_x
, uint64_t id_y
, int64_t min_dev
, const std::string
& xname_x
,
87 const std::string
& xname_y
);
89 * Create a new hat from POV control.
91 * Parameter id: The id of POV control.
92 * Parameter xname: The name of POV control.
93 * Returns: The number of hat.
95 unsigned new_hat(uint64_t id
, const std::string
& xname
);
97 * Get the number of axes.
99 unsigned axes() { return size_common(_axes
); }
101 * Get the number of buttons.
103 unsigned buttons() { return size_common(_buttons
); }
105 * Get the number of hats.
107 unsigned hats() { return size_common(_hats
); }
109 * Report on specified axis.
111 * Parameter id: The number of axis to report.
112 * Parameter res: Place to write the calibrated axis value to.
113 * Returns: True if value has changed since last call, false otherwise.
115 bool axis(unsigned id
, short& res
) { return read_common(_axes
, id
, res
); }
117 * Report on specified button.
119 * Parameter id: The number of button to report.
120 * Parameter res: Place to write the value to.
121 * Returns: True if value has changed since last call, false otherwise.
123 bool button(unsigned id
, short& res
) { return read_common(_buttons
, id
, res
); }
125 * Report on specified hat.
127 * Parameter id: The number of hat to report.
128 * Parameter res: Place to write the value to.
129 * Returns: True if value has changed since last call, false otherwise.
131 bool hat(unsigned id
, short& res
) { return read_common(_hats
, id
, res
); }
133 * Return name of axis.
135 * Parameter id: The axis number.
136 * Returns: The name of the axis, or "" if not found.
138 std::string
axisname(unsigned id
);
140 * Return axis calibration data.
142 * Parameter id: The axis number.
143 * Returns: The axis calibration (first minimum, then maximum).
145 std::pair
<int64_t, int64_t> axiscalibration(unsigned id
);
147 * Return name of button.
149 * Parameter id: The button number.
150 * Returns: The name of the button, or "" if not found.
152 std::string
buttonname(unsigned id
);
154 * Return name of hat.
156 * Parameter id: The hat number.
157 * Returns: The name of the hat, or "" if not found.
159 std::string
hatname(unsigned id
);
161 * Report possible change in axis value.
163 * Requests to update unknown axes are ignored.
165 * Parameter id: The ID of axis.
166 * Parameter value: The value.
168 void report_axis(uint64_t id
, int64_t value
);
170 * Report possible change in button value.
172 * Requests to update unknown buttons are ignored.
174 * Parameter id: The ID of button.
175 * Parameter value: The value.
177 void report_button(uint64_t id
, bool value
);
179 * Report possible change in POV value.
181 * Requests to update unknown POVs are ignored.
183 * Parameter id: The ID of POV.
184 * Parameter value: The angle in hundredths of degree clockwise from up, or negative if centered.
186 void report_pov(uint64_t id
, int angle
);
188 * Report on joystick.
190 std::string
compose_report(unsigned jnum
);
195 void update(short newv
);
196 bool read(short& val
);
209 bool yflag
; //Set on y axis, clear on x axis.
213 bool read_common(std::vector
<change_info
>& i
, unsigned id
, short& res
);
214 unsigned size_common(std::vector
<change_info
>& i
);
215 std::vector
<change_info
> _axes
;
216 std::vector
<change_info
> _buttons
;
217 std::vector
<change_info
> _hats
;
218 std::map
<uint64_t, unsigned> button_map
;
219 std::map
<uint64_t, unsigned> axis_map
; //No hats here!
220 std::map
<uint64_t, unsigned> pov_map
;
221 std::map
<uint64_t, std::pair
<int64_t, int64_t>> aranges
;
222 std::vector
<hat_info
> hatinfos
;
223 std::map
<uint64_t, hat_axis_info
> hataxis_map
;
224 std::map
<unsigned, std::string
> axisnames
;
225 std::map
<unsigned, std::string
> buttonnames
;
226 std::map
<unsigned, std::string
> hatnames
;