// C++/WinRT v2.0.250303.1

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

#pragma once
#ifndef WINRT_Windows_Devices_Haptics_0_H
#define WINRT_Windows_Devices_Haptics_0_H
WINRT_EXPORT namespace winrt::Windows::Foundation
{
}
WINRT_EXPORT namespace winrt::Windows::Devices::Haptics
{
    enum class HapticDeviceType : int32_t
    {
        None = 0,
        Generic = 1,
        Pen = 2,
        Touchpad = 3,
        Mouse = 4,
    };
    enum class VibrationAccessStatus : int32_t
    {
        Allowed = 0,
        DeniedByUser = 1,
        DeniedBySystem = 2,
        DeniedByEnergySaver = 3,
    };
    struct IInputHapticsManager;
    struct IInputHapticsManagerStatics;
    struct IKnownSimpleHapticsControllerWaveformsStatics;
    struct IKnownSimpleHapticsControllerWaveformsStatics2;
    struct ISimpleHapticsController;
    struct ISimpleHapticsControllerFeedback;
    struct IVibrationDevice;
    struct IVibrationDeviceStatics;
    struct InputHapticsManager;
    struct KnownSimpleHapticsControllerWaveforms;
    struct SimpleHapticsController;
    struct SimpleHapticsControllerFeedback;
    struct VibrationDevice;
    struct HapticsControllerOverrideToken;
}
namespace winrt::impl
{
    template <> struct category<winrt::Windows::Devices::Haptics::IInputHapticsManager>{ using type = interface_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::IInputHapticsManagerStatics>{ using type = interface_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::IKnownSimpleHapticsControllerWaveformsStatics>{ using type = interface_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::IKnownSimpleHapticsControllerWaveformsStatics2>{ using type = interface_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::ISimpleHapticsController>{ using type = interface_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::ISimpleHapticsControllerFeedback>{ using type = interface_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::IVibrationDevice>{ using type = interface_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::IVibrationDeviceStatics>{ using type = interface_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::InputHapticsManager>{ using type = class_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::KnownSimpleHapticsControllerWaveforms>{ using type = class_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::SimpleHapticsController>{ using type = class_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::SimpleHapticsControllerFeedback>{ using type = class_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::VibrationDevice>{ using type = class_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::HapticDeviceType>{ using type = enum_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::VibrationAccessStatus>{ using type = enum_category; };
    template <> struct category<winrt::Windows::Devices::Haptics::HapticsControllerOverrideToken>{ using type = struct_category<int64_t>; };
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::InputHapticsManager> = L"Windows.Devices.Haptics.InputHapticsManager";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::KnownSimpleHapticsControllerWaveforms> = L"Windows.Devices.Haptics.KnownSimpleHapticsControllerWaveforms";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::SimpleHapticsController> = L"Windows.Devices.Haptics.SimpleHapticsController";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::SimpleHapticsControllerFeedback> = L"Windows.Devices.Haptics.SimpleHapticsControllerFeedback";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::VibrationDevice> = L"Windows.Devices.Haptics.VibrationDevice";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::HapticDeviceType> = L"Windows.Devices.Haptics.HapticDeviceType";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::VibrationAccessStatus> = L"Windows.Devices.Haptics.VibrationAccessStatus";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::HapticsControllerOverrideToken> = L"Windows.Devices.Haptics.HapticsControllerOverrideToken";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::IInputHapticsManager> = L"Windows.Devices.Haptics.IInputHapticsManager";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::IInputHapticsManagerStatics> = L"Windows.Devices.Haptics.IInputHapticsManagerStatics";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::IKnownSimpleHapticsControllerWaveformsStatics> = L"Windows.Devices.Haptics.IKnownSimpleHapticsControllerWaveformsStatics";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::IKnownSimpleHapticsControllerWaveformsStatics2> = L"Windows.Devices.Haptics.IKnownSimpleHapticsControllerWaveformsStatics2";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::ISimpleHapticsController> = L"Windows.Devices.Haptics.ISimpleHapticsController";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::ISimpleHapticsControllerFeedback> = L"Windows.Devices.Haptics.ISimpleHapticsControllerFeedback";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::IVibrationDevice> = L"Windows.Devices.Haptics.IVibrationDevice";
    template <> inline constexpr auto& name_v<winrt::Windows::Devices::Haptics::IVibrationDeviceStatics> = L"Windows.Devices.Haptics.IVibrationDeviceStatics";
    template <> inline constexpr guid guid_v<winrt::Windows::Devices::Haptics::IInputHapticsManager>{ 0x040E91DF,0xBB3A,0x507C,{ 0x9E,0x25,0xA2,0xD2,0xC6,0x85,0xB2,0xE5 } }; // 040E91DF-BB3A-507C-9E25-A2D2C685B2E5
    template <> inline constexpr guid guid_v<winrt::Windows::Devices::Haptics::IInputHapticsManagerStatics>{ 0x7BB40F77,0xE187,0x5322,{ 0x84,0x4E,0xAA,0x58,0x22,0x3C,0x28,0x1A } }; // 7BB40F77-E187-5322-844E-AA58223C281A
    template <> inline constexpr guid guid_v<winrt::Windows::Devices::Haptics::IKnownSimpleHapticsControllerWaveformsStatics>{ 0x3D577EF7,0x4CEE,0x11E6,{ 0xB5,0x35,0x00,0x1B,0xDC,0x06,0xAB,0x3B } }; // 3D577EF7-4CEE-11E6-B535-001BDC06AB3B
    template <> inline constexpr guid guid_v<winrt::Windows::Devices::Haptics::IKnownSimpleHapticsControllerWaveformsStatics2>{ 0xA7D24C27,0xB79D,0x510A,{ 0xBF,0x79,0xFF,0x6D,0x49,0x17,0x3E,0x1D } }; // A7D24C27-B79D-510A-BF79-FF6D49173E1D
    template <> inline constexpr guid guid_v<winrt::Windows::Devices::Haptics::ISimpleHapticsController>{ 0x3D577EF9,0x4CEE,0x11E6,{ 0xB5,0x35,0x00,0x1B,0xDC,0x06,0xAB,0x3B } }; // 3D577EF9-4CEE-11E6-B535-001BDC06AB3B
    template <> inline constexpr guid guid_v<winrt::Windows::Devices::Haptics::ISimpleHapticsControllerFeedback>{ 0x3D577EF8,0x4CEE,0x11E6,{ 0xB5,0x35,0x00,0x1B,0xDC,0x06,0xAB,0x3B } }; // 3D577EF8-4CEE-11E6-B535-001BDC06AB3B
    template <> inline constexpr guid guid_v<winrt::Windows::Devices::Haptics::IVibrationDevice>{ 0x40F21A3E,0x8844,0x47FF,{ 0xB3,0x12,0x06,0x18,0x5A,0x38,0x44,0xDA } }; // 40F21A3E-8844-47FF-B312-06185A3844DA
    template <> inline constexpr guid guid_v<winrt::Windows::Devices::Haptics::IVibrationDeviceStatics>{ 0x53E2EDED,0x2290,0x4AC9,{ 0x8E,0xB3,0x1A,0x84,0x12,0x2E,0xB7,0x1C } }; // 53E2EDED-2290-4AC9-8EB3-1A84122EB71C
    template <> struct default_interface<winrt::Windows::Devices::Haptics::InputHapticsManager>{ using type = winrt::Windows::Devices::Haptics::IInputHapticsManager; };
    template <> struct default_interface<winrt::Windows::Devices::Haptics::SimpleHapticsController>{ using type = winrt::Windows::Devices::Haptics::ISimpleHapticsController; };
    template <> struct default_interface<winrt::Windows::Devices::Haptics::SimpleHapticsControllerFeedback>{ using type = winrt::Windows::Devices::Haptics::ISimpleHapticsControllerFeedback; };
    template <> struct default_interface<winrt::Windows::Devices::Haptics::VibrationDevice>{ using type = winrt::Windows::Devices::Haptics::IVibrationDevice; };
    template <> struct abi<winrt::Windows::Devices::Haptics::IInputHapticsManager>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall get_ThreadId(uint32_t*) noexcept = 0;
            virtual int32_t __stdcall get_CurrentHapticsControllerDeviceType(int32_t*) noexcept = 0;
            virtual int32_t __stdcall get_CurrentHapticsController(void**) noexcept = 0;
            virtual int32_t __stdcall TrySendHapticWaveform(uint16_t, uint16_t, bool*) noexcept = 0;
            virtual int32_t __stdcall TrySendHapticWaveformWithIntensity(uint16_t, uint16_t, double, bool*) noexcept = 0;
            virtual int32_t __stdcall TrySendHapticWaveformForDuration(uint16_t, uint16_t, double, int64_t, bool*) noexcept = 0;
            virtual int32_t __stdcall TrySendHapticWaveformForPlayCount(uint16_t, uint16_t, double, int32_t, int64_t, bool*) noexcept = 0;
            virtual int32_t __stdcall TryStopFeedback(bool*) noexcept = 0;
            virtual int32_t __stdcall SetOverrideHapticsController(int32_t, void*, struct struct_Windows_Devices_Haptics_HapticsControllerOverrideToken*) noexcept = 0;
            virtual int32_t __stdcall ClearOverrideHapticsController(struct struct_Windows_Devices_Haptics_HapticsControllerOverrideToken) noexcept = 0;
        };
    };
    template <> struct abi<winrt::Windows::Devices::Haptics::IInputHapticsManagerStatics>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall IsSupported(bool*) noexcept = 0;
            virtual int32_t __stdcall IsHapticDevicePresent(bool*) noexcept = 0;
            virtual int32_t __stdcall GetForCurrentThread(void**) noexcept = 0;
            virtual int32_t __stdcall TryGetForThread(uint32_t, void**) noexcept = 0;
        };
    };
    template <> struct abi<winrt::Windows::Devices::Haptics::IKnownSimpleHapticsControllerWaveformsStatics>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall get_Click(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_BuzzContinuous(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_RumbleContinuous(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_Press(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_Release(uint16_t*) noexcept = 0;
        };
    };
    template <> struct abi<winrt::Windows::Devices::Haptics::IKnownSimpleHapticsControllerWaveformsStatics2>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall get_BrushContinuous(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_ChiselMarkerContinuous(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_EraserContinuous(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_Error(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_GalaxyPenContinuous(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_Hover(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_InkContinuous(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_MarkerContinuous(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_PencilContinuous(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_Success(uint16_t*) noexcept = 0;
        };
    };
    template <> struct abi<winrt::Windows::Devices::Haptics::ISimpleHapticsController>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall get_Id(void**) noexcept = 0;
            virtual int32_t __stdcall get_SupportedFeedback(void**) noexcept = 0;
            virtual int32_t __stdcall get_IsIntensitySupported(bool*) noexcept = 0;
            virtual int32_t __stdcall get_IsPlayCountSupported(bool*) noexcept = 0;
            virtual int32_t __stdcall get_IsPlayDurationSupported(bool*) noexcept = 0;
            virtual int32_t __stdcall get_IsReplayPauseIntervalSupported(bool*) noexcept = 0;
            virtual int32_t __stdcall StopFeedback() noexcept = 0;
            virtual int32_t __stdcall SendHapticFeedback(void*) noexcept = 0;
            virtual int32_t __stdcall SendHapticFeedbackWithIntensity(void*, double) noexcept = 0;
            virtual int32_t __stdcall SendHapticFeedbackForDuration(void*, double, int64_t) noexcept = 0;
            virtual int32_t __stdcall SendHapticFeedbackForPlayCount(void*, double, int32_t, int64_t) noexcept = 0;
        };
    };
    template <> struct abi<winrt::Windows::Devices::Haptics::ISimpleHapticsControllerFeedback>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall get_Waveform(uint16_t*) noexcept = 0;
            virtual int32_t __stdcall get_Duration(int64_t*) noexcept = 0;
        };
    };
    template <> struct abi<winrt::Windows::Devices::Haptics::IVibrationDevice>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall get_Id(void**) noexcept = 0;
            virtual int32_t __stdcall get_SimpleHapticsController(void**) noexcept = 0;
        };
    };
    template <> struct abi<winrt::Windows::Devices::Haptics::IVibrationDeviceStatics>
    {
        struct WINRT_IMPL_NOVTABLE type : inspectable_abi
        {
            virtual int32_t __stdcall RequestAccessAsync(void**) noexcept = 0;
            virtual int32_t __stdcall GetDeviceSelector(void**) noexcept = 0;
            virtual int32_t __stdcall FromIdAsync(void*, void**) noexcept = 0;
            virtual int32_t __stdcall GetDefaultAsync(void**) noexcept = 0;
            virtual int32_t __stdcall FindAllAsync(void**) noexcept = 0;
        };
    };
    template <typename D>
    struct consume_Windows_Devices_Haptics_IInputHapticsManager
    {
        [[nodiscard]] auto ThreadId() const;
        [[nodiscard]] auto CurrentHapticsControllerDeviceType() const;
        [[nodiscard]] auto CurrentHapticsController() const;
        auto TrySendHapticWaveform(uint16_t waveform, uint16_t waveformFallback) const;
        auto TrySendHapticWaveform(uint16_t waveform, uint16_t waveformFallback, double intensity) const;
        auto TrySendHapticWaveformForDuration(uint16_t waveform, uint16_t waveformFallback, double intensity, winrt::Windows::Foundation::TimeSpan const& playDuration) const;
        auto TrySendHapticWaveformForPlayCount(uint16_t waveform, uint16_t waveformFallback, double intensity, int32_t playCount, winrt::Windows::Foundation::TimeSpan const& replayPauseInterval) const;
        auto TryStopFeedback() const;
        auto SetOverrideHapticsController(winrt::Windows::Devices::Haptics::HapticDeviceType const& deviceType, winrt::Windows::Devices::Haptics::SimpleHapticsController const& controller) const;
        auto ClearOverrideHapticsController(winrt::Windows::Devices::Haptics::HapticsControllerOverrideToken const& token) const;
    };
    template <> struct consume<winrt::Windows::Devices::Haptics::IInputHapticsManager>
    {
        template <typename D> using type = consume_Windows_Devices_Haptics_IInputHapticsManager<D>;
    };
    template <typename D>
    struct consume_Windows_Devices_Haptics_IInputHapticsManagerStatics
    {
        auto IsSupported() const;
        auto IsHapticDevicePresent() const;
        auto GetForCurrentThread() const;
        auto TryGetForThread(uint32_t ThreadId) const;
    };
    template <> struct consume<winrt::Windows::Devices::Haptics::IInputHapticsManagerStatics>
    {
        template <typename D> using type = consume_Windows_Devices_Haptics_IInputHapticsManagerStatics<D>;
    };
    template <typename D>
    struct consume_Windows_Devices_Haptics_IKnownSimpleHapticsControllerWaveformsStatics
    {
        [[nodiscard]] auto Click() const;
        [[nodiscard]] auto BuzzContinuous() const;
        [[nodiscard]] auto RumbleContinuous() const;
        [[nodiscard]] auto Press() const;
        [[nodiscard]] auto Release() const;
    };
    template <> struct consume<winrt::Windows::Devices::Haptics::IKnownSimpleHapticsControllerWaveformsStatics>
    {
        template <typename D> using type = consume_Windows_Devices_Haptics_IKnownSimpleHapticsControllerWaveformsStatics<D>;
    };
    template <typename D>
    struct consume_Windows_Devices_Haptics_IKnownSimpleHapticsControllerWaveformsStatics2
    {
        [[nodiscard]] auto BrushContinuous() const;
        [[nodiscard]] auto ChiselMarkerContinuous() const;
        [[nodiscard]] auto EraserContinuous() const;
        [[nodiscard]] auto Error() const;
        [[nodiscard]] auto GalaxyPenContinuous() const;
        [[nodiscard]] auto Hover() const;
        [[nodiscard]] auto InkContinuous() const;
        [[nodiscard]] auto MarkerContinuous() const;
        [[nodiscard]] auto PencilContinuous() const;
        [[nodiscard]] auto Success() const;
    };
    template <> struct consume<winrt::Windows::Devices::Haptics::IKnownSimpleHapticsControllerWaveformsStatics2>
    {
        template <typename D> using type = consume_Windows_Devices_Haptics_IKnownSimpleHapticsControllerWaveformsStatics2<D>;
    };
    template <typename D>
    struct consume_Windows_Devices_Haptics_ISimpleHapticsController
    {
        [[nodiscard]] auto Id() const;
        [[nodiscard]] auto SupportedFeedback() const;
        [[nodiscard]] auto IsIntensitySupported() const;
        [[nodiscard]] auto IsPlayCountSupported() const;
        [[nodiscard]] auto IsPlayDurationSupported() const;
        [[nodiscard]] auto IsReplayPauseIntervalSupported() const;
        auto StopFeedback() const;
        auto SendHapticFeedback(winrt::Windows::Devices::Haptics::SimpleHapticsControllerFeedback const& feedback) const;
        auto SendHapticFeedback(winrt::Windows::Devices::Haptics::SimpleHapticsControllerFeedback const& feedback, double intensity) const;
        auto SendHapticFeedbackForDuration(winrt::Windows::Devices::Haptics::SimpleHapticsControllerFeedback const& feedback, double intensity, winrt::Windows::Foundation::TimeSpan const& playDuration) const;
        auto SendHapticFeedbackForPlayCount(winrt::Windows::Devices::Haptics::SimpleHapticsControllerFeedback const& feedback, double intensity, int32_t playCount, winrt::Windows::Foundation::TimeSpan const& replayPauseInterval) const;
    };
    template <> struct consume<winrt::Windows::Devices::Haptics::ISimpleHapticsController>
    {
        template <typename D> using type = consume_Windows_Devices_Haptics_ISimpleHapticsController<D>;
    };
    template <typename D>
    struct consume_Windows_Devices_Haptics_ISimpleHapticsControllerFeedback
    {
        [[nodiscard]] auto Waveform() const;
        [[nodiscard]] auto Duration() const;
    };
    template <> struct consume<winrt::Windows::Devices::Haptics::ISimpleHapticsControllerFeedback>
    {
        template <typename D> using type = consume_Windows_Devices_Haptics_ISimpleHapticsControllerFeedback<D>;
    };
    template <typename D>
    struct consume_Windows_Devices_Haptics_IVibrationDevice
    {
        [[nodiscard]] auto Id() const;
        [[nodiscard]] auto SimpleHapticsController() const;
    };
    template <> struct consume<winrt::Windows::Devices::Haptics::IVibrationDevice>
    {
        template <typename D> using type = consume_Windows_Devices_Haptics_IVibrationDevice<D>;
    };
    template <typename D>
    struct consume_Windows_Devices_Haptics_IVibrationDeviceStatics
    {
        auto RequestAccessAsync() const;
        auto GetDeviceSelector() const;
        auto FromIdAsync(param::hstring const& deviceId) const;
        auto GetDefaultAsync() const;
        auto FindAllAsync() const;
    };
    template <> struct consume<winrt::Windows::Devices::Haptics::IVibrationDeviceStatics>
    {
        template <typename D> using type = consume_Windows_Devices_Haptics_IVibrationDeviceStatics<D>;
    };
    struct struct_Windows_Devices_Haptics_HapticsControllerOverrideToken
    {
        int64_t Value;
    };
    template <> struct abi<Windows::Devices::Haptics::HapticsControllerOverrideToken>
    {
        using type = struct_Windows_Devices_Haptics_HapticsControllerOverrideToken;
    };
}
#endif
