// IDL defines for COM APIs to support interop with Windows.Devices.AllJoyn

import "Inspectable.idl";

cpp_quote("//")
cpp_quote("//   The following declarations within the 'if 0' block are dummy typedefs used to make")
cpp_quote("//   the Windows.Devices.AllJoyn.idl file build.  The actual definitions are contained in MsgArg.h")
cpp_quote("//")
cpp_quote("#if 0")
typedef void* alljoyn_msgarg;
typedef const CHAR* PCSTR;
cpp_quote("#endif")

cpp_quote("#include <alljoyn_c\BusAttachment.h>")
cpp_quote("#include <alljoyn_c\BusObject.h>")
cpp_quote("#include <alljoyn_c\MsgArg.h>")

cpp_quote("#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)")

[
    local,
    uuid(fd89c65b-b50e-4a19-9d0c-b42b783281cd),
]
interface IWindowsDevicesAllJoynBusAttachmentInterop : IInspectable
{
    [propget] HRESULT Win32Handle([out, retval] UINT64* value);
}

[
    local,
    uuid(4b8f7505-b239-4e7b-88af-f6682575d861),
]
interface IWindowsDevicesAllJoynBusAttachmentFactoryInterop : IInspectable
{
    HRESULT CreateFromWin32Handle(
        [in] UINT64 win32handle,
        [in] boolean enableAboutData,
        [in] REFIID riid,
        [out, iid_is(riid)] void** ppv);
}

[
    local,
    uuid(d78aa3d5-5054-428f-99f2-ec3a5de3c3bc),
]
interface IWindowsDevicesAllJoynBusObjectInterop : IInspectable
{
    HRESULT AddPropertyGetHandler(
        [in] PVOID context,
        [in] HSTRING interfaceName,
        [in] INT32 (*callback)(
            PVOID context, 
            HSTRING interfaceName, 
            HSTRING propertyName, 
            alljoyn_msgarg value));
        
    HRESULT AddPropertySetHandler(
        [in] PVOID context,
        [in] HSTRING interfaceName,
        [in] INT32 (*callback)(
            PVOID context, 
            HSTRING interfaceName, 
            HSTRING propertyName, 
            alljoyn_msgarg value));

    [propget] HRESULT Win32Handle([out, retval] UINT64* value);
}

[
    local,
    uuid(6174e506-8b95-4e36-95c0-b88fed34938c),
]
interface IWindowsDevicesAllJoynBusObjectFactoryInterop : IInspectable
{
    HRESULT CreateFromWin32Handle(
        [in] UINT64 win32handle,
        [in] REFIID riid,
        [out, iid_is(riid)] void** ppv);
}

cpp_quote("#endif //(NTDDI_VERSION >= NTDDI_WINTHRESHOLD)")
