1 //====== Copyright 1996-2013, Valve Corporation, All rights reserved. ======= 2 // 3 // Purpose: interface to valve controller 4 // 5 //============================================================================= 6 7 #ifndef ISTEAMCONTROLLER_H 8 #define ISTEAMCONTROLLER_H 9 #ifdef _WIN32 10 #pragma once 11 #endif 12 13 #include "isteamclient.h" 14 15 #define STEAM_CONTROLLER_MAX_COUNT 16 16 17 #define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16 18 19 #define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 128 20 21 #define STEAM_CONTROLLER_MAX_ORIGINS 8 22 23 // When sending an option to a specific controller handle, you can send to all controllers via this command 24 #define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX 25 26 #define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f 27 #define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f 28 29 enum ESteamControllerPad 30 { 31 k_ESteamControllerPad_Left, 32 k_ESteamControllerPad_Right 33 }; 34 35 enum EControllerSource 36 { 37 k_EControllerSource_None, 38 k_EControllerSource_LeftTrackpad, 39 k_EControllerSource_RightTrackpad, 40 k_EControllerSource_Joystick, 41 k_EControllerSource_ABXY, 42 k_EControllerSource_Switch, 43 k_EControllerSource_LeftTrigger, 44 k_EControllerSource_RightTrigger, 45 k_EControllerSource_Gyro, 46 k_EControllerSource_CenterTrackpad, // PS4 47 k_EControllerSource_RightJoystick, // Traditional Controllers 48 k_EControllerSource_DPad, // Traditional Controllers 49 k_EControllerSource_Key, // Keyboards with scan codes 50 k_EControllerSource_Mouse, // Traditional mouse 51 k_EControllerSource_Count 52 }; 53 54 enum EControllerSourceMode 55 { 56 k_EControllerSourceMode_None, 57 k_EControllerSourceMode_Dpad, 58 k_EControllerSourceMode_Buttons, 59 k_EControllerSourceMode_FourButtons, 60 k_EControllerSourceMode_AbsoluteMouse, 61 k_EControllerSourceMode_RelativeMouse, 62 k_EControllerSourceMode_JoystickMove, 63 k_EControllerSourceMode_JoystickMouse, 64 k_EControllerSourceMode_JoystickCamera, 65 k_EControllerSourceMode_ScrollWheel, 66 k_EControllerSourceMode_Trigger, 67 k_EControllerSourceMode_TouchMenu, 68 k_EControllerSourceMode_MouseJoystick, 69 k_EControllerSourceMode_MouseRegion, 70 k_EControllerSourceMode_RadialMenu, 71 k_EControllerSourceMode_SingleButton, 72 k_EControllerSourceMode_Switches 73 }; 74 75 enum EControllerActionOrigin 76 { 77 // Steam Controller 78 k_EControllerActionOrigin_None, 79 k_EControllerActionOrigin_A, 80 k_EControllerActionOrigin_B, 81 k_EControllerActionOrigin_X, 82 k_EControllerActionOrigin_Y, 83 k_EControllerActionOrigin_LeftBumper, 84 k_EControllerActionOrigin_RightBumper, 85 k_EControllerActionOrigin_LeftGrip, 86 k_EControllerActionOrigin_RightGrip, 87 k_EControllerActionOrigin_Start, 88 k_EControllerActionOrigin_Back, 89 k_EControllerActionOrigin_LeftPad_Touch, 90 k_EControllerActionOrigin_LeftPad_Swipe, 91 k_EControllerActionOrigin_LeftPad_Click, 92 k_EControllerActionOrigin_LeftPad_DPadNorth, 93 k_EControllerActionOrigin_LeftPad_DPadSouth, 94 k_EControllerActionOrigin_LeftPad_DPadWest, 95 k_EControllerActionOrigin_LeftPad_DPadEast, 96 k_EControllerActionOrigin_RightPad_Touch, 97 k_EControllerActionOrigin_RightPad_Swipe, 98 k_EControllerActionOrigin_RightPad_Click, 99 k_EControllerActionOrigin_RightPad_DPadNorth, 100 k_EControllerActionOrigin_RightPad_DPadSouth, 101 k_EControllerActionOrigin_RightPad_DPadWest, 102 k_EControllerActionOrigin_RightPad_DPadEast, 103 k_EControllerActionOrigin_LeftTrigger_Pull, 104 k_EControllerActionOrigin_LeftTrigger_Click, 105 k_EControllerActionOrigin_RightTrigger_Pull, 106 k_EControllerActionOrigin_RightTrigger_Click, 107 k_EControllerActionOrigin_LeftStick_Move, 108 k_EControllerActionOrigin_LeftStick_Click, 109 k_EControllerActionOrigin_LeftStick_DPadNorth, 110 k_EControllerActionOrigin_LeftStick_DPadSouth, 111 k_EControllerActionOrigin_LeftStick_DPadWest, 112 k_EControllerActionOrigin_LeftStick_DPadEast, 113 k_EControllerActionOrigin_Gyro_Move, 114 k_EControllerActionOrigin_Gyro_Pitch, 115 k_EControllerActionOrigin_Gyro_Yaw, 116 k_EControllerActionOrigin_Gyro_Roll, 117 118 // PS4 Dual Shock 119 k_EControllerActionOrigin_PS4_X, 120 k_EControllerActionOrigin_PS4_Circle, 121 k_EControllerActionOrigin_PS4_Triangle, 122 k_EControllerActionOrigin_PS4_Square, 123 k_EControllerActionOrigin_PS4_LeftBumper, 124 k_EControllerActionOrigin_PS4_RightBumper, 125 k_EControllerActionOrigin_PS4_Options, //Start 126 k_EControllerActionOrigin_PS4_Share, //Back 127 k_EControllerActionOrigin_PS4_LeftPad_Touch, 128 k_EControllerActionOrigin_PS4_LeftPad_Swipe, 129 k_EControllerActionOrigin_PS4_LeftPad_Click, 130 k_EControllerActionOrigin_PS4_LeftPad_DPadNorth, 131 k_EControllerActionOrigin_PS4_LeftPad_DPadSouth, 132 k_EControllerActionOrigin_PS4_LeftPad_DPadWest, 133 k_EControllerActionOrigin_PS4_LeftPad_DPadEast, 134 k_EControllerActionOrigin_PS4_RightPad_Touch, 135 k_EControllerActionOrigin_PS4_RightPad_Swipe, 136 k_EControllerActionOrigin_PS4_RightPad_Click, 137 k_EControllerActionOrigin_PS4_RightPad_DPadNorth, 138 k_EControllerActionOrigin_PS4_RightPad_DPadSouth, 139 k_EControllerActionOrigin_PS4_RightPad_DPadWest, 140 k_EControllerActionOrigin_PS4_RightPad_DPadEast, 141 k_EControllerActionOrigin_PS4_CenterPad_Touch, 142 k_EControllerActionOrigin_PS4_CenterPad_Swipe, 143 k_EControllerActionOrigin_PS4_CenterPad_Click, 144 k_EControllerActionOrigin_PS4_CenterPad_DPadNorth, 145 k_EControllerActionOrigin_PS4_CenterPad_DPadSouth, 146 k_EControllerActionOrigin_PS4_CenterPad_DPadWest, 147 k_EControllerActionOrigin_PS4_CenterPad_DPadEast, 148 k_EControllerActionOrigin_PS4_LeftTrigger_Pull, 149 k_EControllerActionOrigin_PS4_LeftTrigger_Click, 150 k_EControllerActionOrigin_PS4_RightTrigger_Pull, 151 k_EControllerActionOrigin_PS4_RightTrigger_Click, 152 k_EControllerActionOrigin_PS4_LeftStick_Move, 153 k_EControllerActionOrigin_PS4_LeftStick_Click, 154 k_EControllerActionOrigin_PS4_LeftStick_DPadNorth, 155 k_EControllerActionOrigin_PS4_LeftStick_DPadSouth, 156 k_EControllerActionOrigin_PS4_LeftStick_DPadWest, 157 k_EControllerActionOrigin_PS4_LeftStick_DPadEast, 158 k_EControllerActionOrigin_PS4_RightStick_Move, 159 k_EControllerActionOrigin_PS4_RightStick_Click, 160 k_EControllerActionOrigin_PS4_RightStick_DPadNorth, 161 k_EControllerActionOrigin_PS4_RightStick_DPadSouth, 162 k_EControllerActionOrigin_PS4_RightStick_DPadWest, 163 k_EControllerActionOrigin_PS4_RightStick_DPadEast, 164 k_EControllerActionOrigin_PS4_DPad_North, 165 k_EControllerActionOrigin_PS4_DPad_South, 166 k_EControllerActionOrigin_PS4_DPad_West, 167 k_EControllerActionOrigin_PS4_DPad_East, 168 k_EControllerActionOrigin_PS4_Gyro_Move, 169 k_EControllerActionOrigin_PS4_Gyro_Pitch, 170 k_EControllerActionOrigin_PS4_Gyro_Yaw, 171 k_EControllerActionOrigin_PS4_Gyro_Roll, 172 173 // XBox One 174 k_EControllerActionOrigin_XBoxOne_A, 175 k_EControllerActionOrigin_XBoxOne_B, 176 k_EControllerActionOrigin_XBoxOne_X, 177 k_EControllerActionOrigin_XBoxOne_Y, 178 k_EControllerActionOrigin_XBoxOne_LeftBumper, 179 k_EControllerActionOrigin_XBoxOne_RightBumper, 180 k_EControllerActionOrigin_XBoxOne_Menu, //Start 181 k_EControllerActionOrigin_XBoxOne_View, //Back 182 k_EControllerActionOrigin_XBoxOne_LeftTrigger_Pull, 183 k_EControllerActionOrigin_XBoxOne_LeftTrigger_Click, 184 k_EControllerActionOrigin_XBoxOne_RightTrigger_Pull, 185 k_EControllerActionOrigin_XBoxOne_RightTrigger_Click, 186 k_EControllerActionOrigin_XBoxOne_LeftStick_Move, 187 k_EControllerActionOrigin_XBoxOne_LeftStick_Click, 188 k_EControllerActionOrigin_XBoxOne_LeftStick_DPadNorth, 189 k_EControllerActionOrigin_XBoxOne_LeftStick_DPadSouth, 190 k_EControllerActionOrigin_XBoxOne_LeftStick_DPadWest, 191 k_EControllerActionOrigin_XBoxOne_LeftStick_DPadEast, 192 k_EControllerActionOrigin_XBoxOne_RightStick_Move, 193 k_EControllerActionOrigin_XBoxOne_RightStick_Click, 194 k_EControllerActionOrigin_XBoxOne_RightStick_DPadNorth, 195 k_EControllerActionOrigin_XBoxOne_RightStick_DPadSouth, 196 k_EControllerActionOrigin_XBoxOne_RightStick_DPadWest, 197 k_EControllerActionOrigin_XBoxOne_RightStick_DPadEast, 198 k_EControllerActionOrigin_XBoxOne_DPad_North, 199 k_EControllerActionOrigin_XBoxOne_DPad_South, 200 k_EControllerActionOrigin_XBoxOne_DPad_West, 201 k_EControllerActionOrigin_XBoxOne_DPad_East, 202 203 // XBox 360 204 k_EControllerActionOrigin_XBox360_A, 205 k_EControllerActionOrigin_XBox360_B, 206 k_EControllerActionOrigin_XBox360_X, 207 k_EControllerActionOrigin_XBox360_Y, 208 k_EControllerActionOrigin_XBox360_LeftBumper, 209 k_EControllerActionOrigin_XBox360_RightBumper, 210 k_EControllerActionOrigin_XBox360_Start, //Start 211 k_EControllerActionOrigin_XBox360_Back, //Back 212 k_EControllerActionOrigin_XBox360_LeftTrigger_Pull, 213 k_EControllerActionOrigin_XBox360_LeftTrigger_Click, 214 k_EControllerActionOrigin_XBox360_RightTrigger_Pull, 215 k_EControllerActionOrigin_XBox360_RightTrigger_Click, 216 k_EControllerActionOrigin_XBox360_LeftStick_Move, 217 k_EControllerActionOrigin_XBox360_LeftStick_Click, 218 k_EControllerActionOrigin_XBox360_LeftStick_DPadNorth, 219 k_EControllerActionOrigin_XBox360_LeftStick_DPadSouth, 220 k_EControllerActionOrigin_XBox360_LeftStick_DPadWest, 221 k_EControllerActionOrigin_XBox360_LeftStick_DPadEast, 222 k_EControllerActionOrigin_XBox360_RightStick_Move, 223 k_EControllerActionOrigin_XBox360_RightStick_Click, 224 k_EControllerActionOrigin_XBox360_RightStick_DPadNorth, 225 k_EControllerActionOrigin_XBox360_RightStick_DPadSouth, 226 k_EControllerActionOrigin_XBox360_RightStick_DPadWest, 227 k_EControllerActionOrigin_XBox360_RightStick_DPadEast, 228 k_EControllerActionOrigin_XBox360_DPad_North, 229 k_EControllerActionOrigin_XBox360_DPad_South, 230 k_EControllerActionOrigin_XBox360_DPad_West, 231 k_EControllerActionOrigin_XBox360_DPad_East, 232 233 // SteamController V2 234 k_EControllerActionOrigin_SteamV2_A, 235 k_EControllerActionOrigin_SteamV2_B, 236 k_EControllerActionOrigin_SteamV2_X, 237 k_EControllerActionOrigin_SteamV2_Y, 238 k_EControllerActionOrigin_SteamV2_LeftBumper, 239 k_EControllerActionOrigin_SteamV2_RightBumper, 240 k_EControllerActionOrigin_SteamV2_LeftGrip, 241 k_EControllerActionOrigin_SteamV2_RightGrip, 242 k_EControllerActionOrigin_SteamV2_LeftGrip_Upper, 243 k_EControllerActionOrigin_SteamV2_RightGrip_Upper, 244 k_EControllerActionOrigin_SteamV2_LeftBumper_Pressure, 245 k_EControllerActionOrigin_SteamV2_RightBumper_Pressure, 246 k_EControllerActionOrigin_SteamV2_LeftGrip_Pressure, 247 k_EControllerActionOrigin_SteamV2_RightGrip_Pressure, 248 k_EControllerActionOrigin_SteamV2_LeftGrip_Upper_Pressure, 249 k_EControllerActionOrigin_SteamV2_RightGrip_Upper_Pressure, 250 k_EControllerActionOrigin_SteamV2_Start, 251 k_EControllerActionOrigin_SteamV2_Back, 252 k_EControllerActionOrigin_SteamV2_LeftPad_Touch, 253 k_EControllerActionOrigin_SteamV2_LeftPad_Swipe, 254 k_EControllerActionOrigin_SteamV2_LeftPad_Click, 255 k_EControllerActionOrigin_SteamV2_LeftPad_Pressure, 256 k_EControllerActionOrigin_SteamV2_LeftPad_DPadNorth, 257 k_EControllerActionOrigin_SteamV2_LeftPad_DPadSouth, 258 k_EControllerActionOrigin_SteamV2_LeftPad_DPadWest, 259 k_EControllerActionOrigin_SteamV2_LeftPad_DPadEast, 260 k_EControllerActionOrigin_SteamV2_RightPad_Touch, 261 k_EControllerActionOrigin_SteamV2_RightPad_Swipe, 262 k_EControllerActionOrigin_SteamV2_RightPad_Click, 263 k_EControllerActionOrigin_SteamV2_RightPad_Pressure, 264 k_EControllerActionOrigin_SteamV2_RightPad_DPadNorth, 265 k_EControllerActionOrigin_SteamV2_RightPad_DPadSouth, 266 k_EControllerActionOrigin_SteamV2_RightPad_DPadWest, 267 k_EControllerActionOrigin_SteamV2_RightPad_DPadEast, 268 k_EControllerActionOrigin_SteamV2_LeftTrigger_Pull, 269 k_EControllerActionOrigin_SteamV2_LeftTrigger_Click, 270 k_EControllerActionOrigin_SteamV2_RightTrigger_Pull, 271 k_EControllerActionOrigin_SteamV2_RightTrigger_Click, 272 k_EControllerActionOrigin_SteamV2_LeftStick_Move, 273 k_EControllerActionOrigin_SteamV2_LeftStick_Click, 274 k_EControllerActionOrigin_SteamV2_LeftStick_DPadNorth, 275 k_EControllerActionOrigin_SteamV2_LeftStick_DPadSouth, 276 k_EControllerActionOrigin_SteamV2_LeftStick_DPadWest, 277 k_EControllerActionOrigin_SteamV2_LeftStick_DPadEast, 278 k_EControllerActionOrigin_SteamV2_Gyro_Move, 279 k_EControllerActionOrigin_SteamV2_Gyro_Pitch, 280 k_EControllerActionOrigin_SteamV2_Gyro_Yaw, 281 k_EControllerActionOrigin_SteamV2_Gyro_Roll, 282 283 k_EControllerActionOrigin_Count 284 }; 285 286 enum ESteamControllerLEDFlag 287 { 288 k_ESteamControllerLEDFlag_SetColor, 289 k_ESteamControllerLEDFlag_RestoreUserDefault 290 }; 291 292 enum ESteamInputType 293 { 294 k_ESteamInputType_Unknown, 295 k_ESteamInputType_SteamController, 296 k_ESteamInputType_XBox360Controller, 297 k_ESteamInputType_XBoxOneController, 298 k_ESteamInputType_GenericXInput, 299 k_ESteamInputType_PS4Controller, 300 }; 301 302 // ControllerHandle_t is used to refer to a specific controller. 303 // This handle will consistently identify a controller, even if it is disconnected and re-connected 304 typedef uint64 ControllerHandle_t; 305 306 307 // These handles are used to refer to a specific in-game action or action set 308 // All action handles should be queried during initialization for performance reasons 309 typedef uint64 ControllerActionSetHandle_t; 310 typedef uint64 ControllerDigitalActionHandle_t; 311 typedef uint64 ControllerAnalogActionHandle_t; 312 313 #pragma pack( push, 1 ) 314 315 struct ControllerAnalogActionData_t 316 { 317 // Type of data coming from this action, this will match what got specified in the action set 318 EControllerSourceMode eMode; 319 320 // The current state of this action; will be delta updates for mouse actions 321 float x, y; 322 323 // Whether or not this action is currently available to be bound in the active action set 324 bool bActive; 325 }; 326 327 struct ControllerDigitalActionData_t 328 { 329 // The current state of this action; will be true if currently pressed 330 bool bState; 331 332 // Whether or not this action is currently available to be bound in the active action set 333 bool bActive; 334 }; 335 336 struct ControllerMotionData_t 337 { 338 // Sensor-fused absolute rotation; will drift in heading 339 float rotQuatX; 340 float rotQuatY; 341 float rotQuatZ; 342 float rotQuatW; 343 344 // Positional acceleration 345 float posAccelX; 346 float posAccelY; 347 float posAccelZ; 348 349 // Angular velocity 350 float rotVelX; 351 float rotVelY; 352 float rotVelZ; 353 }; 354 355 #pragma pack( pop ) 356 357 358 //----------------------------------------------------------------------------- 359 // Purpose: Native Steam controller support API 360 //----------------------------------------------------------------------------- 361 class ISteamController 362 { 363 public: 364 365 // Init and Shutdown must be called when starting/ending use of this interface 366 virtual bool Init() = 0; 367 virtual bool Shutdown() = 0; 368 369 // Synchronize API state with the latest Steam Controller inputs available. This 370 // is performed automatically by SteamAPI_RunCallbacks, but for the absolute lowest 371 // possible latency, you call this directly before reading controller state. 372 virtual void RunFrame() = 0; 373 374 // Enumerate currently connected controllers 375 // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles 376 // Returns the number of handles written to handlesOut 377 virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0; 378 379 // Invokes the Steam overlay and brings up the binding screen 380 // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode 381 virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0; 382 383 // ACTION SETS 384 // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls. 385 virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0; 386 387 // Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive') 388 // This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in 389 // your state loops, instead of trying to place it in all of your state transitions. 390 virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0; 391 virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0; 392 393 virtual void ActivateActionSetLayer( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle ) = 0; 394 virtual void DeactivateActionSetLayer( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle ) = 0; 395 virtual void DeactivateAllActionSetLayers( ControllerHandle_t controllerHandle ) = 0; 396 virtual int GetActiveActionSetLayers( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t *handlesOut ) = 0; 397 398 399 // ACTIONS 400 // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls. 401 virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0; 402 403 // Returns the current state of the supplied digital game action 404 virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0; 405 406 // Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action. 407 // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles 408 virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0; 409 410 // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls. 411 virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0; 412 413 // Returns the current state of these supplied analog game action 414 virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0; 415 416 // Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action. 417 // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles 418 virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0; 419 420 virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0; 421 422 // Trigger a haptic pulse on a controller 423 virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0; 424 425 // Trigger a pulse with a duty cycle of usDurationMicroSec / usOffMicroSec, unRepeat times. 426 // nFlags is currently unused and reserved for future use. 427 virtual void TriggerRepeatedHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags ) = 0; 428 429 // Tigger a vibration event on supported controllers. 430 virtual void TriggerVibration( ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed ) = 0; 431 432 // Set the controller LED color on supported controllers. 433 virtual void SetLEDColor( ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags ) = 0; 434 435 // Returns the associated gamepad index for the specified controller, if emulating a gamepad 436 virtual int GetGamepadIndexForController( ControllerHandle_t ulControllerHandle ) = 0; 437 438 // Returns the associated controller handle for the specified emulated gamepad 439 virtual ControllerHandle_t GetControllerForGamepadIndex( int nIndex ) = 0; 440 441 // Returns raw motion data from the specified controller 442 virtual ControllerMotionData_t GetMotionData( ControllerHandle_t controllerHandle ) = 0; 443 444 // Attempt to display origins of given action in the controller HUD, for the currently active action set 445 // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode 446 virtual bool ShowDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition ) = 0; 447 virtual bool ShowAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition ) = 0; 448 449 // Returns a localized string (from Steam's language setting) for the specified origin 450 virtual const char *GetStringForActionOrigin( EControllerActionOrigin eOrigin ) = 0; 451 452 // Get a local path to art for on-screen glyph for a particular origin 453 virtual const char *GetGlyphForActionOrigin( EControllerActionOrigin eOrigin ) = 0; 454 455 // Returns the input type for a particular handle 456 virtual ESteamInputType GetInputTypeForHandle( ControllerHandle_t controllerHandle ) = 0; 457 }; 458 459 #define STEAMCONTROLLER_INTERFACE_VERSION "SteamController006" 460 461 #endif // ISTEAMCONTROLLER_H 462