//
// 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.Devices.Adc.Provider.idl";
import "Windows.Devices.Gpio.Provider.idl";
import "Windows.Devices.I2c.Provider.idl";
import "Windows.Devices.Pwm.Provider.idl";
import "Windows.Devices.Spi.Provider.idl";

// Forward Declare
namespace Windows
{
    namespace Devices
    {
        namespace Adc
        {
            namespace Provider
            {
                interface IAdcControllerProvider;
            }
        }
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Gpio
        {
            namespace Provider
            {
                interface IGpioControllerProvider;
            }
        }
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace I2c
        {
            namespace Provider
            {
                interface II2cControllerProvider;
            }
        }
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Pwm
        {
            namespace Provider
            {
                interface IPwmControllerProvider;
            }
        }
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Spi
        {
            namespace Provider
            {
                interface ISpiControllerProvider;
            }
        }
    }
}
namespace Windows
{
    namespace Devices
    {
        apicontract DevicesLowLevelContract;

        interface ILowLevelDevicesAggregateProvider;

        interface ILowLevelDevicesAggregateProviderFactory;

        interface ILowLevelDevicesController;

        interface ILowLevelDevicesControllerStatics;

        runtimeclass LowLevelDevicesAggregateProvider;

        runtimeclass LowLevelDevicesController;
    }
}

// Generic instantiations

// Type definition
namespace Windows
{
    namespace Devices
    {
        [contractversion(3.0)]
        apicontract DevicesLowLevelContract
        {
        }

        [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
        [uuid(A73E561C-AAC1-4EC7-A852-479F7060D01F)]
        interface ILowLevelDevicesAggregateProvider : IInspectable
        {
            [propget] HRESULT AdcControllerProvider([out] [retval] Windows.Devices.Adc.Provider.IAdcControllerProvider** value);
            [propget] HRESULT PwmControllerProvider([out] [retval] Windows.Devices.Pwm.Provider.IPwmControllerProvider** value);
            [propget] HRESULT GpioControllerProvider([out] [retval] Windows.Devices.Gpio.Provider.IGpioControllerProvider** value);
            [propget] HRESULT I2cControllerProvider([out] [retval] Windows.Devices.I2c.Provider.II2cControllerProvider** value);
            [propget] HRESULT SpiControllerProvider([out] [retval] Windows.Devices.Spi.Provider.ISpiControllerProvider** value);
        }

        [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
        [exclusiveto(Windows.Devices.LowLevelDevicesAggregateProvider)]
        [uuid(9AC4AAF6-3473-465E-96D5-36281A2C57AF)]
        interface ILowLevelDevicesAggregateProviderFactory : IInspectable
        {
            HRESULT Create([in] Windows.Devices.Adc.Provider.IAdcControllerProvider* adc, [in] Windows.Devices.Pwm.Provider.IPwmControllerProvider* pwm, [in] Windows.Devices.Gpio.Provider.IGpioControllerProvider* gpio, [in] Windows.Devices.I2c.Provider.II2cControllerProvider* i2c, [in] Windows.Devices.Spi.Provider.ISpiControllerProvider* spi, [out] [retval] Windows.Devices.LowLevelDevicesAggregateProvider** value);
        }

        [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
        [exclusiveto(Windows.Devices.LowLevelDevicesController)]
        [uuid(2EC23DD4-179B-45DE-9B39-3AE02527DE52)]
        interface ILowLevelDevicesController : IInspectable
        {
        }

        [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
        [exclusiveto(Windows.Devices.LowLevelDevicesController)]
        [uuid(093E926A-FCCB-4394-A697-19DE637C2DB3)]
        interface ILowLevelDevicesControllerStatics : IInspectable
        {
            [propget] HRESULT DefaultProvider([out] [retval] Windows.Devices.ILowLevelDevicesAggregateProvider** value);
            [propput] HRESULT DefaultProvider([in] Windows.Devices.ILowLevelDevicesAggregateProvider* value);
        }

        [activatable(Windows.Devices.ILowLevelDevicesAggregateProviderFactory, Windows.Devices.DevicesLowLevelContract, 2.0)]
        [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
        [marshaling_behavior(agile)]
        runtimeclass LowLevelDevicesAggregateProvider
        {
            [default] interface Windows.Devices.ILowLevelDevicesAggregateProvider;
        }

        [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
        [marshaling_behavior(agile)]
        [static(Windows.Devices.ILowLevelDevicesControllerStatics, Windows.Devices.DevicesLowLevelContract, 2.0)]
        runtimeclass LowLevelDevicesController
        {
            [default] interface Windows.Devices.ILowLevelDevicesController;
        }
    }
}
