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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
import "Windows.Gaming.Input.ForceFeedback.idl";
import "Windows.System.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if !defined(__windows2Egaming2Einput2Eforcefeedback_h__)")
cpp_quote("#include <Windows.Gaming.Input.ForceFeedback.h>")
cpp_quote("#endif // !defined(__windows2Egaming2Einput2Eforcefeedback_h__)")
cpp_quote("#if !defined(__windows2Esystem_h__)")
cpp_quote("#include <Windows.System.h>")
cpp_quote("#endif // !defined(__windows2Esystem_h__)")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            namespace ForceFeedback
            {
                runtimeclass ForceFeedbackMotor;
            }
        }
    }
}
namespace Windows
{
    namespace System
    {
        runtimeclass User;

        runtimeclass UserChangedEventArgs;
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            typedef enum ArcadeStickButtons ArcadeStickButtons;

            typedef enum GameControllerButtonLabel GameControllerButtonLabel;

            typedef enum GamepadButtons GamepadButtons;

            typedef enum OptionalUINavigationButtons OptionalUINavigationButtons;

            typedef enum RacingWheelButtons RacingWheelButtons;

            typedef enum RequiredUINavigationButtons RequiredUINavigationButtons;

            typedef struct ArcadeStickReading ArcadeStickReading;

            typedef struct GamepadReading GamepadReading;

            typedef struct GamepadVibration GamepadVibration;

            typedef struct RacingWheelReading RacingWheelReading;

            typedef struct UINavigationReading UINavigationReading;

            interface IArcadeStick;

            interface IArcadeStickStatics;

            interface IGameController;

            interface IGamepad;

            interface IGamepad2;

            interface IGamepadStatics;

            interface IHeadset;

            interface IRacingWheel;

            interface IRacingWheelStatics;

            interface IUINavigationController;

            interface IUINavigationControllerStatics;

            runtimeclass ArcadeStick;

            runtimeclass Gamepad;

            runtimeclass Headset;

            runtimeclass RacingWheel;

            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.Gamepad*>;

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

                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.Gamepad*>;

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

                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.Gamepad*>;

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

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

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

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

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

                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
        {
            [flags]
            [version(0x0A000002)]
            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
            };

            [version(0x0A000002)]
            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
            };

            [flags]
            [version(0x0A000000)]
            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,
                [version(0x0A000002)]
                Paddle1         = 0x4000,
                [version(0x0A000002)]
                Paddle2         = 0x8000,
                [version(0x0A000002)]
                Paddle3         = 0x10000,
                [version(0x0A000002)]
                Paddle4         = 0x20000
            };

            [flags]
            [version(0x0A000002)]
            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
            };

            [flags]
            [version(0x0A000002)]
            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
            };

            [flags]
            [version(0x0A000002)]
            enum RequiredUINavigationButtons
            {
                None   = 0x0,
                Menu   = 0x1,
                View   = 0x2,
                Accept = 0x4,
                Cancel = 0x8,
                Up     = 0x10,
                Down   = 0x20,
                Left   = 0x40,
                Right  = 0x80
            };

            [version(0x0A000002)]
            struct ArcadeStickReading
            {
                UINT64 Timestamp;
                Windows.Gaming.Input.ArcadeStickButtons Buttons;
            };

            [version(0x0A000000)]
            struct GamepadReading
            {
                UINT64 Timestamp;
                Windows.Gaming.Input.GamepadButtons Buttons;
                DOUBLE LeftTrigger;
                DOUBLE RightTrigger;
                DOUBLE LeftThumbstickX;
                DOUBLE LeftThumbstickY;
                DOUBLE RightThumbstickX;
                DOUBLE RightThumbstickY;
            };

            [version(0x0A000000)]
            struct GamepadVibration
            {
                DOUBLE LeftMotor;
                DOUBLE RightMotor;
                DOUBLE LeftTrigger;
                DOUBLE RightTrigger;
            };

            [version(0x0A000002)]
            struct RacingWheelReading
            {
                UINT64 Timestamp;
                Windows.Gaming.Input.RacingWheelButtons Buttons;
                INT32 PatternShifterGear;
                DOUBLE Wheel;
                DOUBLE Throttle;
                DOUBLE Brake;
                DOUBLE Clutch;
                DOUBLE Handbrake;
            };

            [version(0x0A000002)]
            struct UINavigationReading
            {
                UINT64 Timestamp;
                Windows.Gaming.Input.RequiredUINavigationButtons RequiredButtons;
                Windows.Gaming.Input.OptionalUINavigationButtons OptionalButtons;
            };

            [exclusiveto(Windows.Gaming.Input.ArcadeStick)]
            [uuid(B14A539D-BEFB-4C81-8051-15ECF3B13036)]
            [version(0x0A000002)]
            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);
            }

            [exclusiveto(Windows.Gaming.Input.ArcadeStick)]
            [uuid(5C37B8C8-37B1-4AD8-9458-200F1A30018E)]
            [version(0x0A000002)]
            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);
            }

            [uuid(1BAF6522-5F64-42C5-8267-B9FE2215BFBD)]
            [version(0x0A000000)]
            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);
            }

            [exclusiveto(Windows.Gaming.Input.Gamepad)]
            [uuid(BC7BB43C-0A69-3903-9E9D-A50F86A45DE5)]
            [version(0x0A000000)]
            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);
            }

            [exclusiveto(Windows.Gaming.Input.Gamepad)]
            [uuid(3C1689BD-5915-4245-B0C0-C89FAE0308FF)]
            [version(0x0A000002)]
            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);
            }

            [exclusiveto(Windows.Gaming.Input.Gamepad)]
            [uuid(8BBCE529-D49C-39E9-9560-E47DDE96B7C8)]
            [version(0x0A000000)]
            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);
            }

            [exclusiveto(Windows.Gaming.Input.Headset)]
            [uuid(3FD156EF-6925-3FA8-9181-029C5223AE3B)]
            [version(0x0A000000)]
            interface IHeadset : IInspectable
            {
                [propget] HRESULT CaptureDeviceId([out] [retval] HSTRING* value);
                [propget] HRESULT RenderDeviceId([out] [retval] HSTRING* value);
            }

            [exclusiveto(Windows.Gaming.Input.RacingWheel)]
            [uuid(F546656F-E106-4C82-A90F-554012904B85)]
            [version(0x0A000002)]
            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);
            }

            [exclusiveto(Windows.Gaming.Input.RacingWheel)]
            [uuid(3AC12CD5-581B-4936-9F94-69F1E6514C7D)]
            [version(0x0A000002)]
            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);
            }

            [exclusiveto(Windows.Gaming.Input.UINavigationController)]
            [uuid(E5AEEFDD-F50E-4A55-8CDC-D33229548175)]
            [version(0x0A000002)]
            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);
            }

            [exclusiveto(Windows.Gaming.Input.UINavigationController)]
            [uuid(2F14930A-F6F8-4A48-8D89-94786CCA0C2E)]
            [version(0x0A000002)]
            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);
            }

            [marshaling_behavior(agile)]
            [static(Windows.Gaming.Input.IArcadeStickStatics, 0x0A000002)]
            [threading(both)]
            [version(0x0A000002)]
            runtimeclass ArcadeStick
            {
                [default] interface Windows.Gaming.Input.IArcadeStick;
                interface Windows.Gaming.Input.IGameController;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Gaming.Input.IGamepadStatics, 0x0A000000)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass Gamepad
            {
                [default] interface Windows.Gaming.Input.IGamepad;
                interface Windows.Gaming.Input.IGameController;
                [version(0x0A000002)] interface Windows.Gaming.Input.IGamepad2;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass Headset
            {
                [default] interface Windows.Gaming.Input.IHeadset;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Gaming.Input.IRacingWheelStatics, 0x0A000002)]
            [threading(both)]
            [version(0x0A000002)]
            runtimeclass RacingWheel
            {
                [default] interface Windows.Gaming.Input.IRacingWheel;
                interface Windows.Gaming.Input.IGameController;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Gaming.Input.IUINavigationControllerStatics, 0x0A000002)]
            [threading(both)]
            [version(0x0A000002)]
            runtimeclass UINavigationController
            {
                [default] interface Windows.Gaming.Input.IUINavigationController;
                interface Windows.Gaming.Input.IGameController;
            }
        }
    }
}
