summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h162
1 files changed, 155 insertions, 7 deletions
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h
index 0dae06c..75be27e 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h
@@ -34,6 +34,10 @@ extern "C"
34 34
35 /// @name Peripheral types 35 /// @name Peripheral types
36 ///{ 36 ///{
37
38 /*!
39 * @brief API error codes
40 */
37 typedef enum PERIPHERAL_ERROR 41 typedef enum PERIPHERAL_ERROR
38 { 42 {
39 PERIPHERAL_NO_ERROR = 0, // no error occurred 43 PERIPHERAL_NO_ERROR = 0, // no error occurred
@@ -45,6 +49,9 @@ extern "C"
45 PERIPHERAL_ERROR_CONNECTION_FAILED = -6, // peripherals are connected, but command was interrupted 49 PERIPHERAL_ERROR_CONNECTION_FAILED = -6, // peripherals are connected, but command was interrupted
46 } PERIPHERAL_ERROR; 50 } PERIPHERAL_ERROR;
47 51
52 /*!
53 * @brief Peripheral types
54 */
48 typedef enum PERIPHERAL_TYPE 55 typedef enum PERIPHERAL_TYPE
49 { 56 {
50 PERIPHERAL_TYPE_UNKNOWN, 57 PERIPHERAL_TYPE_UNKNOWN,
@@ -52,6 +59,9 @@ extern "C"
52 PERIPHERAL_TYPE_KEYBOARD, 59 PERIPHERAL_TYPE_KEYBOARD,
53 } PERIPHERAL_TYPE; 60 } PERIPHERAL_TYPE;
54 61
62 /*!
63 * @brief Information shared between peripherals
64 */
55 typedef struct PERIPHERAL_INFO 65 typedef struct PERIPHERAL_INFO
56 { 66 {
57 PERIPHERAL_TYPE type; /*!< @brief type of peripheral */ 67 PERIPHERAL_TYPE type; /*!< @brief type of peripheral */
@@ -63,8 +73,6 @@ extern "C"
63 73
64 /*! 74 /*!
65 * @brief Peripheral add-on capabilities. 75 * @brief Peripheral add-on capabilities.
66 * If a capability is set to true, then the corresponding methods from
67 * kodi_peripheral_dll.h need to be implemented.
68 */ 76 */
69 typedef struct PERIPHERAL_CAPABILITIES 77 typedef struct PERIPHERAL_CAPABILITIES
70 { 78 {
@@ -77,6 +85,10 @@ extern "C"
77 85
78 /// @name Event types 86 /// @name Event types
79 ///{ 87 ///{
88
89 /*!
90 * @brief Types of events that can be sent and received
91 */
80 typedef enum PERIPHERAL_EVENT_TYPE 92 typedef enum PERIPHERAL_EVENT_TYPE
81 { 93 {
82 PERIPHERAL_EVENT_TYPE_NONE, /*!< @brief unknown event */ 94 PERIPHERAL_EVENT_TYPE_NONE, /*!< @brief unknown event */
@@ -86,12 +98,18 @@ extern "C"
86 PERIPHERAL_EVENT_TYPE_SET_MOTOR, /*!< @brief set the state for joystick rumble motor */ 98 PERIPHERAL_EVENT_TYPE_SET_MOTOR, /*!< @brief set the state for joystick rumble motor */
87 } PERIPHERAL_EVENT_TYPE; 99 } PERIPHERAL_EVENT_TYPE;
88 100
101 /*!
102 * @brief States a button can have
103 */
89 typedef enum JOYSTICK_STATE_BUTTON 104 typedef enum JOYSTICK_STATE_BUTTON
90 { 105 {
91 JOYSTICK_STATE_BUTTON_UNPRESSED = 0x0, /*!< @brief button is released */ 106 JOYSTICK_STATE_BUTTON_UNPRESSED = 0x0, /*!< @brief button is released */
92 JOYSTICK_STATE_BUTTON_PRESSED = 0x1, /*!< @brief button is pressed */ 107 JOYSTICK_STATE_BUTTON_PRESSED = 0x1, /*!< @brief button is pressed */
93 } JOYSTICK_STATE_BUTTON; 108 } JOYSTICK_STATE_BUTTON;
94 109
110 /*!
111 * @brief States a D-pad (also called a hat) can have
112 */
95 typedef enum JOYSTICK_STATE_HAT 113 typedef enum JOYSTICK_STATE_HAT
96 { 114 {
97 JOYSTICK_STATE_HAT_UNPRESSED = 0x0, /*!< @brief no directions are pressed */ 115 JOYSTICK_STATE_HAT_UNPRESSED = 0x0, /*!< @brief no directions are pressed */
@@ -106,7 +124,7 @@ extern "C"
106 } JOYSTICK_STATE_HAT; 124 } JOYSTICK_STATE_HAT;
107 125
108 /*! 126 /*!
109 * @brief value in the closed interval [-1.0, 1.0] 127 * @brief Axis value in the closed interval [-1.0, 1.0]
110 * 128 *
111 * The axis state uses the XInput coordinate system: 129 * The axis state uses the XInput coordinate system:
112 * - Negative values signify down or to the left 130 * - Negative values signify down or to the left
@@ -114,13 +132,25 @@ extern "C"
114 */ 132 */
115 typedef float JOYSTICK_STATE_AXIS; 133 typedef float JOYSTICK_STATE_AXIS;
116 134
135 /*!
136 * @brief Motor value in the closed interval [0.0, 1.0]
137 */
117 typedef float JOYSTICK_STATE_MOTOR; 138 typedef float JOYSTICK_STATE_MOTOR;
118 139
140 /*!
141 * @brief Event information
142 */
119 typedef struct PERIPHERAL_EVENT 143 typedef struct PERIPHERAL_EVENT
120 { 144 {
121 unsigned int peripheral_index; 145 /*! @brief Index of the peripheral handling/receiving the event */
122 PERIPHERAL_EVENT_TYPE type; 146 unsigned int peripheral_index;
123 unsigned int driver_index; 147
148 /*! @brief Type of the event used to determine which enum field to access below */
149 PERIPHERAL_EVENT_TYPE type;
150
151 /*! @brief The index of the event source */
152 unsigned int driver_index;
153
124 JOYSTICK_STATE_BUTTON driver_button_state; 154 JOYSTICK_STATE_BUTTON driver_button_state;
125 JOYSTICK_STATE_HAT driver_hat_state; 155 JOYSTICK_STATE_HAT driver_hat_state;
126 JOYSTICK_STATE_AXIS driver_axis_state; 156 JOYSTICK_STATE_AXIS driver_axis_state;
@@ -130,6 +160,10 @@ extern "C"
130 160
131 /// @name Joystick types 161 /// @name Joystick types
132 ///{ 162 ///{
163
164 /*!
165 * @brief Info specific to joystick peripherals
166 */
133 typedef struct JOYSTICK_INFO 167 typedef struct JOYSTICK_INFO
134 { 168 {
135 PERIPHERAL_INFO peripheral; /*!< @brief peripheral info for this joystick */ 169 PERIPHERAL_INFO peripheral; /*!< @brief peripheral info for this joystick */
@@ -142,6 +176,15 @@ extern "C"
142 bool supports_poweroff; /*!< @brief whether the joystick supports being powered off */ 176 bool supports_poweroff; /*!< @brief whether the joystick supports being powered off */
143 } ATTRIBUTE_PACKED JOYSTICK_INFO; 177 } ATTRIBUTE_PACKED JOYSTICK_INFO;
144 178
179 /*!
180 * @brief Driver input primitives
181 *
182 * Mapping lower-level driver values to higher-level controller features is
183 * non-injective; two triggers can share a single axis.
184 *
185 * To handle this, driver values are subdivided into "primitives" that map
186 * injectively to higher-level features.
187 */
145 typedef enum JOYSTICK_DRIVER_PRIMITIVE_TYPE 188 typedef enum JOYSTICK_DRIVER_PRIMITIVE_TYPE
146 { 189 {
147 JOYSTICK_DRIVER_PRIMITIVE_TYPE_UNKNOWN, 190 JOYSTICK_DRIVER_PRIMITIVE_TYPE_UNKNOWN,
@@ -149,13 +192,22 @@ extern "C"
149 JOYSTICK_DRIVER_PRIMITIVE_TYPE_HAT_DIRECTION, 192 JOYSTICK_DRIVER_PRIMITIVE_TYPE_HAT_DIRECTION,
150 JOYSTICK_DRIVER_PRIMITIVE_TYPE_SEMIAXIS, 193 JOYSTICK_DRIVER_PRIMITIVE_TYPE_SEMIAXIS,
151 JOYSTICK_DRIVER_PRIMITIVE_TYPE_MOTOR, 194 JOYSTICK_DRIVER_PRIMITIVE_TYPE_MOTOR,
195 JOYSTICK_DRIVER_PRIMITIVE_TYPE_KEY,
196 JOYSTICK_DRIVER_PRIMITIVE_TYPE_MOUSE_BUTTON,
197 JOYSTICK_DRIVER_PRIMITIVE_TYPE_RELPOINTER_DIRECTION,
152 } JOYSTICK_DRIVER_PRIMITIVE_TYPE; 198 } JOYSTICK_DRIVER_PRIMITIVE_TYPE;
153 199
200 /*!
201 * @brief Button primitive
202 */
154 typedef struct JOYSTICK_DRIVER_BUTTON 203 typedef struct JOYSTICK_DRIVER_BUTTON
155 { 204 {
156 int index; 205 int index;
157 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_BUTTON; 206 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_BUTTON;
158 207
208 /*!
209 * @brief Hat direction
210 */
159 typedef enum JOYSTICK_DRIVER_HAT_DIRECTION 211 typedef enum JOYSTICK_DRIVER_HAT_DIRECTION
160 { 212 {
161 JOYSTICK_DRIVER_HAT_UNKNOWN, 213 JOYSTICK_DRIVER_HAT_UNKNOWN,
@@ -165,12 +217,18 @@ extern "C"
165 JOYSTICK_DRIVER_HAT_DOWN, 217 JOYSTICK_DRIVER_HAT_DOWN,
166 } JOYSTICK_DRIVER_HAT_DIRECTION; 218 } JOYSTICK_DRIVER_HAT_DIRECTION;
167 219
220 /*!
221 * @brief Hat direction primitive
222 */
168 typedef struct JOYSTICK_DRIVER_HAT 223 typedef struct JOYSTICK_DRIVER_HAT
169 { 224 {
170 int index; 225 int index;
171 JOYSTICK_DRIVER_HAT_DIRECTION direction; 226 JOYSTICK_DRIVER_HAT_DIRECTION direction;
172 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_HAT; 227 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_HAT;
173 228
229 /*!
230 * @brief Semiaxis direction
231 */
174 typedef enum JOYSTICK_DRIVER_SEMIAXIS_DIRECTION 232 typedef enum JOYSTICK_DRIVER_SEMIAXIS_DIRECTION
175 { 233 {
176 JOYSTICK_DRIVER_SEMIAXIS_NEGATIVE = -1, /*!< @brief negative half of the axis */ 234 JOYSTICK_DRIVER_SEMIAXIS_NEGATIVE = -1, /*!< @brief negative half of the axis */
@@ -178,6 +236,9 @@ extern "C"
178 JOYSTICK_DRIVER_SEMIAXIS_POSITIVE = 1, /*!< @brief positive half of the axis */ 236 JOYSTICK_DRIVER_SEMIAXIS_POSITIVE = 1, /*!< @brief positive half of the axis */
179 } JOYSTICK_DRIVER_SEMIAXIS_DIRECTION; 237 } JOYSTICK_DRIVER_SEMIAXIS_DIRECTION;
180 238
239 /*!
240 * @brief Semiaxis primitive
241 */
181 typedef struct JOYSTICK_DRIVER_SEMIAXIS 242 typedef struct JOYSTICK_DRIVER_SEMIAXIS
182 { 243 {
183 int index; 244 int index;
@@ -186,11 +247,70 @@ extern "C"
186 unsigned int range; 247 unsigned int range;
187 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_SEMIAXIS; 248 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_SEMIAXIS;
188 249
250 /*!
251 * @brief Motor primitive
252 */
189 typedef struct JOYSTICK_DRIVER_MOTOR 253 typedef struct JOYSTICK_DRIVER_MOTOR
190 { 254 {
191 int index; 255 int index;
192 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_MOTOR; 256 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_MOTOR;
193 257
258 /*!
259 * @brief Keyboard key primitive
260 */
261 typedef struct JOYSTICK_DRIVER_KEY
262 {
263 char keycode[16];
264 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_KEY;
265
266 /*!
267 * @brief Mouse buttons
268 */
269 typedef enum JOYSTICK_DRIVER_MOUSE_INDEX
270 {
271 JOYSTICK_DRIVER_MOUSE_INDEX_UNKNOWN,
272 JOYSTICK_DRIVER_MOUSE_INDEX_LEFT,
273 JOYSTICK_DRIVER_MOUSE_INDEX_RIGHT,
274 JOYSTICK_DRIVER_MOUSE_INDEX_MIDDLE,
275 JOYSTICK_DRIVER_MOUSE_INDEX_BUTTON4,
276 JOYSTICK_DRIVER_MOUSE_INDEX_BUTTON5,
277 JOYSTICK_DRIVER_MOUSE_INDEX_WHEEL_UP,
278 JOYSTICK_DRIVER_MOUSE_INDEX_WHEEL_DOWN,
279 JOYSTICK_DRIVER_MOUSE_INDEX_HORIZ_WHEEL_LEFT,
280 JOYSTICK_DRIVER_MOUSE_INDEX_HORIZ_WHEEL_RIGHT,
281 } JOYSTICK_DRIVER_MOUSE_INDEX;
282
283 /*!
284 * @brief Mouse button primitive
285 */
286 typedef struct JOYSTICK_DRIVER_MOUSE_BUTTON
287 {
288 JOYSTICK_DRIVER_MOUSE_INDEX button;
289 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_MOUSE_BUTTON;
290
291 /*!
292 * @brief Relative pointer direction
293 */
294 typedef enum JOYSTICK_DRIVER_RELPOINTER_DIRECTION
295 {
296 JOYSTICK_DRIVER_RELPOINTER_UNKNOWN,
297 JOYSTICK_DRIVER_RELPOINTER_LEFT,
298 JOYSTICK_DRIVER_RELPOINTER_RIGHT,
299 JOYSTICK_DRIVER_RELPOINTER_UP,
300 JOYSTICK_DRIVER_RELPOINTER_DOWN,
301 } JOYSTICK_DRIVER_RELPOINTER_DIRECTION;
302
303 /*!
304 * @brief Relative pointer direction primitive
305 */
306 typedef struct JOYSTICK_DRIVER_RELPOINTER
307 {
308 JOYSTICK_DRIVER_RELPOINTER_DIRECTION direction;
309 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_RELPOINTER;
310
311 /*!
312 * @brief Driver primitive struct
313 */
194 typedef struct JOYSTICK_DRIVER_PRIMITIVE 314 typedef struct JOYSTICK_DRIVER_PRIMITIVE
195 { 315 {
196 JOYSTICK_DRIVER_PRIMITIVE_TYPE type; 316 JOYSTICK_DRIVER_PRIMITIVE_TYPE type;
@@ -200,9 +320,18 @@ extern "C"
200 struct JOYSTICK_DRIVER_HAT hat; 320 struct JOYSTICK_DRIVER_HAT hat;
201 struct JOYSTICK_DRIVER_SEMIAXIS semiaxis; 321 struct JOYSTICK_DRIVER_SEMIAXIS semiaxis;
202 struct JOYSTICK_DRIVER_MOTOR motor; 322 struct JOYSTICK_DRIVER_MOTOR motor;
323 struct JOYSTICK_DRIVER_KEY key;
324 struct JOYSTICK_DRIVER_MOUSE_BUTTON mouse;
325 struct JOYSTICK_DRIVER_RELPOINTER relpointer;
203 }; 326 };
204 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_PRIMITIVE; 327 } ATTRIBUTE_PACKED JOYSTICK_DRIVER_PRIMITIVE;
205 328
329 /*!
330 * @brief Controller feature
331 *
332 * Controller features are an abstraction over driver values. Each feature
333 * maps to one or more driver primitives.
334 */
206 typedef enum JOYSTICK_FEATURE_TYPE 335 typedef enum JOYSTICK_FEATURE_TYPE
207 { 336 {
208 JOYSTICK_FEATURE_TYPE_UNKNOWN, 337 JOYSTICK_FEATURE_TYPE_UNKNOWN,
@@ -214,11 +343,15 @@ extern "C"
214 JOYSTICK_FEATURE_TYPE_ABSPOINTER, 343 JOYSTICK_FEATURE_TYPE_ABSPOINTER,
215 JOYSTICK_FEATURE_TYPE_WHEEL, 344 JOYSTICK_FEATURE_TYPE_WHEEL,
216 JOYSTICK_FEATURE_TYPE_THROTTLE, 345 JOYSTICK_FEATURE_TYPE_THROTTLE,
346 JOYSTICK_FEATURE_TYPE_KEY,
217 } JOYSTICK_FEATURE_TYPE; 347 } JOYSTICK_FEATURE_TYPE;
218 348
349 /*!
350 * @brief Indices used to access a feature's driver primitives
351 */
219 typedef enum JOYSTICK_FEATURE_PRIMITIVE 352 typedef enum JOYSTICK_FEATURE_PRIMITIVE
220 { 353 {
221 // Scalar feature 354 // Scalar feature (a button, hat direction or semiaxis)
222 JOYSTICK_SCALAR_PRIMITIVE = 0, 355 JOYSTICK_SCALAR_PRIMITIVE = 0,
223 356
224 // Analog stick 357 // Analog stick
@@ -243,10 +376,25 @@ extern "C"
243 JOYSTICK_THROTTLE_UP = 0, 376 JOYSTICK_THROTTLE_UP = 0,
244 JOYSTICK_THROTTLE_DOWN = 1, 377 JOYSTICK_THROTTLE_DOWN = 1,
245 378
379 // Key
380 JOYSTICK_KEY_PRIMITIVE = 0,
381
382 // Mouse button
383 JOYSTICK_MOUSE_BUTTON = 0,
384
385 // Relative pointer direction
386 JOYSTICK_RELPOINTER_UP = 0,
387 JOYSTICK_RELPOINTER_DOWN = 1,
388 JOYSTICK_RELPOINTER_RIGHT = 2,
389 JOYSTICK_RELPOINTER_LEFT = 3,
390
246 // Maximum number of primitives 391 // Maximum number of primitives
247 JOYSTICK_PRIMITIVE_MAX = 4, 392 JOYSTICK_PRIMITIVE_MAX = 4,
248 } JOYSTICK_FEATURE_PRIMITIVE; 393 } JOYSTICK_FEATURE_PRIMITIVE;
249 394
395 /*!
396 * @brief Mapping between higher-level controller feature and its driver primitives
397 */
250 typedef struct JOYSTICK_FEATURE 398 typedef struct JOYSTICK_FEATURE
251 { 399 {
252 char* name; 400 char* name;