/* * Copyright 2021 RĂ©mi Bernon for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #ifdef __WIDL__ #pragma winrt ns_prefix #endif #ifndef DO_NO_IMPORTS import "inspectable.idl"; import "asyncinfo.idl"; import "eventtoken.idl"; import "windowscontracts.idl"; import "windows.foundation.idl"; import "windows.devices.haptics.idl"; import "windows.gaming.input.forcefeedback.idl"; import "windows.system.idl"; import "windows.devices.power.idl"; #endif namespace Windows.Gaming.Input { typedef enum ArcadeStickButtons ArcadeStickButtons; typedef enum FlightStickButtons FlightStickButtons; typedef enum GamepadButtons GamepadButtons; typedef enum GameControllerButtonLabel GameControllerButtonLabel; typedef enum GameControllerSwitchKind GameControllerSwitchKind; typedef enum GameControllerSwitchPosition GameControllerSwitchPosition; typedef enum RacingWheelButtons RacingWheelButtons; typedef struct ArcadeStickReading ArcadeStickReading; typedef struct FlightStickReading FlightStickReading; typedef struct GamepadReading GamepadReading; typedef struct GamepadVibration GamepadVibration; typedef struct RacingWheelReading RacingWheelReading; interface IArcadeStick; interface IArcadeStickStatics; interface IArcadeStickStatics2; interface IFlightStick; interface IFlightStickStatics; interface IGameController; interface IGameControllerBatteryInfo; interface IGamepad; interface IGamepad2; interface IGamepadStatics; interface IGamepadStatics2; interface IRacingWheel; interface IRacingWheelStatics; interface IRacingWheelStatics2; interface IRawGameController; interface IRawGameController2; runtimeclass ArcadeStick; runtimeclass FlightStick; runtimeclass Gamepad; runtimeclass Headset; runtimeclass RacingWheel; runtimeclass RawGameController; declare { interface Windows.Foundation.EventHandler; interface Windows.Foundation.EventHandler; interface Windows.Foundation.EventHandler; interface Windows.Foundation.EventHandler; interface Windows.Foundation.EventHandler; interface Windows.Foundation.TypedEventHandler; interface Windows.Foundation.TypedEventHandler; interface Windows.Foundation.Collections.IIterator; interface Windows.Foundation.Collections.IIterable; interface Windows.Foundation.Collections.IVectorView; interface Windows.Foundation.Collections.IIterator; interface Windows.Foundation.Collections.IIterable; interface Windows.Foundation.Collections.IVectorView; interface Windows.Foundation.Collections.IIterator; interface Windows.Foundation.Collections.IIterable; interface Windows.Foundation.Collections.IVectorView; interface Windows.Foundation.Collections.IVector; interface Windows.Foundation.Collections.IIterator; interface Windows.Foundation.Collections.IIterable; interface Windows.Foundation.Collections.IVectorView; interface Windows.Foundation.Collections.IVector; interface Windows.Foundation.Collections.IIterator; interface Windows.Foundation.Collections.IIterable; interface Windows.Foundation.Collections.IVectorView; interface Windows.Foundation.Collections.IVector; } [ contract(Windows.Foundation.UniversalApiContract, 3.0), flags ] enum ArcadeStickButtons { None = 0x0, StickUp = 0x1, StickDown = 0x2, StickLeft = 0x4, StickRight = 0x8, Action1 = 0x10, Action2 = 0x20, Action3 = 0x40, Action4 = 0x80, Action5 = 0x100, Action6 = 0x200, Special1 = 0x400, Special2 = 0x800 }; [ contract(Windows.Foundation.UniversalApiContract, 4.0), flags ] enum FlightStickButtons { None = 0x0, FirePrimary = 0x1, FireSecondary = 0x2, }; [ contract(Windows.Foundation.UniversalApiContract, 1.0), flags ] enum GamepadButtons { None = 0x0, Menu = 0x1, View = 0x2, A = 0x4, B = 0x8, X = 0x10, Y = 0x20, DPadUp = 0x40, DPadDown = 0x80, DPadLeft = 0x100, DPadRight = 0x200, LeftShoulder = 0x400, RightShoulder = 0x800, LeftThumbstick = 0x1000, RightThumbstick = 0x2000, [contract(Windows.Foundation.UniversalApiContract, 3.0)] Paddle1 = 0x4000, [contract(Windows.Foundation.UniversalApiContract, 3.0)] Paddle2 = 0x8000, [contract(Windows.Foundation.UniversalApiContract, 3.0)] Paddle3 = 0x10000, [contract(Windows.Foundation.UniversalApiContract, 3.0)] Paddle4 = 0x20000 }; [contract(Windows.Foundation.UniversalApiContract, 3.0)] enum GameControllerButtonLabel { None = 0, XboxBack = 1, XboxStart = 2, XboxMenu = 3, XboxView = 4, XboxUp = 5, XboxDown = 6, XboxLeft = 7, XboxRight = 8, XboxA = 9, XboxB = 10, XboxX = 11, XboxY = 12, XboxLeftBumper = 13, XboxLeftTrigger = 14, XboxLeftStickButton = 15, XboxRightBumper = 16, XboxRightTrigger = 17, XboxRightStickButton = 18, XboxPaddle1 = 19, XboxPaddle2 = 20, XboxPaddle3 = 21, XboxPaddle4 = 22, Mode = 23, Select = 24, Menu = 25, View = 26, Back = 27, Start = 28, Options = 29, Share = 30, Up = 31, Down = 32, Left = 33, Right = 34, LetterA = 35, LetterB = 36, LetterC = 37, LetterL = 38, LetterR = 39, LetterX = 40, LetterY = 41, LetterZ = 42, Cross = 43, Circle = 44, Square = 45, Triangle = 46, LeftBumper = 47, LeftTrigger = 48, LeftStickButton = 49, Left1 = 50, Left2 = 51, Left3 = 52, RightBumper = 53, RightTrigger = 54, RightStickButton = 55, Right1 = 56, Right2 = 57, Right3 = 58, Paddle1 = 59, Paddle2 = 60, Paddle3 = 61, Paddle4 = 62, Plus = 63, Minus = 64, DownLeftArrow = 65, DialLeft = 66, DialRight = 67, Suspension = 68 }; [contract(Windows.Foundation.UniversalApiContract, 4.0)] enum GameControllerSwitchKind { TwoWay = 0, FourWay = 1, EightWay = 2 }; [contract(Windows.Foundation.UniversalApiContract, 4.0)] enum GameControllerSwitchPosition { Center = 0, Up = 1, UpRight = 2, Right = 3, DownRight = 4, Down = 5, DownLeft = 6, Left = 7, UpLeft = 8 }; [ contract(Windows.Foundation.UniversalApiContract, 3.0), flags ] enum RacingWheelButtons { None = 0x0, PreviousGear = 0x1, NextGear = 0x2, DPadUp = 0x4, DPadDown = 0x8, DPadLeft = 0x10, DPadRight = 0x20, Button1 = 0x40, Button2 = 0x80, Button3 = 0x100, Button4 = 0x200, Button5 = 0x400, Button6 = 0x800, Button7 = 0x1000, Button8 = 0x2000, Button9 = 0x4000, Button10 = 0x8000, Button11 = 0x10000, Button12 = 0x20000, Button13 = 0x40000, Button14 = 0x80000, Button15 = 0x100000, Button16 = 0x200000, }; [contract(Windows.Foundation.UniversalApiContract, 3.0)] struct ArcadeStickReading { UINT64 Timestamp; Windows.Gaming.Input.ArcadeStickButtons Buttons; }; [contract(Windows.Foundation.UniversalApiContract, 4.0)] struct FlightStickReading { UINT64 Timestamp; Windows.Gaming.Input.FlightStickButtons Buttons; Windows.Gaming.Input.GameControllerSwitchPosition HatSwitch; DOUBLE Roll; DOUBLE Pitch; DOUBLE Yaw; DOUBLE Throttle; }; [contract(Windows.Foundation.UniversalApiContract, 1.0)] struct GamepadReading { UINT64 Timestamp; Windows.Gaming.Input.GamepadButtons Buttons; DOUBLE LeftTrigger; DOUBLE RightTrigger; DOUBLE LeftThumbstickX; DOUBLE LeftThumbstickY; DOUBLE RightThumbstickX; DOUBLE RightThumbstickY; }; [contract(Windows.Foundation.UniversalApiContract, 1.0)] struct GamepadVibration { DOUBLE LeftMotor; DOUBLE RightMotor; DOUBLE LeftTrigger; DOUBLE RightTrigger; }; [contract(Windows.Foundation.UniversalApiContract, 3.0)] struct RacingWheelReading { UINT64 Timestamp; Windows.Gaming.Input.RacingWheelButtons Buttons; INT32 PatternShifterGear; DOUBLE Wheel; DOUBLE Throttle; DOUBLE Brake; DOUBLE Clutch; DOUBLE Handbrake; }; [ contract(Windows.Foundation.UniversalApiContract, 3.0), exclusiveto(Windows.Gaming.Input.ArcadeStick), uuid(b14a539d-befb-4c81-8051-15ecf3b13036) ] interface IArcadeStick : IInspectable requires Windows.Gaming.Input.IGameController { HRESULT GetButtonLabel([in] Windows.Gaming.Input.ArcadeStickButtons button, [out, retval] Windows.Gaming.Input.GameControllerButtonLabel *value); HRESULT GetCurrentReading([out, retval] Windows.Gaming.Input.ArcadeStickReading *value); } [ contract(Windows.Foundation.UniversalApiContract, 3.0), exclusiveto(Windows.Gaming.Input.ArcadeStick), uuid(5c37b8c8-37b1-4ad8-9458-200f1a30018e) ] interface IArcadeStickStatics : IInspectable { [eventadd] HRESULT ArcadeStickAdded([in] Windows.Foundation.EventHandler *value, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT ArcadeStickAdded([in] EventRegistrationToken token); [eventadd] HRESULT ArcadeStickRemoved([in] Windows.Foundation.EventHandler *value, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT ArcadeStickRemoved([in] EventRegistrationToken token); [propget] HRESULT ArcadeSticks([out, retval] Windows.Foundation.Collections.IVectorView **value); } [ contract(Windows.Foundation.UniversalApiContract, 4.0), exclusiveto(Windows.Gaming.Input.ArcadeStick), uuid(52b5d744-bb86-445a-b59c-596f0e2a49df) ] interface IArcadeStickStatics2 : IInspectable requires Windows.Gaming.Input.IArcadeStickStatics { HRESULT FromGameController([in] Windows.Gaming.Input.IGameController *controller, [out, retval] Windows.Gaming.Input.ArcadeStick **value); } [ contract(Windows.Foundation.UniversalApiContract, 4.0), exclusiveto(Windows.Gaming.Input.FlightStick), uuid(b4a2c01c-b83b-4459-a1a9-97b03c33da7c) ] interface IFlightStick : IInspectable requires Windows.Gaming.Input.IGameController { [propget] HRESULT HatSwitchKind([out, retval] Windows.Gaming.Input.GameControllerSwitchKind *value); HRESULT GetButtonLabel([in] Windows.Gaming.Input.FlightStickButtons button, [out, retval] Windows.Gaming.Input.GameControllerButtonLabel *value); HRESULT GetCurrentReading([out, retval] Windows.Gaming.Input.FlightStickReading *value); } [ contract(Windows.Foundation.UniversalApiContract, 4.0), exclusiveto(Windows.Gaming.Input.FlightStick), uuid(5514924a-fecc-435e-83dc-5cec8a18a520) ] interface IFlightStickStatics : IInspectable { [eventadd] HRESULT FlightStickAdded([in] Windows.Foundation.EventHandler *value, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT FlightStickAdded([in] EventRegistrationToken token); [eventadd] HRESULT FlightStickRemoved([in] Windows.Foundation.EventHandler *value, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT FlightStickRemoved([in] EventRegistrationToken token); [propget] HRESULT FlightSticks([out, retval] Windows.Foundation.Collections.IVectorView **value); HRESULT FromGameController([in] Windows.Gaming.Input.IGameController *controller, [out, retval] Windows.Gaming.Input.FlightStick **value); } [ contract(Windows.Foundation.UniversalApiContract, 1.0), uuid(1baf6522-5f64-42c5-8267-b9fe2215bfbd) ] interface IGameController : IInspectable { [eventadd] HRESULT HeadsetConnected([in] Windows.Foundation.TypedEventHandler *handler, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT HeadsetConnected([in] EventRegistrationToken token); [eventadd] HRESULT HeadsetDisconnected([in] Windows.Foundation.TypedEventHandler *handler, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT HeadsetDisconnected([in] EventRegistrationToken token); [eventadd] HRESULT UserChanged([in] Windows.Foundation.TypedEventHandler *handler, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT UserChanged([in] EventRegistrationToken token); [propget] HRESULT Headset([out, retval] Windows.Gaming.Input.Headset **value); [propget] HRESULT IsWireless([out, retval] boolean *value); [propget] HRESULT User([out, retval] Windows.System.User **value); } [ contract(Windows.Foundation.UniversalApiContract, 1.0), exclusiveto(Windows.Gaming.Input.Gamepad), uuid(bc7bb43c-0a69-3903-9e9d-a50f86a45de5) ] interface IGamepad : IInspectable requires Windows.Gaming.Input.IGameController { [propget] HRESULT Vibration([out, retval] Windows.Gaming.Input.GamepadVibration *value); [propput] HRESULT Vibration([in] Windows.Gaming.Input.GamepadVibration value); HRESULT GetCurrentReading([out, retval] Windows.Gaming.Input.GamepadReading *value); } [ contract(Windows.Foundation.UniversalApiContract, 3.0), exclusiveto(Windows.Gaming.Input.RacingWheel), uuid(f546656f-e106-4c82-a90f-554012904b85) ] interface IRacingWheel : IInspectable requires Windows.Gaming.Input.IGameController { [propget] HRESULT HasClutch([out, retval] boolean *value); [propget] HRESULT HasHandbrake([out, retval] boolean *value); [propget] HRESULT HasPatternShifter([out, retval] boolean *value); [propget] HRESULT MaxPatternShifterGear([out, retval] INT32 *value); [propget] HRESULT MaxWheelAngle([out, retval] DOUBLE *value); [propget] HRESULT WheelMotor([out, retval] Windows.Gaming.Input.ForceFeedback.ForceFeedbackMotor **value); HRESULT GetButtonLabel([in] Windows.Gaming.Input.RacingWheelButtons button, [out, retval] Windows.Gaming.Input.GameControllerButtonLabel *value); HRESULT GetCurrentReading([out, retval] Windows.Gaming.Input.RacingWheelReading *value); } [ contract(Windows.Foundation.UniversalApiContract, 3.0), exclusiveto(Windows.Gaming.Input.RacingWheel), uuid(3ac12cd5-581b-4936-9f94-69f1e6514c7d) ] interface IRacingWheelStatics : IInspectable { [eventadd] HRESULT RacingWheelAdded([in] Windows.Foundation.EventHandler *value, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT RacingWheelAdded([in] EventRegistrationToken token); [eventadd] HRESULT RacingWheelRemoved([in] Windows.Foundation.EventHandler *value, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT RacingWheelRemoved([in] EventRegistrationToken token); [propget] HRESULT RacingWheels([out, retval] Windows.Foundation.Collections.IVectorView **value); } [ contract(Windows.Foundation.UniversalApiContract, 4.0), exclusiveto(Windows.Gaming.Input.RacingWheel), uuid(e666bcaa-edfd-4323-a9f6-3c384048d1ed) ] interface IRacingWheelStatics2 : IInspectable requires Windows.Gaming.Input.IRacingWheelStatics { HRESULT FromGameController([in] Windows.Gaming.Input.IGameController *controller, [out, retval] Windows.Gaming.Input.RacingWheel **value); } [ contract(Windows.Foundation.UniversalApiContract, 4.0), exclusiveto(Windows.Gaming.Input.RawGameController), uuid(7cad6d91-a7e1-4f71-9a78-33e9c5dfea62) ] interface IRawGameController : IInspectable requires Windows.Gaming.Input.IGameController { [propget] HRESULT AxisCount([out, retval] INT32 *value); [propget] HRESULT ButtonCount([out, retval] INT32 *value); [propget] HRESULT ForceFeedbackMotors([out, retval] Windows.Foundation.Collections.IVectorView **value); [propget] HRESULT HardwareProductId([out, retval] UINT16 *value); [propget] HRESULT HardwareVendorId([out, retval] UINT16 *value); [propget] HRESULT SwitchCount([out, retval] INT32 *value); HRESULT GetButtonLabel([in] INT32 index, [out, retval] Windows.Gaming.Input.GameControllerButtonLabel *value); HRESULT GetCurrentReading([in] UINT32 buttons_size, [out, size_is(buttons_size)] boolean *buttons, [in] UINT32 switches_size, [out, size_is(switches_size)] Windows.Gaming.Input.GameControllerSwitchPosition *switches, [in] UINT32 axes_size, [out, size_is(axes_size)] DOUBLE *axes, [out, retval] UINT64 *timestamp); HRESULT GetSwitchKind([in] INT32 index, [out, retval] Windows.Gaming.Input.GameControllerSwitchKind *value); } [ contract(Windows.Foundation.UniversalApiContract, 5.0), exclusiveto(Windows.Gaming.Input.RawGameController), uuid(43c0c035-bb73-4756-a787-3ed6bea617bd) ] interface IRawGameController2 : IInspectable requires Windows.Gaming.Input.IRawGameController, Windows.Gaming.Input.IGameController { [propget] HRESULT SimpleHapticsControllers([out, retval] Windows.Foundation.Collections.IVectorView **value); [propget] HRESULT NonRoamableId([out, retval] HSTRING *value); [propget] HRESULT DisplayName([out, retval] HSTRING *value); } [ object, uuid(8bbce529-d49c-39e9-9560-e47dde96b7c8) ] interface IGamepadStatics : IInspectable { [eventadd] HRESULT GamepadAdded([in] Windows.Foundation.EventHandler *value, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT GamepadAdded([in] EventRegistrationToken token); [eventadd] HRESULT GamepadRemoved([in] Windows.Foundation.EventHandler *value, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT GamepadRemoved([in] EventRegistrationToken token); [propget] HRESULT Gamepads([out, retval] Windows.Foundation.Collections.IVectorView **value); } [ contract(Windows.Foundation.UniversalApiContract, 4.0), exclusiveto(Windows.Gaming.Input.Gamepad), uuid(42676dc5-0856-47c4-9213-b395504c3a3c) ] interface IGamepadStatics2 : IInspectable requires Windows.Gaming.Input.IGamepadStatics { HRESULT FromGameController([in] Windows.Gaming.Input.IGameController *controller, [out, retval] Windows.Gaming.Input.Gamepad **value); } [ contract(Windows.Foundation.UniversalApiContract, 1.0), exclusiveto(Windows.Gaming.Input.Headset), uuid(3fd156ef-6925-3fa8-9181-029c5223ae3b) ] interface IHeadset : IInspectable { [propget] HRESULT CaptureDeviceId([out, retval] HSTRING *value); [propget] HRESULT RenderDeviceId([out, retval] HSTRING *value); } [ object, uuid(eb8d0792-e95a-4b19-afc7-0a59f8bf759e) ] interface IRawGameControllerStatics : IInspectable { [eventadd] HRESULT RawGameControllerAdded([in] Windows.Foundation.EventHandler *handler, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT RawGameControllerAdded([in] EventRegistrationToken token); [eventadd] HRESULT RawGameControllerRemoved([in] Windows.Foundation.EventHandler *handler, [out, retval] EventRegistrationToken *token); [eventremove] HRESULT RawGameControllerRemoved([in] EventRegistrationToken token); [propget] HRESULT RawGameControllers([out, retval] Windows.Foundation.Collections.IVectorView **value); HRESULT FromGameController([in] Windows.Gaming.Input.IGameController *game_controller, [out, retval] Windows.Gaming.Input.RawGameController **value); } [ contract(Windows.Foundation.UniversalApiContract, 4.0), uuid(dcecc681-3963-4da6-955d-553f3b6f6161) ] interface IGameControllerBatteryInfo : IInspectable { HRESULT TryGetBatteryReport([out, retval] Windows.Devices.Power.BatteryReport **value); } [ contract(Windows.Foundation.UniversalApiContract, 3.0), marshaling_behavior(agile), static(Windows.Gaming.Input.IArcadeStickStatics, Windows.Foundation.UniversalApiContract, 3.0), static(Windows.Gaming.Input.IArcadeStickStatics2, Windows.Foundation.UniversalApiContract, 4.0), threading(both) ] runtimeclass ArcadeStick { [default] interface Windows.Gaming.Input.IArcadeStick; interface Windows.Gaming.Input.IGameController; [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.Gaming.Input.IGameControllerBatteryInfo; } [ contract(Windows.Foundation.UniversalApiContract, 4.0), marshaling_behavior(agile), static(Windows.Gaming.Input.IFlightStickStatics, Windows.Foundation.UniversalApiContract, 4.0), threading(both) ] runtimeclass FlightStick { [default] interface Windows.Gaming.Input.IFlightStick; interface Windows.Gaming.Input.IGameController; interface Windows.Gaming.Input.IGameControllerBatteryInfo; } [ contract(Windows.Foundation.UniversalApiContract, 1.0), marshaling_behavior(agile), static(Windows.Gaming.Input.IGamepadStatics, Windows.Foundation.UniversalApiContract, 1.0), static(Windows.Gaming.Input.IGamepadStatics2, Windows.Foundation.UniversalApiContract, 4.0), threading(both) ] runtimeclass Gamepad { [default] interface Windows.Gaming.Input.IGamepad; interface Windows.Gaming.Input.IGameController; [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.Gaming.Input.IGamepad2; [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.Gaming.Input.IGameControllerBatteryInfo; } [ contract(Windows.Foundation.UniversalApiContract, 1.0), marshaling_behavior(agile), threading(both) ] runtimeclass Headset { [default] interface Windows.Gaming.Input.IHeadset; [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.Gaming.Input.IGameControllerBatteryInfo; } [ contract(Windows.Foundation.UniversalApiContract, 3.0), marshaling_behavior(agile), static(Windows.Gaming.Input.IRacingWheelStatics, Windows.Foundation.UniversalApiContract, 3.0), static(Windows.Gaming.Input.IRacingWheelStatics2, Windows.Foundation.UniversalApiContract, 4.0), threading(both) ] runtimeclass RacingWheel { [default] interface Windows.Gaming.Input.IRacingWheel; interface Windows.Gaming.Input.IGameController; [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.Gaming.Input.IGameControllerBatteryInfo; } [ contract(Windows.Foundation.UniversalApiContract, 4.0), marshaling_behavior(agile), static(Windows.Gaming.Input.IRawGameControllerStatics, Windows.Foundation.UniversalApiContract, 4.0), threading(both) ] runtimeclass RawGameController { [default] interface Windows.Gaming.Input.IRawGameController; interface Windows.Gaming.Input.IGameController; interface Windows.Gaming.Input.IGameControllerBatteryInfo; [contract(Windows.Foundation.UniversalApiContract, 5.0)] interface Windows.Gaming.Input.IRawGameController2; } }