2 * Core Audio device topology definitions
4 * Copyright 2009 Maarten Lankhorst
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 cpp_quote("#ifndef __devicetopology_h__")
23 cpp_quote("#define __devicetopology_h__")
26 interface IControlInterface;
27 interface IDeviceTopology;
28 interface IControlChangeNotify;
34 cpp_quote("#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)")
35 cpp_quote("#define DEVTOPO_HARDWARE_INITIATED_EVENTCONTEXT 'draH'")
36 cpp_quote("DEFINE_GUID(EVENTCONTEXT_VOLUMESLIDER, 0xe2c2e9de, 0x09b1, 0x4b04,0x84,0xe5, 0x07, 0x93, 0x12, 0x25, 0xee, 0x04);")
38 cpp_quote("#define _IKsControl_")
39 cpp_quote("#include <ks.h>")
40 cpp_quote("#include <ksmedia.h>")
41 cpp_quote("#ifndef _KS_")
53 typedef KSDATAFORMAT *PKSDATAFORMAT;
68 typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY;
69 typedef KSIDENTIFIER KSMETHOD, *PKSMETHOD;
70 typedef KSIDENTIFIER KSEVENT, *PKSEVENT;
77 eConnTypeAtapiInternal,
80 eConnTypeOtherDigital,
82 eConnTypeMultichannelAnalogDIN,
83 eConnTypeXlrProfessional,
98 eGeoLocInsideMobileLid,
101 eGeoLocOutsideMobileLid,
109 eGenLocPrimaryBox = 0,
118 ePortConnIntegratedDevice,
119 ePortConnBothIntegratedAndJack,
121 } EPxcPortConnection;
125 DWORD ChannelMapping;
127 EPcxConnectionType ConnectionType;
128 EPcxGeoLocation GeoLocation;
129 EPcxGenLocation GenLocation;
130 EPxcPortConnection PortConnection;
132 } KSJACK_DESCRIPTION;
134 typedef KSJACK_DESCRIPTION *PKSJACK_DESCRIPTION;
142 typedef struct _LUID *PLUID;
146 KSJACK_SINK_CONNECTIONTYPE_HDMI = 0,
147 KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT
148 } KSJACK_SINK_CONNECTIONTYPE;
150 typedef struct _tagKSJACK_SINK_INFORMATION
152 KSJACK_SINK_CONNECTIONTYPE ConnType;
158 UCHAR SinkDescriptionLength;
159 WCHAR SinkDescription[32];
161 } KSJACK_SINK_INFORMATION;
163 typedef struct _tagKSJACK_DESCRIPTION2
165 DWORD DeviceStateInfo;
166 DWORD JackCapabilities;
167 } KSJACK_DESCRIPTION2;
169 typedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2;
187 Unknown_Connector = 0,
196 pointer_default(unique),
198 uuid(28f54685-06fd-11d2-b27a-00a0c9223196),
202 interface IKsControl : IUnknown
205 [in] PKSPROPERTY Property,
206 [in] ULONG PropertyLength,
207 [in,out] void *PropertyData,
208 [in] ULONG DataLength,
209 [out] ULONG *BytesReturned
212 [in] PKSMETHOD Method,
213 [in] ULONG MethodLength,
214 [in,out] void *MethodData,
215 [in] ULONG DataLength,
216 [out] ULONG *BytesReturned
220 [in] ULONG EventLength,
221 [in,out] void *EventData,
222 [in] ULONG DataLength,
223 [out] ULONG *BytesReturned
228 pointer_default(unique),
230 uuid(c2f8e001-f205-4bc9-99bc-c13b1e048ccb),
234 interface IPerChannelDbLevel : IUnknown
236 HRESULT GetChannelCount(
237 [out] UINT *pcChannels
239 HRESULT GetLevelRange(
241 [out] float *pfMinLevelDB,
242 [out] float *pfMaxLevelDB,
243 [out] float *pfStepping
247 [out] float *pfLevelDB
252 [in,unique] LPCGUID pguidEventContext
254 HRESULT SetLevelUniform(
256 [in,unique] LPCGUID pguidEventContext
258 HRESULT SetLevelAllChannels(
259 [size_is(cChannels),in] float *aLevelsDB,
260 [in] ULONG cChannels,
261 [in] LPCGUID pguidEventContext
266 pointer_default(unique),
268 uuid(7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc),
272 interface IAudioVolumeLevel : IPerChannelDbLevel
278 pointer_default(unique),
280 uuid(bb11c46f-ec28-493c-b88a-5db88062ce98),
284 interface IAudioChannelConfig : IUnknown
286 HRESULT SetChannelConfig(
288 [in] LPCGUID pguidEventContext
290 HRESULT GetChannelConfig(
292 [retval,out] DWORD *pdwConfig
297 pointer_default(unique),
299 uuid(7d8b1437-dd53-4350-9c1b-1ee2890bf938),
303 interface IAudioLoudness : IUnknown
306 [out] BOOL *pbEnabled
310 [in] LPCGUID pguidEventContext
315 pointer_default(unique),
317 uuid(4f03dc02-5e6e-4653-8f72-a030c123d598),
321 interface IAudioInputSelector : IUnknown
323 HRESULT GetSelection(
324 [out] UINT *pnIdSelected
326 HRESULT SetSelection(
328 [unique,in] LPCGUID pguidEventContext
333 pointer_default(unique),
335 uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab),
339 interface IAudioOutputSelector : IUnknown
341 HRESULT GetSelection(
342 [out] UINT *pnIdSelected
344 HRESULT SetSelection(
346 [unique,in] LPCGUID pguidEventContext
351 pointer_default(unique),
353 uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab),
357 interface IAudioMute : IUnknown
361 [unique,in] LPCGUID pguidEventContext
369 pointer_default(unique),
371 uuid(a2b1a1d9-4db3-425d-a2b2-bd335cb3e2e5),
375 interface IAudioBass : IPerChannelDbLevel
381 pointer_default(unique),
383 uuid(5e54b6d7-b44b-40d9-9a9e-e691d9ce6edf),
387 interface IAudioMidRange : IPerChannelDbLevel
393 pointer_default(unique),
395 uuid(0a717812-694e-4907-b74b-bafa5cfdca7b),
399 interface IAudioTreble : IPerChannelDbLevel
405 pointer_default(unique),
407 uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab),
411 interface IAudioAutoGainControl : IUnknown
415 [unique,in] LPCGUID pguidEventContext
418 [out] BOOL *pbEnabled
423 pointer_default(unique),
425 uuid(dd79923c-0599-45e0-b8b6-c8df7db6e796),
429 interface IAudioPeakMeter : IUnknown
431 HRESULT GetChannelCount(
432 [out] UINT *pcChannels
441 pointer_default(unique),
443 uuid(3b22bcbf-2586-4af0-8583-205d391b807c),
447 interface IDeviceSpecificProperty : IUnknown
450 [out] VARTYPE *pVType
453 [out] VARTYPE *pvType,
454 [out,in] DWORD *pcbValue
459 [in] LPCGUID pguidEventContext
464 [out] LONG *plStepping
469 pointer_default(unique),
471 uuid(3cb4a69d-bb6f-4d2b-95b7-452d2c155db5),
475 interface IKsFormatSupport : IUnknown
477 HRESULT IsFormatSupported(
478 [size_is(cbFormat),in] PKSDATAFORMAT pKsFormat,
480 [out] BOOL *pbSupported
482 HRESULT GetDevicePreferredFormat(
483 [out] PKSDATAFORMAT *ppKsFormat
488 pointer_default(unique),
490 uuid(4509f757-2d46-4637-8e62-ce7db944f57b),
494 interface IKsJackDescription : IUnknown
496 HRESULT GetJackCount(
499 HRESULT GetJackDescription(
501 [out] KSJACK_DESCRIPTION *pDescription
506 pointer_default(unique),
508 uuid(478f3a9b-e0c9-4827-9228-6f5505ffe76a),
512 interface IKsJackDescription2 : IUnknown
514 HRESULT GetJackCount(
517 HRESULT GetJackDescription2(
519 [out] KSJACK_DESCRIPTION2 *pDescription2
524 pointer_default(unique),
526 uuid(d9bd72ed-290f-4581-9ff3-61027a8fe532),
530 interface IKsJackSinkInformation : IUnknown
532 HRESULT GetJackSinkInformation(
533 [out] KSJACK_SINK_INFORMATION *pJackSinkInformation
538 pointer_default(unique),
540 uuid(6daa848c-5eb0-45cc-aea5-998a2cda1ffb),
544 interface IPartsList : IUnknown
556 pointer_default(unique),
558 uuid(ae2de0e4-5bca-4f2d-aa46-5d13f8fdb3a9),
562 interface IPart : IUnknown
565 [out] LPWSTR *ppwstrName
571 [out] LPWSTR *ppwstrGlobalId
574 [out] PartType *pPartType
579 HRESULT GetControlInterfaceCount(
582 HRESULT GetControlInterface(
584 [out] IControlInterface **ppInterfaceDesc
586 HRESULT EnumPartsIncoming(
587 [out] IPartsList **ppParts
589 HRESULT EnumPartsOutgoing(
590 [out] IPartsList **ppParts
592 HRESULT GetTopologyObjects(
593 [out] IDeviceTopology **ppTopology
596 [in] DWORD dwClsContext,
598 [iid_is(refiid),out] void **ppvObject
600 HRESULT RegisterControlChangeCallback(
602 [in] IControlChangeNotify *pNotify
604 HRESULT UnregisterControlChangeCallback(
605 [in] IControlChangeNotify *pNotify
610 pointer_default(unique),
612 uuid(9c2c4058-23f5-41de-877a-df3af236a09e),
616 interface IConnector : IUnknown
619 [out] ConnectorType *pType
622 [out] DataFlow *pFlow
625 [in] IConnector *pConnectTo
627 HRESULT Disconnect(void);
629 [out] BOOL *pbConnected
631 HRESULT GetConnectedTo(
632 [out] IConnector **ppConTo
634 HRESULT GetConnectorIdConnectedTo(
635 [out] LPWSTR *ppwstrConnectorId
637 HRESULT GetDeviceIdConnectedTo(
638 [out] LPWSTR *ppwstrDeviceId
643 pointer_default(unique),
645 uuid(82149a85-dba6-4487-86bb-ea8f7fefcc71),
649 interface ISubUnit: IUnknown
651 /* Empty IUnknown interface.. */
655 pointer_default(unique),
657 uuid(45d37c3f-5140-444a-ae24-400789f3cbf3),
661 interface IControlInterface : IUnknown
664 [out] LPWSTR *ppwstrName
672 pointer_default(unique),
674 uuid(a09513ed-c709-4d21-bd7b-5f34c47f3947),
678 interface IControlChangeNotify : IUnknown
681 [in] DWORD dwSenderProcessId,
682 [in] LPCGUID ppguidEventContext
687 pointer_default(unique),
689 uuid(2a07407e-6497-4a18-9787-32f79bd0d98f),
693 interface IDeviceTopology : IUnknown
695 HRESULT GetConnectorCount(
698 HRESULT GetConnector(
700 [out] IConnector **ppConnector
702 HRESULT GetSubunitCount(
707 [out] ISubUnit **ppConnector
714 [out] LPWSTR *ppwstrDeviceId
716 HRESULT GetSignalPath(
717 [in] IPart *pIPartFrom,
718 [in] IPart *pIPartTo,
719 [in] BOOL bRejectMixedPaths,
720 [out] IPartsList **ppParts
727 library DevTopologyLib
730 uuid(1df639d0-5ec1-47aa-9379-828dc1aa8c59),
732 coclass DeviceTopology
734 interface IDeviceTopology;
738 cpp_quote("#endif /*__devicetopology_h__*/")