Unaffiliated

Home Documentation & Help
Steamworks Documentation
ISteamController Interface
Steam Controller support API.

See the Steam Controller documentation for more information.

Member Functions

Member functions for ISteamController are called through the global accessor function SteamController().

ActivateActionSet

void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller you want to activate an action set for.
actionSetHandleControllerActionSetHandle_tThe handle of the action set you want to activate.

Reconfigure the controller to use the specified action set (ie "Menu", "Walk", or "Drive").

This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in your state loops, instead of trying to place it in all of your state transitions.

Example:
void updateStateLoop() { switch( currentState ) { case MENU: SteamController()->ActivateActionSet( menuSetHandle ); doMenuStuff(); break; case WALKING: SteamController()->ActivateActionSet( walkingSetHandle ); doWalkingStuff(); break; case DRIVING: SteamController()->ActivateActionSet( drivingSetHandle ); doDrivingStuff(); break; case FIGHTING: SteamController()->ActivateActionSet( fightingSetHandle ); doFightingStuff(); break; } }

GetActionSetHandle

ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName );
NameTypeDescription
pszActionSetNameconst char *The string identifier of an action set defined in the game's VDF file.

Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.

Returns: ControllerActionSetHandle_t
The handle of the specified action set.

Example:
ControllerActionSetHandle_t fightingSetHandle = SteamController()->GetActionSetHandle( "fighting" );

GetAnalogActionData

ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller you want to query.
analogActionHandleControllerAnalogActionHandle_tThe handle of the analog action you want to query.

Returns the current state of the supplied analog game action.

Returns: ControllerAnalogActionData_t
The current state of the specified analog action.

Example:
ControllerAnalogActionData_t data = SteamController()->GetAnalogActionData( controller1Handle, moveHandle );

GetAnalogActionHandle

ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName );
NameTypeDescription
pszActionNameconst char *The string identifier of the analog action defined in the game's VDF file.

Get the handle of the specified Analog action.

NOTE: This function does not take an action set handle parameter. That means that each action in your VDF file must have a unique string identifier. In other words, if you use an action called "up" in two different action sets, this function will only ever return one of them and the other will be ignored.

Returns: ControllerAnalogActionHandle_t
The handle of the specified analog action.

Example:
ControllerAnalogActionHandle_t moveHandle = SteamController()->GetAnalogActionHandle( "move" );

GetAnalogActionOrigins

int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller you want to query.
actionSetHandleControllerActionSetHandle_tThe handle of the action set you want to query.
analogActionHandleControllerAnalogActionHandle_tThe handle of the analog aciton you want to query.
originsOutEControllerActionOrigin *A STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles.

Get the origin(s) for an analog action within an action set by filling originsOut with EControllerActionOrigin handles. Use this to display the appropriate on-screen prompt for the action.

Returns: int
The number of origins supplied in originsOut.

Example:
EControllerActionOrigin *origins = new EControllerActionOrigin[ STEAM_CONTROLLER_MAX_ORIGINS ]; SteamController()->GetAnalogActionOrigins( controller1Handle, walkingSetHandle, moveHandle, origins );

GetConnectedControllers

int GetConnectedControllers( ControllerHandle_t *handlesOut );
NameTypeDescription
handlesOutControllerHandle_t *This must point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t.

Enumerates currently connected controllers by filling handlesOut with controller handles.

Returns: int
The number of handles written to handlesOut.

Example:
ControllerHandle_t *controllerHandles = new ControllerHandle_t[ STEAM_CONTROLLER_MAX_COUNT ]; SteamController()->GetConnectedControllers( controllerHandles );

GetControllerForGamepadIndex

ControllerHandle_t GetControllerForGamepadIndex( int nIndex );
NameTypeDescription
nIndexintThe index of the emulated gamepad you want to get a controller handle for.

Returns the associated controller handle for the specified emulated gamepad.

Returns: ControllerHandle_t


Example:
ControllerHandle_t controllerHandle = SteamController()->GetControllerForGamepadIndex( gamepadIndex );

GetCurrentActionSet

ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller you want to query.

Get the currently active action set for the specified controller.

Returns: ControllerActionSetHandle_t
The handle of the action set activated for the specified controller.

Example:
ControllerActionSetHandle_t controller1Set = SteamController()->GetCurrentActionSet(controller1Handle);

GetDigitalActionData

ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller you want to query.
digitalActionHandleControllerDigitalActionHandle_tThe handle of the digital action you want to query.

Returns the current state of the supplied digital game action.

Returns: ControllerDigitalActionData_t
The current state of the specified digital action.

GetDigitalActionHandle

ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName );
NameTypeDescription
pszActionNameconst char *The string identifier of the digital action defined in the game's VDF file.

Get the handle of the specified digital action.

NOTE: This function does not take an action set handle parameter. That means that each action in your VDF file must have a unique string identifier. In other words, if you use an action called "up" in two different action sets, this function will only ever return one of them and the other will be ignored.

Returns: ControllerDigitalActionHandle_t
The handle of the specified digital action.

Example:
ControllerDigitalActionHandle_t punchHandle = SteamController()->GetDigitalActionHandle( "punch" );

GetDigitalActionOrigins

int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller you want to query.
actionSetHandleControllerActionSetHandle_tThe handle of the action set you want to query.
digitalActionHandleControllerDigitalActionHandle_tThe handle of the digital aciton you want to query.
originsOutEControllerActionOrigin *A STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles.

Get the origin(s) for a digital action within an action set by filling originsOut with EControllerActionOrigin handles. Use this to display the appropriate on-screen prompt for the action.

Returns: int
The number of origins supplied in originsOut.

Example:
EControllerActionOrigin *origins = new EControllerActionOrigin[ STEAM_CONTROLLER_MAX_ORIGINS ]; SteamController()->GetDigitalActionOrigins( controller1Handle, fightingSetHandle, punchHandle, origins );

GetGamepadIndexForController

int GetGamepadIndexForController( ControllerHandle_t ulControllerHandle );
NameTypeDescription
ulControllerHandleControllerHandle_tThe handle of the controller you want to get a gamepad index for.

Returns the associated gamepad index for the specified controller, if emulating a gamepad.

Returns: int


Example:
int gamepadIndex = SteamController()->GetGamepadIndexForController( controller1Handle );

GetGlyphForActionOrigin

const char * GetGlyphForActionOrigin( EControllerActionOrigin eOrigin );
NameTypeDescription
eOriginEControllerActionOrigin

Get a local path to art for on-screen glyph for a particular origin.

Returns: const char *
The path to the png file for the glyph.
E.g. "C:\Program Files (x86)\Steam\tenfoot\resource\images\library\controller\api\ps4_button_x.png"

Example:
// Get origins for "punch" EControllerActionOrigin *origins = new EControllerActionOrigin[ STEAM_CONTROLLER_MAX_ORIGINS ]; SteamController()->GetDigitalActionOrigins( controller1Handle, fightingSetHandle, punchHandle, origins ); EControllerActionOrigin firstOrigin = origins[0]; //i.e, k_EControllerActionOrigin_PS4_X // Try to get hard-coded art for glyph graphics shipped with the game: int glyphTextureID = getHardCodedButtonGlyphTexture( firstOrigin ); // We didn't ship any art in our game for this origin! I guess Steam has added support for // a new controller or something! (i.e, we only have VSC glyphs, but it's a DS4) if( glyphTextureID == -1 ) { // We'll just get the image from the steam client instead. const char *localGlyphPath = SteamController()->GetGlyphForActionOrigin( unknownOrigin ); printf( "path = %s\n", localGlyphPath ); // "path = C:\Program Files (x86)\Steam\tenfoot\resource\images\library\controller\api\ps4_button_x.png" glyphTextureID = loadButtonGlyphTextureFromLocalPath( localGlyphPath ); }

GetMotionData

ControllerMotionData_t GetMotionData( ControllerHandle_t controllerHandle );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller you want to get motion data for.

Returns raw motion data for the specified controller.

Returns: ControllerMotionData_t


Example:
ControllerMotionData_t motionData = SteamController()->GetControllerMotionData( controllerHandle );

GetStringForActionOrigin

const char * GetStringForActionOrigin( EControllerActionOrigin eOrigin );
NameTypeDescription
eOriginEControllerActionOrigin

Returns a localized string (from Steam's language setting) for the specified origin.

Returns: const char *


Example:
EControllerActionOrigin *origins = new EControllerActionOrigin[ STEAM_CONTROLLER_MAX_ORIGINS ]; SteamController()->GetDigitalActionOrigins( controller1Handle, fightingSetHandle, punchHandle, origins ); const char * punchString = SteamController()->GetStringForActionOrigin( origins[0] ); printf("punch = %s\n",punchString);

Init

bool Init();
Must be called when starting use of the ISteamController interface.

Returns: bool
Always returns true.

Example:
SteamController()->Init();

RunFrame

void RunFrame();
Synchronize API state with the latest Steam Controller inputs available. This is performed automatically by SteamAPI_RunCallbacks, but for the absolute lowest possible latency, you can call this directly before reading controller state.

Example:
SteamController()->RunFrame();

SetLEDColor

void SetLEDColor( ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller to affect.
nColorRuint8The red component of the color to set (0-255).
nColorGuint8The green component of the color to set (0-255).
nColorBuint8The blue component of the color to set (0-255).
nFlagsunsigned intBit-masked flags combined from values defined in ESteamControllerLEDFlag.

Set the controller LED color on supported controllers.

Notes:
The VSC does not support any color but white, and will interpret the RGB values as a greyscale value affecting the brightness of the Steam button LED.
The DS4 responds to full color information and uses the values to set the color & brightness of the lightbar.

Example:
// Restore the user default color for controller 1: SteamController()->SetLEDColor( controller1Handle, 0, 0, 0, k_ESteamControllerLEDFlag_RestoreUserDefault ); // Set the color to magenta for controller 2: SteamController()->SetLEDColor( controller2Handle, 255, 0, 255, k_ESteamControllerLEDFlag_SetColor );

ShowAnalogActionOrigins

bool ShowAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition );
NameTypeDescription
controllerHandleControllerHandle_t
analogActionHandleControllerAnalogActionHandle_t
flScalefloat
flXPositionfloat
flYPositionfloat

Deprecated.

Returns: bool
Always returns true.

ShowBindingPanel

bool ShowBindingPanel( ControllerHandle_t controllerHandle );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller you want to bring up the binding screen for.

Invokes the Steam overlay and brings up the binding screen.

Returns: bool
true for success; false if overlay is disabled/unavailable, or the user is not in Big Picture Mode.

Example:
SteamController()->ShowBindingPanel( myControllerHandle );

ShowDigitalActionOrigins

bool ShowDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition );
NameTypeDescription
controllerHandleControllerHandle_t
digitalActionHandleControllerDigitalActionHandle_t
flScalefloat
flXPositionfloat
flYPositionfloat

Deprecated.

Returns: bool
Always returns true.

Shutdown

bool Shutdown();
Must be called when ending use of the ISteamController interface.

Returns: bool
Always returns true.

Example:
SteamController()->Shutdown();

StopAnalogActionMomentum

void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller to affect.
eActionControllerAnalogActionHandle_tThe analog action to stop momentum for.

Stops the momentum of an analog action (where applicable, ie a touchpad w/ virtual trackball settings).

NOTE:
This will also stop all associated haptics. This is useful for situations where you want to indicate to the user that the limit of an action has been reached, such as spinning a carousel or scrolling a webpage.

Example:
SteamController()->StopAnalogActionMomentum( controller1Handle, moveHandle );

TriggerHapticPulse

void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller to affect.
eTargetPadESteamControllerPadWhich haptic touch pad to affect.
usDurationMicroSecunsigned shortDuration of the pulse, in microseconds (1/1,000,000th of a second)

Triggers a (low-level) haptic pulse on supported controllers.

Notes:
Currently only the VSC supports haptic pulses.
This API call will be ignored for all other controller models.
The typical max value of an unsigned short is 65535, which means the longest haptic pulse you can trigger with this method has a duration of 0.065535 seconds (ie, less than 1/10th of a second). This function should be thought of as a low-level primitive meant to be repeatedly used in higher-level user functions to generate more sophisticated behavior.

Example:
//Pulse once for 1/20th of a second SteamController()->TriggerHapticPulse(controller1Handle, k_ESteamControllerPad_Left, 50000);

TriggerRepeatedHapticPulse

void TriggerRepeatedHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller to affect.
eTargetPadESteamControllerPadWhich haptic touch pad to affect.
usDurationMicroSecunsigned shortDuration of the pulse, in microseconds (1/1,000,000th of a second).
usOffMicroSecunsigned shortDuration of the pause between pulses, in microseconds.
unRepeatunsigned shortNumber of times to repeat the usDurationMicroSec / usOffMicroSec duty cycle.
nFlagsunsigned intCurrently unused and reserved for future use.

Triggers a repeated haptic pulse on supported controllers.

Notes:
Currently only the VSC supports haptic pulses.
This API call will be ignored for incompatible controller models.
This is a more user-friendly function to call than TriggerHapticPulse as it can generate pulse patterns long enough to be actually noticed by the user.
Changing the usDurationMicroSec and usOffMicroSec parameters will change the "texture" of the haptic pulse.

Example:
//Pulse for 1 second with an on/off pulse pattern of 1/20th of a second each SteamController()->TriggerRepeatedHapticPulse( controller1Handle, k_ESteamControllerPad_Left, 50000, 50000, 10 );

TriggerVibration

void TriggerVibration( ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed );
NameTypeDescription
controllerHandleControllerHandle_tThe handle of the controller to affect.
usLeftSpeedunsigned shortThe period of the left rumble motor's vibration, in microseconds.
usRightSpeedunsigned shortThe period of the right rumble motor's vibration, in microseconds.

Trigger a vibration event on supported controllers.

Notes:
This API call will be ignored for incompatible controller models.
This generates the traditional "rumble" vibration effect.
The VSC will emulate traditional rumble using its haptics.

Example:
SteamController()->TriggerVibration( controller1Handle, 10000, 10000 );

Structs

These are structs which functions in ISteamController may return and/or interact with.

ControllerAnalogActionData_t

Represents the current state of an analog action.

Notes:
  • The exact values, range, etc, depend on the configuration, but (broadly speaking) traditional analog actions will provide normalized float values in the ballpark of -1.0 to 1.0, whereas mouse-like actions will provide delta updates which indicate the number of "pixels" moved since the last frame. The upshot of this is that mouse-like actions will provide much larger absolute x and y values, and are relative to the last recorded input position, whereas traditional analog actions are smaller and relative to a central physical anchor point.
  • While the delta provided by mouse-like actions is very similar to pixel deltas as provided by an OS, the SC deltas are floats, not ints. This means less potential quantization and loss of precision when mapping this data to a camera rotation.
  • In the case of single-axis analog inputs (such as analog triggers), only the x axis will contain data; the y axis will always be zero.

NameTypeDescription
eModeEControllerSourceModeThe type of data coming from this action, this will match what was specified in the action set's VDF definition.
xfloatThe current state of this action on the horizontal axis.
yfloatThe current state of this action vertical axis.
bActiveboolWhether or not this action is currently available to be bound in the active action set. If it is not available, OR does not belong to the active action set, this will be false.

ControllerDigitalActionData_t

Represents the current state of a digital action.

NameTypeDescription
bStateboolThe current state of this action; true if the action is currently pressed, otherwise false.
bActiveboolWhether or not this action is currently available to be bound in the active action set.

ControllerMotionData_t

Represents the current state of a device's motion sensor(s).

NOTE: For rotQuatX/rotQuatY/rotQuatZ, the inertial measurement unit on the controller will create a quaternion based on fusing the gyro and the accelerometer. This value is the absolute orientation of the controller, but it will drift on the yaw axis.

NameTypeDescription
rotQuatXfloatSensor-fused absolute rotation (will drift in heading), x axis
rotQuatYfloatSensor-fused absolute rotation (will drift in heading), y axis
rotQuatZfloatSensor-fused absolute rotation (will drift in heading), z axis
rotQuatWfloatSensor-fused absolute rotation (will drift in heading), w axis
posAccelXfloatPositional acceleration, x axis
posAccelYfloatPositional acceleration, y axis
posAccelZfloatPositional acceleration, z axis
rotVelXfloatAngular velocity, x axis
rotVelYfloatAngular velocity, y axis
rotVelZfloatAngular velocity, z axis

Enums

These are enums which are defined for use with ISteamController.

EControllerActionOrigin

Inputs the player binds to actions in the Steam Controller Configurator. The chief purpose of these values is to direct which on-screen button glyphs should appear for a given action, such as "Press [A] to Jump".

NameValueDescription
k_EControllerActionOrigin_None0
k_EControllerActionOrigin_A1(Valve Steam Controller) digital face button A
k_EControllerActionOrigin_B2(Valve Steam Controller) digital face button B
k_EControllerActionOrigin_X3(Valve Steam Controller) digital face button X
k_EControllerActionOrigin_Y4(Valve Steam Controller) digital face button Y
k_EControllerActionOrigin_LeftBumper5(Valve Steam Controller) digital left shoulder button (aka "left bumper")
k_EControllerActionOrigin_RightBumper6(Valve Steam Controller) digital right shoulder button (aka "right bumper")
k_EControllerActionOrigin_LeftGrip7(Valve Steam Controller) digital left grip paddle
k_EControllerActionOrigin_RightGrip8(Valve Steam Controller) digital right grip paddle
k_EControllerActionOrigin_Start9(Valve Steam Controller) digital start button
k_EControllerActionOrigin_Back10(Valve Steam Controller) digital back button
k_EControllerActionOrigin_LeftPad_Touch11(Valve Steam Controller) left haptic touchpad, in simple contact with a finger
k_EControllerActionOrigin_LeftPad_Swipe12(Valve Steam Controller) left haptic touchpad, touch input on any axis
k_EControllerActionOrigin_LeftPad_Click13(Valve Steam Controller) left haptic touchpad, digital click (for the whole thing)
k_EControllerActionOrigin_LeftPad_DPadNorth14(Valve Steam Controller) left haptic touchpad, digital click (upper quadrant)
k_EControllerActionOrigin_LeftPad_DPadSouth15(Valve Steam Controller) left haptic touchpad, digital click (lower quadrant)
k_EControllerActionOrigin_LeftPad_DPadWest16(Valve Steam Controller) left haptic touchpad, digital click (left quadrant)
k_EControllerActionOrigin_LeftPad_DPadEast17(Valve Steam Controller) left haptic touchpad, digital click (right quadrant)
k_EControllerActionOrigin_RightPad_Touch18(Valve Steam Controller) right haptic touchpad, in simple contact with a finger
k_EControllerActionOrigin_RightPad_Swipe19(Valve Steam Controller) right haptic touchpad, touch input on any axis
k_EControllerActionOrigin_RightPad_Click20(Valve Steam Controller) right haptic touchpad, digital click (for the whole thing)
k_EControllerActionOrigin_RightPad_DPadNorth21(Valve Steam Controller) right haptic touchpad, digital click (upper quadrant)
k_EControllerActionOrigin_RightPad_DPadSouth22(Valve Steam Controller) right haptic touchpad, digital click (lower quadrant)
k_EControllerActionOrigin_RightPad_DPadWest23(Valve Steam Controller) right haptic touchpad, digital click (left quadrant)
k_EControllerActionOrigin_RightPad_DPadEast24(Valve Steam Controller) right haptic touchpad, digital click (right quadrant)
k_EControllerActionOrigin_LeftTrigger_Pull25(Valve Steam Controller) left analog trigger, pulled by any amount (analog value)
k_EControllerActionOrigin_LeftTrigger_Click26(Valve Steam Controller) left analog trigger, pulled in all the way (digital value)
k_EControllerActionOrigin_RightTrigger_Pull27(Valve Steam Controller) right analog trigger, pulled by any amount (analog value)
k_EControllerActionOrigin_RightTrigger_Click28(Valve Steam Controller) right analog trigger, pulled in all the way (digital value)
k_EControllerActionOrigin_LeftStick_Move29(Valve Steam Controller) left joystick, movement on any axis (analog value)
k_EControllerActionOrigin_LeftStick_Click30(Valve Steam Controller) left joystick, clicked in (digital value)
k_EControllerActionOrigin_LeftStick_DPadNorth31(Valve Steam Controller) left joystick, digital movement (upper quadrant)
k_EControllerActionOrigin_LeftStick_DPadSouth32(Valve Steam Controller) left joystick, digital movement (lower quadrant)
k_EControllerActionOrigin_LeftStick_DPadWest33(Valve Steam Controller) left joystick, digital movement (left quadrant)
k_EControllerActionOrigin_LeftStick_DPadEast34(Valve Steam Controller) left joystick, digital movement (right quadrant)
k_EControllerActionOrigin_Gyro_Move35(Valve Steam Controller) gyroscope, analog movement in any axis
k_EControllerActionOrigin_Gyro_Pitch36(Valve Steam Controller) gyroscope, analog movement on the Pitch axis (point head up to ceiling, point head down to floor)
k_EControllerActionOrigin_Gyro_Yaw37(Valve Steam Controller) gyroscope, analog movement on the Yaw axis (turn head left to face one wall, turn head right to face other)
k_EControllerActionOrigin_Gyro_Roll38(Valve Steam Controller) gyroscope, analog movement on the Roll axis (tilt head left towards shoulder, tilt head right towards other)
k_EControllerActionOrigin_PS4_X39(Sony Dualshock 4) digital face button X
k_EControllerActionOrigin_PS4_Circle40(Sony Dualshock 4) digital face button Circle
k_EControllerActionOrigin_PS4_Triangle41(Sony Dualshock 4) digital face button Triangle
k_EControllerActionOrigin_PS4_Square42(Sony Dualshock 4) digital face button Square
k_EControllerActionOrigin_PS4_LeftBumper43(Sony Dualshock 4) digital left shoulder button (aka "left bumper")
k_EControllerActionOrigin_PS4_RightBumper44(Sony Dualshock 4) digital right shoulder button (aka "right bumper")
k_EControllerActionOrigin_PS4_Options45(Sony Dualshock 4) digital options button (aka "Start")
k_EControllerActionOrigin_PS4_Share46(Sony Dualshock 4) digital back button (aka "Back")
k_EControllerActionOrigin_PS4_LeftPad_Touch47(Sony Dualshock 4) left half of the touchpad, in simple contact with a finger
k_EControllerActionOrigin_PS4_LeftPad_Swipe48(Sony Dualshock 4) left half of the touchpad, touch input on any axis
k_EControllerActionOrigin_PS4_LeftPad_Click49(Sony Dualshock 4) left half of the touchpad, digital click (for the whole thing)
k_EControllerActionOrigin_PS4_LeftPad_DPadNorth50(Sony Dualshock 4) left half of the touchpad, digital click (upper quadrant)
k_EControllerActionOrigin_PS4_LeftPad_DPadSouth51(Sony Dualshock 4) left half of the touchpad, digital click (lower quadrant)
k_EControllerActionOrigin_PS4_LeftPad_DPadWest52(Sony Dualshock 4) left half of the touchpad, digital click (left quadrant)
k_EControllerActionOrigin_PS4_LeftPad_DPadEast53(Sony Dualshock 4) left half of the touchpad, digital click (right quadrant)
k_EControllerActionOrigin_PS4_RightPad_Touch54(Sony Dualshock 4) right half of the touchpad, in simple contact with a finger
k_EControllerActionOrigin_PS4_RightPad_Swipe55(Sony Dualshock 4) right half of the touchpad, touch input on any axis
k_EControllerActionOrigin_PS4_RightPad_Click56(Sony Dualshock 4) right half of the touchpad, digital click (for the whole thing)
k_EControllerActionOrigin_PS4_RightPad_DPadNorth57(Sony Dualshock 4) right half of the touchpad, digital click (upper quadrant)
k_EControllerActionOrigin_PS4_RightPad_DPadSouth58(Sony Dualshock 4) right half of the touchpad, digital click (lower quadrant)
k_EControllerActionOrigin_PS4_RightPad_DPadWest59(Sony Dualshock 4) right half of the touchpad, digital click (left quadrant)
k_EControllerActionOrigin_PS4_RightPad_DPadEast60(Sony Dualshock 4) right half of the touchpad, digital click (right quadrant)
k_EControllerActionOrigin_PS4_CenterPad_Touch61(Sony Dualshock 4) unified touchpad, in simple contact with a finger
k_EControllerActionOrigin_PS4_CenterPad_Swipe62(Sony Dualshock 4) unified touchpad, touch input on any axis
k_EControllerActionOrigin_PS4_CenterPad_Click63(Sony Dualshock 4) unified touchpad, digital click (for the whole thing)
k_EControllerActionOrigin_PS4_CenterPad_DPadNorth64(Sony Dualshock 4) unified touchpad, digital click (upper quadrant)
k_EControllerActionOrigin_PS4_CenterPad_DPadSouth65(Sony Dualshock 4) unified touchpad, digital click (lower quadrant)
k_EControllerActionOrigin_PS4_CenterPad_DPadWest66(Sony Dualshock 4) unified touchpad, digital click (left quadrant)
k_EControllerActionOrigin_PS4_CenterPad_DPadEast67(Sony Dualshock 4) unified touchpad, digital click (right quadrant)
k_EControllerActionOrigin_PS4_LeftTrigger_Pull68(Sony Dualshock 4) left analog trigger, pulled by any amount (analog value)
k_EControllerActionOrigin_PS4_LeftTrigger_Click69(Sony Dualshock 4) left analog trigger, pulled in all the way (digital value)
k_EControllerActionOrigin_PS4_RightTrigger_Pull70(Sony Dualshock 4) right analog trigger, pulled by any amount (analog value)
k_EControllerActionOrigin_PS4_RightTrigger_Click71(Sony Dualshock 4) right analog trigger, pulled in all the way (digital value)
k_EControllerActionOrigin_PS4_LeftStick_Move72(Sony Dualshock 4) left joystick, movement on any axis (analog value)
k_EControllerActionOrigin_PS4_LeftStick_Click73(Sony Dualshock 4) left joystick, clicked in (digital value)
k_EControllerActionOrigin_PS4_LeftStick_DPadNorth74(Sony Dualshock 4) left joystick, digital movement (upper quadrant)
k_EControllerActionOrigin_PS4_LeftStick_DPadSouth75(Sony Dualshock 4) left joystick, digital movement (lower quadrant)
k_EControllerActionOrigin_PS4_LeftStick_DPadWest76(Sony Dualshock 4) left joystick, digital movement (left quadrant)
k_EControllerActionOrigin_PS4_LeftStick_DPadEast77(Sony Dualshock 4) left joystick, digital movement (right quadrant)
k_EControllerActionOrigin_PS4_RightStick_Move78(Sony Dualshock 4) right joystick, movement on any axis (analog value)
k_EControllerActionOrigin_PS4_RightStick_Click79(Sony Dualshock 4) right joystick, clicked in (digital value)
k_EControllerActionOrigin_PS4_RightStick_DPadNorth80(Sony Dualshock 4) right joystick, digital movement (upper quadrant)
k_EControllerActionOrigin_PS4_RightStick_DPadSouth81(Sony Dualshock 4) right joystick, digital movement (lower quadrant)
k_EControllerActionOrigin_PS4_RightStick_DPadWest82(Sony Dualshock 4) right joystick, digital movement (left quadrant)
k_EControllerActionOrigin_PS4_RightStick_DPadEast83(Sony Dualshock 4) right joystick, digital movement (right quadrant)
k_EControllerActionOrigin_PS4_DPad_North84(Sony Dualshock 4) digital pad, pressed (upper quadrant)
k_EControllerActionOrigin_PS4_DPad_South85(Sony Dualshock 4) digital pad, pressed (lower quadrant)
k_EControllerActionOrigin_PS4_DPad_West86(Sony Dualshock 4) digital pad, pressed (left quadrant)
k_EControllerActionOrigin_PS4_DPad_East87(Sony Dualshock 4) digital pad, pressed (right quadrant)
k_EControllerActionOrigin_PS4_Gyro_Move88(Sony Dualshock 4) gyroscope, analog movement in any axis
k_EControllerActionOrigin_PS4_Gyro_Pitch89(Sony Dualshock 4) gyroscope, analog movement on the Pitch axis (point head up to ceiling, point head down to floor)
k_EControllerActionOrigin_PS4_Gyro_Yaw90(Sony Dualshock 4) gyroscope, analog movement on the Yaw axis (turn head left to face one wall, turn head right to face other)
k_EControllerActionOrigin_PS4_Gyro_Roll91(Sony Dualshock 4) gyroscope, analog movement on the Roll axis (tilt head left towards shoulder, tilt head right towards other shoulder)
k_EControllerActionOrigin_XBoxOne_A92(XB1) digital face button A
k_EControllerActionOrigin_XBoxOne_B93(XB1) digital face button B
k_EControllerActionOrigin_XBoxOne_X94(XB1) digital face button X
k_EControllerActionOrigin_XBoxOne_Y95(XB1) digital face button Y
k_EControllerActionOrigin_XBoxOne_LeftBumper96(XB1) digital left shoulder button (aka "left bumper")
k_EControllerActionOrigin_XBoxOne_RightBumper97(XB1) digital right shoulder button (aka "right bumper")
k_EControllerActionOrigin_XBoxOne_Menu98(XB1) digital menu button (aka "start")
k_EControllerActionOrigin_XBoxOne_View99(XB1) digital view button (aka "back")
k_EControllerActionOrigin_XBoxOne_LeftTrigger_Pull100(XB1) left analog trigger, pulled by any amount (analog value)
k_EControllerActionOrigin_XBoxOne_LeftTrigger_Click101(XB1) left analog trigger, pulled in all the way (digital value)
k_EControllerActionOrigin_XBoxOne_RightTrigger_Pull102(XB1) right analog trigger, pulled by any amount (analog value)
k_EControllerActionOrigin_XBoxOne_RightTrigger_Click103(XB1) right analog trigger, pulled in all the way (digital value)
k_EControllerActionOrigin_XBoxOne_LeftStick_Move104(XB1) left joystick, movement on any axis (analog value)
k_EControllerActionOrigin_XBoxOne_LeftStick_Click105(XB1) left joystick, clicked in (digital value)
k_EControllerActionOrigin_XBoxOne_LeftStick_DPadNorth106(XB1) left joystick, digital movement (upper quadrant)
k_EControllerActionOrigin_XBoxOne_LeftStick_DPadSouth107(XB1) left joystick, digital movement (lower quadrant)
k_EControllerActionOrigin_XBoxOne_LeftStick_DPadWest108(XB1) left joystick, digital movement (left quadrant)
k_EControllerActionOrigin_XBoxOne_LeftStick_DPadEast109(XB1) left joystick, digital movement (right quadrant)
k_EControllerActionOrigin_XBoxOne_RightStick_Move110(XB1) right joystick, movement on any axis (analog value)
k_EControllerActionOrigin_XBoxOne_RightStick_Click111(XB1) right joystick, clicked in (digital value)
k_EControllerActionOrigin_XBoxOne_RightStick_DPadNorth112(XB1) right joystick, digital movement (upper quadrant)
k_EControllerActionOrigin_XBoxOne_RightStick_DPadSouth113(XB1) right joystick, digital movement (lower quadrant)
k_EControllerActionOrigin_XBoxOne_RightStick_DPadWest114(XB1) right joystick, digital movement (left quadrant)
k_EControllerActionOrigin_XBoxOne_RightStick_DPadEast115(XB1) right joystick, digital movement (right quadrant)
k_EControllerActionOrigin_XBoxOne_DPad_North116(XB1) digital pad, pressed (upper quadrant)
k_EControllerActionOrigin_XBoxOne_DPad_South117(XB1) digital pad, pressed (lower quadrant)
k_EControllerActionOrigin_XBoxOne_DPad_West118(XB1) digital pad, pressed (left quadrant)
k_EControllerActionOrigin_XBoxOne_DPad_East119(XB1) digital pad, pressed (right quadrant)
k_EControllerActionOrigin_XBox360_A120(X360) digital face button A
k_EControllerActionOrigin_XBox360_B121(X360) digital face button B
k_EControllerActionOrigin_XBox360_X122(X360) digital face button X
k_EControllerActionOrigin_XBox360_Y123(X360) digital face button Y
k_EControllerActionOrigin_XBox360_LeftBumper124(X360) digital left shoulder button (aka "left bumper")
k_EControllerActionOrigin_XBox360_RightBumper125(X360) digital right shoulder button (aka "right bumper")
k_EControllerActionOrigin_XBox360_Start126(X360) digital start button
k_EControllerActionOrigin_XBox360_Back127(X360) digital back button
k_EControllerActionOrigin_XBox360_LeftTrigger_Pull128(X360) left analog trigger, pulled by any amount (analog value)
k_EControllerActionOrigin_XBox360_LeftTrigger_Click129(X360) left analog trigger, pulled in all the way (digital value)
k_EControllerActionOrigin_XBox360_RightTrigger_Pull130(X360) right analog trigger, pulled by any amount (analog value)
k_EControllerActionOrigin_XBox360_RightTrigger_Click131(X360) right analog trigger, pulled in all the way (digital value)
k_EControllerActionOrigin_XBox360_LeftStick_Move132(X360) left joystick, movement on any axis (analog value)
k_EControllerActionOrigin_XBox360_LeftStick_Click133(X360) left joystick, clicked in (digital value)
k_EControllerActionOrigin_XBox360_LeftStick_DPadNorth134(X360) left joystick, digital movement (upper quadrant)
k_EControllerActionOrigin_XBox360_LeftStick_DPadSouth135(X360) left joystick, digital movement (lower quadrant)
k_EControllerActionOrigin_XBox360_LeftStick_DPadWest136(X360) left joystick, digital movement (left quadrant)
k_EControllerActionOrigin_XBox360_LeftStick_DPadEast137(X360) left joystick, digital movement (right quadrant)
k_EControllerActionOrigin_XBox360_RightStick_Move138(X360) right joystick, movement on any axis (analog value)
k_EControllerActionOrigin_XBox360_RightStick_Click139(X360) right joystick, clicked in (digital value)
k_EControllerActionOrigin_XBox360_RightStick_DPadNorth140(X360) right joystick, digital movement (upper quadrant)
k_EControllerActionOrigin_XBox360_RightStick_DPadSouth141(X360) right joystick, digital movement (lower quadrant)
k_EControllerActionOrigin_XBox360_RightStick_DPadWest142(X360) right joystick, digital movement (left quadrant)
k_EControllerActionOrigin_XBox360_RightStick_DPadEast143(X360) right joystick, digital movement (right quadrant)
k_EControllerActionOrigin_XBox360_DPad_North144(X360) digital pad, pressed (upper quadrant)
k_EControllerActionOrigin_XBox360_DPad_South145(X360) digital pad, pressed (lower quadrant)
k_EControllerActionOrigin_XBox360_DPad_West146(X360) digital pad, pressed (left quadrant)
k_EControllerActionOrigin_XBox360_DPad_East147(X360) digital pad, pressed (right quadrant)
k_EControllerActionOrigin_Count196The number of values in this enum, useful for iterating.

EControllerSource

A region of the controller that can be thought of as a larger abstract modular unit that one of many modes can be applied to and output meaningful data. For example, a joystick can be treated as either a single analog input, or broken up into four discrete digital forming a virtual DPAD. Likewise, the ABXY face buttons form a natural group that be treated as four independent buttons, or as components of a virtual DPAD, etc.

NameValueDescription
k_EControllerSource_None0No controller source.
k_EControllerSource_LeftTrackpad1The left touchpad, or the left half of a central touchpad.
k_EControllerSource_RightTrackpad2The right touchpad, or the right half of a central touchpad.
k_EControllerSource_Joystick3The joystick, or if there is more than one joystick, the left joystick.
k_EControllerSource_ABXY4The four main face buttons.
k_EControllerSource_Switch5Switches/buttons on the controller that don't belong to any other specific source. This includes bumpers, start/select, and grips. This special case of misfits don't fit into the larger paradigm and thus get their own source of digital buttons and a corresponding mode that processes them.
k_EControllerSource_LeftTrigger6The left analog trigger.
k_EControllerSource_RightTrigger7The right analog trigger.
k_EControllerSource_Gyro8The internal gyroscope.
k_EControllerSource_CenterTrackpad9The central touchpad. (DS4 only)
k_EControllerSource_RightJoystick10The right joystick. If there is only one joystick, this source is not used.
k_EControllerSource_DPad11The digital pad.
k_EControllerSource_Count12The number of enums, useful for iterating.

EControllerSourceMode

The virtual input mode imposed by the configurator upon a controller source. For instance, the configurator can make an analog joystick behave like a Dpad with four digital inputs; the EControllerSource would be k_EControllerSource_Joystick and the EControllerSourceMode would be k_EControllerSourceMode_Dpad. The mode also changes the input data received by any associated actions.

NameValueDescription
k_EControllerSourceMode_None0No input mode.
k_EControllerSourceMode_Dpad1A digital pad -- four digital directional buttons fused together in a cross pattern, such that only one button from each axis can be pressed at any given time.
k_EControllerSourceMode_Buttons2???
k_EControllerSourceMode_FourButtons3Four digital face buttons, any of which can be pressed simultaneously
k_EControllerSourceMode_AbsoluteMouse4
k_EControllerSourceMode_RelativeMouse5
k_EControllerSourceMode_JoystickMove6
k_EControllerSourceMode_JoystickMouse7
k_EControllerSourceMode_JoystickCamera8
k_EControllerSourceMode_ScrollWheel9
k_EControllerSourceMode_Trigger10
k_EControllerSourceMode_TouchMenu11
k_EControllerSourceMode_MouseJoystick12
k_EControllerSourceMode_MouseRegion13
k_EControllerSourceMode_RadialMenu14
k_EControllerSourceMode_SingleButton15
k_EControllerSourceMode_Switches16

ESteamControllerLEDFlag

Controls the color of a Steam Controller Device's LED (if the device indeed has one).

Notes:
The VSC has an LED, but only its brightness will be affected (the color is always white).
The DS4's LED is the lightbar, whose color and brightness can both be configured.

NameValueDescription
k_ESteamControllerLEDFlag_SetColor0Set the color to the specified values
k_ESteamControllerLEDFlag_RestoreUserDefault1Restore the color to default (out-of-game) settings

ESteamControllerPad

A touchpad region on a Steam Controller Device.

Notes:
On the VSC, the values correspond to the left & right haptic touchpads.
On the DS4, the values correspond to the left & right halves of the single, central touchpad.

NameValueDescription
k_ESteamControllerPad_Left0The left touchpad region on a Steam Controller Device. Compatible models: VSC, DS4
k_ESteamControllerPad_Right1The right region on a Steam Controller Device. Compatible models: VSC, DS4

Typedefs

These are typedefs which are defined for use with ISteamController.

NameBase typeDescription
ControllerActionSetHandle_tuint64These handles are used to refer to a specific in-game action or action set
All action handles should be queried during initialization for performance reasons
ControllerAnalogActionHandle_tuint64A handle to an analog action. This can be obtained from GetAnalogActionHandle.
ControllerDigitalActionHandle_tuint64A handle to a digital action. This can be obtained from GetDigitalActionHandle.
ControllerHandle_tuint64This handle will consistently identify a controller, even if it is disconnected and re-connected

Constants

These are constants which are defined for use with ISteamController.

NameTypeValueDescription
STEAMCONTROLLER_INTERFACE_VERSIONconst char *"SteamController005"
STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERSintUINT64_MAXWhen sending an option to a specific controller handle, you can use this special value in the place of a handle to send the option to all controllers instead.
STEAM_CONTROLLER_MAX_ANALOG_ACTIONSint16The maximum number of analog actions that can be performed on each controller.
STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATAfloat1.0fThe maximum value that can be reported by an analog action on any given axis.
STEAM_CONTROLLER_MAX_COUNTint16The maximum number of controllers that can be used simultaneously with the Steam Controller Configurator.
STEAM_CONTROLLER_MAX_DIGITAL_ACTIONSint128The maximum number of digital actions that can be performed on each controller.
STEAM_CONTROLLER_MAX_ORIGINSint8The maximum number of input origins that can be attached to a single action.
STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATAfloat-1.0fThe minimum value that can be reported by an analog action on any given axis.