1 module derelict.steamworks.steamcontroller;
2 
3 import derelict.steamworks.types;
4 
5 enum STEAM_CONTROLLER_MAX_COUNT = 16;
6 
7 enum STEAM_CONTROLLER_MAX_ANALOG_ACTIONS = 16;
8 
9 enum STEAM_CONTROLLER_MAX_DIGITAL_ACTIONS = 128;
10 
11 enum STEAM_CONTROLLER_MAX_ORIGINS = 8;
12 
13 // When sending an option to a specific controller handle, you can send to all controllers via this command
14 enum STEAM_CONTROLLER_HANDLE_ALL_CONTROLLERS = uint64.max;
15 
16 enum STEAM_CONTROLLER_MIN_ANALOG_ACTION_DATA = -1.0f;
17 enum STEAM_CONTROLLER_MAX_ANALOG_ACTION_DATA = 1.0f;
18 
19 enum ESteamControllerPad
20 {
21     k_ESteamControllerPad_Left,
22     k_ESteamControllerPad_Right
23 }
24 
25 enum EControllerSource
26 {
27     k_EControllerSource_None,
28     k_EControllerSource_LeftTrackpad,
29     k_EControllerSource_RightTrackpad,
30     k_EControllerSource_Joystick,
31     k_EControllerSource_ABXY,
32     k_EControllerSource_Switch,
33     k_EControllerSource_LeftTrigger,
34     k_EControllerSource_RightTrigger,
35     k_EControllerSource_Gyro,
36     k_EControllerSource_CenterTrackpad,		// PS4
37     k_EControllerSource_RightJoystick,		// Traditional Controllers
38     k_EControllerSource_DPad,
39     k_EControllerSource_Count
40 }
41 
42 enum EControllerSourceMode
43 {
44     k_EControllerSourceMode_None,
45     k_EControllerSourceMode_Dpad,
46     k_EControllerSourceMode_Buttons,
47     k_EControllerSourceMode_FourButtons,
48     k_EControllerSourceMode_AbsoluteMouse,
49     k_EControllerSourceMode_RelativeMouse,
50     k_EControllerSourceMode_JoystickMove,
51     k_EControllerSourceMode_JoystickMouse,
52     k_EControllerSourceMode_JoystickCamera,
53     k_EControllerSourceMode_ScrollWheel,
54     k_EControllerSourceMode_Trigger,
55     k_EControllerSourceMode_TouchMenu,
56     k_EControllerSourceMode_MouseJoystick,
57     k_EControllerSourceMode_MouseRegion,
58     k_EControllerSourceMode_RadialMenu,
59     k_EControllerSourceMode_SingleButton,
60     k_EControllerSourceMode_Switches
61 }
62 
63 enum EControllerActionOrigin
64 {
65     k_EControllerActionOrigin_None,
66     k_EControllerActionOrigin_A,
67     k_EControllerActionOrigin_B,
68     k_EControllerActionOrigin_X,
69     k_EControllerActionOrigin_Y,
70     k_EControllerActionOrigin_LeftBumper,
71     k_EControllerActionOrigin_RightBumper,
72     k_EControllerActionOrigin_LeftGrip,
73     k_EControllerActionOrigin_RightGrip,
74     k_EControllerActionOrigin_Start,
75     k_EControllerActionOrigin_Back,
76     k_EControllerActionOrigin_LeftPad_Touch,
77     k_EControllerActionOrigin_LeftPad_Swipe,
78     k_EControllerActionOrigin_LeftPad_Click,
79     k_EControllerActionOrigin_LeftPad_DPadNorth,
80     k_EControllerActionOrigin_LeftPad_DPadSouth,
81     k_EControllerActionOrigin_LeftPad_DPadWest,
82     k_EControllerActionOrigin_LeftPad_DPadEast,
83     k_EControllerActionOrigin_RightPad_Touch,
84     k_EControllerActionOrigin_RightPad_Swipe,
85     k_EControllerActionOrigin_RightPad_Click,
86     k_EControllerActionOrigin_RightPad_DPadNorth,
87     k_EControllerActionOrigin_RightPad_DPadSouth,
88     k_EControllerActionOrigin_RightPad_DPadWest,
89     k_EControllerActionOrigin_RightPad_DPadEast,
90     k_EControllerActionOrigin_LeftTrigger_Pull,
91     k_EControllerActionOrigin_LeftTrigger_Click,
92     k_EControllerActionOrigin_RightTrigger_Pull,
93     k_EControllerActionOrigin_RightTrigger_Click,
94     k_EControllerActionOrigin_LeftStick_Move,
95     k_EControllerActionOrigin_LeftStick_Click,
96     k_EControllerActionOrigin_LeftStick_DPadNorth,
97     k_EControllerActionOrigin_LeftStick_DPadSouth,
98     k_EControllerActionOrigin_LeftStick_DPadWest,
99     k_EControllerActionOrigin_LeftStick_DPadEast,
100     k_EControllerActionOrigin_Gyro_Move,
101     k_EControllerActionOrigin_Gyro_Pitch,
102     k_EControllerActionOrigin_Gyro_Yaw,
103     k_EControllerActionOrigin_Gyro_Roll,
104 
105     // PS4 Dual Shock
106     k_EControllerActionOrigin_PS4_X,
107     k_EControllerActionOrigin_PS4_Circle,
108     k_EControllerActionOrigin_PS4_Triangle,
109     k_EControllerActionOrigin_PS4_Square,
110     k_EControllerActionOrigin_PS4_LeftBumper,
111     k_EControllerActionOrigin_PS4_RightBumper,
112     k_EControllerActionOrigin_PS4_Options,  //Start
113     k_EControllerActionOrigin_PS4_Share,	//Back
114     k_EControllerActionOrigin_PS4_LeftPad_Touch,
115     k_EControllerActionOrigin_PS4_LeftPad_Swipe,
116     k_EControllerActionOrigin_PS4_LeftPad_Click,
117     k_EControllerActionOrigin_PS4_LeftPad_DPadNorth,
118     k_EControllerActionOrigin_PS4_LeftPad_DPadSouth,
119     k_EControllerActionOrigin_PS4_LeftPad_DPadWest,
120     k_EControllerActionOrigin_PS4_LeftPad_DPadEast,
121     k_EControllerActionOrigin_PS4_RightPad_Touch,
122     k_EControllerActionOrigin_PS4_RightPad_Swipe,
123     k_EControllerActionOrigin_PS4_RightPad_Click,
124     k_EControllerActionOrigin_PS4_RightPad_DPadNorth,
125     k_EControllerActionOrigin_PS4_RightPad_DPadSouth,
126     k_EControllerActionOrigin_PS4_RightPad_DPadWest,
127     k_EControllerActionOrigin_PS4_RightPad_DPadEast,
128     k_EControllerActionOrigin_PS4_CenterPad_Touch,
129     k_EControllerActionOrigin_PS4_CenterPad_Swipe,
130     k_EControllerActionOrigin_PS4_CenterPad_Click,
131     k_EControllerActionOrigin_PS4_CenterPad_DPadNorth,
132     k_EControllerActionOrigin_PS4_CenterPad_DPadSouth,
133     k_EControllerActionOrigin_PS4_CenterPad_DPadWest,
134     k_EControllerActionOrigin_PS4_CenterPad_DPadEast,
135     k_EControllerActionOrigin_PS4_LeftTrigger_Pull,
136     k_EControllerActionOrigin_PS4_LeftTrigger_Click,
137     k_EControllerActionOrigin_PS4_RightTrigger_Pull,
138     k_EControllerActionOrigin_PS4_RightTrigger_Click,
139     k_EControllerActionOrigin_PS4_LeftStick_Move,
140     k_EControllerActionOrigin_PS4_LeftStick_Click,
141     k_EControllerActionOrigin_PS4_LeftStick_DPadNorth,
142     k_EControllerActionOrigin_PS4_LeftStick_DPadSouth,
143     k_EControllerActionOrigin_PS4_LeftStick_DPadWest,
144     k_EControllerActionOrigin_PS4_LeftStick_DPadEast,
145     k_EControllerActionOrigin_PS4_RightStick_Move,
146     k_EControllerActionOrigin_PS4_RightStick_Click,
147     k_EControllerActionOrigin_PS4_RightStick_DPadNorth,
148     k_EControllerActionOrigin_PS4_RightStick_DPadSouth,
149     k_EControllerActionOrigin_PS4_RightStick_DPadWest,
150     k_EControllerActionOrigin_PS4_RightStick_DPadEast,
151     k_EControllerActionOrigin_PS4_DPad_North,
152     k_EControllerActionOrigin_PS4_DPad_South,
153     k_EControllerActionOrigin_PS4_DPad_West,
154     k_EControllerActionOrigin_PS4_DPad_East,
155     k_EControllerActionOrigin_PS4_Gyro_Move,
156     k_EControllerActionOrigin_PS4_Gyro_Pitch,
157     k_EControllerActionOrigin_PS4_Gyro_Yaw,
158     k_EControllerActionOrigin_PS4_Gyro_Roll,
159 
160     // XBox One
161     k_EControllerActionOrigin_XBoxOne_A,
162     k_EControllerActionOrigin_XBoxOne_B,
163     k_EControllerActionOrigin_XBoxOne_X,
164     k_EControllerActionOrigin_XBoxOne_Y,
165     k_EControllerActionOrigin_XBoxOne_LeftBumper,
166     k_EControllerActionOrigin_XBoxOne_RightBumper,
167     k_EControllerActionOrigin_XBoxOne_Menu,  //Start
168     k_EControllerActionOrigin_XBoxOne_View,  //Back
169     k_EControllerActionOrigin_XBoxOne_LeftTrigger_Pull,
170     k_EControllerActionOrigin_XBoxOne_LeftTrigger_Click,
171     k_EControllerActionOrigin_XBoxOne_RightTrigger_Pull,
172     k_EControllerActionOrigin_XBoxOne_RightTrigger_Click,
173     k_EControllerActionOrigin_XBoxOne_LeftStick_Move,
174     k_EControllerActionOrigin_XBoxOne_LeftStick_Click,
175     k_EControllerActionOrigin_XBoxOne_LeftStick_DPadNorth,
176     k_EControllerActionOrigin_XBoxOne_LeftStick_DPadSouth,
177     k_EControllerActionOrigin_XBoxOne_LeftStick_DPadWest,
178     k_EControllerActionOrigin_XBoxOne_LeftStick_DPadEast,
179     k_EControllerActionOrigin_XBoxOne_RightStick_Move,
180     k_EControllerActionOrigin_XBoxOne_RightStick_Click,
181     k_EControllerActionOrigin_XBoxOne_RightStick_DPadNorth,
182     k_EControllerActionOrigin_XBoxOne_RightStick_DPadSouth,
183     k_EControllerActionOrigin_XBoxOne_RightStick_DPadWest,
184     k_EControllerActionOrigin_XBoxOne_RightStick_DPadEast,
185     k_EControllerActionOrigin_XBoxOne_DPad_North,
186     k_EControllerActionOrigin_XBoxOne_DPad_South,
187     k_EControllerActionOrigin_XBoxOne_DPad_West,
188     k_EControllerActionOrigin_XBoxOne_DPad_East,
189 
190     // XBox 360
191     k_EControllerActionOrigin_XBox360_A,
192     k_EControllerActionOrigin_XBox360_B,
193     k_EControllerActionOrigin_XBox360_X,
194     k_EControllerActionOrigin_XBox360_Y,
195     k_EControllerActionOrigin_XBox360_LeftBumper,
196     k_EControllerActionOrigin_XBox360_RightBumper,
197     k_EControllerActionOrigin_XBox360_Start,  //Start
198     k_EControllerActionOrigin_XBox360_Back,  //Back
199     k_EControllerActionOrigin_XBox360_LeftTrigger_Pull,
200     k_EControllerActionOrigin_XBox360_LeftTrigger_Click,
201     k_EControllerActionOrigin_XBox360_RightTrigger_Pull,
202     k_EControllerActionOrigin_XBox360_RightTrigger_Click,
203     k_EControllerActionOrigin_XBox360_LeftStick_Move,
204     k_EControllerActionOrigin_XBox360_LeftStick_Click,
205     k_EControllerActionOrigin_XBox360_LeftStick_DPadNorth,
206     k_EControllerActionOrigin_XBox360_LeftStick_DPadSouth,
207     k_EControllerActionOrigin_XBox360_LeftStick_DPadWest,
208     k_EControllerActionOrigin_XBox360_LeftStick_DPadEast,
209     k_EControllerActionOrigin_XBox360_RightStick_Move,
210     k_EControllerActionOrigin_XBox360_RightStick_Click,
211     k_EControllerActionOrigin_XBox360_RightStick_DPadNorth,
212     k_EControllerActionOrigin_XBox360_RightStick_DPadSouth,
213     k_EControllerActionOrigin_XBox360_RightStick_DPadWest,
214     k_EControllerActionOrigin_XBox360_RightStick_DPadEast,
215     k_EControllerActionOrigin_XBox360_DPad_North,
216     k_EControllerActionOrigin_XBox360_DPad_South,
217     k_EControllerActionOrigin_XBox360_DPad_West,
218     k_EControllerActionOrigin_XBox360_DPad_East,	
219 
220     // SteamController V2
221     k_EControllerActionOrigin_SteamV2_A,
222     k_EControllerActionOrigin_SteamV2_B,
223     k_EControllerActionOrigin_SteamV2_X,
224     k_EControllerActionOrigin_SteamV2_Y,
225     k_EControllerActionOrigin_SteamV2_LeftBumper,
226     k_EControllerActionOrigin_SteamV2_RightBumper,
227     k_EControllerActionOrigin_SteamV2_LeftGrip,
228     k_EControllerActionOrigin_SteamV2_RightGrip,
229     k_EControllerActionOrigin_SteamV2_LeftGrip_Upper,
230     k_EControllerActionOrigin_SteamV2_RightGrip_Upper,
231     k_EControllerActionOrigin_SteamV2_LeftBumper_Pressure,
232     k_EControllerActionOrigin_SteamV2_RightBumper_Pressure,
233     k_EControllerActionOrigin_SteamV2_LeftGrip_Pressure,
234     k_EControllerActionOrigin_SteamV2_RightGrip_Pressure,
235     k_EControllerActionOrigin_SteamV2_LeftGrip_Upper_Pressure,
236     k_EControllerActionOrigin_SteamV2_RightGrip_Upper_Pressure,
237     k_EControllerActionOrigin_SteamV2_Start,
238     k_EControllerActionOrigin_SteamV2_Back,
239     k_EControllerActionOrigin_SteamV2_LeftPad_Touch,
240     k_EControllerActionOrigin_SteamV2_LeftPad_Swipe,
241     k_EControllerActionOrigin_SteamV2_LeftPad_Click,
242     k_EControllerActionOrigin_SteamV2_LeftPad_Pressure,
243     k_EControllerActionOrigin_SteamV2_LeftPad_DPadNorth,
244     k_EControllerActionOrigin_SteamV2_LeftPad_DPadSouth,
245     k_EControllerActionOrigin_SteamV2_LeftPad_DPadWest,
246     k_EControllerActionOrigin_SteamV2_LeftPad_DPadEast,
247     k_EControllerActionOrigin_SteamV2_RightPad_Touch,
248     k_EControllerActionOrigin_SteamV2_RightPad_Swipe,
249     k_EControllerActionOrigin_SteamV2_RightPad_Click,
250     k_EControllerActionOrigin_SteamV2_RightPad_Pressure,
251     k_EControllerActionOrigin_SteamV2_RightPad_DPadNorth,
252     k_EControllerActionOrigin_SteamV2_RightPad_DPadSouth,
253     k_EControllerActionOrigin_SteamV2_RightPad_DPadWest,
254     k_EControllerActionOrigin_SteamV2_RightPad_DPadEast,
255     k_EControllerActionOrigin_SteamV2_LeftTrigger_Pull,
256     k_EControllerActionOrigin_SteamV2_LeftTrigger_Click,
257     k_EControllerActionOrigin_SteamV2_RightTrigger_Pull,
258     k_EControllerActionOrigin_SteamV2_RightTrigger_Click,
259     k_EControllerActionOrigin_SteamV2_LeftStick_Move,
260     k_EControllerActionOrigin_SteamV2_LeftStick_Click,
261     k_EControllerActionOrigin_SteamV2_LeftStick_DPadNorth,
262     k_EControllerActionOrigin_SteamV2_LeftStick_DPadSouth,
263     k_EControllerActionOrigin_SteamV2_LeftStick_DPadWest,
264     k_EControllerActionOrigin_SteamV2_LeftStick_DPadEast,
265     k_EControllerActionOrigin_SteamV2_Gyro_Move,
266     k_EControllerActionOrigin_SteamV2_Gyro_Pitch,
267     k_EControllerActionOrigin_SteamV2_Gyro_Yaw,
268     k_EControllerActionOrigin_SteamV2_Gyro_Roll,
269     
270     k_EControllerActionOrigin_Count
271 }
272 
273 enum ESteamControllerLEDFlag
274 {
275 	k_ESteamControllerLEDFlag_SetColor,
276 	k_ESteamControllerLEDFlag_RestoreUserDefault
277 }
278 
279 struct ControllerMotionData_t
280 {
281 	// Sensor-fused absolute rotation; will drift in heading
282 	float rotQuatX;
283 	float rotQuatY;
284 	float rotQuatZ;
285 	float rotQuatW;
286 	
287 	// Positional acceleration
288 	float posAccelX;
289 	float posAccelY;
290 	float posAccelZ;
291 
292 	// Angular velocity
293 	float rotVelX;
294 	float rotVelY;
295 	float rotVelZ;
296 }
297 
298 // ControllerHandle_t is used to refer to a specific controller.
299 // This handle will consistently identify a controller, even if it is disconnected and re-connected
300 alias ControllerHandle_t = uint64;
301 
302 // These handles are used to refer to a specific in-game action or action set
303 // All action handles should be queried during initialization for performance reasons
304 alias ControllerActionSetHandle_t = uint64;
305 alias ControllerDigitalActionHandle_t = uint64;
306 alias ControllerAnalogActionHandle_t = uint64;
307 
308 align(1):
309 
310 struct ControllerAnalogActionData_t
311 {
312     // Type of data coming from this action, this will match what got specified in the action set
313     EControllerSourceMode eMode;
314     
315     // The current state of this action; will be delta updates for mouse actions
316     float x, y;
317     
318     // Whether or not this action is currently available to be bound in the active action set
319     bool bActive;
320 }
321 
322 struct ControllerDigitalActionData_t
323 {
324     // The current state of this action; will be true if currently pressed
325     bool bState;
326     
327     // Whether or not this action is currently available to be bound in the active action set
328     bool bActive;
329 }
330 
331 static immutable const(char)* STEAMCONTROLLER_INTERFACE_VERSION = "SteamController005";