//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0018
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        typedef struct TimeSpan TimeSpan;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Devices
    {
        namespace Haptics
        {
            typedef enum VibrationAccessStatus VibrationAccessStatus;

            interface IKnownSimpleHapticsControllerWaveformsStatics;

            interface ISimpleHapticsController;

            interface ISimpleHapticsControllerFeedback;

            interface IVibrationDevice;

            interface IVibrationDeviceStatics;

            runtimeclass KnownSimpleHapticsControllerWaveforms;

            runtimeclass SimpleHapticsController;

            runtimeclass SimpleHapticsControllerFeedback;

            runtimeclass VibrationDevice;
        }
    }
}

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

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Haptics.SimpleHapticsControllerFeedback*>;

                interface Windows.Foundation.Collections.IIterable<Windows.Devices.Haptics.VibrationDevice*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Haptics.SimpleHapticsController*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Haptics.SimpleHapticsControllerFeedback*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Devices.Haptics.VibrationDevice*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Haptics.SimpleHapticsController*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Haptics.SimpleHapticsControllerFeedback*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Devices.Haptics.VibrationDevice*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Devices.Haptics.VibrationAccessStatus>;

                interface Windows.Foundation.IAsyncOperation<Windows.Devices.Haptics.VibrationDevice*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Devices.Haptics.VibrationDevice*>*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Devices
    {
        namespace Haptics
        {
            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            enum VibrationAccessStatus
            {
                Allowed             = 0,
                DeniedByUser        = 1,
                DeniedBySystem      = 2,
                DeniedByEnergySaver = 3
            };

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Devices.Haptics.KnownSimpleHapticsControllerWaveforms)]
            [uuid(3D577EF7-4CEE-11E6-B535-001BDC06AB3B)]
            interface IKnownSimpleHapticsControllerWaveformsStatics : IInspectable
            {
                [propget] HRESULT Click([out] [retval] UINT16* value);
                [propget] HRESULT BuzzContinuous([out] [retval] UINT16* value);
                [propget] HRESULT RumbleContinuous([out] [retval] UINT16* value);
                [propget] HRESULT Press([out] [retval] UINT16* value);
                [propget] HRESULT Release([out] [retval] UINT16* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Devices.Haptics.SimpleHapticsController)]
            [uuid(3D577EF9-4CEE-11E6-B535-001BDC06AB3B)]
            interface ISimpleHapticsController : IInspectable
            {
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                [propget] HRESULT SupportedFeedback([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Devices.Haptics.SimpleHapticsControllerFeedback*>** value);
                [propget] HRESULT IsIntensitySupported([out] [retval] boolean* value);
                [propget] HRESULT IsPlayCountSupported([out] [retval] boolean* value);
                [propget] HRESULT IsPlayDurationSupported([out] [retval] boolean* value);
                [propget] HRESULT IsReplayPauseIntervalSupported([out] [retval] boolean* value);
                HRESULT StopFeedback();
                [overload("SendHapticFeedback")] HRESULT SendHapticFeedback([in] Windows.Devices.Haptics.SimpleHapticsControllerFeedback* feedback);
                [overload("SendHapticFeedback")] HRESULT SendHapticFeedbackWithIntensity([in] Windows.Devices.Haptics.SimpleHapticsControllerFeedback* feedback, [in] DOUBLE intensity);
                HRESULT SendHapticFeedbackForDuration([in] Windows.Devices.Haptics.SimpleHapticsControllerFeedback* feedback, [in] DOUBLE intensity, [in] Windows.Foundation.TimeSpan playDuration);
                HRESULT SendHapticFeedbackForPlayCount([in] Windows.Devices.Haptics.SimpleHapticsControllerFeedback* feedback, [in] DOUBLE intensity, [in] INT32 playCount, [in] Windows.Foundation.TimeSpan replayPauseInterval);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Devices.Haptics.SimpleHapticsControllerFeedback)]
            [uuid(3D577EF8-4CEE-11E6-B535-001BDC06AB3B)]
            interface ISimpleHapticsControllerFeedback : IInspectable
            {
                [propget] HRESULT Waveform([out] [retval] UINT16* value);
                [propget] HRESULT Duration([out] [retval] Windows.Foundation.TimeSpan* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Devices.Haptics.VibrationDevice)]
            [uuid(40F21A3E-8844-47FF-B312-06185A3844DA)]
            interface IVibrationDevice : IInspectable
            {
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                [propget] HRESULT SimpleHapticsController([out] [retval] Windows.Devices.Haptics.SimpleHapticsController** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.Devices.Haptics.VibrationDevice)]
            [uuid(53E2EDED-2290-4AC9-8EB3-1A84122EB71C)]
            interface IVibrationDeviceStatics : IInspectable
            {
                HRESULT RequestAccessAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Haptics.VibrationAccessStatus>** operation);
                HRESULT GetDeviceSelector([out] [retval] HSTRING* result);
                HRESULT FromIdAsync([in] HSTRING deviceId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Haptics.VibrationDevice*>** operation);
                HRESULT GetDefaultAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Devices.Haptics.VibrationDevice*>** operation);
                HRESULT FindAllAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Devices.Haptics.VibrationDevice*>*>** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Devices.Haptics.IKnownSimpleHapticsControllerWaveformsStatics, Windows.Foundation.UniversalApiContract, 4.0)]
            runtimeclass KnownSimpleHapticsControllerWaveforms
            {
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [marshaling_behavior(agile)]
            runtimeclass SimpleHapticsController
            {
                [default] interface Windows.Devices.Haptics.ISimpleHapticsController;
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [marshaling_behavior(agile)]
            runtimeclass SimpleHapticsControllerFeedback
            {
                [default] interface Windows.Devices.Haptics.ISimpleHapticsControllerFeedback;
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Devices.Haptics.IVibrationDeviceStatics, Windows.Foundation.UniversalApiContract, 4.0)]
            [threading(both)]
            runtimeclass VibrationDevice
            {
                [default] interface Windows.Devices.Haptics.IVibrationDevice;
            }
        }
    }
}
