--------------------------------------------------------------------------------
-- <auto-generated>                                                           --
--     This code was generated by a tool.                                     --
--                                                                            --
--     Changes to this file may cause incorrect behavior and will be lost if  --
--     the code is regenerated.                                               --
-- </auto-generated>                                                          --
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--                                                                            --
--    Copyright(c) 2018 Alexander Gamper, All Rights Reserved.                --
--                                                                            --
--    Ada-WinRT                                                               --
--                                                                            --
-- This program is free software: you can redistribute it and / or modify     --
-- it under the terms of the GNU Lesser General Public License as published by--
-- the Free Software Foundation, either version 3 of the License, or          --
-- (at your option) any later version.                                        --
--                                                                            --
-- This program is distributed in the hope that it will be useful,            --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of             --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the               --
-- GNU Lesser General Public License for more details.                        --
--                                                                            --
-- You should have received a copy of the GNU Lesser General Public License   --
-- along with this program.If not, see http://www.gnu.org/licenses            --
--                                                                            --
--------------------------------------------------------------------------------
with Windows.Foundation;
with Windows.Foundation.Numerics;
limited with Windows.Storage.Streams;
limited with Windows.System;
limited with Windows.UI;
--------------------------------------------------------------------------------
package Windows.Devices.Lights is

   pragma preelaborate;
   
   ------------------------------------------------------------------------
   -- Enums
   ------------------------------------------------------------------------
   
   type LampArrayKind is (
      Undefined,
      Keyboard,
      Mouse,
      GameController,
      Peripheral,
      Scene,
      Notification,
      Chassis,
      Wearable,
      Furniture,
      Art
   );
   for LampArrayKind use (
      Undefined => 0,
      Keyboard => 1,
      Mouse => 2,
      GameController => 3,
      Peripheral => 4,
      Scene => 5,
      Notification => 6,
      Chassis => 7,
      Wearable => 8,
      Furniture => 9,
      Art => 10
   );
   for LampArrayKind'Size use 32;
   
   type LampArrayKind_Ptr is access LampArrayKind;
   
   type LampPurposes is (
      Undefined,
      Control,
      Accent,
      Branding,
      Status,
      Illumination,
      Presentation
   );
   for LampPurposes use (
      Undefined => 0,
      Control => 1,
      Accent => 2,
      Branding => 4,
      Status => 8,
      Illumination => 16,
      Presentation => 32
   );
   for LampPurposes'Size use 32;
   
   type LampPurposes_Ptr is access LampPurposes;
   
   ------------------------------------------------------------------------
   -- Forward Declaration - Delegates/Events
   ------------------------------------------------------------------------
   
   type AsyncOperationCompletedHandler_ILamp_Interface;
   type AsyncOperationCompletedHandler_ILamp is access all AsyncOperationCompletedHandler_ILamp_Interface'Class;
   type AsyncOperationCompletedHandler_ILamp_Ptr is access all AsyncOperationCompletedHandler_ILamp;
   type AsyncOperationCompletedHandler_ILampArray_Interface;
   type AsyncOperationCompletedHandler_ILampArray is access all AsyncOperationCompletedHandler_ILampArray_Interface'Class;
   type AsyncOperationCompletedHandler_ILampArray_Ptr is access all AsyncOperationCompletedHandler_ILampArray;
   type TypedEventHandler_ILamp_add_AvailabilityChanged_Interface;
   type TypedEventHandler_ILamp_add_AvailabilityChanged is access all TypedEventHandler_ILamp_add_AvailabilityChanged_Interface'Class;
   type TypedEventHandler_ILamp_add_AvailabilityChanged_Ptr is access all TypedEventHandler_ILamp_add_AvailabilityChanged;
   
   ------------------------------------------------------------------------
   -- Forward Declaration - Interfaces
   ------------------------------------------------------------------------
   
   type IAsyncOperation_ILamp_Interface;
   type IAsyncOperation_ILamp is access all IAsyncOperation_ILamp_Interface'Class;
   type IAsyncOperation_ILamp_Ptr is access all IAsyncOperation_ILamp;
   type IAsyncOperation_ILampArray_Interface;
   type IAsyncOperation_ILampArray is access all IAsyncOperation_ILampArray_Interface'Class;
   type IAsyncOperation_ILampArray_Ptr is access all IAsyncOperation_ILampArray;
   type ILamp_Interface;
   type ILamp is access all ILamp_Interface'Class;
   type ILamp_Ptr is access all ILamp;
   type ILampArray_Interface;
   type ILampArray is access all ILampArray_Interface'Class;
   type ILampArray_Ptr is access all ILampArray;
   type ILampArrayStatics_Interface;
   type ILampArrayStatics is access all ILampArrayStatics_Interface'Class;
   type ILampArrayStatics_Ptr is access all ILampArrayStatics;
   type ILampAvailabilityChangedEventArgs_Interface;
   type ILampAvailabilityChangedEventArgs is access all ILampAvailabilityChangedEventArgs_Interface'Class;
   type ILampAvailabilityChangedEventArgs_Ptr is access all ILampAvailabilityChangedEventArgs;
   type ILampInfo_Interface;
   type ILampInfo is access all ILampInfo_Interface'Class;
   type ILampInfo_Ptr is access all ILampInfo;
   type ILampStatics_Interface;
   type ILampStatics is access all ILampStatics_Interface'Class;
   type ILampStatics_Ptr is access all ILampStatics;
   
   ------------------------------------------------------------------------
   -- Interfaces
   ------------------------------------------------------------------------
   
   ------------------------------------------------------------------------
   
   IID_IAsyncOperation_ILamp : aliased constant Windows.IID := (1386651133, 61654, 22833, (184, 225, 243, 128, 102, 215, 27, 242 ));
   
   type IAsyncOperation_ILamp_Interface is interface and Windows.IInspectable_Interface;
   
   function put_Completed
   (
      This       : access IAsyncOperation_ILamp_Interface
      ; handler : Windows.Devices.Lights.AsyncOperationCompletedHandler_ILamp
   )
   return Windows.HRESULT is abstract;
   
   function get_Completed
   (
      This       : access IAsyncOperation_ILamp_Interface
      ; RetVal : access Windows.Devices.Lights.AsyncOperationCompletedHandler_ILamp
   )
   return Windows.HRESULT is abstract;
   
   function GetResults
   (
      This       : access IAsyncOperation_ILamp_Interface
      ; RetVal : access Windows.Devices.Lights.ILamp
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_IAsyncOperation_ILampArray : aliased constant Windows.IID := (1050319104, 28337, 23985, (183, 120, 154, 100, 161, 101, 66, 248 ));
   
   type IAsyncOperation_ILampArray_Interface is interface and Windows.IInspectable_Interface;
   
   function put_Completed
   (
      This       : access IAsyncOperation_ILampArray_Interface
      ; handler : Windows.Devices.Lights.AsyncOperationCompletedHandler_ILampArray
   )
   return Windows.HRESULT is abstract;
   
   function get_Completed
   (
      This       : access IAsyncOperation_ILampArray_Interface
      ; RetVal : access Windows.Devices.Lights.AsyncOperationCompletedHandler_ILampArray
   )
   return Windows.HRESULT is abstract;
   
   function GetResults
   (
      This       : access IAsyncOperation_ILampArray_Interface
      ; RetVal : access Windows.Devices.Lights.ILampArray
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ILamp : aliased constant Windows.IID := (75324314, 59973, 19243, (177, 162, 20, 223, 240, 11, 222, 123 ));
   
   type ILamp_Interface is interface and Windows.IInspectable_Interface;
   
   function get_DeviceId
   (
      This       : access ILamp_Interface
      ; RetVal : access Windows.String
   )
   return Windows.HRESULT is abstract;
   
   function get_IsEnabled
   (
      This       : access ILamp_Interface
      ; RetVal : access Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function put_IsEnabled
   (
      This       : access ILamp_Interface
      ; value : Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function get_BrightnessLevel
   (
      This       : access ILamp_Interface
      ; RetVal : access Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function put_BrightnessLevel
   (
      This       : access ILamp_Interface
      ; value : Windows.Single
   )
   return Windows.HRESULT is abstract;
   
   function get_IsColorSettable
   (
      This       : access ILamp_Interface
      ; RetVal : access Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function get_Color
   (
      This       : access ILamp_Interface
      ; RetVal : access Windows.UI.Color
   )
   return Windows.HRESULT is abstract;
   
   function put_Color
   (
      This       : access ILamp_Interface
      ; value : Windows.UI.Color
   )
   return Windows.HRESULT is abstract;
   
   function add_AvailabilityChanged
   (
      This       : access ILamp_Interface
      ; handler : TypedEventHandler_ILamp_add_AvailabilityChanged
      ; RetVal : access Windows.Foundation.EventRegistrationToken
   )
   return Windows.HRESULT is abstract;
   
   function remove_AvailabilityChanged
   (
      This       : access ILamp_Interface
      ; token : Windows.Foundation.EventRegistrationToken
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ILampArray : aliased constant Windows.IID := (2060359559, 51360, 20117, (161, 224, 213, 134, 118, 83, 134, 73 ));
   
   type ILampArray_Interface is interface and Windows.IInspectable_Interface;
   
   function get_DeviceId
   (
      This       : access ILampArray_Interface
      ; RetVal : access Windows.String
   )
   return Windows.HRESULT is abstract;
   
   function get_HardwareVendorId
   (
      This       : access ILampArray_Interface
      ; RetVal : access Windows.UInt16
   )
   return Windows.HRESULT is abstract;
   
   function get_HardwareProductId
   (
      This       : access ILampArray_Interface
      ; RetVal : access Windows.UInt16
   )
   return Windows.HRESULT is abstract;
   
   function get_HardwareVersion
   (
      This       : access ILampArray_Interface
      ; RetVal : access Windows.UInt16
   )
   return Windows.HRESULT is abstract;
   
   function get_LampArrayKind
   (
      This       : access ILampArray_Interface
      ; RetVal : access Windows.Devices.Lights.LampArrayKind
   )
   return Windows.HRESULT is abstract;
   
   function get_LampCount
   (
      This       : access ILampArray_Interface
      ; RetVal : access Windows.Int32
   )
   return Windows.HRESULT is abstract;
   
   function get_MinUpdateInterval
   (
      This       : access ILampArray_Interface
      ; RetVal : access Windows.Foundation.TimeSpan
   )
   return Windows.HRESULT is abstract;
   
   function get_BoundingBox
   (
      This       : access ILampArray_Interface
      ; RetVal : access Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function get_IsEnabled
   (
      This       : access ILampArray_Interface
      ; RetVal : access Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function put_IsEnabled
   (
      This       : access ILampArray_Interface
      ; value : Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function get_BrightnessLevel
   (
      This       : access ILampArray_Interface
      ; RetVal : access Windows.Double
   )
   return Windows.HRESULT is abstract;
   
   function put_BrightnessLevel
   (
      This       : access ILampArray_Interface
      ; value : Windows.Double
   )
   return Windows.HRESULT is abstract;
   
   function get_IsConnected
   (
      This       : access ILampArray_Interface
      ; RetVal : access Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function get_SupportsVirtualKeys
   (
      This       : access ILampArray_Interface
      ; RetVal : access Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   function GetLampInfo
   (
      This       : access ILampArray_Interface
      ; lampIndex : Windows.Int32
      ; RetVal : access Windows.Devices.Lights.ILampInfo
   )
   return Windows.HRESULT is abstract;
   
   function GetIndicesForKey
   (
      This       : access ILampArray_Interface
      ; key : Windows.System.VirtualKey
      ; RetVal : access Int32_Ptr -- Array Parameter type
   )
   return Windows.HRESULT is abstract;
   
   function GetIndicesForPurposes
   (
      This       : access ILampArray_Interface
      ; purposes : Windows.Devices.Lights.LampPurposes
      ; RetVal : access Int32_Ptr -- Array Parameter type
   )
   return Windows.HRESULT is abstract;
   
   function SetColor
   (
      This       : access ILampArray_Interface
      ; desiredColor : Windows.UI.Color
   )
   return Windows.HRESULT is abstract;
   
   function SetColorForIndex
   (
      This       : access ILampArray_Interface
      ; lampIndex : Windows.Int32
      ; desiredColor : Windows.UI.Color
   )
   return Windows.HRESULT is abstract;
   
   function SetSingleColorForIndices
   (
      This       : access ILampArray_Interface
      ; desiredColor : Windows.UI.Color
      ; lampIndexes : Windows.Int32_Ptr
   )
   return Windows.HRESULT is abstract;
   
   function SetColorsForIndices
   (
      This       : access ILampArray_Interface
      ; desiredColors : Windows.UI.Color_Ptr
      ; lampIndexes : Windows.Int32_Ptr
   )
   return Windows.HRESULT is abstract;
   
   function SetColorsForKey
   (
      This       : access ILampArray_Interface
      ; desiredColor : Windows.UI.Color
      ; key : Windows.System.VirtualKey
   )
   return Windows.HRESULT is abstract;
   
   function SetColorsForKeys
   (
      This       : access ILampArray_Interface
      ; desiredColors : Windows.UI.Color_Ptr
      ; keys : Windows.System.VirtualKey_Ptr
   )
   return Windows.HRESULT is abstract;
   
   function SetColorsForPurposes
   (
      This       : access ILampArray_Interface
      ; desiredColor : Windows.UI.Color
      ; purposes : Windows.Devices.Lights.LampPurposes
   )
   return Windows.HRESULT is abstract;
   
   function SendMessageAsync
   (
      This       : access ILampArray_Interface
      ; messageId : Windows.Int32
      ; message : Windows.Storage.Streams.IBuffer
      ; RetVal : access Windows.Foundation.IAsyncAction
   )
   return Windows.HRESULT is abstract;
   
   function RequestMessageAsync
   (
      This       : access ILampArray_Interface
      ; messageId : Windows.Int32
      ; RetVal : access Windows.Storage.Streams.IAsyncOperation_IBuffer -- Generic Parameter Type
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ILampArrayStatics : aliased constant Windows.IID := (2075707789, 24513, 17709, (187, 31, 74, 212, 16, 211, 152, 255 ));
   
   type ILampArrayStatics_Interface is interface and Windows.IInspectable_Interface;
   
   function GetDeviceSelector
   (
      This       : access ILampArrayStatics_Interface
      ; RetVal : access Windows.String
   )
   return Windows.HRESULT is abstract;
   
   function FromIdAsync
   (
      This       : access ILampArrayStatics_Interface
      ; deviceId : Windows.String
      ; RetVal : access Windows.Devices.Lights.IAsyncOperation_ILampArray -- Generic Parameter Type
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ILampAvailabilityChangedEventArgs : aliased constant Windows.IID := (1332624877, 1954, 18845, (146, 96, 103, 227, 4, 83, 43, 164 ));
   
   type ILampAvailabilityChangedEventArgs_Interface is interface and Windows.IInspectable_Interface;
   
   function get_IsAvailable
   (
      This       : access ILampAvailabilityChangedEventArgs_Interface
      ; RetVal : access Windows.Boolean
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ILampInfo : aliased constant Windows.IID := (817582620, 2767, 18906, (140, 16, 21, 11, 156, 246, 39, 19 ));
   
   type ILampInfo_Interface is interface and Windows.IInspectable_Interface;
   
   function get_Index
   (
      This       : access ILampInfo_Interface
      ; RetVal : access Windows.Int32
   )
   return Windows.HRESULT is abstract;
   
   function get_Purposes
   (
      This       : access ILampInfo_Interface
      ; RetVal : access Windows.Devices.Lights.LampPurposes
   )
   return Windows.HRESULT is abstract;
   
   function get_Position
   (
      This       : access ILampInfo_Interface
      ; RetVal : access Windows.Foundation.Numerics.Vector3
   )
   return Windows.HRESULT is abstract;
   
   function get_RedLevelCount
   (
      This       : access ILampInfo_Interface
      ; RetVal : access Windows.Int32
   )
   return Windows.HRESULT is abstract;
   
   function get_GreenLevelCount
   (
      This       : access ILampInfo_Interface
      ; RetVal : access Windows.Int32
   )
   return Windows.HRESULT is abstract;
   
   function get_BlueLevelCount
   (
      This       : access ILampInfo_Interface
      ; RetVal : access Windows.Int32
   )
   return Windows.HRESULT is abstract;
   
   function get_GainLevelCount
   (
      This       : access ILampInfo_Interface
      ; RetVal : access Windows.Int32
   )
   return Windows.HRESULT is abstract;
   
   function get_FixedColor
   (
      This       : access ILampInfo_Interface
      ; RetVal : access Windows.UI.IReference_Color -- Generic Parameter Type
   )
   return Windows.HRESULT is abstract;
   
   function GetNearestSupportedColor
   (
      This       : access ILampInfo_Interface
      ; desiredColor : Windows.UI.Color
      ; RetVal : access Windows.UI.Color
   )
   return Windows.HRESULT is abstract;
   
   function get_UpdateLatency
   (
      This       : access ILampInfo_Interface
      ; RetVal : access Windows.Foundation.TimeSpan
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   
   IID_ILampStatics : aliased constant Windows.IID := (2820817260, 34949, 16414, (184, 33, 142, 139, 56, 168, 232, 236 ));
   
   type ILampStatics_Interface is interface and Windows.IInspectable_Interface;
   
   function GetDeviceSelector
   (
      This       : access ILampStatics_Interface
      ; RetVal : access Windows.String
   )
   return Windows.HRESULT is abstract;
   
   function FromIdAsync
   (
      This       : access ILampStatics_Interface
      ; deviceId : Windows.String
      ; RetVal : access Windows.Devices.Lights.IAsyncOperation_ILamp -- Generic Parameter Type
   )
   return Windows.HRESULT is abstract;
   
   function GetDefaultAsync
   (
      This       : access ILampStatics_Interface
      ; RetVal : access Windows.Devices.Lights.IAsyncOperation_ILamp -- Generic Parameter Type
   )
   return Windows.HRESULT is abstract;
   
   ------------------------------------------------------------------------
   -- Delegates/Events
   ------------------------------------------------------------------------
   
   ------------------------------------------------------------------------
   
   IID_AsyncOperationCompletedHandler_ILamp : aliased constant Windows.IID := (421170286, 24797, 23073, (165, 60, 191, 63, 148, 10, 29, 222 ));
   
   type AsyncOperationCompletedHandler_ILamp_Interface(Callback : access procedure (asyncInfo : Windows.Devices.Lights.IAsyncOperation_ILamp ; asyncStatus : Windows.Foundation.AsyncStatus)) is new Windows.IMulticastDelegate_Interface(IID_AsyncOperationCompletedHandler_ILamp'access) with null record;
   function Invoke
   (
      This       : access AsyncOperationCompletedHandler_ILamp_Interface
      ; asyncInfo : Windows.Devices.Lights.IAsyncOperation_ILamp
      ; asyncStatus : Windows.Foundation.AsyncStatus
   )
   return Windows.HRESULT;
   
   ------------------------------------------------------------------------
   
   IID_AsyncOperationCompletedHandler_ILampArray : aliased constant Windows.IID := (3953399259, 17071, 21688, (162, 243, 91, 52, 73, 76, 137, 114 ));
   
   type AsyncOperationCompletedHandler_ILampArray_Interface(Callback : access procedure (asyncInfo : Windows.Devices.Lights.IAsyncOperation_ILampArray ; asyncStatus : Windows.Foundation.AsyncStatus)) is new Windows.IMulticastDelegate_Interface(IID_AsyncOperationCompletedHandler_ILampArray'access) with null record;
   function Invoke
   (
      This       : access AsyncOperationCompletedHandler_ILampArray_Interface
      ; asyncInfo : Windows.Devices.Lights.IAsyncOperation_ILampArray
      ; asyncStatus : Windows.Foundation.AsyncStatus
   )
   return Windows.HRESULT;
   
   ------------------------------------------------------------------------
   
   IID_TypedEventHandler_ILamp_add_AvailabilityChanged : aliased constant Windows.IID := (1433010905, 30341, 22383, (137, 202, 182, 45, 196, 129, 210, 157 ));
   
   type TypedEventHandler_ILamp_add_AvailabilityChanged_Interface(Callback : access procedure (sender : Windows.Devices.Lights.ILamp ; args : Windows.Devices.Lights.ILampAvailabilityChangedEventArgs)) is new Windows.IMulticastDelegate_Interface(IID_TypedEventHandler_ILamp_add_AvailabilityChanged'access) with null record;
   function Invoke
   (
      This       : access TypedEventHandler_ILamp_add_AvailabilityChanged_Interface
      ; sender : Windows.Devices.Lights.ILamp
      ; args : Windows.Devices.Lights.ILampAvailabilityChangedEventArgs
   )
   return Windows.HRESULT;
   
   ------------------------------------------------------------------------
   -- Classes
   ------------------------------------------------------------------------
   
   subtype Lamp is Windows.Devices.Lights.ILamp;
   subtype LampArray is Windows.Devices.Lights.ILampArray;
   subtype LampAvailabilityChangedEventArgs is Windows.Devices.Lights.ILampAvailabilityChangedEventArgs;
   subtype LampInfo is Windows.Devices.Lights.ILampInfo;
   
   ------------------------------------------------------------------------
   -- Static Procedures/functions
   ------------------------------------------------------------------------
   
   function FromIdAsync
   (
      deviceId : Windows.String
   )
   return Windows.Devices.Lights.IAsyncOperation_ILamp;
   
   function GetDefaultAsync
   return Windows.Devices.Lights.IAsyncOperation_ILamp;
   
   function GetDeviceSelector
   return Windows.String;
   
   function FromIdAsync
   (
      deviceId : Windows.String
   )
   return Windows.Devices.Lights.IAsyncOperation_ILampArray;
   
   function GetDeviceSelector_ILampArray
   return Windows.String;
   
end;
