251 lines
7.0 KiB
Plaintext
251 lines
7.0 KiB
Plaintext
|
/*
|
||
|
* Copyright (C) 2009 Maarten Lankhorst
|
||
|
*
|
||
|
* This library is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU Lesser General Public
|
||
|
* License as published by the Free Software Foundation; either
|
||
|
* version 2.1 of the License, or (at your option) any later version.
|
||
|
*
|
||
|
* This library is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
* Lesser General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Lesser General Public
|
||
|
* License along with this library; if not, write to the Free Software
|
||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||
|
*/
|
||
|
|
||
|
import "unknwn.idl";
|
||
|
import "propsys.idl";
|
||
|
|
||
|
cpp_quote("#ifndef E_NOTFOUND")
|
||
|
cpp_quote("#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)")
|
||
|
cpp_quote("#endif")
|
||
|
cpp_quote("#ifndef E_UNSUPPORTED_TYPE")
|
||
|
cpp_quote("#define E_UNSUPPORTED_TYPE HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE)")
|
||
|
cpp_quote("#endif")
|
||
|
|
||
|
|
||
|
cpp_quote("#define DEVICE_STATE_ACTIVE 0x1")
|
||
|
cpp_quote("#define DEVICE_STATE_DISABLED 0x2")
|
||
|
cpp_quote("#define DEVICE_STATE_NOTPRESENT 0x4")
|
||
|
cpp_quote("#define DEVICE_STATE_UNPLUGGED 0x8")
|
||
|
cpp_quote("#define DEVICE_STATEMASK_ALL 0xf")
|
||
|
|
||
|
/* Generic PKEY_AudioEndPoint ID for grepping: {1da5d803-d492-4edd-8c23-e0c0ffee7f0e} */
|
||
|
cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FormFactor,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,0);")
|
||
|
cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_ControlPanelPageProvider,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,1);")
|
||
|
cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Association,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,2);")
|
||
|
cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_PhysicalSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,3);")
|
||
|
cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_GUID,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,4);")
|
||
|
cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Disable_SysFx,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,5);")
|
||
|
|
||
|
cpp_quote("#define ENDPOINT_SYSFX_ENABLED 0")
|
||
|
cpp_quote("#define ENDPOINT_SYSFX_DISABLED 1")
|
||
|
|
||
|
cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FullRangeSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,6);")
|
||
|
cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Supports_EventDriven_Mode,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,7);")
|
||
|
cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_JackSubType,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,8);")
|
||
|
|
||
|
cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEngine_DeviceFormat,0xf19f064d,0x082c,0x4e27,0xbc,0x73,0x68,0x82,0xa1,0xbb,0x8e,0x4c,0);")
|
||
|
cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEngine_OEMFormat,0xe4870e26,0x3cc5,0x4cd2,0xba,0x46,0xca,0x0a,0x9a,0x70,0xed,0x04,3);")
|
||
|
|
||
|
typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS
|
||
|
{
|
||
|
DWORD cbDirectXAudioActivationParams;
|
||
|
GUID guidAudioSession;
|
||
|
DWORD dwAudioStreamFlags;
|
||
|
} DIRECTX_AUDIO_ACTIVATION_PARAMS, *PDIRECTX_AUDIO_ACTIVATION_PARAMS;
|
||
|
|
||
|
typedef enum _EDataFlow
|
||
|
{
|
||
|
eRender,
|
||
|
eCapture,
|
||
|
eAll,
|
||
|
EDataFlow_enum_count
|
||
|
} EDataFlow;
|
||
|
|
||
|
typedef enum _ERole
|
||
|
{
|
||
|
eConsole,
|
||
|
eMultimedia,
|
||
|
eCommunications,
|
||
|
ERole_enum_count
|
||
|
} ERole;
|
||
|
|
||
|
typedef enum _EndpointFormFactor
|
||
|
{
|
||
|
RemoteNetworkDevice,
|
||
|
Speakers,
|
||
|
LineLevel,
|
||
|
Headphones,
|
||
|
Microphone,
|
||
|
Headset,
|
||
|
Handset,
|
||
|
UnknownDigitalPassthrough,
|
||
|
SPDIF,
|
||
|
DigitalAudioDisplayDevice,
|
||
|
UnknownFormFactor,
|
||
|
EndpointFormFactor_enum_count
|
||
|
} EndpointFormFactor;
|
||
|
|
||
|
cpp_quote("#define HDMI DigitalAudioDisplayDevice")
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
local,
|
||
|
uuid(7991eec9-7e89-4d85-8390-6c703cec60c0),
|
||
|
nonextensible,
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IMMNotificationClient : IUnknown
|
||
|
{
|
||
|
[id(1)] HRESULT OnDeviceStateChanged(
|
||
|
[in] LPCWSTR pwstrDeviceId,
|
||
|
[in] DWORD dwNewState
|
||
|
);
|
||
|
[id(2)] HRESULT OnDeviceAdded(
|
||
|
[in] LPCWSTR pwstrDeviceId
|
||
|
);
|
||
|
[id(3)] HRESULT OnDeviceRemoved(
|
||
|
[in] LPCWSTR pwstrDeviceId
|
||
|
);
|
||
|
[id(4)] HRESULT OnDefaultDeviceChanged(
|
||
|
[in] EDataFlow flow,
|
||
|
[in] ERole role,
|
||
|
[in] LPCWSTR pwstrDeviceId
|
||
|
);
|
||
|
[id(5)] HRESULT OnPropertyValueChanged(
|
||
|
[in] LPCWSTR pwstrDeviceId,
|
||
|
[in] const PROPERTYKEY key
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
local,
|
||
|
uuid(d666063f-1587-4e43-81f1-b948e807363f),
|
||
|
nonextensible,
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IMMDevice : IUnknown
|
||
|
{
|
||
|
[id(1)] HRESULT Activate(
|
||
|
[in] REFIID iid,
|
||
|
[in] DWORD dwClsCtx,
|
||
|
[in,unique] PROPVARIANT *pActivationParams,
|
||
|
[out,iid_is(iid)] void **ppv
|
||
|
);
|
||
|
[id(2)] HRESULT OpenPropertyStore(
|
||
|
[in] DWORD stgmAccess,
|
||
|
[out] IPropertyStore **ppProperties
|
||
|
);
|
||
|
[id(3)] HRESULT GetId(
|
||
|
[out] LPWSTR *ppstrId
|
||
|
);
|
||
|
[id(4)] HRESULT GetState(
|
||
|
[out] DWORD *pdwState
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
local,
|
||
|
uuid(0bd7a1be-7a1a-44db-8397-cc5392387b5e),
|
||
|
nonextensible,
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IMMDeviceCollection : IUnknown
|
||
|
{
|
||
|
[id(1)] HRESULT GetCount(
|
||
|
[out] UINT *pcDevices
|
||
|
);
|
||
|
[id(2)] HRESULT Item(
|
||
|
[in] UINT nDevice,
|
||
|
[out] IMMDevice **ppdevice
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
local,
|
||
|
uuid(1be09788-6894-4089-8586-9a2a6c265ac5),
|
||
|
nonextensible,
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IMMEndPoint : IUnknown
|
||
|
{
|
||
|
[id(1)] HRESULT GetDataFlow(
|
||
|
[out] EDataFlow *pDataFlow
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
local,
|
||
|
uuid(a95664d2-9614-4f35-a746-de8db63617e6),
|
||
|
nonextensible,
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IMMDeviceEnumerator : IUnknown
|
||
|
{
|
||
|
[id(1)] HRESULT EnumAudioEndpoints(
|
||
|
[in] EDataFlow dataFlow,
|
||
|
[in] DWORD dwStateMask,
|
||
|
[out] IMMDeviceCollection **ppDevices
|
||
|
);
|
||
|
[id(2)] HRESULT GetDefaultAudioEndpoint(
|
||
|
[in] EDataFlow dataFlow,
|
||
|
[in] ERole role,
|
||
|
[out] IMMDevice **ppEndpoint
|
||
|
);
|
||
|
[id(3)] HRESULT GetDevice(
|
||
|
[in] LPCWSTR pwstrId,
|
||
|
[out] IMMDevice **ppDevice
|
||
|
);
|
||
|
[id(4)] HRESULT RegisterEndpointNotificationCallback(
|
||
|
[in] IMMNotificationClient *pClient
|
||
|
);
|
||
|
[id(5)] HRESULT UnregisterEndpointNotificationCallback(
|
||
|
[in] IMMNotificationClient *pClient
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
local,
|
||
|
uuid(3b0d0ea4-d0a9-4b0e-935b-09516746fac0),
|
||
|
nonextensible,
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface IMMDeviceActivator : IUnknown
|
||
|
{
|
||
|
[id(1)] HRESULT Activate(
|
||
|
[in] REFIID iid,
|
||
|
[in] IMMDevice *pDevice,
|
||
|
[in] PROPVARIANT *pActivationParams,
|
||
|
[out,iid_is(iid)] void **ppv
|
||
|
);
|
||
|
}
|
||
|
|
||
|
typedef struct _AudioExtensionParams
|
||
|
{
|
||
|
LPARAM AddPageParam;
|
||
|
IMMDevice *pEndPoint;
|
||
|
IMMDevice *pPnpInterface;
|
||
|
IMMDevice *pPnpDevnode;
|
||
|
} AudioExtensionParams;
|
||
|
|
||
|
[
|
||
|
uuid(2fdaafa3-7523-4f66-9957-9d5e7fe698f6),
|
||
|
version(1.0)
|
||
|
]
|
||
|
library MMDeviceAPILib
|
||
|
{
|
||
|
[ uuid(bcde0395-e52f-467c-8e3d-c4579291692e) ] coclass MMDeviceEnumerator
|
||
|
{
|
||
|
[default] interface IMMDeviceEnumerator;
|
||
|
}
|
||
|
}
|