xref: /reactos/sdk/include/psdk/mmdeviceapi.idl (revision c2c66aff)
1/*
2 * Copyright (C) 2009 Maarten Lankhorst
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19import "unknwn.idl";
20import "propsys.idl";
21
22cpp_quote("#ifndef E_NOTFOUND")
23cpp_quote("#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)")
24cpp_quote("#endif")
25cpp_quote("#ifndef E_UNSUPPORTED_TYPE")
26cpp_quote("#define E_UNSUPPORTED_TYPE HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE)")
27cpp_quote("#endif")
28
29
30cpp_quote("#define DEVICE_STATE_ACTIVE 0x1")
31cpp_quote("#define DEVICE_STATE_DISABLED 0x2")
32cpp_quote("#define DEVICE_STATE_NOTPRESENT 0x4")
33cpp_quote("#define DEVICE_STATE_UNPLUGGED 0x8")
34cpp_quote("#define DEVICE_STATEMASK_ALL 0xf")
35
36/* Generic PKEY_AudioEndPoint ID for grepping: {1da5d803-d492-4edd-8c23-e0c0ffee7f0e} */
37cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FormFactor,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,0);")
38cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_ControlPanelPageProvider,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,1);")
39cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Association,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,2);")
40cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_PhysicalSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,3);")
41cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_GUID,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,4);")
42cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Disable_SysFx,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,5);")
43
44cpp_quote("#define ENDPOINT_SYSFX_ENABLED 0")
45cpp_quote("#define ENDPOINT_SYSFX_DISABLED 1")
46
47cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FullRangeSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,6);")
48cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Supports_EventDriven_Mode,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,7);")
49cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_JackSubType,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,8);")
50
51cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEngine_DeviceFormat,0xf19f064d,0x082c,0x4e27,0xbc,0x73,0x68,0x82,0xa1,0xbb,0x8e,0x4c,0);")
52cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEngine_OEMFormat,0xe4870e26,0x3cc5,0x4cd2,0xba,0x46,0xca,0x0a,0x9a,0x70,0xed,0x04,3);")
53
54typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS
55{
56    DWORD cbDirectXAudioActivationParams;
57    GUID guidAudioSession;
58    DWORD dwAudioStreamFlags;
59} DIRECTX_AUDIO_ACTIVATION_PARAMS, *PDIRECTX_AUDIO_ACTIVATION_PARAMS;
60
61typedef enum _EDataFlow
62{
63    eRender,
64    eCapture,
65    eAll,
66    EDataFlow_enum_count
67} EDataFlow;
68
69typedef enum _ERole
70{
71    eConsole,
72    eMultimedia,
73    eCommunications,
74    ERole_enum_count
75} ERole;
76
77typedef enum _EndpointFormFactor
78{
79    RemoteNetworkDevice,
80    Speakers,
81    LineLevel,
82    Headphones,
83    Microphone,
84    Headset,
85    Handset,
86    UnknownDigitalPassthrough,
87    SPDIF,
88    DigitalAudioDisplayDevice,
89    UnknownFormFactor,
90    EndpointFormFactor_enum_count
91} EndpointFormFactor;
92
93cpp_quote("#define HDMI DigitalAudioDisplayDevice")
94
95[
96    object,
97    local,
98    uuid(7991eec9-7e89-4d85-8390-6c703cec60c0),
99    nonextensible,
100    pointer_default(unique)
101]
102interface IMMNotificationClient : IUnknown
103{
104    [id(1)] HRESULT OnDeviceStateChanged(
105        [in] LPCWSTR pwstrDeviceId,
106        [in] DWORD dwNewState
107    );
108    [id(2)] HRESULT OnDeviceAdded(
109        [in] LPCWSTR pwstrDeviceId
110    );
111    [id(3)] HRESULT OnDeviceRemoved(
112        [in] LPCWSTR pwstrDeviceId
113    );
114    [id(4)] HRESULT OnDefaultDeviceChanged(
115        [in] EDataFlow flow,
116        [in] ERole role,
117        [in] LPCWSTR pwstrDeviceId
118    );
119    [id(5)] HRESULT OnPropertyValueChanged(
120        [in] LPCWSTR pwstrDeviceId,
121        [in] const PROPERTYKEY key
122    );
123}
124
125[
126    object,
127    local,
128    uuid(d666063f-1587-4e43-81f1-b948e807363f),
129    nonextensible,
130    pointer_default(unique)
131]
132interface IMMDevice : IUnknown
133{
134    [id(1)] HRESULT Activate(
135        [in] REFIID iid,
136        [in] DWORD dwClsCtx,
137        [in,unique] PROPVARIANT *pActivationParams,
138        [out,iid_is(iid)] void **ppv
139    );
140    [id(2)] HRESULT OpenPropertyStore(
141        [in] DWORD stgmAccess,
142        [out] IPropertyStore **ppProperties
143    );
144    [id(3)] HRESULT GetId(
145        [out] LPWSTR *ppstrId
146    );
147    [id(4)] HRESULT GetState(
148        [out] DWORD *pdwState
149    );
150}
151
152[
153    object,
154    local,
155    uuid(0bd7a1be-7a1a-44db-8397-cc5392387b5e),
156    nonextensible,
157    pointer_default(unique)
158]
159interface IMMDeviceCollection : IUnknown
160{
161    [id(1)] HRESULT GetCount(
162        [out] UINT *pcDevices
163    );
164    [id(2)] HRESULT Item(
165        [in] UINT nDevice,
166        [out] IMMDevice **ppdevice
167    );
168}
169
170[
171    object,
172    local,
173    uuid(1be09788-6894-4089-8586-9a2a6c265ac5),
174    nonextensible,
175    pointer_default(unique)
176]
177interface IMMEndpoint : IUnknown
178{
179    [id(1)] HRESULT GetDataFlow(
180        [out] EDataFlow *pDataFlow
181    );
182}
183
184[
185    object,
186    local,
187    uuid(a95664d2-9614-4f35-a746-de8db63617e6),
188    nonextensible,
189    pointer_default(unique)
190]
191interface IMMDeviceEnumerator : IUnknown
192{
193    [id(1)] HRESULT EnumAudioEndpoints(
194        [in] EDataFlow dataFlow,
195        [in] DWORD dwStateMask,
196        [out] IMMDeviceCollection **ppDevices
197    );
198    [id(2)] HRESULT GetDefaultAudioEndpoint(
199        [in] EDataFlow dataFlow,
200        [in] ERole role,
201        [out] IMMDevice **ppEndpoint
202    );
203    [id(3)] HRESULT GetDevice(
204        [in] LPCWSTR pwstrId,
205        [out] IMMDevice **ppDevice
206    );
207    [id(4)] HRESULT RegisterEndpointNotificationCallback(
208        [in] IMMNotificationClient *pClient
209    );
210    [id(5)] HRESULT UnregisterEndpointNotificationCallback(
211        [in] IMMNotificationClient *pClient
212    );
213}
214
215[
216    object,
217    local,
218    uuid(3b0d0ea4-d0a9-4b0e-935b-09516746fac0),
219    nonextensible,
220    pointer_default(unique)
221]
222interface IMMDeviceActivator : IUnknown
223{
224    [id(1)] HRESULT Activate(
225        [in] REFIID iid,
226        [in] IMMDevice *pDevice,
227        [in] PROPVARIANT *pActivationParams,
228        [out,iid_is(iid)] void **ppv
229    );
230}
231
232typedef struct _AudioExtensionParams
233{
234    LPARAM AddPageParam;
235    IMMDevice *pEndPoint;
236    IMMDevice *pPnpInterface;
237    IMMDevice *pPnpDevnode;
238} AudioExtensionParams;
239
240[
241    uuid(2fdaafa3-7523-4f66-9957-9d5e7fe698f6),
242    version(1.0)
243]
244library MMDeviceAPILib
245{
246    [ uuid(bcde0395-e52f-467c-8e3d-c4579291692e) ] coclass MMDeviceEnumerator
247    {
248        [default] interface IMMDeviceEnumerator;
249    }
250}
251