//
// 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";

// Forward Declare
namespace Windows
{
    namespace Devices
    {
        apicontract DevicesLowLevelContract;
    }
}
namespace Windows
{
    namespace Foundation
    {
        typedef struct TimeSpan TimeSpan;
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Gpio
        {
            namespace Provider
            {
                typedef enum ProviderGpioPinDriveMode ProviderGpioPinDriveMode;

                typedef enum ProviderGpioPinEdge ProviderGpioPinEdge;

                typedef enum ProviderGpioPinValue ProviderGpioPinValue;

                typedef enum ProviderGpioSharingMode ProviderGpioSharingMode;

                interface IGpioControllerProvider;

                interface IGpioPinProvider;

                interface IGpioPinProviderValueChangedEventArgs;

                interface IGpioPinProviderValueChangedEventArgsFactory;

                interface IGpioProvider;

                runtimeclass GpioPinProviderValueChangedEventArgs;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Devices
    {
        namespace Gpio
        {
            namespace Provider
            {
                declare
                {
                    interface Windows.Foundation.Collections.IIterable<Windows.Devices.Gpio.Provider.IGpioControllerProvider*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Devices.Gpio.Provider.IGpioControllerProvider*>;

                    interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Gpio.Provider.IGpioControllerProvider*>;

                    interface Windows.Foundation.TypedEventHandler<Windows.Devices.Gpio.Provider.IGpioPinProvider*, Windows.Devices.Gpio.Provider.GpioPinProviderValueChangedEventArgs*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace Gpio
        {
            namespace Provider
            {
                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                enum ProviderGpioPinDriveMode
                {
                    Input                    = 0,
                    Output                   = 1,
                    InputPullUp              = 2,
                    InputPullDown            = 3,
                    OutputOpenDrain          = 4,
                    OutputOpenDrainPullUp    = 5,
                    OutputOpenSource         = 6,
                    OutputOpenSourcePullDown = 7
                };

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                enum ProviderGpioPinEdge
                {
                    FallingEdge = 0,
                    RisingEdge  = 1
                };

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                enum ProviderGpioPinValue
                {
                    Low  = 0,
                    High = 1
                };

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                enum ProviderGpioSharingMode
                {
                    Exclusive      = 0,
                    SharedReadOnly = 1
                };

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                [uuid(AD11CEC7-19EA-4B21-874F-B91AED4A25DB)]
                interface IGpioControllerProvider : IInspectable
                {
                    [propget] HRESULT PinCount([out] [retval] INT32* value);
                    HRESULT OpenPinProvider([in] INT32 pin, [in] Windows.Devices.Gpio.Provider.ProviderGpioSharingMode sharingMode, [out] [retval] Windows.Devices.Gpio.Provider.IGpioPinProvider** gpioPinProvider);
                }

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                [uuid(42344CB7-6ABC-40FF-9CE7-73B85301B900)]
                interface IGpioPinProvider : IInspectable
                {
                    [eventadd] HRESULT ValueChanged([in] Windows.Foundation.TypedEventHandler<Windows.Devices.Gpio.Provider.IGpioPinProvider*, Windows.Devices.Gpio.Provider.GpioPinProviderValueChangedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT ValueChanged([in] EventRegistrationToken token);
                    [propget] HRESULT DebounceTimeout([out] [retval] Windows.Foundation.TimeSpan* value);
                    [propput] HRESULT DebounceTimeout([in] Windows.Foundation.TimeSpan value);
                    [propget] HRESULT PinNumber([out] [retval] INT32* value);
                    [propget] HRESULT SharingMode([out] [retval] Windows.Devices.Gpio.Provider.ProviderGpioSharingMode* value);
                    HRESULT IsDriveModeSupported([in] Windows.Devices.Gpio.Provider.ProviderGpioPinDriveMode driveMode, [out] [retval] boolean* supported);
                    HRESULT GetDriveMode([out] [retval] Windows.Devices.Gpio.Provider.ProviderGpioPinDriveMode* value);
                    HRESULT SetDriveMode([in] Windows.Devices.Gpio.Provider.ProviderGpioPinDriveMode value);
                    HRESULT Write([in] Windows.Devices.Gpio.Provider.ProviderGpioPinValue value);
                    HRESULT Read([out] [retval] Windows.Devices.Gpio.Provider.ProviderGpioPinValue* value);
                }

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                [exclusiveto(Windows.Devices.Gpio.Provider.GpioPinProviderValueChangedEventArgs)]
                [uuid(32A6D6F2-3D5B-44CD-8FBE-13A69F2EDB24)]
                interface IGpioPinProviderValueChangedEventArgs : IInspectable
                {
                    [propget] HRESULT Edge([out] [retval] Windows.Devices.Gpio.Provider.ProviderGpioPinEdge* value);
                }

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                [exclusiveto(Windows.Devices.Gpio.Provider.GpioPinProviderValueChangedEventArgs)]
                [uuid(3ECB0B59-568C-4392-B24A-8A59A902B1F1)]
                interface IGpioPinProviderValueChangedEventArgsFactory : IInspectable
                {
                    HRESULT Create([in] Windows.Devices.Gpio.Provider.ProviderGpioPinEdge edge, [out] [retval] Windows.Devices.Gpio.Provider.GpioPinProviderValueChangedEventArgs** value);
                }

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                [uuid(44E82707-08CA-434A-AFE0-D61580446F7E)]
                interface IGpioProvider : IInspectable
                {
                    HRESULT GetControllers([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Gpio.Provider.IGpioControllerProvider*>** result);
                }

                [activatable(Windows.Devices.Gpio.Provider.IGpioPinProviderValueChangedEventArgsFactory, Windows.Devices.DevicesLowLevelContract, 2.0)]
                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass GpioPinProviderValueChangedEventArgs
                {
                    [default] interface Windows.Devices.Gpio.Provider.IGpioPinProviderValueChangedEventArgs;
                }
            }
        }
    }
}
