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