/*** Autogenerated by WIDL 10.16 from include/windows.perception.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __windows_perception_h__
#define __windows_perception_h__

/* Forward declarations */

#ifndef ____x_ABI_CWindows_CPerception_CIPerceptionTimestamp_FWD_DEFINED__
#define ____x_ABI_CWindows_CPerception_CIPerceptionTimestamp_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CPerception_CIPerceptionTimestamp __x_ABI_CWindows_CPerception_CIPerceptionTimestamp;
#ifdef __cplusplus
#define __x_ABI_CWindows_CPerception_CIPerceptionTimestamp ABI::Windows::Perception::IPerceptionTimestamp
namespace ABI {
    namespace Windows {
        namespace Perception {
            interface IPerceptionTimestamp;
        }
    }
}
#endif /* __cplusplus */
#endif

#ifndef ____x_ABI_CWindows_CPerception_CPerceptionTimestamp_FWD_DEFINED__
#define ____x_ABI_CWindows_CPerception_CPerceptionTimestamp_FWD_DEFINED__
#ifdef __cplusplus
namespace ABI {
    namespace Windows {
        namespace Perception {
            class PerceptionTimestamp;
        }
    }
}
#else
typedef struct __x_ABI_CWindows_CPerception_CPerceptionTimestamp __x_ABI_CWindows_CPerception_CPerceptionTimestamp;
#endif /* defined __cplusplus */
#endif /* defined ____x_ABI_CWindows_CPerception_CPerceptionTimestamp_FWD_DEFINED__ */

/* Headers for imported files */

#include <inspectable.h>
#include <asyncinfo.h>
#include <eventtoken.h>
#include <windowscontracts.h>
#include <windows.foundation.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef ____x_ABI_CWindows_CPerception_CIPerceptionTimestamp_FWD_DEFINED__
#define ____x_ABI_CWindows_CPerception_CIPerceptionTimestamp_FWD_DEFINED__
typedef interface __x_ABI_CWindows_CPerception_CIPerceptionTimestamp __x_ABI_CWindows_CPerception_CIPerceptionTimestamp;
#ifdef __cplusplus
#define __x_ABI_CWindows_CPerception_CIPerceptionTimestamp ABI::Windows::Perception::IPerceptionTimestamp
namespace ABI {
    namespace Windows {
        namespace Perception {
            interface IPerceptionTimestamp;
        }
    }
}
#endif /* __cplusplus */
#endif

/*****************************************************************************
 * IPerceptionTimestamp interface
 */
#if !defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)
#define WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION 0xe0000
#endif // defined(WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION)

#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000
#ifndef ____x_ABI_CWindows_CPerception_CIPerceptionTimestamp_INTERFACE_DEFINED__
#define ____x_ABI_CWindows_CPerception_CIPerceptionTimestamp_INTERFACE_DEFINED__

DEFINE_GUID(IID___x_ABI_CWindows_CPerception_CIPerceptionTimestamp, 0x87c24804, 0xa22e, 0x4adb, 0xba,0x26, 0xd7,0x8e,0xf6,0x39,0xbc,0xf4);
#if defined(__cplusplus) && !defined(CINTERFACE)
} /* extern "C" */
namespace ABI {
    namespace Windows {
        namespace Perception {
            MIDL_INTERFACE("87c24804-a22e-4adb-ba26-d78ef639bcf4")
            IPerceptionTimestamp : public IInspectable
            {
                virtual HRESULT STDMETHODCALLTYPE get_TargetTime(
                    ABI::Windows::Foundation::DateTime *value) = 0;

                virtual HRESULT STDMETHODCALLTYPE get_PredictionAmount(
                    ABI::Windows::Foundation::TimeSpan *value) = 0;

            };
        }
    }
}
extern "C" {
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(__x_ABI_CWindows_CPerception_CIPerceptionTimestamp, 0x87c24804, 0xa22e, 0x4adb, 0xba,0x26, 0xd7,0x8e,0xf6,0x39,0xbc,0xf4)
#endif
#else
typedef struct __x_ABI_CWindows_CPerception_CIPerceptionTimestampVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        __x_ABI_CWindows_CPerception_CIPerceptionTimestamp *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        __x_ABI_CWindows_CPerception_CIPerceptionTimestamp *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        __x_ABI_CWindows_CPerception_CIPerceptionTimestamp *This);

    /*** IInspectable methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIids)(
        __x_ABI_CWindows_CPerception_CIPerceptionTimestamp *This,
        ULONG *iidCount,
        IID **iids);

    HRESULT (STDMETHODCALLTYPE *GetRuntimeClassName)(
        __x_ABI_CWindows_CPerception_CIPerceptionTimestamp *This,
        HSTRING *className);

    HRESULT (STDMETHODCALLTYPE *GetTrustLevel)(
        __x_ABI_CWindows_CPerception_CIPerceptionTimestamp *This,
        TrustLevel *trustLevel);

    /*** IPerceptionTimestamp methods ***/
    HRESULT (STDMETHODCALLTYPE *get_TargetTime)(
        __x_ABI_CWindows_CPerception_CIPerceptionTimestamp *This,
        __x_ABI_CWindows_CFoundation_CDateTime *value);

    HRESULT (STDMETHODCALLTYPE *get_PredictionAmount)(
        __x_ABI_CWindows_CPerception_CIPerceptionTimestamp *This,
        __x_ABI_CWindows_CFoundation_CTimeSpan *value);

    END_INTERFACE
} __x_ABI_CWindows_CPerception_CIPerceptionTimestampVtbl;

interface __x_ABI_CWindows_CPerception_CIPerceptionTimestamp {
    CONST_VTBL __x_ABI_CWindows_CPerception_CIPerceptionTimestampVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_AddRef(This) (This)->lpVtbl->AddRef(This)
#define __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_Release(This) (This)->lpVtbl->Release(This)
/*** IInspectable methods ***/
#define __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_GetIids(This,iidCount,iids) (This)->lpVtbl->GetIids(This,iidCount,iids)
#define __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_GetRuntimeClassName(This,className) (This)->lpVtbl->GetRuntimeClassName(This,className)
#define __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_GetTrustLevel(This,trustLevel) (This)->lpVtbl->GetTrustLevel(This,trustLevel)
/*** IPerceptionTimestamp methods ***/
#define __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_get_TargetTime(This,value) (This)->lpVtbl->get_TargetTime(This,value)
#define __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_get_PredictionAmount(This,value) (This)->lpVtbl->get_PredictionAmount(This,value)
#else
/*** IUnknown methods ***/
static inline HRESULT __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_QueryInterface(__x_ABI_CWindows_CPerception_CIPerceptionTimestamp* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_AddRef(__x_ABI_CWindows_CPerception_CIPerceptionTimestamp* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_Release(__x_ABI_CWindows_CPerception_CIPerceptionTimestamp* This) {
    return This->lpVtbl->Release(This);
}
/*** IInspectable methods ***/
static inline HRESULT __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_GetIids(__x_ABI_CWindows_CPerception_CIPerceptionTimestamp* This,ULONG *iidCount,IID **iids) {
    return This->lpVtbl->GetIids(This,iidCount,iids);
}
static inline HRESULT __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_GetRuntimeClassName(__x_ABI_CWindows_CPerception_CIPerceptionTimestamp* This,HSTRING *className) {
    return This->lpVtbl->GetRuntimeClassName(This,className);
}
static inline HRESULT __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_GetTrustLevel(__x_ABI_CWindows_CPerception_CIPerceptionTimestamp* This,TrustLevel *trustLevel) {
    return This->lpVtbl->GetTrustLevel(This,trustLevel);
}
/*** IPerceptionTimestamp methods ***/
static inline HRESULT __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_get_TargetTime(__x_ABI_CWindows_CPerception_CIPerceptionTimestamp* This,__x_ABI_CWindows_CFoundation_CDateTime *value) {
    return This->lpVtbl->get_TargetTime(This,value);
}
static inline HRESULT __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_get_PredictionAmount(__x_ABI_CWindows_CPerception_CIPerceptionTimestamp* This,__x_ABI_CWindows_CFoundation_CTimeSpan *value) {
    return This->lpVtbl->get_PredictionAmount(This,value);
}
#endif
#ifdef WIDL_using_Windows_Perception
#define IID_IPerceptionTimestamp IID___x_ABI_CWindows_CPerception_CIPerceptionTimestamp
#define IPerceptionTimestampVtbl __x_ABI_CWindows_CPerception_CIPerceptionTimestampVtbl
#define IPerceptionTimestamp __x_ABI_CWindows_CPerception_CIPerceptionTimestamp
#define IPerceptionTimestamp_QueryInterface __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_QueryInterface
#define IPerceptionTimestamp_AddRef __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_AddRef
#define IPerceptionTimestamp_Release __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_Release
#define IPerceptionTimestamp_GetIids __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_GetIids
#define IPerceptionTimestamp_GetRuntimeClassName __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_GetRuntimeClassName
#define IPerceptionTimestamp_GetTrustLevel __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_GetTrustLevel
#define IPerceptionTimestamp_get_TargetTime __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_get_TargetTime
#define IPerceptionTimestamp_get_PredictionAmount __x_ABI_CWindows_CPerception_CIPerceptionTimestamp_get_PredictionAmount
#endif /* WIDL_using_Windows_Perception */
#endif

#endif

#endif  /* ____x_ABI_CWindows_CPerception_CIPerceptionTimestamp_INTERFACE_DEFINED__ */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000 */

/*
 * Class Windows.Perception.PerceptionTimestamp
 */
#if WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000
#ifndef RUNTIMECLASS_Windows_Perception_PerceptionTimestamp_DEFINED
#define RUNTIMECLASS_Windows_Perception_PerceptionTimestamp_DEFINED
#if !defined(_MSC_VER) && !defined(__MINGW32__)
static const WCHAR RuntimeClass_Windows_Perception_PerceptionTimestamp[] = {'W','i','n','d','o','w','s','.','P','e','r','c','e','p','t','i','o','n','.','P','e','r','c','e','p','t','i','o','n','T','i','m','e','s','t','a','m','p',0};
#elif defined(__GNUC__) && !defined(__cplusplus)
const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Perception_PerceptionTimestamp[] = L"Windows.Perception.PerceptionTimestamp";
#else
extern const DECLSPEC_SELECTANY WCHAR RuntimeClass_Windows_Perception_PerceptionTimestamp[] = {'W','i','n','d','o','w','s','.','P','e','r','c','e','p','t','i','o','n','.','P','e','r','c','e','p','t','i','o','n','T','i','m','e','s','t','a','m','p',0};
#endif
#endif /* RUNTIMECLASS_Windows_Perception_PerceptionTimestamp_DEFINED */
#endif /* WINDOWS_FOUNDATION_UNIVERSALAPICONTRACT_VERSION >= 0x20000 */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __windows_perception_h__ */
