/*** Autogenerated by WIDL 11.6 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__ */
