//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0021
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.Devices.Haptics.idl";
import "Windows.Devices.Power.idl";
import "Windows.Gaming.Input.ForceFeedback.idl";
import "Windows.System.idl";

// Forward Declare
namespace Windows
{
    namespace Devices
    {
        namespace Haptics
        {
            runtimeclass SimpleHapticsController;
        }
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Power
        {
            runtimeclass BatteryReport;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            namespace ForceFeedback
            {
                runtimeclass ForceFeedbackMotor;
            }
        }
    }
}
namespace Windows
{
    namespace System
    {
        runtimeclass User;

        runtimeclass UserChangedEventArgs;
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            apicontract GamingInputPreviewContract;

            typedef enum ArcadeStickButtons ArcadeStickButtons;

            typedef enum FlightStickButtons FlightStickButtons;

            typedef enum GameControllerButtonLabel GameControllerButtonLabel;

            typedef enum GameControllerSwitchKind GameControllerSwitchKind;

            typedef enum GameControllerSwitchPosition GameControllerSwitchPosition;

            typedef enum GamepadButtons GamepadButtons;

            typedef enum OptionalUINavigationButtons OptionalUINavigationButtons;

            typedef enum RacingWheelButtons RacingWheelButtons;

            typedef enum RequiredUINavigationButtons RequiredUINavigationButtons;

            typedef struct ArcadeStickReading ArcadeStickReading;

            typedef struct FlightStickReading FlightStickReading;

            typedef struct GamepadReading GamepadReading;

            typedef struct GamepadVibration GamepadVibration;

            typedef struct RacingWheelReading RacingWheelReading;

            typedef struct UINavigationReading UINavigationReading;

            interface IArcadeStick;

            interface IArcadeStickStatics;

            interface IArcadeStickStatics2;

            interface IFlightStick;

            interface IFlightStickStatics;

            interface IGameController;

            interface IGameControllerBatteryInfo;

            interface IGamepad;

            interface IGamepad2;

            interface IGamepadStatics;

            interface IGamepadStatics2;

            interface IHeadset;

            interface IRacingWheel;

            interface IRacingWheelStatics;

            interface IRacingWheelStatics2;

            interface IRawGameController;

            interface IRawGameController2;

            interface IRawGameControllerStatics;

            interface IUINavigationController;

            interface IUINavigationControllerStatics;

            interface IUINavigationControllerStatics2;

            runtimeclass ArcadeStick;

            runtimeclass FlightStick;

            runtimeclass Gamepad;

            runtimeclass Headset;

            runtimeclass RacingWheel;

            runtimeclass RawGameController;

            runtimeclass UINavigationController;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Gaming.Input.ArcadeStick*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Gaming.Input.FlightStick*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Gaming.Input.Gamepad*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Gaming.Input.RacingWheel*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Gaming.Input.RawGameController*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Gaming.Input.UINavigationController*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Gaming.Input.ArcadeStick*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Gaming.Input.FlightStick*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Gaming.Input.Gamepad*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Gaming.Input.RacingWheel*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Gaming.Input.RawGameController*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Gaming.Input.UINavigationController*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.ArcadeStick*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.FlightStick*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.Gamepad*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.RacingWheel*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.RawGameController*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.UINavigationController*>;

                interface Windows.Foundation.EventHandler<Windows.Gaming.Input.ArcadeStick*>;

                interface Windows.Foundation.EventHandler<Windows.Gaming.Input.FlightStick*>;

                interface Windows.Foundation.EventHandler<Windows.Gaming.Input.Gamepad*>;

                interface Windows.Foundation.EventHandler<Windows.Gaming.Input.RacingWheel*>;

                interface Windows.Foundation.EventHandler<Windows.Gaming.Input.RawGameController*>;

                interface Windows.Foundation.EventHandler<Windows.Gaming.Input.UINavigationController*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Gaming.Input.IGameController*, Windows.Gaming.Input.Headset*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            [contractversion(2.0)]
            apicontract GamingInputPreviewContract
            {
            }

            [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, 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)]
            [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)]
            [flags]
            enum OptionalUINavigationButtons
            {
                None        = 0x0,
                Context1    = 0x1,
                Context2    = 0x2,
                Context3    = 0x4,
                Context4    = 0x8,
                PageUp      = 0x10,
                PageDown    = 0x20,
                PageLeft    = 0x40,
                PageRight   = 0x80,
                ScrollUp    = 0x100,
                ScrollDown  = 0x200,
                ScrollLeft  = 0x400,
                ScrollRight = 0x800
            };

            [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)]
            [flags]
            enum RequiredUINavigationButtons
            {
                None   = 0x0,
                Menu   = 0x1,
                View   = 0x2,
                Accept = 0x4,
                Cancel = 0x8,
                Up     = 0x10,
                Down   = 0x20,
                Left   = 0x40,
                Right  = 0x80
            };

            [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)]
            struct UINavigationReading
            {
                UINT64 Timestamp;
                Windows.Gaming.Input.RequiredUINavigationButtons RequiredButtons;
                Windows.Gaming.Input.OptionalUINavigationButtons OptionalButtons;
            };

            [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<Windows.Gaming.Input.ArcadeStick*>* value, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT ArcadeStickAdded([in] EventRegistrationToken token);
                [eventadd] HRESULT ArcadeStickRemoved([in] Windows.Foundation.EventHandler<Windows.Gaming.Input.ArcadeStick*>* value, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT ArcadeStickRemoved([in] EventRegistrationToken token);
                [propget] HRESULT ArcadeSticks([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.ArcadeStick*>** 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* gameController, [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<Windows.Gaming.Input.FlightStick*>* value, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT FlightStickAdded([in] EventRegistrationToken token);
                [eventadd] HRESULT FlightStickRemoved([in] Windows.Foundation.EventHandler<Windows.Gaming.Input.FlightStick*>* value, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT FlightStickRemoved([in] EventRegistrationToken token);
                [propget] HRESULT FlightSticks([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.FlightStick*>** value);
                HRESULT FromGameController([in] Windows.Gaming.Input.IGameController* gameController, [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<Windows.Gaming.Input.IGameController*, Windows.Gaming.Input.Headset*>* value, [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*>* value, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT HeadsetDisconnected([in] EventRegistrationToken token);
                [eventadd] HRESULT UserChanged([in] Windows.Foundation.TypedEventHandler<Windows.Gaming.Input.IGameController*, Windows.System.UserChangedEventArgs*>* value, [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, 4.0)]
            [uuid(DCECC681-3963-4DA6-955D-553F3B6F6161)]
            interface IGameControllerBatteryInfo : IInspectable
            {
                HRESULT TryGetBatteryReport([out] [retval] Windows.Devices.Power.BatteryReport** 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.Gamepad)]
            [uuid(3C1689BD-5915-4245-B0C0-C89FAE0308FF)]
            interface IGamepad2 : IInspectable
                requires
                    Windows.Gaming.Input.IGamepad,
                    Windows.Gaming.Input.IGameController
            {
                HRESULT GetButtonLabel([in] Windows.Gaming.Input.GamepadButtons button, [out] [retval] Windows.Gaming.Input.GameControllerButtonLabel* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Gaming.Input.Gamepad)]
            [uuid(8BBCE529-D49C-39E9-9560-E47DDE96B7C8)]
            interface IGamepadStatics : IInspectable
            {
                [eventadd] HRESULT GamepadAdded([in] Windows.Foundation.EventHandler<Windows.Gaming.Input.Gamepad*>* value, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT GamepadAdded([in] EventRegistrationToken token);
                [eventadd] HRESULT GamepadRemoved([in] Windows.Foundation.EventHandler<Windows.Gaming.Input.Gamepad*>* value, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT GamepadRemoved([in] EventRegistrationToken token);
                [propget] HRESULT Gamepads([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.Gamepad*>** 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* gameController, [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);
            }

            [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<Windows.Gaming.Input.RacingWheel*>* value, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT RacingWheelAdded([in] EventRegistrationToken token);
                [eventadd] HRESULT RacingWheelRemoved([in] Windows.Foundation.EventHandler<Windows.Gaming.Input.RacingWheel*>* value, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT RacingWheelRemoved([in] EventRegistrationToken token);
                [propget] HRESULT RacingWheels([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.RacingWheel*>** 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* gameController, [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<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 buttonIndex, [out] [retval] Windows.Gaming.Input.GameControllerButtonLabel* value);
                HRESULT GetCurrentReading([in] UINT32 __buttonArraySize, [out] [size_is(__buttonArraySize)] boolean* buttonArray, [in] UINT32 __switchArraySize, [out] [size_is(__switchArraySize)] Windows.Gaming.Input.GameControllerSwitchPosition* switchArray, [in] UINT32 __axisArraySize, [out] [size_is(__axisArraySize)] DOUBLE* axisArray, [out] [retval] UINT64* timestamp);
                HRESULT GetSwitchKind([in] INT32 switchIndex, [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<Windows.Devices.Haptics.SimpleHapticsController*>** value);
                [propget] HRESULT NonRoamableId([out] [retval] HSTRING* value);
                [propget] HRESULT DisplayName([out] [retval] HSTRING* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Gaming.Input.RawGameController)]
            [uuid(EB8D0792-E95A-4B19-AFC7-0A59F8BF759E)]
            interface IRawGameControllerStatics : IInspectable
            {
                [eventadd] HRESULT RawGameControllerAdded([in] Windows.Foundation.EventHandler<Windows.Gaming.Input.RawGameController*>* value, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT RawGameControllerAdded([in] EventRegistrationToken token);
                [eventadd] HRESULT RawGameControllerRemoved([in] Windows.Foundation.EventHandler<Windows.Gaming.Input.RawGameController*>* value, [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* gameController, [out] [retval] Windows.Gaming.Input.RawGameController** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 3.0)]
            [exclusiveto(Windows.Gaming.Input.UINavigationController)]
            [uuid(E5AEEFDD-F50E-4A55-8CDC-D33229548175)]
            interface IUINavigationController : IInspectable
                requires
                    Windows.Gaming.Input.IGameController
            {
                HRESULT GetCurrentReading([out] [retval] Windows.Gaming.Input.UINavigationReading* value);
                HRESULT GetOptionalButtonLabel([in] Windows.Gaming.Input.OptionalUINavigationButtons button, [out] [retval] Windows.Gaming.Input.GameControllerButtonLabel* value);
                HRESULT GetRequiredButtonLabel([in] Windows.Gaming.Input.RequiredUINavigationButtons button, [out] [retval] Windows.Gaming.Input.GameControllerButtonLabel* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 3.0)]
            [exclusiveto(Windows.Gaming.Input.UINavigationController)]
            [uuid(2F14930A-F6F8-4A48-8D89-94786CCA0C2E)]
            interface IUINavigationControllerStatics : IInspectable
            {
                [eventadd] HRESULT UINavigationControllerAdded([in] Windows.Foundation.EventHandler<Windows.Gaming.Input.UINavigationController*>* value, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT UINavigationControllerAdded([in] EventRegistrationToken token);
                [eventadd] HRESULT UINavigationControllerRemoved([in] Windows.Foundation.EventHandler<Windows.Gaming.Input.UINavigationController*>* value, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT UINavigationControllerRemoved([in] EventRegistrationToken token);
                [propget] HRESULT UINavigationControllers([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.UINavigationController*>** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Gaming.Input.UINavigationController)]
            [uuid(E0CB28E3-B20B-4B0B-9ED4-F3D53CEC0DE4)]
            interface IUINavigationControllerStatics2 : IInspectable
                requires
                    Windows.Gaming.Input.IUINavigationControllerStatics
            {
                HRESULT FromGameController([in] Windows.Gaming.Input.IGameController* gameController, [out] [retval] Windows.Gaming.Input.UINavigationController** 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;
            }

            [contract(Windows.Foundation.UniversalApiContract, 3.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Gaming.Input.IUINavigationControllerStatics, Windows.Foundation.UniversalApiContract, 3.0)]
            [static(Windows.Gaming.Input.IUINavigationControllerStatics2, Windows.Foundation.UniversalApiContract, 4.0)]
            [threading(both)]
            runtimeclass UINavigationController
            {
                [default] interface Windows.Gaming.Input.IUINavigationController;
                interface Windows.Gaming.Input.IGameController;
                [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.Gaming.Input.IGameControllerBatteryInfo;
            }
        }
    }
}
