//
// 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.Foundation.Numerics.idl";
import "Windows.Storage.Streams.idl";
import "Windows.System.idl";
import "Windows.UI.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        interface IAsyncAction;

        interface IClosable;
    }
}
namespace Windows
{
    namespace Foundation
    {
        namespace Numerics
        {
            typedef struct Vector3 Vector3;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        typedef struct TimeSpan TimeSpan;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IBuffer;
        }
    }
}
namespace Windows
{
    namespace System
    {
        typedef enum VirtualKey VirtualKey;
    }
}
namespace Windows
{
    namespace UI
    {
        typedef struct Color Color;
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Lights
        {
            typedef enum LampArrayKind LampArrayKind;

            typedef enum LampPurposes LampPurposes;

            interface ILamp;

            interface ILampArray;

            interface ILampArray2;

            interface ILampArrayStatics;

            interface ILampAvailabilityChangedEventArgs;

            interface ILampInfo;

            interface ILampStatics;

            runtimeclass Lamp;

            runtimeclass LampArray;

            runtimeclass LampAvailabilityChangedEventArgs;

            runtimeclass LampInfo;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Devices
    {
        namespace Lights
        {
            declare
            {
                interface Windows.Foundation.IAsyncOperation<Windows.Devices.Lights.Lamp*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Devices.Lights.LampArray*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Devices.Lights.Lamp*, Windows.Devices.Lights.LampAvailabilityChangedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Devices.Lights.LampArray*, IInspectable*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace Lights
        {
            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            enum LampArrayKind
            {
                Undefined      = 0,
                Keyboard       = 1,
                Mouse          = 2,
                GameController = 3,
                Peripheral     = 4,
                Scene          = 5,
                Notification   = 6,
                Chassis        = 7,
                Wearable       = 8,
                Furniture      = 9,
                Art            = 10,
                [contract(Windows.Foundation.UniversalApiContract, 15.0)]
                Headset        = 11,
                [contract(Windows.Foundation.UniversalApiContract, 19.0)]
                Microphone     = 12,
                [contract(Windows.Foundation.UniversalApiContract, 19.0)]
                Speaker        = 13
            };

            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            [flags]
            enum LampPurposes
            {
                Undefined    = 0x0,
                Control      = 0x1,
                Accent       = 0x2,
                Branding     = 0x4,
                Status       = 0x8,
                Illumination = 0x10,
                Presentation = 0x20
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.Lights.Lamp)]
            [uuid(047D5B9A-EA45-4B2B-B1A2-14DFF00BDE7B)]
            interface ILamp : IInspectable
                requires
                    Windows.Foundation.IClosable
            {
                [propget] HRESULT DeviceId([out] [retval] HSTRING* value);
                [propget] HRESULT IsEnabled([out] [retval] boolean* value);
                [propput] HRESULT IsEnabled([in] boolean value);
                [propget] HRESULT BrightnessLevel([out] [retval] FLOAT* value);
                [propput] HRESULT BrightnessLevel([in] FLOAT value);
                [propget] HRESULT IsColorSettable([out] [retval] boolean* value);
                [propget] HRESULT Color([out] [retval] Windows.UI.Color* value);
                [propput] HRESULT Color([in] Windows.UI.Color value);
                [eventadd] HRESULT AvailabilityChanged([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Lights.Lamp*, Windows.Devices.Lights.LampAvailabilityChangedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT AvailabilityChanged([in] EventRegistrationToken token);
            }

            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            [exclusiveto(Windows.Devices.Lights.LampArray)]
            [uuid(7ACE9787-C8A0-4E95-A1E0-D58676538649)]
            interface ILampArray : IInspectable
            {
                [propget] HRESULT DeviceId([out] [retval] HSTRING* value);
                [propget] HRESULT HardwareVendorId([out] [retval] UINT16* value);
                [propget] HRESULT HardwareProductId([out] [retval] UINT16* value);
                [propget] HRESULT HardwareVersion([out] [retval] UINT16* value);
                [propget] HRESULT LampArrayKind([out] [retval] Windows.Devices.Lights.LampArrayKind* value);
                [propget] HRESULT LampCount([out] [retval] INT32* value);
                [propget] HRESULT MinUpdateInterval([out] [retval] Windows.Foundation.TimeSpan* value);
                [propget] HRESULT BoundingBox([out] [retval] Windows.Foundation.Numerics.Vector3* value);
                [propget] HRESULT IsEnabled([out] [retval] boolean* value);
                [propput] HRESULT IsEnabled([in] boolean value);
                [propget] HRESULT BrightnessLevel([out] [retval] DOUBLE* value);
                [propput] HRESULT BrightnessLevel([in] DOUBLE value);
                [propget] HRESULT IsConnected([out] [retval] boolean* value);
                [propget] HRESULT SupportsVirtualKeys([out] [retval] boolean* value);
                HRESULT GetLampInfo([in] INT32 lampIndex, [out] [retval] Windows.Devices.Lights.LampInfo** result);
                HRESULT GetIndicesForKey([in] Windows.System.VirtualKey key, [out] UINT32* __resultSize, [out] [retval] [size_is(, *__resultSize)] INT32** result);
                HRESULT GetIndicesForPurposes([in] Windows.Devices.Lights.LampPurposes purposes, [out] UINT32* __resultSize, [out] [retval] [size_is(, *__resultSize)] INT32** result);
                HRESULT SetColor([in] Windows.UI.Color desiredColor);
                HRESULT SetColorForIndex([in] INT32 lampIndex, [in] Windows.UI.Color desiredColor);
                HRESULT SetSingleColorForIndices([in] Windows.UI.Color desiredColor, [in] UINT32 __lampIndexesSize, [in] [size_is(__lampIndexesSize)] INT32* lampIndexes);
                HRESULT SetColorsForIndices([in] UINT32 __desiredColorsSize, [in] [size_is(__desiredColorsSize)] Windows.UI.Color* desiredColors, [in] UINT32 __lampIndexesSize, [in] [size_is(__lampIndexesSize)] INT32* lampIndexes);
                HRESULT SetColorsForKey([in] Windows.UI.Color desiredColor, [in] Windows.System.VirtualKey key);
                HRESULT SetColorsForKeys([in] UINT32 __desiredColorsSize, [in] [size_is(__desiredColorsSize)] Windows.UI.Color* desiredColors, [in] UINT32 __keysSize, [in] [size_is(__keysSize)] Windows.System.VirtualKey* keys);
                HRESULT SetColorsForPurposes([in] Windows.UI.Color desiredColor, [in] Windows.Devices.Lights.LampPurposes purposes);
                HRESULT SendMessageAsync([in] INT32 messageId, [in] Windows.Storage.Streams.IBuffer* message, [out] [retval] Windows.Foundation.IAsyncAction** operation);
                HRESULT RequestMessageAsync([in] INT32 messageId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.Streams.IBuffer*>** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 15.0)]
            [exclusiveto(Windows.Devices.Lights.LampArray)]
            [uuid(050C181F-60A8-4711-A1AF-1B1B4C658EA2)]
            interface ILampArray2 : IInspectable
            {
                [propget] HRESULT IsAvailable([out] [retval] boolean* value);
                [eventadd] HRESULT AvailabilityChanged([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Lights.LampArray*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT AvailabilityChanged([in] EventRegistrationToken token);
            }

            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            [exclusiveto(Windows.Devices.Lights.LampArray)]
            [uuid(7BB8C98D-5FC1-452D-BB1F-4AD410D398FF)]
            interface ILampArrayStatics : IInspectable
            {
                HRESULT GetDeviceSelector([out] [retval] HSTRING* result);
                HRESULT FromIdAsync([in] HSTRING deviceId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Lights.LampArray*>** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.Lights.LampAvailabilityChangedEventArgs)]
            [uuid(4F6E3DED-07A2-499D-9260-67E304532BA4)]
            interface ILampAvailabilityChangedEventArgs : IInspectable
            {
                [propget] HRESULT IsAvailable([out] [retval] boolean* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            [exclusiveto(Windows.Devices.Lights.LampInfo)]
            [uuid(30BB521C-0ACF-49DA-8C10-150B9CF62713)]
            interface ILampInfo : IInspectable
            {
                [propget] HRESULT Index([out] [retval] INT32* value);
                [propget] HRESULT Purposes([out] [retval] Windows.Devices.Lights.LampPurposes* value);
                [propget] HRESULT Position([out] [retval] Windows.Foundation.Numerics.Vector3* value);
                [propget] HRESULT RedLevelCount([out] [retval] INT32* value);
                [propget] HRESULT GreenLevelCount([out] [retval] INT32* value);
                [propget] HRESULT BlueLevelCount([out] [retval] INT32* value);
                [propget] HRESULT GainLevelCount([out] [retval] INT32* value);
                [propget] HRESULT FixedColor([out] [retval] Windows.Foundation.IReference<Windows.UI.Color>** value);
                HRESULT GetNearestSupportedColor([in] Windows.UI.Color desiredColor, [out] [retval] Windows.UI.Color* result);
                [propget] HRESULT UpdateLatency([out] [retval] Windows.Foundation.TimeSpan* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Devices.Lights.Lamp)]
            [uuid(A822416C-8885-401E-B821-8E8B38A8E8EC)]
            interface ILampStatics : IInspectable
            {
                HRESULT GetDeviceSelector([out] [retval] HSTRING* value);
                HRESULT FromIdAsync([in] HSTRING deviceId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Lights.Lamp*>** operation);
                HRESULT GetDefaultAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Lights.Lamp*>** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Devices.Lights.ILampStatics, Windows.Foundation.UniversalApiContract, 1.0)]
            [threading(both)]
            runtimeclass Lamp
            {
                [default] interface Windows.Devices.Lights.ILamp;
                interface Windows.Foundation.IClosable;
            }

            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Devices.Lights.ILampArrayStatics, Windows.Foundation.UniversalApiContract, 7.0)]
            [threading(both)]
            runtimeclass LampArray
            {
                [default] interface Windows.Devices.Lights.ILampArray;
                [contract(Windows.Foundation.UniversalApiContract, 15.0)] interface Windows.Devices.Lights.ILampArray2;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass LampAvailabilityChangedEventArgs
            {
                [default] interface Windows.Devices.Lights.ILampAvailabilityChangedEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 7.0)]
            [marshaling_behavior(agile)]
            runtimeclass LampInfo
            {
                [default] interface Windows.Devices.Lights.ILampInfo;
            }
        }
    }
}
