controller_constants.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. /*
  2. Simple DirectMedia Layer
  3. Copyright (C) 2021 Valve Corporation
  4. This software is provided 'as-is', without any express or implied
  5. warranty. In no event will the authors be held liable for any damages
  6. arising from the use of this software.
  7. Permission is granted to anyone to use this software for any purpose,
  8. including commercial applications, and to alter it and redistribute it
  9. freely, subject to the following restrictions:
  10. 1. The origin of this software must not be misrepresented; you must not
  11. claim that you wrote the original software. If you use this software
  12. in a product, an acknowledgment in the product documentation would be
  13. appreciated but is not required.
  14. 2. Altered source versions must be plainly marked as such, and must not be
  15. misrepresented as being the original software.
  16. 3. This notice may not be removed or altered from any source distribution.
  17. */
  18. #ifndef _CONTROLLER_CONSTANTS_
  19. #define _CONTROLLER_CONSTANTS_
  20. #include "controller_structs.h"
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. #define FEATURE_REPORT_SIZE 64
  25. #define VALVE_USB_VID 0x28DE
  26. // Frame update rate (in ms).
  27. #define FAST_SCAN_INTERVAL 6
  28. #define SLOW_SCAN_INTERVAL 9
  29. // Contains each of the USB PIDs for Valve controllers (only add to this enum and never change the order)
  30. enum ValveControllerPID
  31. {
  32. BASTILLE_PID = 0x2202,
  33. CHELL_PID = 0x1101,
  34. D0G_PID = 0x1102,
  35. ELI_PID = 0x1103,
  36. FREEMAN_PID = 0x1104,
  37. D0G_BLE_PID = 0x1105,
  38. D0G_BLE2_PID = 0x1106,
  39. D0GGLE_PID = 0x1142,
  40. };
  41. // This enum contains all of the messages exchanged between the host and the target (only add to this enum and never change the order)
  42. enum FeatureReportMessageIDs
  43. {
  44. ID_SET_DIGITAL_MAPPINGS = 0x80,
  45. ID_CLEAR_DIGITAL_MAPPINGS = 0x81,
  46. ID_GET_DIGITAL_MAPPINGS = 0x82,
  47. ID_GET_ATTRIBUTES_VALUES = 0x83,
  48. ID_GET_ATTRIBUTE_LABEL = 0x84,
  49. ID_SET_DEFAULT_DIGITAL_MAPPINGS = 0x85,
  50. ID_FACTORY_RESET = 0x86,
  51. ID_SET_SETTINGS_VALUES = 0x87,
  52. ID_CLEAR_SETTINGS_VALUES = 0x88,
  53. ID_GET_SETTINGS_VALUES = 0x89,
  54. ID_GET_SETTING_LABEL = 0x8A,
  55. ID_GET_SETTINGS_MAXS = 0x8B,
  56. ID_GET_SETTINGS_DEFAULTS = 0x8C,
  57. ID_SET_CONTROLLER_MODE = 0x8D,
  58. ID_LOAD_DEFAULT_SETTINGS = 0x8E,
  59. ID_TRIGGER_HAPTIC_PULSE = 0x8F,
  60. ID_TURN_OFF_CONTROLLER = 0x9F,
  61. ID_GET_DEVICE_INFO = 0xA1,
  62. ID_CALIBRATE_TRACKPADS = 0xA7,
  63. ID_RESERVED_0 = 0xA8,
  64. ID_SET_SERIAL_NUMBER = 0xA9,
  65. ID_GET_TRACKPAD_CALIBRATION = 0xAA,
  66. ID_GET_TRACKPAD_FACTORY_CALIBRATION = 0xAB,
  67. ID_GET_TRACKPAD_RAW_DATA = 0xAC,
  68. ID_ENABLE_PAIRING = 0xAD,
  69. ID_GET_STRING_ATTRIBUTE = 0xAE,
  70. ID_RADIO_ERASE_RECORDS = 0xAF,
  71. ID_RADIO_WRITE_RECORD = 0xB0,
  72. ID_SET_DONGLE_SETTING = 0xB1,
  73. ID_DONGLE_DISCONNECT_DEVICE = 0xB2,
  74. ID_DONGLE_COMMIT_DEVICE = 0xB3,
  75. ID_DONGLE_GET_WIRELESS_STATE = 0xB4,
  76. ID_CALIBRATE_GYRO = 0xB5,
  77. ID_PLAY_AUDIO = 0xB6,
  78. ID_AUDIO_UPDATE_START = 0xB7,
  79. ID_AUDIO_UPDATE_DATA = 0xB8,
  80. ID_AUDIO_UPDATE_COMPLETE = 0xB9,
  81. ID_GET_CHIPID = 0xBA,
  82. ID_CALIBRATE_JOYSTICK = 0xBF,
  83. ID_CALIBRATE_ANALOG_TRIGGERS = 0xC0,
  84. ID_SET_AUDIO_MAPPING = 0xC1,
  85. ID_CHECK_GYRO_FW_LOAD = 0xC2,
  86. ID_CALIBRATE_ANALOG = 0xC3,
  87. ID_DONGLE_GET_CONNECTED_SLOTS = 0xC4,
  88. };
  89. // Enumeration of all wireless dongle events
  90. typedef enum WirelessEventTypes
  91. {
  92. WIRELESS_EVENT_DISCONNECT = 1,
  93. WIRELESS_EVENT_CONNECT = 2,
  94. WIRELESS_EVENT_PAIR = 3,
  95. } EWirelessEventType;
  96. // 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)
  97. typedef enum
  98. {
  99. IO_DIGITAL_BUTTON_NONE = -1,
  100. IO_DIGITAL_BUTTON_RIGHT_TRIGGER,
  101. IO_DIGITAL_BUTTON_LEFT_TRIGGER,
  102. IO_DIGITAL_BUTTON_1,
  103. IO_DIGITAL_BUTTON_Y=IO_DIGITAL_BUTTON_1,
  104. IO_DIGITAL_BUTTON_2,
  105. IO_DIGITAL_BUTTON_B=IO_DIGITAL_BUTTON_2,
  106. IO_DIGITAL_BUTTON_3,
  107. IO_DIGITAL_BUTTON_X=IO_DIGITAL_BUTTON_3,
  108. IO_DIGITAL_BUTTON_4,
  109. IO_DIGITAL_BUTTON_A=IO_DIGITAL_BUTTON_4,
  110. IO_DIGITAL_BUTTON_RIGHT_BUMPER,
  111. IO_DIGITAL_BUTTON_LEFT_BUMPER,
  112. IO_DIGITAL_BUTTON_LEFT_JOYSTICK_CLICK,
  113. IO_DIGITAL_BUTTON_ESCAPE,
  114. IO_DIGITAL_BUTTON_STEAM,
  115. IO_DIGITAL_BUTTON_MENU,
  116. IO_DIGITAL_STICK_UP,
  117. IO_DIGITAL_STICK_DOWN,
  118. IO_DIGITAL_STICK_LEFT,
  119. IO_DIGITAL_STICK_RIGHT,
  120. IO_DIGITAL_TOUCH_1,
  121. IO_DIGITAL_BUTTON_UP=IO_DIGITAL_TOUCH_1,
  122. IO_DIGITAL_TOUCH_2,
  123. IO_DIGITAL_BUTTON_RIGHT=IO_DIGITAL_TOUCH_2,
  124. IO_DIGITAL_TOUCH_3,
  125. IO_DIGITAL_BUTTON_LEFT=IO_DIGITAL_TOUCH_3,
  126. IO_DIGITAL_TOUCH_4,
  127. IO_DIGITAL_BUTTON_DOWN=IO_DIGITAL_TOUCH_4,
  128. IO_DIGITAL_BUTTON_BACK_LEFT,
  129. IO_DIGITAL_BUTTON_BACK_RIGHT,
  130. IO_DIGITAL_LEFT_TRACKPAD_N,
  131. IO_DIGITAL_LEFT_TRACKPAD_NE,
  132. IO_DIGITAL_LEFT_TRACKPAD_E,
  133. IO_DIGITAL_LEFT_TRACKPAD_SE,
  134. IO_DIGITAL_LEFT_TRACKPAD_S,
  135. IO_DIGITAL_LEFT_TRACKPAD_SW,
  136. IO_DIGITAL_LEFT_TRACKPAD_W,
  137. IO_DIGITAL_LEFT_TRACKPAD_NW,
  138. IO_DIGITAL_RIGHT_TRACKPAD_N,
  139. IO_DIGITAL_RIGHT_TRACKPAD_NE,
  140. IO_DIGITAL_RIGHT_TRACKPAD_E,
  141. IO_DIGITAL_RIGHT_TRACKPAD_SE,
  142. IO_DIGITAL_RIGHT_TRACKPAD_S,
  143. IO_DIGITAL_RIGHT_TRACKPAD_SW,
  144. IO_DIGITAL_RIGHT_TRACKPAD_W,
  145. IO_DIGITAL_RIGHT_TRACKPAD_NW,
  146. IO_DIGITAL_LEFT_TRACKPAD_DOUBLE_TAP,
  147. IO_DIGITAL_RIGHT_TRACKPAD_DOUBLE_TAP,
  148. IO_DIGITAL_LEFT_TRACKPAD_OUTER_RADIUS,
  149. IO_DIGITAL_RIGHT_TRACKPAD_OUTER_RADIUS,
  150. IO_DIGITAL_LEFT_TRACKPAD_CLICK,
  151. IO_DIGITAL_RIGHT_TRACKPAD_CLICK,
  152. IO_DIGITAL_BATTERY_LOW,
  153. IO_DIGITAL_LEFT_TRIGGER_THRESHOLD,
  154. IO_DIGITAL_RIGHT_TRIGGER_THRESHOLD,
  155. IO_DIGITAL_BUTTON_BACK_LEFT2,
  156. IO_DIGITAL_BUTTON_BACK_RIGHT2,
  157. IO_DIGITAL_BUTTON_ALWAYS_ON,
  158. IO_DIGITAL_BUTTON_ANCILLARY_1,
  159. IO_DIGITAL_BUTTON_MACRO_0,
  160. IO_DIGITAL_BUTTON_MACRO_1,
  161. IO_DIGITAL_BUTTON_MACRO_2,
  162. IO_DIGITAL_BUTTON_MACRO_3,
  163. IO_DIGITAL_BUTTON_MACRO_4,
  164. IO_DIGITAL_BUTTON_MACRO_5,
  165. IO_DIGITAL_BUTTON_MACRO_6,
  166. IO_DIGITAL_BUTTON_MACRO_7,
  167. IO_DIGITAL_BUTTON_MACRO_1FINGER,
  168. IO_DIGITAL_BUTTON_MACRO_2FINGER,
  169. IO_DIGITAL_COUNT
  170. } DigitalIO ;
  171. // 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)
  172. typedef enum
  173. {
  174. IO_ANALOG_LEFT_STICK_X,
  175. IO_ANALOG_LEFT_STICK_Y,
  176. IO_ANALOG_RIGHT_STICK_X,
  177. IO_ANALOG_RIGHT_STICK_Y,
  178. IO_ANALOG_LEFT_TRIGGER,
  179. IO_ANALOG_RIGHT_TRIGGER,
  180. IO_MOUSE1_X,
  181. IO_MOUSE1_Y,
  182. IO_MOUSE1_Z,
  183. IO_ACCEL_X,
  184. IO_ACCEL_Y,
  185. IO_ACCEL_Z,
  186. IO_GYRO_X,
  187. IO_GYRO_Y,
  188. IO_GYRO_Z,
  189. IO_GYRO_QUAT_W,
  190. IO_GYRO_QUAT_X,
  191. IO_GYRO_QUAT_Y,
  192. IO_GYRO_QUAT_Z,
  193. IO_GYRO_STEERING_VEC,
  194. IO_RAW_TRIGGER_LEFT,
  195. IO_RAW_TRIGGER_RIGHT,
  196. IO_RAW_JOYSTICK_X,
  197. IO_RAW_JOYSTICK_Y,
  198. IO_GYRO_TILT_VEC,
  199. IO_ANALOG_COUNT
  200. } AnalogIO;
  201. // Contains list of all types of devices that the controller emulates (only add to this enum and never change the order)
  202. enum DeviceTypes
  203. {
  204. DEVICE_KEYBOARD,
  205. DEVICE_MOUSE,
  206. DEVICE_GAMEPAD,
  207. DEVICE_MODE_ADJUST,
  208. DEVICE_COUNT
  209. };
  210. // Scan codes for HID keyboards
  211. enum HIDKeyboardKeys
  212. {
  213. KEY_INVALID,
  214. KEY_FIRST = 0x04,
  215. 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,
  216. 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,
  217. 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,
  218. 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,
  219. 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,
  220. 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,
  221. KEY_KEYPAD_8, KEY_KEYPAD_9, KEY_KEYPAD_0, KEY_KEYPAD_PERIOD,
  222. KEY_LALT,
  223. KEY_LSHIFT,
  224. KEY_LWIN,
  225. KEY_LCONTROL,
  226. KEY_RALT,
  227. KEY_RSHIFT,
  228. KEY_RWIN,
  229. KEY_RCONTROL,
  230. KEY_VOLUP,
  231. KEY_VOLDOWN,
  232. KEY_MUTE,
  233. KEY_PLAY,
  234. KEY_STOP,
  235. KEY_NEXT,
  236. KEY_PREV,
  237. KEY_LAST = KEY_PREV
  238. };
  239. enum ModifierMasks
  240. {
  241. KEY_LCONTROL_MASK = (1<<0),
  242. KEY_LSHIFT_MASK = (1<<1),
  243. KEY_LALT_MASK = (1<<2),
  244. KEY_LWIN_MASK = (1<<3),
  245. KEY_RCONTROL_MASK = (1<<4),
  246. KEY_RSHIFT_MASK = (1<<5),
  247. KEY_RALT_MASK = (1<<6),
  248. KEY_RWIN_MASK = (1<<7)
  249. };
  250. // Standard mouse buttons as specified in the HID mouse spec
  251. enum MouseButtons
  252. {
  253. MOUSE_BTN_LEFT,
  254. MOUSE_BTN_RIGHT,
  255. MOUSE_BTN_MIDDLE,
  256. MOUSE_BTN_BACK,
  257. MOUSE_BTN_FORWARD,
  258. MOUSE_SCROLL_UP,
  259. MOUSE_SCROLL_DOWN,
  260. MOUSE_BTN_COUNT
  261. };
  262. // Gamepad buttons
  263. enum GamepadButtons
  264. {
  265. GAMEPAD_BTN_TRIGGER_LEFT=1,
  266. GAMEPAD_BTN_TRIGGER_RIGHT,
  267. GAMEPAD_BTN_A,
  268. GAMEPAD_BTN_B,
  269. GAMEPAD_BTN_Y,
  270. GAMEPAD_BTN_X,
  271. GAMEPAD_BTN_SHOULDER_LEFT,
  272. GAMEPAD_BTN_SHOULDER_RIGHT,
  273. GAMEPAD_BTN_LEFT_JOYSTICK,
  274. GAMEPAD_BTN_RIGHT_JOYSTICK,
  275. GAMEPAD_BTN_START,
  276. GAMEPAD_BTN_SELECT,
  277. GAMEPAD_BTN_STEAM,
  278. GAMEPAD_BTN_DPAD_UP,
  279. GAMEPAD_BTN_DPAD_DOWN,
  280. GAMEPAD_BTN_DPAD_LEFT,
  281. GAMEPAD_BTN_DPAD_RIGHT,
  282. GAMEPAD_BTN_LSTICK_UP,
  283. GAMEPAD_BTN_LSTICK_DOWN,
  284. GAMEPAD_BTN_LSTICK_LEFT,
  285. GAMEPAD_BTN_LSTICK_RIGHT,
  286. GAMEPAD_BTN_RSTICK_UP,
  287. GAMEPAD_BTN_RSTICK_DOWN,
  288. GAMEPAD_BTN_RSTICK_LEFT,
  289. GAMEPAD_BTN_RSTICK_RIGHT,
  290. GAMEPAD_BTN_COUNT
  291. };
  292. // Mode adjust
  293. enum ModeAdjustModes
  294. {
  295. MODE_ADJUST_SENSITITY=1,
  296. MODE_ADJUST_LEFT_PAD_SECONDARY_MODE,
  297. MODE_ADJUST_RIGHT_PAD_SECONDARY_MODE,
  298. MODE_ADJUST_COUNT
  299. };
  300. // Read-only attributes of controllers (only add to this enum and never change the order)
  301. typedef enum
  302. {
  303. ATTRIB_UNIQUE_ID,
  304. ATTRIB_PRODUCT_ID,
  305. ATTRIB_PRODUCT_REVISON, // deprecated
  306. ATTRIB_CAPABILITIES = ATTRIB_PRODUCT_REVISON, // intentional aliasing
  307. ATTRIB_FIRMWARE_VERSION, // deprecated
  308. ATTRIB_FIRMWARE_BUILD_TIME,
  309. ATTRIB_RADIO_FIRMWARE_BUILD_TIME,
  310. ATTRIB_RADIO_DEVICE_ID0,
  311. ATTRIB_RADIO_DEVICE_ID1,
  312. ATTRIB_DONGLE_FIRMWARE_BUILD_TIME,
  313. ATTRIB_BOARD_REVISION,
  314. ATTRIB_BOOTLOADER_BUILD_TIME,
  315. ATTRIB_CONNECTION_INTERVAL_IN_US,
  316. ATTRIB_COUNT
  317. } ControllerAttributes;
  318. // Read-only string attributes of controllers (only add to this enum and never change the order)
  319. typedef enum
  320. {
  321. ATTRIB_STR_BOARD_SERIAL,
  322. ATTRIB_STR_UNIT_SERIAL,
  323. ATTRIB_STR_COUNT
  324. } ControllerStringAttributes;
  325. typedef enum
  326. {
  327. STATUS_CODE_NORMAL,
  328. STATUS_CODE_CRITICAL_BATTERY,
  329. STATUS_CODE_GYRO_INIT_ERROR,
  330. } ControllerStatusEventCodes;
  331. typedef enum
  332. {
  333. STATUS_STATE_LOW_BATTERY=0,
  334. } ControllerStatusStateFlags;
  335. typedef enum {
  336. TRACKPAD_ABSOLUTE_MOUSE,
  337. TRACKPAD_RELATIVE_MOUSE,
  338. TRACKPAD_DPAD_FOUR_WAY_DISCRETE,
  339. TRACKPAD_DPAD_FOUR_WAY_OVERLAP,
  340. TRACKPAD_DPAD_EIGHT_WAY,
  341. TRACKPAD_RADIAL_MODE,
  342. TRACKPAD_ABSOLUTE_DPAD,
  343. TRACKPAD_NONE,
  344. TRACKPAD_GESTURE_KEYBOARD,
  345. TRACKPAD_NUM_MODES
  346. } TrackpadDPadMode;
  347. // Read-write controller settings (only add to this enum and never change the order)
  348. typedef enum
  349. {
  350. SETTING_MOUSE_SENSITIVITY,
  351. SETTING_MOUSE_ACCELERATION,
  352. SETTING_TRACKBALL_ROTATION_ANGLE,
  353. SETTING_HAPTIC_INTENSITY,
  354. SETTING_LEFT_GAMEPAD_STICK_ENABLED,
  355. SETTING_RIGHT_GAMEPAD_STICK_ENABLED,
  356. SETTING_USB_DEBUG_MODE,
  357. SETTING_LEFT_TRACKPAD_MODE,
  358. SETTING_RIGHT_TRACKPAD_MODE,
  359. SETTING_MOUSE_POINTER_ENABLED,
  360. SETTING_DPAD_DEADZONE,
  361. SETTING_MINIMUM_MOMENTUM_VEL,
  362. SETTING_MOMENTUM_DECAY_AMMOUNT,
  363. SETTING_TRACKPAD_RELATIVE_MODE_TICKS_PER_PIXEL,
  364. SETTING_HAPTIC_INCREMENT,
  365. SETTING_DPAD_ANGLE_SIN,
  366. SETTING_DPAD_ANGLE_COS,
  367. SETTING_MOMENTUM_VERTICAL_DIVISOR,
  368. SETTING_MOMENTUM_MAXIMUM_VELOCITY,
  369. SETTING_TRACKPAD_Z_ON,
  370. SETTING_TRACKPAD_Z_OFF,
  371. SETTING_SENSITIVY_SCALE_AMMOUNT,
  372. SETTING_LEFT_TRACKPAD_SECONDARY_MODE,
  373. SETTING_RIGHT_TRACKPAD_SECONDARY_MODE,
  374. SETTING_SMOOTH_ABSOLUTE_MOUSE,
  375. SETTING_STEAMBUTTON_POWEROFF_TIME,
  376. SETTING_UNUSED_1,
  377. SETTING_TRACKPAD_OUTER_RADIUS,
  378. SETTING_TRACKPAD_Z_ON_LEFT,
  379. SETTING_TRACKPAD_Z_OFF_LEFT,
  380. SETTING_TRACKPAD_OUTER_SPIN_VEL,
  381. SETTING_TRACKPAD_OUTER_SPIN_RADIUS,
  382. SETTING_TRACKPAD_OUTER_SPIN_HORIZONTAL_ONLY,
  383. SETTING_TRACKPAD_RELATIVE_MODE_DEADZONE,
  384. SETTING_TRACKPAD_RELATIVE_MODE_MAX_VEL,
  385. SETTING_TRACKPAD_RELATIVE_MODE_INVERT_Y,
  386. SETTING_TRACKPAD_DOUBLE_TAP_BEEP_ENABLED,
  387. SETTING_TRACKPAD_DOUBLE_TAP_BEEP_PERIOD,
  388. SETTING_TRACKPAD_DOUBLE_TAP_BEEP_COUNT,
  389. SETTING_TRACKPAD_OUTER_RADIUS_RELEASE_ON_TRANSITION,
  390. SETTING_RADIAL_MODE_ANGLE,
  391. SETTING_HAPTIC_INTENSITY_MOUSE_MODE,
  392. SETTING_LEFT_DPAD_REQUIRES_CLICK,
  393. SETTING_RIGHT_DPAD_REQUIRES_CLICK,
  394. SETTING_LED_BASELINE_BRIGHTNESS,
  395. SETTING_LED_USER_BRIGHTNESS,
  396. SETTING_ENABLE_RAW_JOYSTICK,
  397. SETTING_ENABLE_FAST_SCAN,
  398. SETTING_GYRO_MODE,
  399. SETTING_WIRELESS_PACKET_VERSION,
  400. SETTING_SLEEP_INACTIVITY_TIMEOUT,
  401. SETTING_COUNT,
  402. // This is a special setting value use for callbacks and should not be set/get explicitly.
  403. SETTING_ALL=0xFF
  404. } ControllerSettings;
  405. typedef enum
  406. {
  407. SETTING_DEFAULT,
  408. SETTING_MIN,
  409. SETTING_MAX,
  410. SETTING_DEFAULTMINMAXCOUNT
  411. } SettingDefaultMinMax;
  412. // Bitmask that define which IMU features to enable.
  413. typedef enum
  414. {
  415. SETTING_GYRO_MODE_OFF = 0x0000,
  416. SETTING_GYRO_MODE_STEERING = 0x0001,
  417. SETTING_GYRO_MODE_TILT = 0x0002,
  418. SETTING_GYRO_MODE_SEND_ORIENTATION = 0x0004,
  419. SETTING_GYRO_MODE_SEND_RAW_ACCEL = 0x0008,
  420. SETTING_GYRO_MODE_SEND_RAW_GYRO = 0x0010,
  421. } SettingGyroMode;
  422. // Bitmask for haptic pulse flags
  423. typedef enum
  424. {
  425. HAPTIC_PULSE_NORMAL = 0x0000,
  426. HAPTIC_PULSE_HIGH_PRIORITY = 0x0001,
  427. HAPTIC_PULSE_VERY_HIGH_PRIORITY = 0x0002,
  428. } SettingHapticPulseFlags;
  429. typedef struct
  430. {
  431. // default,min,max in this array in that order
  432. short defaultminmax[SETTING_DEFAULTMINMAXCOUNT];
  433. } SettingValueRange_t;
  434. // below is from controller_constants.c which should be compiled into any code that uses this
  435. extern const SettingValueRange_t g_DefaultSettingValues[SETTING_COUNT];
  436. // Read-write settings for dongle (only add to this enum and never change the order)
  437. typedef enum
  438. {
  439. DONGLE_SETTING_MOUSE_KEYBOARD_ENABLED,
  440. DONGLE_SETTING_COUNT,
  441. } DongleSettings;
  442. typedef enum
  443. {
  444. AUDIO_STARTUP = 0,
  445. AUDIO_SHUTDOWN = 1,
  446. AUDIO_PAIR = 2,
  447. AUDIO_PAIR_SUCCESS = 3,
  448. AUDIO_IDENTIFY = 4,
  449. AUDIO_LIZARDMODE = 5,
  450. AUDIO_NORMALMODE = 6,
  451. AUDIO_MAX_SLOT = 15
  452. } ControllerAudio;
  453. #ifdef __cplusplus
  454. }
  455. #endif
  456. #endif // _CONTROLLER_CONSTANTS_H