//
// 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.Gaming.Input.idl";
import "Windows.Storage.Streams.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            interface IGameController;
        }
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IInputStream;
        }
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            namespace Custom
            {
                typedef enum GipFirmwareUpdateStatus GipFirmwareUpdateStatus;

                typedef enum GipMessageClass GipMessageClass;

                typedef enum XusbDeviceSubtype XusbDeviceSubtype;

                typedef enum XusbDeviceType XusbDeviceType;

                typedef struct GameControllerVersionInfo GameControllerVersionInfo;

                typedef struct GipFirmwareUpdateProgress GipFirmwareUpdateProgress;

                interface ICustomGameControllerFactory;

                interface IGameControllerFactoryManagerStatics;

                interface IGameControllerFactoryManagerStatics2;

                interface IGameControllerInputSink;

                interface IGameControllerProvider;

                interface IGipFirmwareUpdateResult;

                interface IGipGameControllerInputSink;

                interface IGipGameControllerProvider;

                interface IHidGameControllerInputSink;

                interface IHidGameControllerProvider;

                interface IXusbGameControllerInputSink;

                interface IXusbGameControllerProvider;

                runtimeclass GameControllerFactoryManager;

                runtimeclass GipFirmwareUpdateResult;

                runtimeclass GipGameControllerProvider;

                runtimeclass HidGameControllerProvider;

                runtimeclass XusbGameControllerProvider;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            namespace Custom
            {
                declare
                {
                    interface Windows.Foundation.IAsyncOperationWithProgress<Windows.Gaming.Input.Custom.GipFirmwareUpdateResult*, Windows.Gaming.Input.Custom.GipFirmwareUpdateProgress>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            namespace Custom
            {
                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                enum GipFirmwareUpdateStatus
                {
                    Completed = 0,
                    UpToDate  = 1,
                    Failed    = 2
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                enum GipMessageClass
                {
                    Command         = 0,
                    LowLatency      = 1,
                    StandardLatency = 2
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                enum XusbDeviceSubtype
                {
                    Unknown         = 0,
                    Gamepad         = 1,
                    ArcadePad       = 2,
                    ArcadeStick     = 3,
                    FlightStick     = 4,
                    Wheel           = 5,
                    Guitar          = 6,
                    GuitarAlternate = 7,
                    GuitarBass      = 8,
                    DrumKit         = 9,
                    DancePad        = 10
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                enum XusbDeviceType
                {
                    Unknown = 0,
                    Gamepad = 1
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                struct GameControllerVersionInfo
                {
                    UINT16 Major;
                    UINT16 Minor;
                    UINT16 Build;
                    UINT16 Revision;
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                struct GipFirmwareUpdateProgress
                {
                    DOUBLE PercentCompleted;
                    UINT32 CurrentComponentId;
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [uuid(69A0AE5E-758E-4CBE-ACE6-62155FE9126F)]
                interface ICustomGameControllerFactory : IInspectable
                {
                    HRESULT CreateGameController([in] Windows.Gaming.Input.Custom.IGameControllerProvider* provider, [out] [retval] IInspectable** value);
                    HRESULT OnGameControllerAdded([in] Windows.Gaming.Input.IGameController* value);
                    HRESULT OnGameControllerRemoved([in] Windows.Gaming.Input.IGameController* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Gaming.Input.Custom.GameControllerFactoryManager)]
                [uuid(36CB66E3-D0A1-4986-A24C-40B137DEBA9E)]
                interface IGameControllerFactoryManagerStatics : IInspectable
                {
                    HRESULT RegisterCustomFactoryForGipInterface([in] Windows.Gaming.Input.Custom.ICustomGameControllerFactory* factory, [in] GUID interfaceId);
                    HRESULT RegisterCustomFactoryForHardwareId([in] Windows.Gaming.Input.Custom.ICustomGameControllerFactory* factory, [in] UINT16 hardwareVendorId, [in] UINT16 hardwareProductId);
                    HRESULT RegisterCustomFactoryForXusbType([in] Windows.Gaming.Input.Custom.ICustomGameControllerFactory* factory, [in] Windows.Gaming.Input.Custom.XusbDeviceType xusbType, [in] Windows.Gaming.Input.Custom.XusbDeviceSubtype xusbSubtype);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.Gaming.Input.Custom.GameControllerFactoryManager)]
                [uuid(EACE5644-19DF-4115-B32A-2793E2AEA3BB)]
                interface IGameControllerFactoryManagerStatics2 : IInspectable
                    requires
                        Windows.Gaming.Input.Custom.IGameControllerFactoryManagerStatics
                {
                    HRESULT TryGetFactoryControllerFromGameController([in] Windows.Gaming.Input.Custom.ICustomGameControllerFactory* factory, [in] Windows.Gaming.Input.IGameController* gameController, [out] [retval] Windows.Gaming.Input.IGameController** factoryController);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [uuid(1FF6F922-C640-4C78-A820-9A715C558BCB)]
                interface IGameControllerInputSink : IInspectable
                {
                    HRESULT OnInputResumed([in] UINT64 timestamp);
                    HRESULT OnInputSuspended([in] UINT64 timestamp);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [uuid(E6D73982-2996-4559-B16C-3E57D46E58D6)]
                interface IGameControllerProvider : IInspectable
                {
                    [propget] HRESULT FirmwareVersionInfo([out] [retval] Windows.Gaming.Input.Custom.GameControllerVersionInfo* value);
                    [propget] HRESULT HardwareProductId([out] [retval] UINT16* value);
                    [propget] HRESULT HardwareVendorId([out] [retval] UINT16* value);
                    [propget] HRESULT HardwareVersionInfo([out] [retval] Windows.Gaming.Input.Custom.GameControllerVersionInfo* value);
                    [propget] HRESULT IsConnected([out] [retval] boolean* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Gaming.Input.Custom.GipFirmwareUpdateResult)]
                [uuid(6B794D32-8553-4292-8E03-E16651A2F8BC)]
                interface IGipFirmwareUpdateResult : IInspectable
                {
                    [propget] HRESULT ExtendedErrorCode([out] [retval] UINT32* value);
                    [propget] HRESULT FinalComponentId([out] [retval] UINT32* value);
                    [propget] HRESULT Status([out] [retval] Windows.Gaming.Input.Custom.GipFirmwareUpdateStatus* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [uuid(A2108ABF-09F1-43BC-A140-80F899EC36FB)]
                interface IGipGameControllerInputSink : IInspectable
                    requires
                        Windows.Gaming.Input.Custom.IGameControllerInputSink
                {
                    HRESULT OnKeyReceived([in] UINT64 timestamp, [in] BYTE keyCode, [in] boolean isPressed);
                    HRESULT OnMessageReceived([in] UINT64 timestamp, [in] Windows.Gaming.Input.Custom.GipMessageClass messageClass, [in] BYTE messageId, [in] BYTE sequenceId, [in] UINT32 __messageBufferSize, [in] [size_is(__messageBufferSize)] BYTE* messageBuffer);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Gaming.Input.Custom.GipGameControllerProvider)]
                [uuid(DBCF1E19-1AF5-45A8-BF02-A0EE50C823FC)]
                interface IGipGameControllerProvider : IInspectable
                    requires
                        Windows.Gaming.Input.Custom.IGameControllerProvider
                {
                    HRESULT SendMessage([in] Windows.Gaming.Input.Custom.GipMessageClass messageClass, [in] BYTE messageId, [in] UINT32 __messageBufferSize, [in] [size_is(__messageBufferSize)] BYTE* messageBuffer);
                    HRESULT SendReceiveMessage([in] Windows.Gaming.Input.Custom.GipMessageClass messageClass, [in] BYTE messageId, [in] UINT32 __requestMessageBufferSize, [in] [size_is(__requestMessageBufferSize)] BYTE* requestMessageBuffer, [in] UINT32 __responseMessageBufferSize, [out] [size_is(__responseMessageBufferSize)] BYTE* responseMessageBuffer);
                    HRESULT UpdateFirmwareAsync([in] Windows.Storage.Streams.IInputStream* firmwareImage, [out] [retval] Windows.Foundation.IAsyncOperationWithProgress<Windows.Gaming.Input.Custom.GipFirmwareUpdateResult*, Windows.Gaming.Input.Custom.GipFirmwareUpdateProgress>** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [uuid(F754C322-182D-40E4-A126-FCEE4FFA1E31)]
                interface IHidGameControllerInputSink : IInspectable
                    requires
                        Windows.Gaming.Input.Custom.IGameControllerInputSink
                {
                    HRESULT OnInputReportReceived([in] UINT64 timestamp, [in] BYTE reportId, [in] UINT32 __reportBufferSize, [in] [size_is(__reportBufferSize)] BYTE* reportBuffer);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.Gaming.Input.Custom.HidGameControllerProvider)]
                [uuid(95CE3AF4-ABF0-4B68-A081-3B7DE73FF0E7)]
                interface IHidGameControllerProvider : IInspectable
                    requires
                        Windows.Gaming.Input.Custom.IGameControllerProvider
                {
                    [propget] HRESULT UsageId([out] [retval] UINT16* value);
                    [propget] HRESULT UsagePage([out] [retval] UINT16* value);
                    HRESULT GetFeatureReport([in] BYTE reportId, [in] UINT32 __reportBufferSize, [out] [size_is(__reportBufferSize)] BYTE* reportBuffer);
                    HRESULT SendFeatureReport([in] BYTE reportId, [in] UINT32 __reportBufferSize, [in] [size_is(__reportBufferSize)] BYTE* reportBuffer);
                    HRESULT SendOutputReport([in] BYTE reportId, [in] UINT32 __reportBufferSize, [in] [size_is(__reportBufferSize)] BYTE* reportBuffer);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [uuid(B2AC1D95-6ECB-42B3-8AAB-025401CA4712)]
                interface IXusbGameControllerInputSink : IInspectable
                    requires
                        Windows.Gaming.Input.Custom.IGameControllerInputSink
                {
                    HRESULT OnInputReceived([in] UINT64 timestamp, [in] BYTE reportId, [in] UINT32 __inputBufferSize, [in] [size_is(__inputBufferSize)] BYTE* inputBuffer);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Gaming.Input.Custom.XusbGameControllerProvider)]
                [uuid(6E2971EB-0EFB-48B4-808B-837643B2F216)]
                interface IXusbGameControllerProvider : IInspectable
                    requires
                        Windows.Gaming.Input.Custom.IGameControllerProvider
                {
                    HRESULT SetVibration([in] DOUBLE lowFrequencyMotorSpeed, [in] DOUBLE highFrequencyMotorSpeed);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Gaming.Input.Custom.IGameControllerFactoryManagerStatics, Windows.Foundation.UniversalApiContract, 3.0)]
                [static(Windows.Gaming.Input.Custom.IGameControllerFactoryManagerStatics2, Windows.Foundation.UniversalApiContract, 4.0)]
                [threading(both)]
                runtimeclass GameControllerFactoryManager
                {
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass GipFirmwareUpdateResult
                {
                    [default] interface Windows.Gaming.Input.Custom.IGipFirmwareUpdateResult;
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass GipGameControllerProvider
                {
                    [default] interface Windows.Gaming.Input.Custom.IGipGameControllerProvider;
                    interface Windows.Gaming.Input.Custom.IGameControllerProvider;
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass HidGameControllerProvider
                {
                    [default] interface Windows.Gaming.Input.Custom.IHidGameControllerProvider;
                    interface Windows.Gaming.Input.Custom.IGameControllerProvider;
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass XusbGameControllerProvider
                {
                    [default] interface Windows.Gaming.Input.Custom.IXusbGameControllerProvider;
                    interface Windows.Gaming.Input.Custom.IGameControllerProvider;
                }
            }
        }
    }
}
