//
// 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";
import "Windows.Perception.idl";
import "Windows.Perception.Spatial.idl";
import "Windows.UI.Input.idl";
import "Windows.UI.Input.Spatial.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        namespace Numerics
        {
            typedef struct Quaternion Quaternion;

            typedef struct Vector3 Vector3;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Perception
    {
        runtimeclass PerceptionTimestamp;
    }
}
namespace Windows
{
    namespace Perception
    {
        namespace Spatial
        {
            runtimeclass SpatialCoordinateSystem;

            typedef struct SpatialRay SpatialRay;
        }
    }
}
namespace Windows
{
    namespace UI
    {
        namespace Input
        {
            typedef enum GazeInputAccessStatus GazeInputAccessStatus;
        }
    }
}
namespace Windows
{
    namespace UI
    {
        namespace Input
        {
            namespace Spatial
            {
                runtimeclass SpatialInteractionSource;
            }
        }
    }
}
namespace Windows
{
    namespace Perception
    {
        namespace People
        {
            typedef enum HandJointKind HandJointKind;

            typedef enum JointPoseAccuracy JointPoseAccuracy;

            typedef struct HandMeshVertex HandMeshVertex;

            typedef struct JointPose JointPose;

            interface IEyesPose;

            interface IEyesPoseStatics;

            interface IHandMeshObserver;

            interface IHandMeshVertexState;

            interface IHandPose;

            interface IHeadPose;

            runtimeclass EyesPose;

            runtimeclass HandMeshObserver;

            runtimeclass HandMeshVertexState;

            runtimeclass HandPose;

            runtimeclass HeadPose;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Perception
    {
        namespace People
        {
            declare
            {
                interface Windows.Foundation.IAsyncOperation<Windows.Perception.People.HandMeshObserver*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Perception
    {
        namespace People
        {
            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            enum HandJointKind
            {
                Palm               = 0,
                Wrist              = 1,
                ThumbMetacarpal    = 2,
                ThumbProximal      = 3,
                ThumbDistal        = 4,
                ThumbTip           = 5,
                IndexMetacarpal    = 6,
                IndexProximal      = 7,
                IndexIntermediate  = 8,
                IndexDistal        = 9,
                IndexTip           = 10,
                MiddleMetacarpal   = 11,
                MiddleProximal     = 12,
                MiddleIntermediate = 13,
                MiddleDistal       = 14,
                MiddleTip          = 15,
                RingMetacarpal     = 16,
                RingProximal       = 17,
                RingIntermediate   = 18,
                RingDistal         = 19,
                RingTip            = 20,
                LittleMetacarpal   = 21,
                LittleProximal     = 22,
                LittleIntermediate = 23,
                LittleDistal       = 24,
                LittleTip          = 25
            };

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            enum JointPoseAccuracy
            {
                High        = 0,
                Approximate = 1
            };

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            struct HandMeshVertex
            {
                Windows.Foundation.Numerics.Vector3 Position;
                Windows.Foundation.Numerics.Vector3 Normal;
            };

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            struct JointPose
            {
                Windows.Foundation.Numerics.Quaternion Orientation;
                Windows.Foundation.Numerics.Vector3 Position;
                FLOAT Radius;
                Windows.Perception.People.JointPoseAccuracy Accuracy;
            };

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            [exclusiveto(Windows.Perception.People.EyesPose)]
            [uuid(682A9B23-8A1E-5B86-A060-906FFACB62A4)]
            interface IEyesPose : IInspectable
            {
                [propget] HRESULT IsCalibrationValid([out] [retval] boolean* value);
                [propget] HRESULT Gaze([out] [retval] Windows.Foundation.IReference<Windows.Perception.Spatial.SpatialRay>** value);
                [propget] HRESULT UpdateTimestamp([out] [retval] Windows.Perception.PerceptionTimestamp** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            [exclusiveto(Windows.Perception.People.EyesPose)]
            [uuid(1CFF7413-B21F-54C0-80C1-E60D994CA58C)]
            interface IEyesPoseStatics : IInspectable
            {
                HRESULT IsSupported([out] [retval] boolean* result);
                HRESULT RequestAccessAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.UI.Input.GazeInputAccessStatus>** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            [exclusiveto(Windows.Perception.People.HandMeshObserver)]
            [uuid(85AE30CB-6FC3-55C4-A7B4-29E33896CA69)]
            interface IHandMeshObserver : IInspectable
            {
                [propget] HRESULT Source([out] [retval] Windows.UI.Input.Spatial.SpatialInteractionSource** value);
                [propget] HRESULT TriangleIndexCount([out] [retval] UINT32* value);
                [propget] HRESULT VertexCount([out] [retval] UINT32* value);
                HRESULT GetTriangleIndices([in] UINT32 __indicesSize, [out] [size_is(__indicesSize)] UINT16* indices);
                HRESULT GetVertexStateForPose([in] Windows.Perception.People.HandPose* handPose, [out] [retval] Windows.Perception.People.HandMeshVertexState** result);
                [propget] HRESULT NeutralPose([out] [retval] Windows.Perception.People.HandPose** value);
                [propget] HRESULT NeutralPoseVersion([out] [retval] INT32* value);
                [propget] HRESULT ModelId([out] [retval] INT32* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            [exclusiveto(Windows.Perception.People.HandMeshVertexState)]
            [uuid(046C5FEF-1D8B-55DE-AB2C-1CD424886D8F)]
            interface IHandMeshVertexState : IInspectable
            {
                [propget] HRESULT CoordinateSystem([out] [retval] Windows.Perception.Spatial.SpatialCoordinateSystem** value);
                HRESULT GetVertices([in] UINT32 __verticesSize, [out] [size_is(__verticesSize)] Windows.Perception.People.HandMeshVertex* vertices);
                [propget] HRESULT UpdateTimestamp([out] [retval] Windows.Perception.PerceptionTimestamp** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            [exclusiveto(Windows.Perception.People.HandPose)]
            [uuid(4D98E79A-BB08-5D09-91DE-DF0DD3FAE46C)]
            interface IHandPose : IInspectable
            {
                HRESULT TryGetJoint([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [in] Windows.Perception.People.HandJointKind joint, [out] Windows.Perception.People.JointPose* jointPose, [out] [retval] boolean* result);
                HRESULT TryGetJoints([in] Windows.Perception.Spatial.SpatialCoordinateSystem* coordinateSystem, [in] UINT32 __jointsSize, [in] [size_is(__jointsSize)] Windows.Perception.People.HandJointKind* joints, [in] UINT32 __jointPosesSize, [out] [size_is(__jointPosesSize)] Windows.Perception.People.JointPose* jointPoses, [out] [retval] boolean* result);
                HRESULT GetRelativeJoint([in] Windows.Perception.People.HandJointKind joint, [in] Windows.Perception.People.HandJointKind referenceJoint, [out] [retval] Windows.Perception.People.JointPose* result);
                HRESULT GetRelativeJoints([in] UINT32 __jointsSize, [in] [size_is(__jointsSize)] Windows.Perception.People.HandJointKind* joints, [in] UINT32 __referenceJointsSize, [in] [size_is(__referenceJointsSize)] Windows.Perception.People.HandJointKind* referenceJoints, [in] UINT32 __jointPosesSize, [out] [size_is(__jointPosesSize)] Windows.Perception.People.JointPose* jointPoses);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.Perception.People.HeadPose)]
            [uuid(7F5AC5A5-49DB-379F-9429-32A2FAF34FA6)]
            interface IHeadPose : IInspectable
            {
                [propget] HRESULT Position([out] [retval] Windows.Foundation.Numerics.Vector3* value);
                [propget] HRESULT ForwardDirection([out] [retval] Windows.Foundation.Numerics.Vector3* value);
                [propget] HRESULT UpDirection([out] [retval] Windows.Foundation.Numerics.Vector3* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Perception.People.IEyesPoseStatics, Windows.Foundation.UniversalApiContract, 8.0)]
            [threading(both)]
            runtimeclass EyesPose
            {
                [default] interface Windows.Perception.People.IEyesPose;
            }

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            [marshaling_behavior(agile)]
            runtimeclass HandMeshObserver
            {
                [default] interface Windows.Perception.People.IHandMeshObserver;
            }

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            [marshaling_behavior(agile)]
            runtimeclass HandMeshVertexState
            {
                [default] interface Windows.Perception.People.IHandMeshVertexState;
            }

            [contract(Windows.Foundation.UniversalApiContract, 8.0)]
            [marshaling_behavior(agile)]
            runtimeclass HandPose
            {
                [default] interface Windows.Perception.People.IHandPose;
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass HeadPose
            {
                [default] interface Windows.Perception.People.IHeadPose;
            }
        }
    }
}
