//
// 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.Pwm.Provider.idl";

// Forward Declare
namespace Windows
{
    namespace Devices
    {
        apicontract DevicesLowLevelContract;
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Pwm
        {
            namespace Provider
            {
                interface IPwmProvider;
            }
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        interface IClosable;
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Pwm
        {
            typedef enum PwmPulsePolarity PwmPulsePolarity;

            interface IPwmController;

            interface IPwmControllerStatics;

            interface IPwmControllerStatics2;

            interface IPwmControllerStatics3;

            interface IPwmPin;

            runtimeclass PwmController;

            runtimeclass PwmPin;
        }
    }
}

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

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Pwm.PwmController*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Pwm.PwmController*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Devices.Pwm.PwmController*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Devices.Pwm.PwmController*>*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace Pwm
        {
            [contract(Windows.Devices.DevicesLowLevelContract, 1.0)]
            enum PwmPulsePolarity
            {
                ActiveHigh = 0,
                ActiveLow  = 1
            };

            [contract(Windows.Devices.DevicesLowLevelContract, 1.0)]
            [exclusiveto(Windows.Devices.Pwm.PwmController)]
            [uuid(C45F5C85-D2E8-42CF-9BD6-CF5ED029E6A7)]
            interface IPwmController : IInspectable
            {
                [propget] HRESULT PinCount([out] [retval] INT32* value);
                [propget] HRESULT ActualFrequency([out] [retval] DOUBLE* value);
                HRESULT SetDesiredFrequency([in] DOUBLE desiredFrequency, [out] [retval] DOUBLE* result);
                [propget] HRESULT MinFrequency([out] [retval] DOUBLE* value);
                [propget] HRESULT MaxFrequency([out] [retval] DOUBLE* value);
                HRESULT OpenPin([in] INT32 pinNumber, [out] [retval] Windows.Devices.Pwm.PwmPin** pin);
            }

            [contract(Windows.Devices.DevicesLowLevelContract, 1.0)]
            [exclusiveto(Windows.Devices.Pwm.PwmController)]
            [uuid(4263BDA1-8946-4404-BD48-81DD124AF4D9)]
            interface IPwmControllerStatics : IInspectable
            {
                HRESULT GetControllersAsync([in] Windows.Devices.Pwm.Provider.IPwmProvider* provider, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Devices.Pwm.PwmController*>*>** operation);
            }

            [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
            [exclusiveto(Windows.Devices.Pwm.PwmController)]
            [uuid(44FC5B1F-F119-4BDD-97AD-F76EF986736D)]
            interface IPwmControllerStatics2 : IInspectable
            {
                HRESULT GetDefaultAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Pwm.PwmController*>** operation);
            }

            [contract(Windows.Devices.DevicesLowLevelContract, 3.0)]
            [exclusiveto(Windows.Devices.Pwm.PwmController)]
            [uuid(B2581871-0229-4344-AE3F-9B7CD0E66B94)]
            interface IPwmControllerStatics3 : IInspectable
            {
                [overload("GetDeviceSelector")] HRESULT GetDeviceSelector([out] [retval] HSTRING* result);
                [overload("GetDeviceSelector")] HRESULT GetDeviceSelectorFromFriendlyName([in] HSTRING friendlyName, [out] [retval] HSTRING* result);
                HRESULT FromIdAsync([in] HSTRING deviceId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Pwm.PwmController*>** operation);
            }

            [contract(Windows.Devices.DevicesLowLevelContract, 1.0)]
            [exclusiveto(Windows.Devices.Pwm.PwmPin)]
            [uuid(22972DC8-C6CF-4821-B7F9-C6454FB6AF79)]
            interface IPwmPin : IInspectable
                requires
                    Windows.Foundation.IClosable
            {
                [propget] HRESULT Controller([out] [retval] Windows.Devices.Pwm.PwmController** value);
                HRESULT GetActiveDutyCyclePercentage([out] [retval] DOUBLE* result);
                HRESULT SetActiveDutyCyclePercentage([in] DOUBLE dutyCyclePercentage);
                [propget] HRESULT Polarity([out] [retval] Windows.Devices.Pwm.PwmPulsePolarity* value);
                [propput] HRESULT Polarity([in] Windows.Devices.Pwm.PwmPulsePolarity value);
                HRESULT Start();
                HRESULT Stop();
                [propget] HRESULT IsStarted([out] [retval] boolean* value);
            }

            [contract(Windows.Devices.DevicesLowLevelContract, 1.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Devices.Pwm.IPwmControllerStatics, Windows.Devices.DevicesLowLevelContract, 1.0)]
            [static(Windows.Devices.Pwm.IPwmControllerStatics2, Windows.Devices.DevicesLowLevelContract, 2.0)]
            [static(Windows.Devices.Pwm.IPwmControllerStatics3, Windows.Devices.DevicesLowLevelContract, 3.0)]
            runtimeclass PwmController
            {
                [default] interface Windows.Devices.Pwm.IPwmController;
            }

            [contract(Windows.Devices.DevicesLowLevelContract, 1.0)]
            [marshaling_behavior(agile)]
            runtimeclass PwmPin
            {
                [default] interface Windows.Devices.Pwm.IPwmPin;
                interface Windows.Foundation.IClosable;
            }
        }
    }
}
