Signed-off-by: Rémi Bernon rbernon@codeweavers.com ---
These are the interfaces and runtimeclasses required to implement RawGameControllerStatics runtimeclass stubs, which is also now used by some applications to enumerate gamepads on startup.
include/Makefile.in | 1 + include/asyncinfo.idl | 45 ++++++++++++++++++++++ include/windows.foundation.collections.idl | 2 +- include/windows.foundation.idl | 2 +- 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 include/asyncinfo.idl
diff --git a/include/Makefile.in b/include/Makefile.in index 1c80421ef6f..115da5bd080 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -20,6 +20,7 @@ SOURCES = \ appmodel.h \ asferr.h \ asptlb.idl \ + asyncinfo.idl \ asynot.idl \ asysta.idl \ atlbase.h \ diff --git a/include/asyncinfo.idl b/include/asyncinfo.idl new file mode 100644 index 00000000000..4662b462f5f --- /dev/null +++ b/include/asyncinfo.idl @@ -0,0 +1,45 @@ +/* + * 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 + +import "inspectable.idl"; + +typedef [v1_enum] enum AsyncStatus +{ + Started = 0, + Completed, + Canceled, + Error, +} AsyncStatus; + +[ + object, + uuid(00000036-0000-0000-c000-000000000046), + pointer_default(unique) +] +interface IAsyncInfo : IInspectable +{ + [propget] HRESULT Id([out, retval] unsigned __int32 *id); + [propget] HRESULT Status([out, retval] AsyncStatus *status); + [propget] HRESULT ErrorCode([out, retval] HRESULT *error_code); + HRESULT Cancel(); + HRESULT Close(); +} diff --git a/include/windows.foundation.collections.idl b/include/windows.foundation.collections.idl index ed05016b96d..53513b4c1ab 100644 --- a/include/windows.foundation.collections.idl +++ b/include/windows.foundation.collections.idl @@ -21,7 +21,7 @@ #endif
import "inspectable.idl"; -/* import "asyncinfo.idl"; */ +import "asyncinfo.idl"; import "windowscontracts.idl"; /* import "eventtoken.idl"; */
diff --git a/include/windows.foundation.idl b/include/windows.foundation.idl index 3c60278cf05..595f8af69e7 100644 --- a/include/windows.foundation.idl +++ b/include/windows.foundation.idl @@ -21,7 +21,7 @@ #endif
import "inspectable.idl"; -/* import "asyncinfo.idl"; */ +import "asyncinfo.idl"; import "windowscontracts.idl"; /* import "eventtoken.idl"; */ /* import "ivectorchangedeventargs.idl"; */
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- include/windows.foundation.collections.idl | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/include/windows.foundation.collections.idl b/include/windows.foundation.collections.idl index 53513b4c1ab..50a678e410c 100644 --- a/include/windows.foundation.collections.idl +++ b/include/windows.foundation.collections.idl @@ -47,6 +47,31 @@ cpp_quote("#endif") ] delegate HRESULT EventHandler<T>([in] IInspectable *sender, [in] T args);
+ interface IAsyncOperation<TResult>; + + [ + contract(Windows.Foundation.FoundationContract, 1.0), + uuid(fcdcf02c-e5d8-4478-915a-4d90b74b83a5) + ] + delegate HRESULT AsyncOperationCompletedHandler<TResult>([in] IAsyncOperation<TResult> *info, [in] AsyncStatus status); + + [ + contract(Windows.Foundation.FoundationContract, 1.0), + uuid(9fc2b0bb-e446-44e2-aa61-9cab8f636af2) + ] + interface IAsyncOperation<TResult> : IInspectable + { + [propput] HRESULT Completed([in] AsyncOperationCompletedHandler<TResult> *handler); + [propget] HRESULT Completed([out, retval] AsyncOperationCompletedHandler<TResult> **handler); + HRESULT GetResults([out, retval] TResult **results); + } + + [ + contract(Windows.Foundation.FoundationContract, 1.0), + uuid(9de1c534-6ae1-11e0-84e1-18a905bcc53f) + ] + delegate HRESULT TypedEventHandler<TSender, TArgs>([in] TSender sender, [in] TArgs args); + namespace Collections { [
Signed-off-by: Jacek Caban jacek@codeweavers.com
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- include/Makefile.in | 1 + include/windows.system.idl | 73 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 include/windows.system.idl
diff --git a/include/Makefile.in b/include/Makefile.in index 115da5bd080..32ef2cd41c1 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -754,6 +754,7 @@ SOURCES = \ windows.gaming.input.idl \ windows.h \ windows.media.speechsynthesis.idl \ + windows.system.idl \ windowscontracts.idl \ windowsx.h \ wine/debug.h \ diff --git a/include/windows.system.idl b/include/windows.system.idl new file mode 100644 index 00000000000..aaf5ecd69a1 --- /dev/null +++ b/include/windows.system.idl @@ -0,0 +1,73 @@ +/* + * 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 + +import "inspectable.idl"; +import "asyncinfo.idl"; +import "eventtoken.idl"; +import "windowscontracts.idl"; +import "windows.foundation.idl"; + +namespace Windows { + namespace System { + interface IUser; + interface IUserStatics; + interface IUserChangedEventArgs; + interface IUserChangedEventArgs2; + runtimeclass User; + runtimeclass UserChangedEventArgs; + } +} + +namespace Windows { + namespace System { + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + exclusiveto(Windows.System.UserChangedEventArgs), + uuid(086459dc-18c6-48db-bc99-724fb9203ccc) + ] + interface IUserChangedEventArgs : IInspectable + { + [propget] HRESULT User([out, retval] Windows.System.User** value); + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + marshaling_behavior(agile), + static(Windows.System.IUserStatics, Windows.Foundation.UniversalApiContract, 1.0), + threading(both), + ] + runtimeclass User + { + [default] interface Windows.System.IUser; + } + + [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + marshaling_behavior(agile) + ] + runtimeclass UserChangedEventArgs + { + [default] interface Windows.System.IUserChangedEventArgs; + [contract(Windows.Foundation.UniversalApiContract, 10.0)] interface Windows.System.IUserChangedEventArgs2; + } + } +}
Signed-off-by: Jacek Caban jacek@codeweavers.com
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- include/Makefile.in | 1 + include/windows.foundation.idl | 9 ++ .../windows.gaming.input.forcefeedback.idl | 116 ++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 include/windows.gaming.input.forcefeedback.idl
diff --git a/include/Makefile.in b/include/Makefile.in index 32ef2cd41c1..ab49ee0e4b3 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -752,6 +752,7 @@ SOURCES = \ windows.foundation.collections.idl \ windows.foundation.idl \ windows.gaming.input.idl \ + windows.gaming.input.forcefeedback.idl \ windows.h \ windows.media.speechsynthesis.idl \ windows.system.idl \ diff --git a/include/windows.foundation.idl b/include/windows.foundation.idl index 595f8af69e7..b06b9eadaf4 100644 --- a/include/windows.foundation.idl +++ b/include/windows.foundation.idl @@ -114,3 +114,12 @@ namespace Windows { } } } + +namespace Windows { + namespace Foundation { + declare { + interface Windows.Foundation.AsyncOperationCompletedHandler<boolean>; + interface Windows.Foundation.IAsyncOperation<boolean>; + } + } +} diff --git a/include/windows.gaming.input.forcefeedback.idl b/include/windows.gaming.input.forcefeedback.idl new file mode 100644 index 00000000000..da153a3285a --- /dev/null +++ b/include/windows.gaming.input.forcefeedback.idl @@ -0,0 +1,116 @@ +/* + * 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 + +import "inspectable.idl"; +import "asyncinfo.idl"; +import "eventtoken.idl"; +import "windowscontracts.idl"; +import "windows.foundation.idl"; + +namespace Windows { + namespace Gaming { + namespace Input { + namespace ForceFeedback { + typedef enum ForceFeedbackEffectAxes ForceFeedbackEffectAxes; + typedef enum ForceFeedbackLoadEffectResult ForceFeedbackLoadEffectResult; + interface IForceFeedbackEffect; + runtimeclass ForceFeedbackMotor; + } + } + } +} + +namespace Windows { + namespace Gaming { + namespace Input { + namespace ForceFeedback { + declare { + interface Windows.Foundation.AsyncOperationCompletedHandler<Windows.Gaming.Input.ForceFeedback.ForceFeedbackLoadEffectResult>; + interface Windows.Foundation.IAsyncOperation<Windows.Gaming.Input.ForceFeedback.ForceFeedbackLoadEffectResult>; + interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.ForceFeedback.ForceFeedbackMotor*>; + } + } + } + } +} + +namespace Windows { + namespace Gaming { + namespace Input { + namespace ForceFeedback { + [ + contract(Windows.Foundation.UniversalApiContract, 3.0), + flags + ] + enum ForceFeedbackEffectAxes + { + None = 0x0, + X = 0x1, + Y = 0x2, + Z = 0x4 + }; + + [contract(Windows.Foundation.UniversalApiContract, 3.0)] + enum ForceFeedbackLoadEffectResult + { + Succeeded = 0, + EffectStorageFull = 1, + EffectNotSupported = 2 + }; + + [ + contract(Windows.Foundation.UniversalApiContract, 3.0), + exclusiveto(Windows.Gaming.Input.ForceFeedback.ForceFeedbackMotor), + uuid(8d3d417c-a5ea-4516-8026-2b00f74ef6e5) + ] + interface IForceFeedbackMotor : IInspectable + { + [propget] HRESULT AreEffectsPaused([out, retval] boolean* value); + [propget] HRESULT MasterGain([out, retval] DOUBLE* value); + [propput] HRESULT MasterGain([in] DOUBLE value); + [propget] HRESULT IsEnabled([out, retval] boolean* value); + [propget] HRESULT SupportedAxes([out, retval] Windows.Gaming.Input.ForceFeedback.ForceFeedbackEffectAxes* value); + HRESULT LoadEffectAsync([in] Windows.Gaming.Input.ForceFeedback.IForceFeedbackEffect* effect, + [out, retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.Input.ForceFeedback.ForceFeedbackLoadEffectResult>** async_op); + HRESULT PauseAllEffects(); + HRESULT ResumeAllEffects(); + HRESULT StopAllEffects(); + HRESULT TryDisableAsync([out, retval] Windows.Foundation.IAsyncOperation<boolean>** async_op); + HRESULT TryEnableAsync([out, retval] Windows.Foundation.IAsyncOperation<boolean>** async_op); + HRESULT TryResetAsync([out, retval] Windows.Foundation.IAsyncOperation<boolean>** async_op); + HRESULT TryUnloadEffectAsync([in] Windows.Gaming.Input.ForceFeedback.IForceFeedbackEffect* effect, + [out, retval] Windows.Foundation.IAsyncOperation<boolean>** async_op); + } + + [ + contract(Windows.Foundation.UniversalApiContract, 3.0), + marshaling_behavior(agile), + threading(both) + ] + runtimeclass ForceFeedbackMotor + { + [default] interface Windows.Gaming.Input.ForceFeedback.IForceFeedbackMotor; + } + } + } + } +}
Signed-off-by: Jacek Caban jacek@codeweavers.com
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- include/windows.gaming.input.idl | 207 ++++++++++++++++++++++++++++++- 1 file changed, 206 insertions(+), 1 deletion(-)
diff --git a/include/windows.gaming.input.idl b/include/windows.gaming.input.idl index 1da22408eeb..0f9dd37acd8 100644 --- a/include/windows.gaming.input.idl +++ b/include/windows.gaming.input.idl @@ -20,14 +20,21 @@ #pragma winrt ns_prefix #endif
-import "eventtoken.idl"; import "inspectable.idl"; +import "asyncinfo.idl"; +import "eventtoken.idl"; +import "windowscontracts.idl"; import "windows.foundation.idl"; +import "windows.gaming.input.forcefeedback.idl"; +import "windows.system.idl";
namespace Windows { namespace Gaming { namespace Input { typedef enum GamepadButtons GamepadButtons; + typedef enum GameControllerButtonLabel GameControllerButtonLabel; + typedef enum GameControllerSwitchKind GameControllerSwitchKind; + typedef enum GameControllerSwitchPosition GameControllerSwitchPosition; typedef struct GamepadReading GamepadReading; typedef struct GamepadVibration GamepadVibration; interface IGameController; @@ -36,7 +43,11 @@ namespace Windows { interface IGamepad2; interface IGamepadStatics; interface IGamepadStatics2; + interface IRawGameController; + interface IRawGameController2; runtimeclass Gamepad; + runtimeclass Headset; + runtimeclass RawGameController; } } } @@ -46,7 +57,11 @@ namespace Windows { namespace Input { declare { interface Windows.Foundation.EventHandler<Windows.Gaming.Input.Gamepad*>; + interface Windows.Foundation.EventHandler<Windows.Gaming.Input.RawGameController*>; + interface Windows.Foundation.TypedEventHandler<Windows.Gaming.Input.IGameController*, Windows.Gaming.Input.Headset*>; + interface Windows.Foundation.TypedEventHandler<Windows.Gaming.Input.IGameController*, Windows.System.UserChangedEventArgs*>; interface Windows.Foundation.Collections.IVectorView<Gamepad*>; + interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.RawGameController*>; } } } @@ -86,6 +101,102 @@ namespace Windows { 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, 1.0)] struct GamepadReading { @@ -108,6 +219,26 @@ namespace Windows { DOUBLE RightTrigger; };
+ [ + contract(Windows.Foundation.UniversalApiContract, 1.0), + uuid(1baf6522-5f64-42c5-8267-b9fe2215bfbd) + ] + interface IGameController : IInspectable + { + [eventadd] HRESULT HeadsetConnected([in] Windows.Foundation.TypedEventHandler<Windows.Gaming.Input.IGameController*, Windows.Gaming.Input.Headset*>* handler, + [out, retval] EventRegistrationToken* token); + [eventremove] HRESULT HeadsetConnected([in] EventRegistrationToken token); + [eventadd] HRESULT HeadsetDisconnected([in] Windows.Foundation.TypedEventHandler<Windows.Gaming.Input.IGameController*, Windows.Gaming.Input.Headset*>* handler, + [out, retval] EventRegistrationToken* token); + [eventremove] HRESULT HeadsetDisconnected([in] EventRegistrationToken token); + [eventadd] HRESULT UserChanged([in] Windows.Foundation.TypedEventHandler<Windows.Gaming.Input.IGameController*, Windows.System.UserChangedEventArgs*>* 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), @@ -121,6 +252,28 @@ namespace Windows { HRESULT GetCurrentReading([out, retval] Windows.Gaming.Input.GamepadReading* 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<Windows.Gaming.Input.ForceFeedback.ForceFeedbackMotor*>** 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); + } + [ object, uuid(8bbce529-d49c-39e9-9560-e47dde96b7c8) @@ -134,6 +287,33 @@ namespace Windows { [propget] HRESULT Gamepads([out, retval] Windows.Foundation.Collections.IVectorView<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<Windows.Gaming.Input.RawGameController*> *handler, + [out, retval] EventRegistrationToken* token); + [eventremove] HRESULT RawGameControllerAdded([in] EventRegistrationToken token); + [eventadd] HRESULT RawGameControllerRemoved([in] Windows.Foundation.EventHandler<Windows.Gaming.Input.RawGameController*> *handler, + [out, retval] EventRegistrationToken* token); + [eventremove] HRESULT RawGameControllerRemoved([in] EventRegistrationToken token); + [propget] HRESULT RawGameControllers([out, retval] Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.RawGameController*> **value); + HRESULT FromGameController([in] Windows.Gaming.Input.IGameController *game_controller, [out, retval] Windows.Gaming.Input.RawGameController **value); + } + [ contract(Windows.Foundation.UniversalApiContract, 1.0), marshaling_behavior(agile), @@ -148,6 +328,31 @@ namespace Windows { [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, 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; + } } } }
Signed-off-by: Jacek Caban jacek@codeweavers.com