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

// Forward Declare
namespace Windows
{
    namespace Devices
    {
        namespace Adc
        {
            namespace Provider
            {
                interface IAdcProvider;
            }
        }
    }
}
namespace Windows
{
    namespace Devices
    {
        apicontract DevicesLowLevelContract;
    }
}
namespace Windows
{
    namespace Foundation
    {
        interface IClosable;
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Adc
        {
            typedef enum AdcChannelMode AdcChannelMode;

            interface IAdcChannel;

            interface IAdcController;

            interface IAdcControllerStatics;

            interface IAdcControllerStatics2;

            runtimeclass AdcChannel;

            runtimeclass AdcController;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Devices
    {
        namespace Adc
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Adc.AdcController*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Adc.AdcController*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Adc.AdcController*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Devices.Adc.AdcController*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Devices.Adc.AdcController*>*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace Adc
        {
            [contract(Windows.Devices.DevicesLowLevelContract, 1.0)]
            enum AdcChannelMode
            {
                SingleEnded  = 0,
                Differential = 1
            };

            [contract(Windows.Devices.DevicesLowLevelContract, 1.0)]
            [exclusiveto(Windows.Devices.Adc.AdcChannel)]
            [uuid(040BF414-2588-4A56-ABEF-73A260ACC60A)]
            interface IAdcChannel : IInspectable
                requires
                    Windows.Foundation.IClosable
            {
                [propget] HRESULT Controller([out] [retval] Windows.Devices.Adc.AdcController** value);
                HRESULT ReadValue([out] [retval] INT32* result);
                HRESULT ReadRatio([out] [retval] DOUBLE* result);
            }

            [contract(Windows.Devices.DevicesLowLevelContract, 1.0)]
            [exclusiveto(Windows.Devices.Adc.AdcController)]
            [uuid(2A76E4B0-A896-4219-86B6-EA8CDCE98F56)]
            interface IAdcController : IInspectable
            {
                [propget] HRESULT ChannelCount([out] [retval] INT32* value);
                [propget] HRESULT ResolutionInBits([out] [retval] INT32* value);
                [propget] HRESULT MinValue([out] [retval] INT32* value);
                [propget] HRESULT MaxValue([out] [retval] INT32* value);
                [propget] HRESULT ChannelMode([out] [retval] Windows.Devices.Adc.AdcChannelMode* value);
                [propput] HRESULT ChannelMode([in] Windows.Devices.Adc.AdcChannelMode value);
                HRESULT IsChannelModeSupported([in] Windows.Devices.Adc.AdcChannelMode channelMode, [out] [retval] boolean* result);
                HRESULT OpenChannel([in] INT32 channelNumber, [out] [retval] Windows.Devices.Adc.AdcChannel** result);
            }

            [contract(Windows.Devices.DevicesLowLevelContract, 1.0)]
            [exclusiveto(Windows.Devices.Adc.AdcController)]
            [uuid(CCE98E0C-01F8-4891-BC3B-BE53EF279CA4)]
            interface IAdcControllerStatics : IInspectable
            {
                HRESULT GetControllersAsync([in] Windows.Devices.Adc.Provider.IAdcProvider* provider, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Devices.Adc.AdcController*>*>** operation);
            }

            [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
            [exclusiveto(Windows.Devices.Adc.AdcController)]
            [uuid(A2B93B1D-977B-4F5A-A5FE-A6ABAFFE6484)]
            interface IAdcControllerStatics2 : IInspectable
            {
                HRESULT GetDefaultAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Adc.AdcController*>** operation);
            }

            [contract(Windows.Devices.DevicesLowLevelContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass AdcChannel
            {
                [default] interface Windows.Devices.Adc.IAdcChannel;
                interface Windows.Foundation.IClosable;
            }

            [contract(Windows.Devices.DevicesLowLevelContract, 1.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Devices.Adc.IAdcControllerStatics, Windows.Devices.DevicesLowLevelContract, 1.0)]
            [static(Windows.Devices.Adc.IAdcControllerStatics2, Windows.Devices.DevicesLowLevelContract, 2.0)]
            runtimeclass AdcController
            {
                [default] interface Windows.Devices.Adc.IAdcController;
            }
        }
    }
}
