Simple Directmedia Layer
at main 582 lines 17 kB view raw
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