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

// Forward Declare
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            namespace Custom
            {
                interface IGameControllerProvider;
            }
        }
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            apicontract GamingInputPreviewContract;

            interface IGameController;
        }
    }
}
namespace Windows
{
    namespace System
    {
        runtimeclass User;
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            namespace Preview
            {
                typedef enum DeviceCommand DeviceCommand;

                typedef enum GameControllerBatteryChargingState GameControllerBatteryChargingState;

                typedef enum GameControllerBatteryKind GameControllerBatteryKind;

                typedef enum GameControllerBatteryLevel GameControllerBatteryLevel;

                typedef enum GameControllerFirmwareCorruptReason GameControllerFirmwareCorruptReason;

                typedef enum HeadsetLevel HeadsetLevel;

                typedef enum HeadsetOperation HeadsetOperation;

                typedef enum RemappingButtonCategory RemappingButtonCategory;

                typedef struct HeadsetGeqGains HeadsetGeqGains;

                interface IGameControllerProviderInfoStatics;

                interface ILegacyGipGameControllerProvider;

                interface ILegacyGipGameControllerProviderStatics;

                runtimeclass GameControllerProviderInfo;

                runtimeclass LegacyGipGameControllerProvider;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            namespace Preview
            {
                declare
                {
                    interface Windows.Foundation.Collections.IIterable<Windows.Foundation.Collections.IKeyValuePair<Windows.Gaming.Input.Preview.RemappingButtonCategory, IInspectable*>*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Foundation.Collections.IKeyValuePair<Windows.Gaming.Input.Preview.RemappingButtonCategory, IInspectable*>*>;

                    interface Windows.Foundation.Collections.IKeyValuePair<Windows.Gaming.Input.Preview.RemappingButtonCategory, IInspectable*>;

                    interface Windows.Foundation.Collections.IMapView<Windows.Gaming.Input.Preview.RemappingButtonCategory, IInspectable*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            namespace Preview
            {
                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                enum DeviceCommand
                {
                    Reset = 0
                };

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                enum GameControllerBatteryChargingState
                {
                    Unknown  = 0,
                    Inactive = 1,
                    Active   = 2,
                    Error    = 3
                };

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                enum GameControllerBatteryKind
                {
                    Unknown      = 0,
                    None         = 1,
                    Standard     = 2,
                    Rechargeable = 3
                };

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                enum GameControllerBatteryLevel
                {
                    Unknown  = 0,
                    Critical = 1,
                    Low      = 2,
                    Medium   = 3,
                    Full     = 4
                };

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                enum GameControllerFirmwareCorruptReason
                {
                    Unknown       = 0,
                    NotCorrupt    = 1,
                    TwoUpCorrupt  = 2,
                    AppCorrupt    = 3,
                    RadioCorrupt  = 4,
                    EepromCorrupt = 5,
                    SafeToUpdate  = 6
                };

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                enum HeadsetLevel
                {
                    Off    = 0,
                    Low    = 1,
                    Medium = 2,
                    High   = 3
                };

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                enum HeadsetOperation
                {
                    Geq                   = 0,
                    BassBoostGain         = 1,
                    SmartMute             = 2,
                    SideTone              = 3,
                    MuteLedBrightness     = 4,
                    SwapMixAndVolumeDials = 5
                };

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                enum RemappingButtonCategory
                {
                    ButtonSettings                  = 0,
                    AnalogSettings                  = 1,
                    VibrationSettings               = 2,
                    ShareShortPress                 = 3,
                    ShareShortPressMetaData         = 4,
                    ShareShortPressMetaDataDisplay  = 5,
                    ShareLongPress                  = 6,
                    ShareLongPressMetaData          = 7,
                    ShareLongPressMetaDataDisplay   = 8,
                    ShareDoublePress                = 9,
                    ShareDoublePressMetaData        = 10,
                    ShareDoublePressMetaDataDisplay = 11
                };

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                struct HeadsetGeqGains
                {
                    INT32 band1Gain;
                    INT32 band2Gain;
                    INT32 band3Gain;
                    INT32 band4Gain;
                    INT32 band5Gain;
                };

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 1.0)]
                [exclusiveto(Windows.Gaming.Input.Preview.GameControllerProviderInfo)]
                [uuid(0BE1E6C5-D9BD-44EE-8362-488B2E464BFB)]
                interface IGameControllerProviderInfoStatics : IInspectable
                {
                    HRESULT GetParentProviderId([in] Windows.Gaming.Input.Custom.IGameControllerProvider* provider, [out] [retval] HSTRING* value);
                    HRESULT GetProviderId([in] Windows.Gaming.Input.Custom.IGameControllerProvider* provider, [out] [retval] HSTRING* value);
                }

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                [exclusiveto(Windows.Gaming.Input.Preview.LegacyGipGameControllerProvider)]
                [uuid(2DA3ED52-FFD9-43E2-825C-1D2790E04D14)]
                interface ILegacyGipGameControllerProvider : IInspectable
                {
                    [propget] HRESULT BatteryChargingState([out] [retval] Windows.Gaming.Input.Preview.GameControllerBatteryChargingState* value);
                    [propget] HRESULT BatteryKind([out] [retval] Windows.Gaming.Input.Preview.GameControllerBatteryKind* value);
                    [propget] HRESULT BatteryLevel([out] [retval] Windows.Gaming.Input.Preview.GameControllerBatteryLevel* value);
                    HRESULT GetDeviceFirmwareCorruptionState([out] [retval] Windows.Gaming.Input.Preview.GameControllerFirmwareCorruptReason* value);
                    [propget] HRESULT IsFirmwareCorrupted([out] [retval] boolean* value);
                    HRESULT IsInterfaceSupported([in] GUID interfaceId, [out] [retval] boolean* value);
                    [propget] HRESULT IsSyntheticDevice([out] [retval] boolean* value);
                    [propget] HRESULT PreferredTypes([out] [retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
                    HRESULT ExecuteCommand([in] Windows.Gaming.Input.Preview.DeviceCommand command);
                    HRESULT SetHomeLedIntensity([in] BYTE intensity);
                    HRESULT GetExtendedDeviceInfo([out] UINT32* __bufferSize, [out] [retval] [size_is(, *__bufferSize)] BYTE** buffer);
                    HRESULT SetHeadsetOperation([in] Windows.Gaming.Input.Preview.HeadsetOperation operation, [in] UINT32 __bufferSize, [in] [size_is(__bufferSize)] BYTE* buffer);
                    HRESULT GetHeadsetOperation([in] Windows.Gaming.Input.Preview.HeadsetOperation operation, [out] UINT32* __bufferSize, [out] [retval] [size_is(, *__bufferSize)] BYTE** buffer);
                    [propget] HRESULT AppCompatVersion([out] [retval] UINT32* value);
                    HRESULT SetStandardControllerButtonRemapping([in] Windows.System.User* user, [in] boolean previous, [in] Windows.Foundation.Collections.IMapView<Windows.Gaming.Input.Preview.RemappingButtonCategory, IInspectable*>* remapping);
                    HRESULT GetStandardControllerButtonRemapping([in] Windows.System.User* user, [in] boolean previous, [out] [retval] Windows.Foundation.Collections.IMapView<Windows.Gaming.Input.Preview.RemappingButtonCategory, IInspectable*>** remapping);
                }

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                [exclusiveto(Windows.Gaming.Input.Preview.LegacyGipGameControllerProvider)]
                [uuid(D40DDA17-B1F4-499A-874C-7095AAC15291)]
                interface ILegacyGipGameControllerProviderStatics : IInspectable
                {
                    HRESULT FromGameController([in] Windows.Gaming.Input.IGameController* controller, [out] [retval] Windows.Gaming.Input.Preview.LegacyGipGameControllerProvider** legacyGipGameControllerProvider);
                    HRESULT FromGameControllerProvider([in] Windows.Gaming.Input.Custom.IGameControllerProvider* provider, [out] [retval] Windows.Gaming.Input.Preview.LegacyGipGameControllerProvider** legacyGipGameControllerProvider);
                    HRESULT PairPilotToCopilot([in] Windows.System.User* user, [in] HSTRING pilotControllerProviderId, [in] HSTRING copilotControllerProviderId);
                    HRESULT ClearPairing([in] Windows.System.User* user, [in] HSTRING controllerProviderId);
                    HRESULT IsPilot([in] Windows.System.User* user, [in] HSTRING controllerProviderId, [out] [retval] HSTRING* copilotControllerProviderId);
                    HRESULT IsCopilot([in] Windows.System.User* user, [in] HSTRING controllerProviderId, [out] [retval] HSTRING* pilotControllerProviderId);
                }

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 1.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Gaming.Input.Preview.IGameControllerProviderInfoStatics, Windows.Gaming.Input.GamingInputPreviewContract, 1.0)]
                [threading(both)]
                runtimeclass GameControllerProviderInfo
                {
                }

                [contract(Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Gaming.Input.Preview.ILegacyGipGameControllerProviderStatics, Windows.Gaming.Input.GamingInputPreviewContract, 2.0)]
                [threading(both)]
                runtimeclass LegacyGipGameControllerProvider
                {
                    [default] interface Windows.Gaming.Input.Preview.ILegacyGipGameControllerProvider;
                }
            }
        }
    }
}
