Edit

kc3-lang/SDL/src/joystick/hidapi/steam/controller_constants.h

Branch :

  • Show log

    Commit

  • Author : Sam Lantinga
    Date : 2021-01-04 12:17:24
    Hash : bf754b52
    Message : Valve contributed code is under the Zlib license

  • src/joystick/hidapi/steam/controller_constants.h
  • /*
      Simple DirectMedia Layer
      Copyright (C) 2021 Valve Corporation
    
      This software is provided 'as-is', without any express or implied
      warranty.  In no event will the authors be held liable for any damages
      arising from the use of this software.
    
      Permission is granted to anyone to use this software for any purpose,
      including commercial applications, and to alter it and redistribute it
      freely, subject to the following restrictions:
    
      1. The origin of this software must not be misrepresented; you must not
         claim that you wrote the original software. If you use this software
         in a product, an acknowledgment in the product documentation would be
         appreciated but is not required.
      2. Altered source versions must be plainly marked as such, and must not be
         misrepresented as being the original software.
      3. This notice may not be removed or altered from any source distribution.
    */
    
    #ifndef _CONTROLLER_CONSTANTS_
    #define _CONTROLLER_CONSTANTS_
    
    #include "controller_structs.h"
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    #define FEATURE_REPORT_SIZE	64
    
    #define VALVE_USB_VID		0x28DE
    
    // Frame update rate (in ms).
    #define FAST_SCAN_INTERVAL  6
    #define SLOW_SCAN_INTERVAL  9
    
    // Contains each of the USB PIDs for Valve controllers (only add to this enum and never change the order)
    enum ValveControllerPID
    {
    	BASTILLE_PID              = 0x2202,
    	CHELL_PID                 = 0x1101,
    	D0G_PID                   = 0x1102,
    	ELI_PID                   = 0x1103,
    	FREEMAN_PID               = 0x1104,
    	D0G_BLE_PID				  = 0x1105,
    	D0G_BLE2_PID			  = 0x1106,
    	D0GGLE_PID                = 0x1142,
    };
    
    // This enum contains all of the messages exchanged between the host and the target (only add to this enum and never change the order)
    enum FeatureReportMessageIDs
    {
    	ID_SET_DIGITAL_MAPPINGS              = 0x80,
    	ID_CLEAR_DIGITAL_MAPPINGS            = 0x81,
    	ID_GET_DIGITAL_MAPPINGS              = 0x82,
    	ID_GET_ATTRIBUTES_VALUES             = 0x83,
    	ID_GET_ATTRIBUTE_LABEL               = 0x84,
    	ID_SET_DEFAULT_DIGITAL_MAPPINGS      = 0x85,
    	ID_FACTORY_RESET                     = 0x86,
    	ID_SET_SETTINGS_VALUES               = 0x87,
    	ID_CLEAR_SETTINGS_VALUES             = 0x88,
    	ID_GET_SETTINGS_VALUES               = 0x89,
    	ID_GET_SETTING_LABEL                 = 0x8A,
    	ID_GET_SETTINGS_MAXS                 = 0x8B,
    	ID_GET_SETTINGS_DEFAULTS             = 0x8C,
    	ID_SET_CONTROLLER_MODE               = 0x8D,
    	ID_LOAD_DEFAULT_SETTINGS             = 0x8E,
    	ID_TRIGGER_HAPTIC_PULSE              = 0x8F,
    	ID_TURN_OFF_CONTROLLER               = 0x9F,
    
    	ID_GET_DEVICE_INFO                   = 0xA1,
    	
    	ID_CALIBRATE_TRACKPADS               = 0xA7,
    	ID_RESERVED_0                        = 0xA8,
    	ID_SET_SERIAL_NUMBER                 = 0xA9,
    	ID_GET_TRACKPAD_CALIBRATION          = 0xAA,
    	ID_GET_TRACKPAD_FACTORY_CALIBRATION  = 0xAB,
    	ID_GET_TRACKPAD_RAW_DATA             = 0xAC,
    	ID_ENABLE_PAIRING                    = 0xAD,
    	ID_GET_STRING_ATTRIBUTE              = 0xAE,
    	ID_RADIO_ERASE_RECORDS               = 0xAF,
    	ID_RADIO_WRITE_RECORD                = 0xB0,
    	ID_SET_DONGLE_SETTING                = 0xB1,
    	ID_DONGLE_DISCONNECT_DEVICE          = 0xB2,
    	ID_DONGLE_COMMIT_DEVICE              = 0xB3,
    	ID_DONGLE_GET_WIRELESS_STATE         = 0xB4,
    	ID_CALIBRATE_GYRO                    = 0xB5,
    	ID_PLAY_AUDIO                        = 0xB6,
    	ID_AUDIO_UPDATE_START                = 0xB7,
    	ID_AUDIO_UPDATE_DATA                 = 0xB8,
    	ID_AUDIO_UPDATE_COMPLETE             = 0xB9,
    	ID_GET_CHIPID                        = 0xBA,
    
    	ID_CALIBRATE_JOYSTICK                = 0xBF,
    	ID_CALIBRATE_ANALOG_TRIGGERS         = 0xC0,
    	ID_SET_AUDIO_MAPPING                 = 0xC1,
    	ID_CHECK_GYRO_FW_LOAD                = 0xC2,
    	ID_CALIBRATE_ANALOG                  = 0xC3,
    	ID_DONGLE_GET_CONNECTED_SLOTS        = 0xC4,
    };
    
    
    // Enumeration of all wireless dongle events
    typedef enum WirelessEventTypes
    {
    	WIRELESS_EVENT_DISCONNECT	= 1,
    	WIRELESS_EVENT_CONNECT		= 2,
    	WIRELESS_EVENT_PAIR			= 3,
    } EWirelessEventType;
    
    
    // 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)
    typedef enum
    {
    	IO_DIGITAL_BUTTON_NONE = -1,
    	IO_DIGITAL_BUTTON_RIGHT_TRIGGER,
    	IO_DIGITAL_BUTTON_LEFT_TRIGGER,
    	IO_DIGITAL_BUTTON_1,
    	IO_DIGITAL_BUTTON_Y=IO_DIGITAL_BUTTON_1,
    	IO_DIGITAL_BUTTON_2,
    	IO_DIGITAL_BUTTON_B=IO_DIGITAL_BUTTON_2,
    	IO_DIGITAL_BUTTON_3,
    	IO_DIGITAL_BUTTON_X=IO_DIGITAL_BUTTON_3,
    	IO_DIGITAL_BUTTON_4,
    	IO_DIGITAL_BUTTON_A=IO_DIGITAL_BUTTON_4,
    	IO_DIGITAL_BUTTON_RIGHT_BUMPER,
    	IO_DIGITAL_BUTTON_LEFT_BUMPER,
    	IO_DIGITAL_BUTTON_LEFT_JOYSTICK_CLICK,
    	IO_DIGITAL_BUTTON_ESCAPE,
    	IO_DIGITAL_BUTTON_STEAM,
    	IO_DIGITAL_BUTTON_MENU,
    	IO_DIGITAL_STICK_UP,
    	IO_DIGITAL_STICK_DOWN,
    	IO_DIGITAL_STICK_LEFT,
    	IO_DIGITAL_STICK_RIGHT,
    	IO_DIGITAL_TOUCH_1,
    	IO_DIGITAL_BUTTON_UP=IO_DIGITAL_TOUCH_1,
    	IO_DIGITAL_TOUCH_2,
    	IO_DIGITAL_BUTTON_RIGHT=IO_DIGITAL_TOUCH_2,
    	IO_DIGITAL_TOUCH_3,
    	IO_DIGITAL_BUTTON_LEFT=IO_DIGITAL_TOUCH_3,
    	IO_DIGITAL_TOUCH_4,
    	IO_DIGITAL_BUTTON_DOWN=IO_DIGITAL_TOUCH_4,
    	IO_DIGITAL_BUTTON_BACK_LEFT,
    	IO_DIGITAL_BUTTON_BACK_RIGHT,
    	IO_DIGITAL_LEFT_TRACKPAD_N,
    	IO_DIGITAL_LEFT_TRACKPAD_NE,
    	IO_DIGITAL_LEFT_TRACKPAD_E,
    	IO_DIGITAL_LEFT_TRACKPAD_SE,
    	IO_DIGITAL_LEFT_TRACKPAD_S,
    	IO_DIGITAL_LEFT_TRACKPAD_SW,
    	IO_DIGITAL_LEFT_TRACKPAD_W,
    	IO_DIGITAL_LEFT_TRACKPAD_NW,
    	IO_DIGITAL_RIGHT_TRACKPAD_N,
    	IO_DIGITAL_RIGHT_TRACKPAD_NE,
    	IO_DIGITAL_RIGHT_TRACKPAD_E,
    	IO_DIGITAL_RIGHT_TRACKPAD_SE,
    	IO_DIGITAL_RIGHT_TRACKPAD_S,
    	IO_DIGITAL_RIGHT_TRACKPAD_SW,
    	IO_DIGITAL_RIGHT_TRACKPAD_W,
    	IO_DIGITAL_RIGHT_TRACKPAD_NW,
    	IO_DIGITAL_LEFT_TRACKPAD_DOUBLE_TAP,
    	IO_DIGITAL_RIGHT_TRACKPAD_DOUBLE_TAP,
    	IO_DIGITAL_LEFT_TRACKPAD_OUTER_RADIUS,
    	IO_DIGITAL_RIGHT_TRACKPAD_OUTER_RADIUS,
    	IO_DIGITAL_LEFT_TRACKPAD_CLICK,
    	IO_DIGITAL_RIGHT_TRACKPAD_CLICK,
    	IO_DIGITAL_BATTERY_LOW,
    	IO_DIGITAL_LEFT_TRIGGER_THRESHOLD,
    	IO_DIGITAL_RIGHT_TRIGGER_THRESHOLD,
    	IO_DIGITAL_BUTTON_BACK_LEFT2,
    	IO_DIGITAL_BUTTON_BACK_RIGHT2,
    	IO_DIGITAL_BUTTON_ALWAYS_ON,
    	IO_DIGITAL_BUTTON_ANCILLARY_1,
    	IO_DIGITAL_BUTTON_MACRO_0,
    	IO_DIGITAL_BUTTON_MACRO_1,
    	IO_DIGITAL_BUTTON_MACRO_2,
    	IO_DIGITAL_BUTTON_MACRO_3,
    	IO_DIGITAL_BUTTON_MACRO_4,
    	IO_DIGITAL_BUTTON_MACRO_5,
    	IO_DIGITAL_BUTTON_MACRO_6,
    	IO_DIGITAL_BUTTON_MACRO_7,
    	IO_DIGITAL_BUTTON_MACRO_1FINGER,
    	IO_DIGITAL_BUTTON_MACRO_2FINGER,
    	IO_DIGITAL_COUNT
    } DigitalIO ;
    
    // 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)
    typedef enum 
    {
    	IO_ANALOG_LEFT_STICK_X,
    	IO_ANALOG_LEFT_STICK_Y,
    	IO_ANALOG_RIGHT_STICK_X,
    	IO_ANALOG_RIGHT_STICK_Y,
    	IO_ANALOG_LEFT_TRIGGER,
    	IO_ANALOG_RIGHT_TRIGGER,
    	IO_MOUSE1_X,
    	IO_MOUSE1_Y,
    	IO_MOUSE1_Z,
    	IO_ACCEL_X,
    	IO_ACCEL_Y,
    	IO_ACCEL_Z,
    	IO_GYRO_X,
    	IO_GYRO_Y,
    	IO_GYRO_Z,
    	IO_GYRO_QUAT_W,
    	IO_GYRO_QUAT_X,
    	IO_GYRO_QUAT_Y,
    	IO_GYRO_QUAT_Z,
    	IO_GYRO_STEERING_VEC,
    	IO_RAW_TRIGGER_LEFT,
    	IO_RAW_TRIGGER_RIGHT,
    	IO_RAW_JOYSTICK_X,
    	IO_RAW_JOYSTICK_Y,
    	IO_GYRO_TILT_VEC,
    	IO_ANALOG_COUNT
    } AnalogIO;
    
    
    // Contains list of all types of devices that the controller emulates (only add to this enum and never change the order)
    enum DeviceTypes
    {
    	DEVICE_KEYBOARD,
    	DEVICE_MOUSE,
    	DEVICE_GAMEPAD,
    	DEVICE_MODE_ADJUST,
    	DEVICE_COUNT
    };
    
    // Scan codes for HID keyboards 
    enum HIDKeyboardKeys
    {
    	KEY_INVALID,
    	KEY_FIRST = 0x04,
    	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, 
    	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, 
    	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,
    	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,
    	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,
    	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,
    	KEY_KEYPAD_8, KEY_KEYPAD_9, KEY_KEYPAD_0, KEY_KEYPAD_PERIOD,
    	KEY_LALT,
        KEY_LSHIFT,
        KEY_LWIN,
        KEY_LCONTROL,
        KEY_RALT,
        KEY_RSHIFT,
        KEY_RWIN,
        KEY_RCONTROL,
    	KEY_VOLUP,
    	KEY_VOLDOWN,
    	KEY_MUTE,
    	KEY_PLAY,
    	KEY_STOP,
    	KEY_NEXT,
    	KEY_PREV,
        KEY_LAST = KEY_PREV
    };
    
    enum ModifierMasks
    {
      KEY_LCONTROL_MASK = (1<<0),
      KEY_LSHIFT_MASK = (1<<1),
      KEY_LALT_MASK = (1<<2),
      KEY_LWIN_MASK = (1<<3),
      KEY_RCONTROL_MASK = (1<<4),
      KEY_RSHIFT_MASK = (1<<5),
      KEY_RALT_MASK = (1<<6),
      KEY_RWIN_MASK = (1<<7)
    };
    
    // Standard mouse buttons as specified in the HID mouse spec
    enum MouseButtons
    {
    	MOUSE_BTN_LEFT,
    	MOUSE_BTN_RIGHT,
    	MOUSE_BTN_MIDDLE,
    	MOUSE_BTN_BACK,
    	MOUSE_BTN_FORWARD,
    	MOUSE_SCROLL_UP,
    	MOUSE_SCROLL_DOWN,
    	MOUSE_BTN_COUNT
    };
    
    // Gamepad buttons
    enum GamepadButtons
    {
    	GAMEPAD_BTN_TRIGGER_LEFT=1, 
    	GAMEPAD_BTN_TRIGGER_RIGHT,
    	GAMEPAD_BTN_A,
    	GAMEPAD_BTN_B,
    	GAMEPAD_BTN_Y,
    	GAMEPAD_BTN_X,
    	GAMEPAD_BTN_SHOULDER_LEFT,
    	GAMEPAD_BTN_SHOULDER_RIGHT,
    	GAMEPAD_BTN_LEFT_JOYSTICK,
    	GAMEPAD_BTN_RIGHT_JOYSTICK,
    	GAMEPAD_BTN_START,
    	GAMEPAD_BTN_SELECT,
    	GAMEPAD_BTN_STEAM,
    	GAMEPAD_BTN_DPAD_UP,
    	GAMEPAD_BTN_DPAD_DOWN,
    	GAMEPAD_BTN_DPAD_LEFT,
    	GAMEPAD_BTN_DPAD_RIGHT,
    	GAMEPAD_BTN_LSTICK_UP,
    	GAMEPAD_BTN_LSTICK_DOWN,
    	GAMEPAD_BTN_LSTICK_LEFT,
    	GAMEPAD_BTN_LSTICK_RIGHT,
    	GAMEPAD_BTN_RSTICK_UP,
    	GAMEPAD_BTN_RSTICK_DOWN,
    	GAMEPAD_BTN_RSTICK_LEFT,
    	GAMEPAD_BTN_RSTICK_RIGHT,
    	GAMEPAD_BTN_COUNT
    };
    
    // Mode adjust
    enum ModeAdjustModes
    {
    	MODE_ADJUST_SENSITITY=1,
    	MODE_ADJUST_LEFT_PAD_SECONDARY_MODE,
    	MODE_ADJUST_RIGHT_PAD_SECONDARY_MODE,
    	MODE_ADJUST_COUNT
    };
    
    // Read-only attributes of controllers (only add to this enum and never change the order)
    typedef enum
    {
    	ATTRIB_UNIQUE_ID,
    	ATTRIB_PRODUCT_ID,
    	ATTRIB_PRODUCT_REVISON,											// deprecated
    	ATTRIB_CAPABILITIES = ATTRIB_PRODUCT_REVISON,	// intentional aliasing
    	ATTRIB_FIRMWARE_VERSION,										// deprecated
    	ATTRIB_FIRMWARE_BUILD_TIME,
    	ATTRIB_RADIO_FIRMWARE_BUILD_TIME,
    	ATTRIB_RADIO_DEVICE_ID0,
    	ATTRIB_RADIO_DEVICE_ID1,
    	ATTRIB_DONGLE_FIRMWARE_BUILD_TIME,
    	ATTRIB_BOARD_REVISION,
    	ATTRIB_BOOTLOADER_BUILD_TIME,
    	ATTRIB_CONNECTION_INTERVAL_IN_US,
    	ATTRIB_COUNT
    } ControllerAttributes;
    
    // Read-only string attributes of controllers (only add to this enum and never change the order)
    typedef enum
    {
    	ATTRIB_STR_BOARD_SERIAL,
    	ATTRIB_STR_UNIT_SERIAL,
    	ATTRIB_STR_COUNT
    } ControllerStringAttributes;
    
    typedef enum
    {
    	STATUS_CODE_NORMAL,
    	STATUS_CODE_CRITICAL_BATTERY,
    	STATUS_CODE_GYRO_INIT_ERROR,
    } ControllerStatusEventCodes;
    
    typedef enum
    {
    	STATUS_STATE_LOW_BATTERY=0,
    } ControllerStatusStateFlags;
    
    typedef enum {
    	TRACKPAD_ABSOLUTE_MOUSE,
    	TRACKPAD_RELATIVE_MOUSE,
    	TRACKPAD_DPAD_FOUR_WAY_DISCRETE,
    	TRACKPAD_DPAD_FOUR_WAY_OVERLAP,
    	TRACKPAD_DPAD_EIGHT_WAY,
    	TRACKPAD_RADIAL_MODE,
    	TRACKPAD_ABSOLUTE_DPAD,
    	TRACKPAD_NONE,
    	TRACKPAD_GESTURE_KEYBOARD,
    	TRACKPAD_NUM_MODES
    } TrackpadDPadMode;
    
    // Read-write controller settings (only add to this enum and never change the order)
    typedef enum 
    {
    	SETTING_MOUSE_SENSITIVITY,
    	SETTING_MOUSE_ACCELERATION,
    	SETTING_TRACKBALL_ROTATION_ANGLE,
    	SETTING_HAPTIC_INTENSITY,
    	SETTING_LEFT_GAMEPAD_STICK_ENABLED,
    	SETTING_RIGHT_GAMEPAD_STICK_ENABLED,
    	SETTING_USB_DEBUG_MODE,
    	SETTING_LEFT_TRACKPAD_MODE,
    	SETTING_RIGHT_TRACKPAD_MODE,
    	SETTING_MOUSE_POINTER_ENABLED,
    	SETTING_DPAD_DEADZONE,
    	SETTING_MINIMUM_MOMENTUM_VEL,
    	SETTING_MOMENTUM_DECAY_AMMOUNT,
    	SETTING_TRACKPAD_RELATIVE_MODE_TICKS_PER_PIXEL,
    	SETTING_HAPTIC_INCREMENT,
    	SETTING_DPAD_ANGLE_SIN,
    	SETTING_DPAD_ANGLE_COS,
    	SETTING_MOMENTUM_VERTICAL_DIVISOR,
    	SETTING_MOMENTUM_MAXIMUM_VELOCITY,
    	SETTING_TRACKPAD_Z_ON,
    	SETTING_TRACKPAD_Z_OFF,
    	SETTING_SENSITIVY_SCALE_AMMOUNT,
    	SETTING_LEFT_TRACKPAD_SECONDARY_MODE,
    	SETTING_RIGHT_TRACKPAD_SECONDARY_MODE,
    	SETTING_SMOOTH_ABSOLUTE_MOUSE,
    	SETTING_STEAMBUTTON_POWEROFF_TIME,
    	SETTING_UNUSED_1,
    	SETTING_TRACKPAD_OUTER_RADIUS,
    	SETTING_TRACKPAD_Z_ON_LEFT,
    	SETTING_TRACKPAD_Z_OFF_LEFT,
    	SETTING_TRACKPAD_OUTER_SPIN_VEL,
    	SETTING_TRACKPAD_OUTER_SPIN_RADIUS,
    	SETTING_TRACKPAD_OUTER_SPIN_HORIZONTAL_ONLY,
    	SETTING_TRACKPAD_RELATIVE_MODE_DEADZONE,
    	SETTING_TRACKPAD_RELATIVE_MODE_MAX_VEL,
    	SETTING_TRACKPAD_RELATIVE_MODE_INVERT_Y,
    	SETTING_TRACKPAD_DOUBLE_TAP_BEEP_ENABLED,
    	SETTING_TRACKPAD_DOUBLE_TAP_BEEP_PERIOD,
    	SETTING_TRACKPAD_DOUBLE_TAP_BEEP_COUNT,
    	SETTING_TRACKPAD_OUTER_RADIUS_RELEASE_ON_TRANSITION,
    	SETTING_RADIAL_MODE_ANGLE,
    	SETTING_HAPTIC_INTENSITY_MOUSE_MODE,
    	SETTING_LEFT_DPAD_REQUIRES_CLICK,
    	SETTING_RIGHT_DPAD_REQUIRES_CLICK,
    	SETTING_LED_BASELINE_BRIGHTNESS,
    	SETTING_LED_USER_BRIGHTNESS,
    	SETTING_ENABLE_RAW_JOYSTICK,
    	SETTING_ENABLE_FAST_SCAN,
    	SETTING_GYRO_MODE,
    	SETTING_WIRELESS_PACKET_VERSION,
    	SETTING_SLEEP_INACTIVITY_TIMEOUT,
    	SETTING_COUNT,
    	
    	// This is a special setting value use for callbacks and should not be set/get explicitly.
    	SETTING_ALL=0xFF
    } ControllerSettings;
    
    typedef enum
    {
    	SETTING_DEFAULT,
    	SETTING_MIN,
    	SETTING_MAX,
    	SETTING_DEFAULTMINMAXCOUNT
    } SettingDefaultMinMax;
    
    // Bitmask that define which IMU features to enable.
    typedef enum
    {
    	SETTING_GYRO_MODE_OFF				= 0x0000,
    	SETTING_GYRO_MODE_STEERING			= 0x0001,
    	SETTING_GYRO_MODE_TILT				= 0x0002,
    	SETTING_GYRO_MODE_SEND_ORIENTATION	= 0x0004,
    	SETTING_GYRO_MODE_SEND_RAW_ACCEL	= 0x0008,
    	SETTING_GYRO_MODE_SEND_RAW_GYRO		= 0x0010,
    } SettingGyroMode;
    
    // Bitmask for haptic pulse flags
    typedef enum
    {
    	HAPTIC_PULSE_NORMAL					= 0x0000,
    	HAPTIC_PULSE_HIGH_PRIORITY			= 0x0001,
    	HAPTIC_PULSE_VERY_HIGH_PRIORITY		= 0x0002,
    } SettingHapticPulseFlags;
    
    typedef struct
    {
    	// default,min,max in this array in that order
    	short defaultminmax[SETTING_DEFAULTMINMAXCOUNT]; 
    } SettingValueRange_t;
    
    // below is from controller_constants.c which should be compiled into any code that uses this
    extern const SettingValueRange_t g_DefaultSettingValues[SETTING_COUNT];
    
    // Read-write settings for dongle (only add to this enum and never change the order)
    typedef enum 
    {
    	DONGLE_SETTING_MOUSE_KEYBOARD_ENABLED,
    	DONGLE_SETTING_COUNT,
    } DongleSettings;
    
    typedef enum
    {
    	AUDIO_STARTUP		= 0,
    	AUDIO_SHUTDOWN		= 1,
    	AUDIO_PAIR			= 2,
    	AUDIO_PAIR_SUCCESS	= 3,
    	AUDIO_IDENTIFY		= 4,
    	AUDIO_LIZARDMODE	= 5,
    	AUDIO_NORMALMODE	= 6,
    
    	AUDIO_MAX_SLOT      = 15
    } ControllerAudio;
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif // _CONTROLLER_CONSTANTS_H