//
// 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.Foundation.Numerics.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        namespace Numerics
        {
            typedef struct Vector3 Vector3;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        typedef struct TimeSpan TimeSpan;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            namespace ForceFeedback
            {
                typedef enum ConditionForceEffectKind ConditionForceEffectKind;

                typedef enum ForceFeedbackEffectAxes ForceFeedbackEffectAxes;

                typedef enum ForceFeedbackEffectState ForceFeedbackEffectState;

                typedef enum ForceFeedbackLoadEffectResult ForceFeedbackLoadEffectResult;

                typedef enum PeriodicForceEffectKind PeriodicForceEffectKind;

                interface IConditionForceEffect;

                interface IConditionForceEffectFactory;

                interface IConstantForceEffect;

                interface IForceFeedbackEffect;

                interface IForceFeedbackMotor;

                interface IPeriodicForceEffect;

                interface IPeriodicForceEffectFactory;

                interface IRampForceEffect;

                runtimeclass ConditionForceEffect;

                runtimeclass ConstantForceEffect;

                runtimeclass ForceFeedbackMotor;

                runtimeclass PeriodicForceEffect;

                runtimeclass RampForceEffect;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            namespace ForceFeedback
            {
                declare
                {
                    interface Windows.Foundation.Collections.IIterable<Windows.Gaming.Input.ForceFeedback.ForceFeedbackMotor*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Gaming.Input.ForceFeedback.ForceFeedbackMotor*>;

                    interface Windows.Foundation.Collections.IVectorView<Windows.Gaming.Input.ForceFeedback.ForceFeedbackMotor*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Gaming.Input.ForceFeedback.ForceFeedbackLoadEffectResult>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            namespace ForceFeedback
            {
                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                enum ConditionForceEffectKind
                {
                    Spring   = 0,
                    Damper   = 1,
                    Inertia  = 2,
                    Friction = 3
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [flags]
                enum ForceFeedbackEffectAxes
                {
                    None = 0x0,
                    X    = 0x1,
                    Y    = 0x2,
                    Z    = 0x4
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                enum ForceFeedbackEffectState
                {
                    Stopped = 0,
                    Running = 1,
                    Paused  = 2,
                    Faulted = 3
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                enum ForceFeedbackLoadEffectResult
                {
                    Succeeded          = 0,
                    EffectStorageFull  = 1,
                    EffectNotSupported = 2
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                enum PeriodicForceEffectKind
                {
                    SquareWave       = 0,
                    SineWave         = 1,
                    TriangleWave     = 2,
                    SawtoothWaveUp   = 3,
                    SawtoothWaveDown = 4
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Gaming.Input.ForceFeedback.ConditionForceEffect)]
                [uuid(32D1EA68-3695-4E69-85C0-CD1944189140)]
                interface IConditionForceEffect : IInspectable
                    requires
                        Windows.Gaming.Input.ForceFeedback.IForceFeedbackEffect
                {
                    [propget] HRESULT Kind([out] [retval] Windows.Gaming.Input.ForceFeedback.ConditionForceEffectKind* value);
                    HRESULT SetParameters([in] Windows.Foundation.Numerics.Vector3 direction, [in] FLOAT positiveCoefficient, [in] FLOAT negativeCoefficient, [in] FLOAT maxPositiveMagnitude, [in] FLOAT maxNegativeMagnitude, [in] FLOAT deadZone, [in] FLOAT bias);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Gaming.Input.ForceFeedback.ConditionForceEffect)]
                [uuid(91A99264-1810-4EB6-A773-BFD3B8CDDBAB)]
                interface IConditionForceEffectFactory : IInspectable
                {
                    HRESULT CreateInstance([in] Windows.Gaming.Input.ForceFeedback.ConditionForceEffectKind effectKind, [out] [retval] Windows.Gaming.Input.ForceFeedback.ConditionForceEffect** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Gaming.Input.ForceFeedback.ConstantForceEffect)]
                [uuid(9BFA0140-F3C7-415C-B068-0F068734BCE0)]
                interface IConstantForceEffect : IInspectable
                    requires
                        Windows.Gaming.Input.ForceFeedback.IForceFeedbackEffect
                {
                    HRESULT SetParameters([in] Windows.Foundation.Numerics.Vector3 vector, [in] Windows.Foundation.TimeSpan duration);
                    HRESULT SetParametersWithEnvelope([in] Windows.Foundation.Numerics.Vector3 vector, [in] FLOAT attackGain, [in] FLOAT sustainGain, [in] FLOAT releaseGain, [in] Windows.Foundation.TimeSpan startDelay, [in] Windows.Foundation.TimeSpan attackDuration, [in] Windows.Foundation.TimeSpan sustainDuration, [in] Windows.Foundation.TimeSpan releaseDuration, [in] UINT32 repeatCount);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [uuid(A17FBA0C-2AE4-48C2-8063-EABD0777CB89)]
                interface IForceFeedbackEffect : IInspectable
                {
                    [propget] HRESULT Gain([out] [retval] DOUBLE* value);
                    [propput] HRESULT Gain([in] DOUBLE value);
                    [propget] HRESULT State([out] [retval] Windows.Gaming.Input.ForceFeedback.ForceFeedbackEffectState* value);
                    HRESULT Start();
                    HRESULT Stop();
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Gaming.Input.ForceFeedback.ForceFeedbackMotor)]
                [uuid(8D3D417C-A5EA-4516-8026-2B00F74EF6E5)]
                interface IForceFeedbackMotor : IInspectable
                {
                    [propget] HRESULT AreEffectsPaused([out] [retval] boolean* value);
                    [propget] HRESULT MasterGain([out] [retval] DOUBLE* value);
                    [propput] HRESULT MasterGain([in] DOUBLE value);
                    [propget] HRESULT IsEnabled([out] [retval] boolean* value);
                    [propget] HRESULT SupportedAxes([out] [retval] Windows.Gaming.Input.ForceFeedback.ForceFeedbackEffectAxes* value);
                    HRESULT LoadEffectAsync([in] Windows.Gaming.Input.ForceFeedback.IForceFeedbackEffect* effect, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Gaming.Input.ForceFeedback.ForceFeedbackLoadEffectResult>** asyncOperation);
                    HRESULT PauseAllEffects();
                    HRESULT ResumeAllEffects();
                    HRESULT StopAllEffects();
                    HRESULT TryDisableAsync([out] [retval] Windows.Foundation.IAsyncOperation<boolean>** asyncOperation);
                    HRESULT TryEnableAsync([out] [retval] Windows.Foundation.IAsyncOperation<boolean>** asyncOperation);
                    HRESULT TryResetAsync([out] [retval] Windows.Foundation.IAsyncOperation<boolean>** asyncOperation);
                    HRESULT TryUnloadEffectAsync([in] Windows.Gaming.Input.ForceFeedback.IForceFeedbackEffect* effect, [out] [retval] Windows.Foundation.IAsyncOperation<boolean>** asyncOperation);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Gaming.Input.ForceFeedback.PeriodicForceEffect)]
                [uuid(5C5138D7-FC75-4D52-9A0A-EFE4CAB5FE64)]
                interface IPeriodicForceEffect : IInspectable
                    requires
                        Windows.Gaming.Input.ForceFeedback.IForceFeedbackEffect
                {
                    [propget] HRESULT Kind([out] [retval] Windows.Gaming.Input.ForceFeedback.PeriodicForceEffectKind* value);
                    HRESULT SetParameters([in] Windows.Foundation.Numerics.Vector3 vector, [in] FLOAT frequency, [in] FLOAT phase, [in] FLOAT bias, [in] Windows.Foundation.TimeSpan duration);
                    HRESULT SetParametersWithEnvelope([in] Windows.Foundation.Numerics.Vector3 vector, [in] FLOAT frequency, [in] FLOAT phase, [in] FLOAT bias, [in] FLOAT attackGain, [in] FLOAT sustainGain, [in] FLOAT releaseGain, [in] Windows.Foundation.TimeSpan startDelay, [in] Windows.Foundation.TimeSpan attackDuration, [in] Windows.Foundation.TimeSpan sustainDuration, [in] Windows.Foundation.TimeSpan releaseDuration, [in] UINT32 repeatCount);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Gaming.Input.ForceFeedback.PeriodicForceEffect)]
                [uuid(6F62EB1A-9851-477B-B318-35ECAA15070F)]
                interface IPeriodicForceEffectFactory : IInspectable
                {
                    HRESULT CreateInstance([in] Windows.Gaming.Input.ForceFeedback.PeriodicForceEffectKind effectKind, [out] [retval] Windows.Gaming.Input.ForceFeedback.PeriodicForceEffect** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.Gaming.Input.ForceFeedback.RampForceEffect)]
                [uuid(F1F81259-1CA6-4080-B56D-B43F3354D052)]
                interface IRampForceEffect : IInspectable
                    requires
                        Windows.Gaming.Input.ForceFeedback.IForceFeedbackEffect
                {
                    HRESULT SetParameters([in] Windows.Foundation.Numerics.Vector3 startVector, [in] Windows.Foundation.Numerics.Vector3 endVector, [in] Windows.Foundation.TimeSpan duration);
                    HRESULT SetParametersWithEnvelope([in] Windows.Foundation.Numerics.Vector3 startVector, [in] Windows.Foundation.Numerics.Vector3 endVector, [in] FLOAT attackGain, [in] FLOAT sustainGain, [in] FLOAT releaseGain, [in] Windows.Foundation.TimeSpan startDelay, [in] Windows.Foundation.TimeSpan attackDuration, [in] Windows.Foundation.TimeSpan sustainDuration, [in] Windows.Foundation.TimeSpan releaseDuration, [in] UINT32 repeatCount);
                }

                [activatable(Windows.Gaming.Input.ForceFeedback.IConditionForceEffectFactory, Windows.Foundation.UniversalApiContract, 3.0)]
                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass ConditionForceEffect
                {
                    [default] interface Windows.Gaming.Input.ForceFeedback.IForceFeedbackEffect;
                    interface Windows.Gaming.Input.ForceFeedback.IConditionForceEffect;
                }

                [activatable(Windows.Foundation.UniversalApiContract, 3.0)]
                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass ConstantForceEffect
                {
                    [default] interface Windows.Gaming.Input.ForceFeedback.IForceFeedbackEffect;
                    interface Windows.Gaming.Input.ForceFeedback.IConstantForceEffect;
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass ForceFeedbackMotor
                {
                    [default] interface Windows.Gaming.Input.ForceFeedback.IForceFeedbackMotor;
                }

                [activatable(Windows.Gaming.Input.ForceFeedback.IPeriodicForceEffectFactory, Windows.Foundation.UniversalApiContract, 3.0)]
                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass PeriodicForceEffect
                {
                    [default] interface Windows.Gaming.Input.ForceFeedback.IForceFeedbackEffect;
                    interface Windows.Gaming.Input.ForceFeedback.IPeriodicForceEffect;
                }

                [activatable(Windows.Foundation.UniversalApiContract, 3.0)]
                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass RampForceEffect
                {
                    [default] interface Windows.Gaming.Input.ForceFeedback.IForceFeedbackEffect;
                    interface Windows.Gaming.Input.ForceFeedback.IRampForceEffect;
                }
            }
        }
    }
}
