summaryrefslogtreecommitdiff
path: root/public/steam/isteamcontroller.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/steam/isteamcontroller.h')
-rw-r--r--public/steam/isteamcontroller.h210
1 files changed, 210 insertions, 0 deletions
diff --git a/public/steam/isteamcontroller.h b/public/steam/isteamcontroller.h
new file mode 100644
index 0000000..a973696
--- /dev/null
+++ b/public/steam/isteamcontroller.h
@@ -0,0 +1,210 @@
+//====== Copyright 1996-2013, Valve Corporation, All rights reserved. =======
+//
+// Purpose: interface to valve controller
+//
+//=============================================================================
+
+#ifndef ISTEAMCONTROLLER_H
+#define ISTEAMCONTROLLER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "isteamclient.h"
+
+#define STEAM_CONTROLLER_MAX_COUNT 16
+
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTIONS 16
+
+#define STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS 32
+
+#define STEAM_CONTROLLER_MAX_ORIGINS 8
+
+// When sending an option to a specific controller handle, you can send to all controllers via this command
+#define STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS UINT64_MAX
+
+#define STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA -1.0f
+#define STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA 1.0f
+
+enum ESteamControllerPad
+{
+ k_ESteamControllerPad_Left,
+ k_ESteamControllerPad_Right
+};
+
+enum EControllerSource
+{
+ k_EControllerSource_None,
+ k_EControllerSource_LeftTrackpad,
+ k_EControllerSource_RightTrackpad,
+ k_EControllerSource_Joystick,
+ k_EControllerSource_ABXY,
+ k_EControllerSource_Switch,
+ k_EControllerSource_LeftTrigger,
+ k_EControllerSource_RightTrigger,
+ k_EControllerSource_Gyro
+};
+
+enum EControllerSourceMode
+{
+ k_EControllerSourceMode_None,
+ k_EControllerSourceMode_Dpad,
+ k_EControllerSourceMode_Buttons,
+ k_EControllerSourceMode_FourButtons,
+ k_EControllerSourceMode_AbsoluteMouse,
+ k_EControllerSourceMode_RelativeMouse,
+ k_EControllerSourceMode_JoystickMove,
+ k_EControllerSourceMode_JoystickCamera,
+ k_EControllerSourceMode_ScrollWheel,
+ k_EControllerSourceMode_Trigger,
+ k_EControllerSourceMode_TouchMenu
+};
+
+enum EControllerActionOrigin
+{
+ k_EControllerActionOrigin_None,
+ k_EControllerActionOrigin_A,
+ k_EControllerActionOrigin_B,
+ k_EControllerActionOrigin_X,
+ k_EControllerActionOrigin_Y,
+ k_EControllerActionOrigin_LeftBumper,
+ k_EControllerActionOrigin_RightBumper,
+ k_EControllerActionOrigin_LeftGrip,
+ k_EControllerActionOrigin_RightGrip,
+ k_EControllerActionOrigin_Start,
+ k_EControllerActionOrigin_Back,
+ k_EControllerActionOrigin_LeftPad_Touch,
+ k_EControllerActionOrigin_LeftPad_Swipe,
+ k_EControllerActionOrigin_LeftPad_Click,
+ k_EControllerActionOrigin_LeftPad_DPadNorth,
+ k_EControllerActionOrigin_LeftPad_DPadSouth,
+ k_EControllerActionOrigin_LeftPad_DPadWest,
+ k_EControllerActionOrigin_LeftPad_DPadEast,
+ k_EControllerActionOrigin_RightPad_Touch,
+ k_EControllerActionOrigin_RightPad_Swipe,
+ k_EControllerActionOrigin_RightPad_Click,
+ k_EControllerActionOrigin_RightPad_DPadNorth,
+ k_EControllerActionOrigin_RightPad_DPadSouth,
+ k_EControllerActionOrigin_RightPad_DPadWest,
+ k_EControllerActionOrigin_RightPad_DPadEast,
+ k_EControllerActionOrigin_LeftTrigger_Pull,
+ k_EControllerActionOrigin_LeftTrigger_Click,
+ k_EControllerActionOrigin_RightTrigger_Pull,
+ k_EControllerActionOrigin_RightTrigger_Click,
+ k_EControllerActionOrigin_LeftStick_Move,
+ k_EControllerActionOrigin_LeftStick_Click,
+ k_EControllerActionOrigin_LeftStick_DPadNorth,
+ k_EControllerActionOrigin_LeftStick_DPadSouth,
+ k_EControllerActionOrigin_LeftStick_DPadWest,
+ k_EControllerActionOrigin_LeftStick_DPadEast,
+ k_EControllerActionOrigin_Gyro_Move,
+ k_EControllerActionOrigin_Gyro_Pitch,
+ k_EControllerActionOrigin_Gyro_Yaw,
+ k_EControllerActionOrigin_Gyro_Roll,
+
+ k_EControllerActionOrigin_Count
+};
+
+// ControllerHandle_t is used to refer to a specific controller.
+// This handle will consistently identify a controller, even if it is disconnected and re-connected
+typedef uint64 ControllerHandle_t;
+
+
+// These 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
+typedef uint64 ControllerActionSetHandle_t;
+typedef uint64 ControllerDigitalActionHandle_t;
+typedef uint64 ControllerAnalogActionHandle_t;
+
+#pragma pack( push, 1 )
+
+struct ControllerAnalogActionData_t
+{
+ // Type of data coming from this action, this will match what got specified in the action set
+ EControllerSourceMode eMode;
+
+ // The current state of this action; will be delta updates for mouse actions
+ float x, y;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+struct ControllerDigitalActionData_t
+{
+ // The current state of this action; will be true if currently pressed
+ bool bState;
+
+ // Whether or not this action is currently available to be bound in the active action set
+ bool bActive;
+};
+
+#pragma pack( pop )
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Native Steam controller support API
+//-----------------------------------------------------------------------------
+class ISteamController
+{
+public:
+
+ // Init and Shutdown must be called when starting/ending use of this interface
+ virtual bool Init() = 0;
+ virtual bool Shutdown() = 0;
+
+ // Pump callback/callresult events
+ // Note: SteamAPI_RunCallbacks will do this for you, so you should never need to call this directly.
+ virtual void RunFrame() = 0;
+
+ // Enumerate currently connected controllers
+ // handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles
+ // Returns the number of handles written to handlesOut
+ virtual int GetConnectedControllers( ControllerHandle_t *handlesOut ) = 0;
+
+ // Invokes the Steam overlay and brings up the binding screen
+ // Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
+ virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTION SETS
+ // Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName ) = 0;
+
+ // 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.
+ virtual void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle ) = 0;
+ virtual ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle ) = 0;
+
+ // ACTIONS
+ // Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of the supplied digital game action
+ virtual ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle ) = 0;
+
+ // 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.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+ // Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls.
+ virtual ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName ) = 0;
+
+ // Returns the current state of these supplied analog game action
+ virtual ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle ) = 0;
+
+ // 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.
+ // originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
+ virtual int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut ) = 0;
+
+
+
+ virtual void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction ) = 0;
+
+ // Trigger a haptic pulse on a controller
+ virtual void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec ) = 0;
+};
+
+#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController003"
+
+#endif // ISTEAMCONTROLLER_H