//
// 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
    {
        interface IClosable;
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace I2c
        {
            namespace Provider
            {
                typedef enum ProviderI2cBusSpeed ProviderI2cBusSpeed;

                typedef enum ProviderI2cSharingMode ProviderI2cSharingMode;

                typedef enum ProviderI2cTransferStatus ProviderI2cTransferStatus;

                typedef struct ProviderI2cTransferResult ProviderI2cTransferResult;

                interface II2cControllerProvider;

                interface II2cDeviceProvider;

                interface II2cProvider;

                interface IProviderI2cConnectionSettings;

                runtimeclass ProviderI2cConnectionSettings;
            }
        }
    }
}

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

                    interface Windows.Foundation.Collections.IIterator<Windows.Devices.I2c.Provider.II2cControllerProvider*>;

                    interface Windows.Foundation.Collections.IVectorView<Windows.Devices.I2c.Provider.II2cControllerProvider*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Devices.I2c.Provider.II2cControllerProvider*>*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace I2c
        {
            namespace Provider
            {
                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                enum ProviderI2cBusSpeed
                {
                    StandardMode = 0,
                    FastMode     = 1
                };

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

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                enum ProviderI2cTransferStatus
                {
                    FullTransfer                = 0,
                    PartialTransfer             = 1,
                    SlaveAddressNotAcknowledged = 2
                };

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                struct ProviderI2cTransferResult
                {
                    Windows.Devices.I2c.Provider.ProviderI2cTransferStatus Status;
                    UINT32 BytesTransferred;
                };

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                [uuid(61C2BB82-4510-4163-A87C-4E15A9558980)]
                interface II2cControllerProvider : IInspectable
                {
                    HRESULT GetDeviceProvider([in] Windows.Devices.I2c.Provider.ProviderI2cConnectionSettings* settings, [out] [retval] Windows.Devices.I2c.Provider.II2cDeviceProvider** device);
                }

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                [uuid(AD342654-57E8-453E-8329-D1E447D103A9)]
                interface II2cDeviceProvider : IInspectable
                    requires
                        Windows.Foundation.IClosable
                {
                    [propget] HRESULT DeviceId([out] [retval] HSTRING* value);
                    HRESULT Write([in] UINT32 __bufferSize, [in] [size_is(__bufferSize)] BYTE* buffer);
                    HRESULT WritePartial([in] UINT32 __bufferSize, [in] [size_is(__bufferSize)] BYTE* buffer, [out] [retval] Windows.Devices.I2c.Provider.ProviderI2cTransferResult* result);
                    HRESULT Read([range(0x00000000, 0x7FFFFFFF)] [in] UINT32 __bufferSize, [out] [size_is(__bufferSize)] BYTE* buffer);
                    HRESULT ReadPartial([range(0x00000000, 0x7FFFFFFF)] [in] UINT32 __bufferSize, [out] [size_is(__bufferSize)] BYTE* buffer, [out] [retval] Windows.Devices.I2c.Provider.ProviderI2cTransferResult* result);
                    HRESULT WriteRead([in] UINT32 __writeBufferSize, [in] [size_is(__writeBufferSize)] BYTE* writeBuffer, [range(0x00000000, 0x7FFFFFFF)] [in] UINT32 __readBufferSize, [out] [size_is(__readBufferSize)] BYTE* readBuffer);
                    HRESULT WriteReadPartial([in] UINT32 __writeBufferSize, [in] [size_is(__writeBufferSize)] BYTE* writeBuffer, [range(0x00000000, 0x7FFFFFFF)] [in] UINT32 __readBufferSize, [out] [size_is(__readBufferSize)] BYTE* readBuffer, [out] [retval] Windows.Devices.I2c.Provider.ProviderI2cTransferResult* result);
                }

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                [uuid(6F13083E-BF62-4FE2-A95A-F08999669818)]
                interface II2cProvider : IInspectable
                {
                    HRESULT GetControllersAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Devices.I2c.Provider.II2cControllerProvider*>*>** operation);
                }

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                [exclusiveto(Windows.Devices.I2c.Provider.ProviderI2cConnectionSettings)]
                [uuid(E9DB4E34-E510-44B7-809D-F2F85B555339)]
                interface IProviderI2cConnectionSettings : IInspectable
                {
                    [propget] HRESULT SlaveAddress([out] [retval] INT32* value);
                    [propput] HRESULT SlaveAddress([in] INT32 value);
                    [propget] HRESULT BusSpeed([out] [retval] Windows.Devices.I2c.Provider.ProviderI2cBusSpeed* value);
                    [propput] HRESULT BusSpeed([in] Windows.Devices.I2c.Provider.ProviderI2cBusSpeed value);
                    [propget] HRESULT SharingMode([out] [retval] Windows.Devices.I2c.Provider.ProviderI2cSharingMode* value);
                    [propput] HRESULT SharingMode([in] Windows.Devices.I2c.Provider.ProviderI2cSharingMode value);
                }

                [contract(Windows.Devices.DevicesLowLevelContract, 2.0)]
                [marshaling_behavior(agile)]
                runtimeclass ProviderI2cConnectionSettings
                {
                    [default] interface Windows.Devices.I2c.Provider.IProviderI2cConnectionSettings;
                }
            }
        }
    }
}
