1/*
2 Simple DirectMedia Layer
3 Copyright (C) 2021 Valve Corporation
4
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
12
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
20*/
21
22#ifndef _CONTROLLER_CONSTANTS_
23#define _CONTROLLER_CONSTANTS_
24
25#include "controller_structs.h"
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31#define FEATURE_REPORT_SIZE 64
32
33#define VALVE_USB_VID 0x28DE
34
35// Frame update rate (in ms).
36#define FAST_SCAN_INTERVAL 6
37#define SLOW_SCAN_INTERVAL 9
38
39// Contains each of the USB PIDs for Valve controllers (only add to this enum and never change the order)
40enum ValveControllerPID
41{
42 BASTILLE_PID = 0x2202,
43 CHELL_PID = 0x1101,
44 D0G_PID = 0x1102,
45 ELI_PID = 0x1103,
46 FREEMAN_PID = 0x1104,
47 D0G_BLE_PID = 0x1105,
48 D0G_BLE2_PID = 0x1106,
49 D0GGLE_PID = 0x1142,
50
51 JUPITER_PID = 0x1205,
52};
53
54// This enum contains all of the messages exchanged between the host and the target (only add to this enum and never change the order)
55enum FeatureReportMessageIDs
56{
57 ID_SET_DIGITAL_MAPPINGS = 0x80,
58 ID_CLEAR_DIGITAL_MAPPINGS = 0x81,
59 ID_GET_DIGITAL_MAPPINGS = 0x82,
60 ID_GET_ATTRIBUTES_VALUES = 0x83,
61 ID_GET_ATTRIBUTE_LABEL = 0x84,
62 ID_SET_DEFAULT_DIGITAL_MAPPINGS = 0x85,
63 ID_FACTORY_RESET = 0x86,
64 ID_SET_SETTINGS_VALUES = 0x87,
65 ID_CLEAR_SETTINGS_VALUES = 0x88,
66 ID_GET_SETTINGS_VALUES = 0x89,
67 ID_GET_SETTING_LABEL = 0x8A,
68 ID_GET_SETTINGS_MAXS = 0x8B,
69 ID_GET_SETTINGS_DEFAULTS = 0x8C,
70 ID_SET_CONTROLLER_MODE = 0x8D,
71 ID_LOAD_DEFAULT_SETTINGS = 0x8E,
72 ID_TRIGGER_HAPTIC_PULSE = 0x8F,
73
74 ID_TURN_OFF_CONTROLLER = 0x9F,
75
76 ID_GET_DEVICE_INFO = 0xA1,
77
78 ID_CALIBRATE_TRACKPADS = 0xA7,
79 ID_RESERVED_0 = 0xA8,
80 ID_SET_SERIAL_NUMBER = 0xA9,
81 ID_GET_TRACKPAD_CALIBRATION = 0xAA,
82 ID_GET_TRACKPAD_FACTORY_CALIBRATION = 0xAB,
83 ID_GET_TRACKPAD_RAW_DATA = 0xAC,
84 ID_ENABLE_PAIRING = 0xAD,
85 ID_GET_STRING_ATTRIBUTE = 0xAE,
86 ID_RADIO_ERASE_RECORDS = 0xAF,
87 ID_RADIO_WRITE_RECORD = 0xB0,
88 ID_SET_DONGLE_SETTING = 0xB1,
89 ID_DONGLE_DISCONNECT_DEVICE = 0xB2,
90 ID_DONGLE_COMMIT_DEVICE = 0xB3,
91 ID_DONGLE_GET_WIRELESS_STATE = 0xB4,
92 ID_CALIBRATE_GYRO = 0xB5,
93 ID_PLAY_AUDIO = 0xB6,
94 ID_AUDIO_UPDATE_START = 0xB7,
95 ID_AUDIO_UPDATE_DATA = 0xB8,
96 ID_AUDIO_UPDATE_COMPLETE = 0xB9,
97 ID_GET_CHIPID = 0xBA,
98
99 ID_CALIBRATE_JOYSTICK = 0xBF,
100 ID_CALIBRATE_ANALOG_TRIGGERS = 0xC0,
101 ID_SET_AUDIO_MAPPING = 0xC1,
102 ID_CHECK_GYRO_FW_LOAD = 0xC2,
103 ID_CALIBRATE_ANALOG = 0xC3,
104 ID_DONGLE_GET_CONNECTED_SLOTS = 0xC4,
105
106 ID_RESET_IMU = 0xCE,
107
108 // Deck only
109 ID_TRIGGER_HAPTIC_CMD = 0xEA,
110 ID_TRIGGER_RUMBLE_CMD = 0xEB,
111};
112
113
114// Enumeration of all wireless dongle events
115typedef enum WirelessEventTypes
116{
117 WIRELESS_EVENT_DISCONNECT = 1,
118 WIRELESS_EVENT_CONNECT = 2,
119 WIRELESS_EVENT_PAIR = 3,
120} EWirelessEventType;
121
122
123// Enumeration of generic digital inputs - not all of these will be supported on all controllers (only add to this enum and never change the order)
124typedef enum
125{
126 IO_DIGITAL_BUTTON_NONE = -1,
127 IO_DIGITAL_BUTTON_RIGHT_TRIGGER,
128 IO_DIGITAL_BUTTON_LEFT_TRIGGER,
129 IO_DIGITAL_BUTTON_1,
130 IO_DIGITAL_BUTTON_Y=IO_DIGITAL_BUTTON_1,
131 IO_DIGITAL_BUTTON_2,
132 IO_DIGITAL_BUTTON_B=IO_DIGITAL_BUTTON_2,
133 IO_DIGITAL_BUTTON_3,
134 IO_DIGITAL_BUTTON_X=IO_DIGITAL_BUTTON_3,
135 IO_DIGITAL_BUTTON_4,
136 IO_DIGITAL_BUTTON_A=IO_DIGITAL_BUTTON_4,
137 IO_DIGITAL_BUTTON_RIGHT_BUMPER,
138 IO_DIGITAL_BUTTON_LEFT_BUMPER,
139 IO_DIGITAL_BUTTON_LEFT_JOYSTICK_CLICK,
140 IO_DIGITAL_BUTTON_ESCAPE,
141 IO_DIGITAL_BUTTON_STEAM,
142 IO_DIGITAL_BUTTON_MENU,
143 IO_DIGITAL_STICK_UP,
144 IO_DIGITAL_STICK_DOWN,
145 IO_DIGITAL_STICK_LEFT,
146 IO_DIGITAL_STICK_RIGHT,
147 IO_DIGITAL_TOUCH_1,
148 IO_DIGITAL_BUTTON_UP=IO_DIGITAL_TOUCH_1,
149 IO_DIGITAL_TOUCH_2,
150 IO_DIGITAL_BUTTON_RIGHT=IO_DIGITAL_TOUCH_2,
151 IO_DIGITAL_TOUCH_3,
152 IO_DIGITAL_BUTTON_LEFT=IO_DIGITAL_TOUCH_3,
153 IO_DIGITAL_TOUCH_4,
154 IO_DIGITAL_BUTTON_DOWN=IO_DIGITAL_TOUCH_4,
155 IO_DIGITAL_BUTTON_BACK_LEFT,
156 IO_DIGITAL_BUTTON_BACK_RIGHT,
157 IO_DIGITAL_LEFT_TRACKPAD_N,
158 IO_DIGITAL_LEFT_TRACKPAD_NE,
159 IO_DIGITAL_LEFT_TRACKPAD_E,
160 IO_DIGITAL_LEFT_TRACKPAD_SE,
161 IO_DIGITAL_LEFT_TRACKPAD_S,
162 IO_DIGITAL_LEFT_TRACKPAD_SW,
163 IO_DIGITAL_LEFT_TRACKPAD_W,
164 IO_DIGITAL_LEFT_TRACKPAD_NW,
165 IO_DIGITAL_RIGHT_TRACKPAD_N,
166 IO_DIGITAL_RIGHT_TRACKPAD_NE,
167 IO_DIGITAL_RIGHT_TRACKPAD_E,
168 IO_DIGITAL_RIGHT_TRACKPAD_SE,
169 IO_DIGITAL_RIGHT_TRACKPAD_S,
170 IO_DIGITAL_RIGHT_TRACKPAD_SW,
171 IO_DIGITAL_RIGHT_TRACKPAD_W,
172 IO_DIGITAL_RIGHT_TRACKPAD_NW,
173 IO_DIGITAL_LEFT_TRACKPAD_DOUBLE_TAP,
174 IO_DIGITAL_RIGHT_TRACKPAD_DOUBLE_TAP,
175 IO_DIGITAL_LEFT_TRACKPAD_OUTER_RADIUS,
176 IO_DIGITAL_RIGHT_TRACKPAD_OUTER_RADIUS,
177 IO_DIGITAL_LEFT_TRACKPAD_CLICK,
178 IO_DIGITAL_RIGHT_TRACKPAD_CLICK,
179 IO_DIGITAL_BATTERY_LOW,
180 IO_DIGITAL_LEFT_TRIGGER_THRESHOLD,
181 IO_DIGITAL_RIGHT_TRIGGER_THRESHOLD,
182 IO_DIGITAL_BUTTON_BACK_LEFT2,
183 IO_DIGITAL_BUTTON_BACK_RIGHT2,
184 IO_DIGITAL_BUTTON_ALWAYS_ON,
185 IO_DIGITAL_BUTTON_ANCILLARY_1,
186 IO_DIGITAL_BUTTON_MACRO_0,
187 IO_DIGITAL_BUTTON_MACRO_1,
188 IO_DIGITAL_BUTTON_MACRO_2,
189 IO_DIGITAL_BUTTON_MACRO_3,
190 IO_DIGITAL_BUTTON_MACRO_4,
191 IO_DIGITAL_BUTTON_MACRO_5,
192 IO_DIGITAL_BUTTON_MACRO_6,
193 IO_DIGITAL_BUTTON_MACRO_7,
194 IO_DIGITAL_BUTTON_MACRO_1FINGER,
195 IO_DIGITAL_BUTTON_MACRO_2FINGER,
196 IO_DIGITAL_COUNT
197} DigitalIO ;
198
199// Enumeration of generic analog inputs - not all of these will be supported on all controllers (only add to this enum and never change the order)
200typedef enum
201{
202 IO_ANALOG_LEFT_STICK_X,
203 IO_ANALOG_LEFT_STICK_Y,
204 IO_ANALOG_RIGHT_STICK_X,
205 IO_ANALOG_RIGHT_STICK_Y,
206 IO_ANALOG_LEFT_TRIGGER,
207 IO_ANALOG_RIGHT_TRIGGER,
208 IO_MOUSE1_X,
209 IO_MOUSE1_Y,
210 IO_MOUSE1_Z,
211 IO_ACCEL_X,
212 IO_ACCEL_Y,
213 IO_ACCEL_Z,
214 IO_GYRO_X,
215 IO_GYRO_Y,
216 IO_GYRO_Z,
217 IO_GYRO_QUAT_W,
218 IO_GYRO_QUAT_X,
219 IO_GYRO_QUAT_Y,
220 IO_GYRO_QUAT_Z,
221 IO_GYRO_STEERING_VEC,
222 IO_RAW_TRIGGER_LEFT,
223 IO_RAW_TRIGGER_RIGHT,
224 IO_RAW_JOYSTICK_X,
225 IO_RAW_JOYSTICK_Y,
226 IO_GYRO_TILT_VEC,
227 IO_PRESSURE_LEFT_PAD,
228 IO_PRESSURE_RIGHT_PAD,
229 IO_PRESSURE_LEFT_BUMPER,
230 IO_PRESSURE_RIGHT_BUMPER,
231 IO_PRESSURE_LEFT_GRIP,
232 IO_PRESSURE_RIGHT_GRIP,
233 IO_ANALOG_LEFT_TRIGGER_THRESHOLD,
234 IO_ANALOG_RIGHT_TRIGGER_THRESHOLD,
235 IO_PRESSURE_RIGHT_PAD_THRESHOLD,
236 IO_PRESSURE_LEFT_PAD_THRESHOLD,
237 IO_PRESSURE_RIGHT_BUMPER_THRESHOLD,
238 IO_PRESSURE_LEFT_BUMPER_THRESHOLD,
239 IO_PRESSURE_RIGHT_GRIP_THRESHOLD,
240 IO_PRESSURE_LEFT_GRIP_THRESHOLD,
241 IO_PRESSURE_RIGHT_PAD_RAW,
242 IO_PRESSURE_LEFT_PAD_RAW,
243 IO_PRESSURE_RIGHT_BUMPER_RAW,
244 IO_PRESSURE_LEFT_BUMPER_RAW,
245 IO_PRESSURE_RIGHT_GRIP_RAW,
246 IO_PRESSURE_LEFT_GRIP_RAW,
247 IO_PRESSURE_RIGHT_GRIP2_THRESHOLD,
248 IO_PRESSURE_LEFT_GRIP2_THRESHOLD,
249 IO_PRESSURE_LEFT_GRIP2,
250 IO_PRESSURE_RIGHT_GRIP2,
251 IO_PRESSURE_RIGHT_GRIP2_RAW,
252 IO_PRESSURE_LEFT_GRIP2_RAW,
253 IO_ANALOG_COUNT
254} AnalogIO;
255
256
257// Contains list of all types of devices that the controller emulates (only add to this enum and never change the order)
258enum DeviceTypes
259{
260 DEVICE_KEYBOARD,
261 DEVICE_MOUSE,
262 DEVICE_GAMEPAD,
263 DEVICE_MODE_ADJUST,
264 DEVICE_COUNT
265};
266
267// Scan codes for HID keyboards
268enum HIDKeyboardKeys
269{
270 KEY_INVALID,
271 KEY_FIRST = 0x04,
272 KEY_A = KEY_FIRST, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L,
273 KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, KEY_1, KEY_2,
274 KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_RETURN, KEY_ESCAPE, KEY_BACKSPACE, KEY_TAB, KEY_SPACE, KEY_DASH, KEY_EQUALS, KEY_LEFT_BRACKET,
275 KEY_RIGHT_BRACKET, KEY_BACKSLASH, KEY_UNUSED1, KEY_SEMICOLON, KEY_SINGLE_QUOTE, KEY_BACK_TICK, KEY_COMMA, KEY_PERIOD, KEY_FORWARD_SLASH, KEY_CAPSLOCK, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6,
276 KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12, KEY_PRINT_SCREEN, KEY_SCROLL_LOCK, KEY_BREAK, KEY_INSERT, KEY_HOME, KEY_PAGE_UP, KEY_DELETE, KEY_END, KEY_PAGE_DOWN, KEY_RIGHT_ARROW,
277 KEY_LEFT_ARROW, KEY_DOWN_ARROW, KEY_UP_ARROW, KEY_NUM_LOCK, KEY_KEYPAD_FORWARD_SLASH, KEY_KEYPAD_ASTERISK, KEY_KEYPAD_DASH, KEY_KEYPAD_PLUS, KEY_KEYPAD_ENTER, KEY_KEYPAD_1, KEY_KEYPAD_2, KEY_KEYPAD_3, KEY_KEYPAD_4, KEY_KEYPAD_5, KEY_KEYPAD_6, KEY_KEYPAD_7,
278 KEY_KEYPAD_8, KEY_KEYPAD_9, KEY_KEYPAD_0, KEY_KEYPAD_PERIOD,
279 KEY_LALT,
280 KEY_LSHIFT,
281 KEY_LWIN,
282 KEY_LCONTROL,
283 KEY_RALT,
284 KEY_RSHIFT,
285 KEY_RWIN,
286 KEY_RCONTROL,
287 KEY_VOLUP,
288 KEY_VOLDOWN,
289 KEY_MUTE,
290 KEY_PLAY,
291 KEY_STOP,
292 KEY_NEXT,
293 KEY_PREV,
294 KEY_LAST = KEY_PREV
295};
296
297enum ModifierMasks
298{
299 KEY_LCONTROL_MASK = (1<<0),
300 KEY_LSHIFT_MASK = (1<<1),
301 KEY_LALT_MASK = (1<<2),
302 KEY_LWIN_MASK = (1<<3),
303 KEY_RCONTROL_MASK = (1<<4),
304 KEY_RSHIFT_MASK = (1<<5),
305 KEY_RALT_MASK = (1<<6),
306 KEY_RWIN_MASK = (1<<7)
307};
308
309// Standard mouse buttons as specified in the HID mouse spec
310enum MouseButtons
311{
312 MOUSE_BTN_LEFT,
313 MOUSE_BTN_RIGHT,
314 MOUSE_BTN_MIDDLE,
315 MOUSE_BTN_BACK,
316 MOUSE_BTN_FORWARD,
317 MOUSE_SCROLL_UP,
318 MOUSE_SCROLL_DOWN,
319 MOUSE_BTN_COUNT
320};
321
322// Gamepad buttons
323enum GamepadButtons
324{
325 GAMEPAD_BTN_TRIGGER_LEFT=1,
326 GAMEPAD_BTN_TRIGGER_RIGHT,
327 GAMEPAD_BTN_A,
328 GAMEPAD_BTN_B,
329 GAMEPAD_BTN_Y,
330 GAMEPAD_BTN_X,
331 GAMEPAD_BTN_SHOULDER_LEFT,
332 GAMEPAD_BTN_SHOULDER_RIGHT,
333 GAMEPAD_BTN_LEFT_JOYSTICK,
334 GAMEPAD_BTN_RIGHT_JOYSTICK,
335 GAMEPAD_BTN_START,
336 GAMEPAD_BTN_SELECT,
337 GAMEPAD_BTN_STEAM,
338 GAMEPAD_BTN_DPAD_UP,
339 GAMEPAD_BTN_DPAD_DOWN,
340 GAMEPAD_BTN_DPAD_LEFT,
341 GAMEPAD_BTN_DPAD_RIGHT,
342 GAMEPAD_BTN_LSTICK_UP,
343 GAMEPAD_BTN_LSTICK_DOWN,
344 GAMEPAD_BTN_LSTICK_LEFT,
345 GAMEPAD_BTN_LSTICK_RIGHT,
346 GAMEPAD_BTN_RSTICK_UP,
347 GAMEPAD_BTN_RSTICK_DOWN,
348 GAMEPAD_BTN_RSTICK_LEFT,
349 GAMEPAD_BTN_RSTICK_RIGHT,
350 GAMEPAD_BTN_COUNT
351};
352
353// Mode adjust
354enum ModeAdjustModes
355{
356 MODE_ADJUST_SENSITITY=1,
357 MODE_ADJUST_LEFT_PAD_SECONDARY_MODE,
358 MODE_ADJUST_RIGHT_PAD_SECONDARY_MODE,
359 MODE_ADJUST_COUNT
360};
361
362// Read-only attributes of controllers (only add to this enum and never change the order)
363typedef enum
364{
365 ATTRIB_UNIQUE_ID,
366 ATTRIB_PRODUCT_ID,
367 ATTRIB_PRODUCT_REVISON, // deprecated
368 ATTRIB_CAPABILITIES = ATTRIB_PRODUCT_REVISON, // intentional aliasing
369 ATTRIB_FIRMWARE_VERSION, // deprecated
370 ATTRIB_FIRMWARE_BUILD_TIME,
371 ATTRIB_RADIO_FIRMWARE_BUILD_TIME,
372 ATTRIB_RADIO_DEVICE_ID0,
373 ATTRIB_RADIO_DEVICE_ID1,
374 ATTRIB_DONGLE_FIRMWARE_BUILD_TIME,
375 ATTRIB_BOARD_REVISION,
376 ATTRIB_BOOTLOADER_BUILD_TIME,
377 ATTRIB_CONNECTION_INTERVAL_IN_US,
378 ATTRIB_COUNT
379} ControllerAttributes;
380
381// Read-only string attributes of controllers (only add to this enum and never change the order)
382typedef enum
383{
384 ATTRIB_STR_BOARD_SERIAL,
385 ATTRIB_STR_UNIT_SERIAL,
386 ATTRIB_STR_COUNT
387} ControllerStringAttributes;
388
389typedef enum
390{
391 STATUS_CODE_NORMAL,
392 STATUS_CODE_CRITICAL_BATTERY,
393 STATUS_CODE_GYRO_INIT_ERROR,
394} ControllerStatusEventCodes;
395
396typedef enum
397{
398 STATUS_STATE_LOW_BATTERY=0,
399} ControllerStatusStateFlags;
400
401typedef enum {
402 TRACKPAD_ABSOLUTE_MOUSE,
403 TRACKPAD_RELATIVE_MOUSE,
404 TRACKPAD_DPAD_FOUR_WAY_DISCRETE,
405 TRACKPAD_DPAD_FOUR_WAY_OVERLAP,
406 TRACKPAD_DPAD_EIGHT_WAY,
407 TRACKPAD_RADIAL_MODE,
408 TRACKPAD_ABSOLUTE_DPAD,
409 TRACKPAD_NONE,
410 TRACKPAD_GESTURE_KEYBOARD,
411 TRACKPAD_NUM_MODES
412} TrackpadDPadMode;
413
414// Read-write controller settings (only add to this enum and never change the order)
415typedef enum
416{
417 SETTING_MOUSE_SENSITIVITY,
418 SETTING_MOUSE_ACCELERATION,
419 SETTING_TRACKBALL_ROTATION_ANGLE,
420 SETTING_HAPTIC_INTENSITY_UNUSED,
421 SETTING_LEFT_GAMEPAD_STICK_ENABLED,
422 SETTING_RIGHT_GAMEPAD_STICK_ENABLED,
423 SETTING_USB_DEBUG_MODE,
424 SETTING_LEFT_TRACKPAD_MODE,
425 SETTING_RIGHT_TRACKPAD_MODE,
426 SETTING_MOUSE_POINTER_ENABLED,
427
428 // 10
429 SETTING_DPAD_DEADZONE,
430 SETTING_MINIMUM_MOMENTUM_VEL,
431 SETTING_MOMENTUM_DECAY_AMOUNT,
432 SETTING_TRACKPAD_RELATIVE_MODE_TICKS_PER_PIXEL,
433 SETTING_HAPTIC_INCREMENT,
434 SETTING_DPAD_ANGLE_SIN,
435 SETTING_DPAD_ANGLE_COS,
436 SETTING_MOMENTUM_VERTICAL_DIVISOR,
437 SETTING_MOMENTUM_MAXIMUM_VELOCITY,
438 SETTING_TRACKPAD_Z_ON,
439
440 // 20
441 SETTING_TRACKPAD_Z_OFF,
442 SETTING_SENSITIVITY_SCALE_AMOUNT,
443 SETTING_LEFT_TRACKPAD_SECONDARY_MODE,
444 SETTING_RIGHT_TRACKPAD_SECONDARY_MODE,
445 SETTING_SMOOTH_ABSOLUTE_MOUSE,
446 SETTING_STEAMBUTTON_POWEROFF_TIME,
447 SETTING_UNUSED_1,
448 SETTING_TRACKPAD_OUTER_RADIUS,
449 SETTING_TRACKPAD_Z_ON_LEFT,
450 SETTING_TRACKPAD_Z_OFF_LEFT,
451
452 // 30
453 SETTING_TRACKPAD_OUTER_SPIN_VEL,
454 SETTING_TRACKPAD_OUTER_SPIN_RADIUS,
455 SETTING_TRACKPAD_OUTER_SPIN_HORIZONTAL_ONLY,
456 SETTING_TRACKPAD_RELATIVE_MODE_DEADZONE,
457 SETTING_TRACKPAD_RELATIVE_MODE_MAX_VEL,
458 SETTING_TRACKPAD_RELATIVE_MODE_INVERT_Y,
459 SETTING_TRACKPAD_DOUBLE_TAP_BEEP_ENABLED,
460 SETTING_TRACKPAD_DOUBLE_TAP_BEEP_PERIOD,
461 SETTING_TRACKPAD_DOUBLE_TAP_BEEP_COUNT,
462 SETTING_TRACKPAD_OUTER_RADIUS_RELEASE_ON_TRANSITION,
463
464 // 40
465 SETTING_RADIAL_MODE_ANGLE,
466 SETTING_HAPTIC_INTENSITY_MOUSE_MODE,
467 SETTING_LEFT_DPAD_REQUIRES_CLICK,
468 SETTING_RIGHT_DPAD_REQUIRES_CLICK,
469 SETTING_LED_BASELINE_BRIGHTNESS,
470 SETTING_LED_USER_BRIGHTNESS,
471 SETTING_ENABLE_RAW_JOYSTICK,
472 SETTING_ENABLE_FAST_SCAN,
473 SETTING_IMU_MODE,
474 SETTING_WIRELESS_PACKET_VERSION,
475
476 // 50
477 SETTING_SLEEP_INACTIVITY_TIMEOUT,
478 SETTING_TRACKPAD_NOISE_THRESHOLD,
479 SETTING_LEFT_TRACKPAD_CLICK_PRESSURE,
480 SETTING_RIGHT_TRACKPAD_CLICK_PRESSURE,
481 SETTING_LEFT_BUMPER_CLICK_PRESSURE,
482 SETTING_RIGHT_BUMPER_CLICK_PRESSURE,
483 SETTING_LEFT_GRIP_CLICK_PRESSURE,
484 SETTING_RIGHT_GRIP_CLICK_PRESSURE,
485 SETTING_LEFT_GRIP2_CLICK_PRESSURE,
486 SETTING_RIGHT_GRIP2_CLICK_PRESSURE,
487
488 // 60
489 SETTING_PRESSURE_MODE,
490 SETTING_CONTROLLER_TEST_MODE,
491 SETTING_TRIGGER_MODE,
492 SETTING_TRACKPAD_Z_THRESHOLD,
493 SETTING_FRAME_RATE,
494 SETTING_TRACKPAD_FILT_CTRL,
495 SETTING_TRACKPAD_CLIP,
496 SETTING_DEBUG_OUTPUT_SELECT,
497 SETTING_TRIGGER_THRESHOLD_PERCENT,
498 SETTING_TRACKPAD_FREQUENCY_HOPPING,
499
500 // 70
501 SETTING_HAPTICS_ENABLED,
502 SETTING_STEAM_WATCHDOG_ENABLE,
503 SETTING_TIMP_TOUCH_THRESHOLD_ON,
504 SETTING_TIMP_TOUCH_THRESHOLD_OFF,
505 SETTING_FREQ_HOPPING,
506 SETTING_TEST_CONTROL,
507 SETTING_HAPTIC_MASTER_GAIN_DB,
508 SETTING_THUMB_TOUCH_THRESH,
509 SETTING_DEVICE_POWER_STATUS,
510 SETTING_HAPTIC_INTENSITY,
511
512 // 80
513 SETTING_STABILIZER_ENABLED,
514 SETTING_TIMP_MODE_MTE,
515 SETTING_COUNT,
516
517 // This is a special setting value use for callbacks and should not be set/get explicitly.
518 SETTING_ALL=0xFF
519} ControllerSettings;
520
521typedef enum
522{
523 SETTING_DEFAULT,
524 SETTING_MIN,
525 SETTING_MAX,
526 SETTING_DEFAULTMINMAXCOUNT
527} SettingDefaultMinMax;
528
529// Bitmask that define which IMU features to enable.
530typedef enum
531{
532 SETTING_GYRO_MODE_OFF = 0x0000,
533 SETTING_GYRO_MODE_STEERING = 0x0001,
534 SETTING_GYRO_MODE_TILT = 0x0002,
535 SETTING_GYRO_MODE_SEND_ORIENTATION = 0x0004,
536 SETTING_GYRO_MODE_SEND_RAW_ACCEL = 0x0008,
537 SETTING_GYRO_MODE_SEND_RAW_GYRO = 0x0010,
538} SettingGyroMode;
539
540// Bitmask for haptic pulse flags
541typedef enum
542{
543 HAPTIC_PULSE_NORMAL = 0x0000,
544 HAPTIC_PULSE_HIGH_PRIORITY = 0x0001,
545 HAPTIC_PULSE_VERY_HIGH_PRIORITY = 0x0002,
546 HAPTIC_PULSE_IGNORE_USER_PREFS = 0x0003,
547} SettingHapticPulseFlags;
548
549typedef struct
550{
551 // default,min,max in this array in that order
552 short defaultminmax[SETTING_DEFAULTMINMAXCOUNT];
553} SettingValueRange_t;
554
555// below is from controller_constants.c which should be compiled into any code that uses this
556extern const SettingValueRange_t g_DefaultSettingValues[SETTING_COUNT];
557
558// Read-write settings for dongle (only add to this enum and never change the order)
559typedef enum
560{
561 DONGLE_SETTING_MOUSE_KEYBOARD_ENABLED,
562 DONGLE_SETTING_COUNT,
563} DongleSettings;
564
565typedef enum
566{
567 AUDIO_STARTUP = 0,
568 AUDIO_SHUTDOWN = 1,
569 AUDIO_PAIR = 2,
570 AUDIO_PAIR_SUCCESS = 3,
571 AUDIO_IDENTIFY = 4,
572 AUDIO_LIZARDMODE = 5,
573 AUDIO_NORMALMODE = 6,
574
575 AUDIO_MAX_SLOT = 15
576} ControllerAudio;
577
578#ifdef __cplusplus
579}
580#endif
581
582#endif // _CONTROLLER_CONSTANTS_H
583