/* * Core Audio device topology definitions * * Copyright 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 * */ interface IPart; interface IControlInterface; interface IDeviceTopology; interface IControlChangeNotify; import "oaidl.idl"; import "ocidl.idl"; import "propidl.idl"; cpp_quote("#ifndef E_NOTFOUND") cpp_quote("#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)") cpp_quote("#endif") cpp_quote("#define DEVTOPO_HARDWARE_INITIATED_EVENTCONTEXT 0x64726148 /* 'draH' */") cpp_quote("DEFINE_GUID(EVENTCONTEXT_VOLUMESLIDER, 0xe2c2e9de, 0x09b1, 0x4b04,0x84,0xe5, 0x07, 0x93, 0x12, 0x25, 0xee, 0x04);") cpp_quote("#define _IKsControl_") cpp_quote("#include ") cpp_quote("#include ") cpp_quote("#ifndef _KS_") typedef struct { ULONG FormatSize; ULONG Flags; ULONG SampleSize; ULONG Reserved; GUID MajorFormat; GUID SubFormat; GUID Specifier; } KSDATAFORMAT; typedef KSDATAFORMAT *PKSDATAFORMAT; typedef struct { union { struct { GUID Set; ULONG Id; ULONG Flags; }; LONGLONG Alignment; }; } KSIDENTIFIER; typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY; typedef KSIDENTIFIER KSMETHOD, *PKSMETHOD; typedef KSIDENTIFIER KSEVENT, *PKSEVENT; typedef enum { eConnTypeUnknown = 0, eConnType3Point5mm, eConnTypeQuarter, eConnTypeAtapiInternal, eConnTypeRCA, eConnTypeOptical, eConnTypeOtherDigital, eConnTypeOtherAnalog, eConnTypeMultichannelAnalogDIN, eConnTypeXlrProfessional, eConnTypeRJ11Modem, eConnTypeCombination } EPcxConnectionType; typedef enum { eGeoLocRear = 1, eGeoLocFront, eGeoLocLeft, eGeoLocRight, eGeoLocTop, eGeoLocBottom, eGeoLocRearPanel, eGeoLocRiser, eGeoLocInsideMobileLid, eGeoLocDrivebay, eGeoLocHDMI, eGeoLocOutsideMobileLid, eGeoLocATAPI, eGeoLocReserved5, eGeoLocReserved6 } EPcxGeoLocation; typedef enum { eGenLocPrimaryBox = 0, eGenLocInternal, eGenLocSeparate, eGenLocOther } EPcxGenLocation; typedef enum { ePortConnJack = 0, ePortConnIntegratedDevice, ePortConnBothIntegratedAndJack, ePortConnUnknown } EPxcPortConnection; typedef struct { DWORD ChannelMapping; COLORREF Color; EPcxConnectionType ConnectionType; EPcxGeoLocation GeoLocation; EPcxGenLocation GenLocation; EPxcPortConnection PortConnection; BOOL IsConnected; } KSJACK_DESCRIPTION; typedef KSJACK_DESCRIPTION *PKSJACK_DESCRIPTION; typedef struct _LUID { DWORD LowPart; LONG HighPart; } LUID; typedef struct _LUID *PLUID; typedef enum { KSJACK_SINK_CONNECTIONTYPE_HDMI = 0, KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT } KSJACK_SINK_CONNECTIONTYPE; typedef struct _tagKSJACK_SINK_INFORMATION { KSJACK_SINK_CONNECTIONTYPE ConnType; WORD ManufacturerId; WORD ProductId; WORD AudioLatency; BOOL HDCPCapable; BOOL AICapable; UCHAR SinkDescriptionLength; WCHAR SinkDescription[32]; LUID PortId; } KSJACK_SINK_INFORMATION; typedef struct _tagKSJACK_DESCRIPTION2 { DWORD DeviceStateInfo; DWORD JackCapabilities; } KSJACK_DESCRIPTION2; typedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2; cpp_quote("#endif") typedef enum { In = 0, Out } DataFlow; typedef enum { Connector = 0, Subunit } PartType; typedef enum { Unknown_Connector = 0, Physical_Internal, Physical_External, Software_IO, Software_Fixed, Network } ConnectorType; [ pointer_default(unique), nonextensible, uuid(28f54685-06fd-11d2-b27a-00a0c9223196), local, object ] interface IKsControl : IUnknown { HRESULT KsProperty( [in] PKSPROPERTY Property, [in] ULONG PropertyLength, [in,out] void *PropertyData, [in] ULONG DataLength, [out] ULONG *BytesReturned ); HRESULT KsMethod( [in] PKSMETHOD Method, [in] ULONG MethodLength, [in,out] void *MethodData, [in] ULONG DataLength, [out] ULONG *BytesReturned ); HRESULT KsEvent( [in] PKSEVENT Event, [in] ULONG EventLength, [in,out] void *EventData, [in] ULONG DataLength, [out] ULONG *BytesReturned ); } [ pointer_default(unique), nonextensible, uuid(c2f8e001-f205-4bc9-99bc-c13b1e048ccb), local, object ] interface IPerChannelDbLevel : IUnknown { HRESULT GetChannelCount( [out] UINT *pcChannels ); HRESULT GetLevelRange( [in] UINT nChannel, [out] float *pfMinLevelDB, [out] float *pfMaxLevelDB, [out] float *pfStepping ); HRESULT GetLevel( [in] UINT nChannel, [out] float *pfLevelDB ); HRESULT SetLevel( [in] UINT nChannel, [in] float fLevelDB, [in,unique] LPCGUID pguidEventContext ); HRESULT SetLevelUniform( [in] float fLevelDB, [in,unique] LPCGUID pguidEventContext ); HRESULT SetLevelAllChannels( [size_is(cChannels),in] float *aLevelsDB, [in] ULONG cChannels, [in] LPCGUID pguidEventContext ); } [ pointer_default(unique), nonextensible, uuid(7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc), local, object ] interface IAudioVolumeLevel : IPerChannelDbLevel { /* Empty */ } [ pointer_default(unique), nonextensible, uuid(bb11c46f-ec28-493c-b88a-5db88062ce98), local, object ] interface IAudioChannelConfig : IUnknown { HRESULT SetChannelConfig( [in] DWORD dwConfig, [in] LPCGUID pguidEventContext ); HRESULT GetChannelConfig( [in] DWORD dwConfig, [retval,out] DWORD *pdwConfig ); } [ pointer_default(unique), nonextensible, uuid(7d8b1437-dd53-4350-9c1b-1ee2890bf938), local, object ] interface IAudioLoudness : IUnknown { HRESULT GetEnabled( [out] BOOL *pbEnabled ); HRESULT SetEnabled( [in] BOOL bEnabled, [in] LPCGUID pguidEventContext ); } [ pointer_default(unique), nonextensible, uuid(4f03dc02-5e6e-4653-8f72-a030c123d598), local, object ] interface IAudioInputSelector : IUnknown { HRESULT GetSelection( [out] UINT *pnIdSelected ); HRESULT SetSelection( [in] UINT nIdSelect, [unique,in] LPCGUID pguidEventContext ); } [ pointer_default(unique), nonextensible, uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab), local, object ] interface IAudioOutputSelector : IUnknown { HRESULT GetSelection( [out] UINT *pnIdSelected ); HRESULT SetSelection( [in] UINT nIdSelect, [unique,in] LPCGUID pguidEventContext ); } [ pointer_default(unique), nonextensible, uuid(df45aeea-b74a-4b6b-afad-2366b6aa012e), local, object ] interface IAudioMute : IUnknown { HRESULT SetMute( [in] BOOL bMute, [unique,in] LPCGUID pguidEventContext ); HRESULT GetMute( [out] BOOL *pbMute ); } [ pointer_default(unique), nonextensible, uuid(a2b1a1d9-4db3-425d-a2b2-bd335cb3e2e5), local, object ] interface IAudioBass : IPerChannelDbLevel { /* Empty */ } [ pointer_default(unique), nonextensible, uuid(5e54b6d7-b44b-40d9-9a9e-e691d9ce6edf), local, object ] interface IAudioMidRange : IPerChannelDbLevel { /* Empty */ } [ pointer_default(unique), nonextensible, uuid(0a717812-694e-4907-b74b-bafa5cfdca7b), local, object ] interface IAudioTreble : IPerChannelDbLevel { /* Empty */ } [ pointer_default(unique), nonextensible, uuid(85401fd4-6de4-4b9d-9869-2d6753a82f3c), local, object ] interface IAudioAutoGainControl : IUnknown { HRESULT GetEnabled( [in] BOOL bEnabled, [unique,in] LPCGUID pguidEventContext ); HRESULT GetMute( [out] BOOL *pbEnabled ); } [ pointer_default(unique), nonextensible, uuid(dd79923c-0599-45e0-b8b6-c8df7db6e796), local, object ] interface IAudioPeakMeter : IUnknown { HRESULT GetChannelCount( [out] UINT *pcChannels ); HRESULT GetLevel( [in] UINT nChannel, [out] float *pfLevel ); } [ pointer_default(unique), nonextensible, uuid(3b22bcbf-2586-4af0-8583-205d391b807c), local, object ] interface IDeviceSpecificProperty : IUnknown { HRESULT GetType( [out] VARTYPE *pVType ); HRESULT GetValue( [out] VARTYPE *pvType, [out,in] DWORD *pcbValue ); HRESULT SetValue( [in] void *pvValue, [in] DWORD cbValue, [in] LPCGUID pguidEventContext ); HRESULT Get4BRange( [out] LONG *plMin, [out] LONG *plMax, [out] LONG *plStepping ); } [ pointer_default(unique), nonextensible, uuid(3cb4a69d-bb6f-4d2b-95b7-452d2c155db5), local, object ] interface IKsFormatSupport : IUnknown { HRESULT IsFormatSupported( [size_is(cbFormat),in] PKSDATAFORMAT pKsFormat, [in] DWORD cbFormat, [out] BOOL *pbSupported ); HRESULT GetDevicePreferredFormat( [out] PKSDATAFORMAT *ppKsFormat ); } [ pointer_default(unique), nonextensible, uuid(4509f757-2d46-4637-8e62-ce7db944f57b), local, object ] interface IKsJackDescription : IUnknown { HRESULT GetJackCount( [out] UINT *pcJacks ); HRESULT GetJackDescription( [in] UINT nJack, [out] KSJACK_DESCRIPTION *pDescription ); } [ pointer_default(unique), nonextensible, uuid(478f3a9b-e0c9-4827-9228-6f5505ffe76a), local, object ] interface IKsJackDescription2 : IUnknown { HRESULT GetJackCount( [out] UINT *pcJacks ); HRESULT GetJackDescription2( [in] UINT nJack, [out] KSJACK_DESCRIPTION2 *pDescription2 ); } [ pointer_default(unique), nonextensible, uuid(d9bd72ed-290f-4581-9ff3-61027a8fe532), local, object ] interface IKsJackSinkInformation : IUnknown { HRESULT GetJackSinkInformation( [out] KSJACK_SINK_INFORMATION *pJackSinkInformation ); } [ pointer_default(unique), nonextensible, uuid(6daa848c-5eb0-45cc-aea5-998a2cda1ffb), local, object ] interface IPartsList : IUnknown { HRESULT GetCount( [out] UINT *pCount ); HRESULT GetPart( [in] UINT nIndex, [out] IPart **ppPart ); } [ pointer_default(unique), nonextensible, uuid(ae2de0e4-5bca-4f2d-aa46-5d13f8fdb3a9), local, object ] interface IPart : IUnknown { HRESULT GetName( [out] LPWSTR *ppwstrName ); HRESULT GetLocalId( [out] UINT *pnId ); HRESULT GetGlobalId( [out] LPWSTR *ppwstrGlobalId ); HRESULT GetPartType( [out] PartType *pPartType ); HRESULT GetSubType( [out] GUID *pSubType ); HRESULT GetControlInterfaceCount( [out] UINT *pCount ); HRESULT GetControlInterface( [in] UINT nIndex, [out] IControlInterface **ppInterfaceDesc ); HRESULT EnumPartsIncoming( [out] IPartsList **ppParts ); HRESULT EnumPartsOutgoing( [out] IPartsList **ppParts ); HRESULT GetTopologyObjects( [out] IDeviceTopology **ppTopology ); HRESULT Activate( [in] DWORD dwClsContext, [in] REFIID refiid, [iid_is(refiid),out] void **ppvObject ); HRESULT RegisterControlChangeCallback( [in] REFGUID riid, [in] IControlChangeNotify *pNotify ); HRESULT UnregisterControlChangeCallback( [in] IControlChangeNotify *pNotify ); }; [ pointer_default(unique), nonextensible, uuid(9c2c4058-23f5-41de-877a-df3af236a09e), local, object ] interface IConnector : IUnknown { HRESULT GetType( [out] ConnectorType *pType ); HRESULT GetDataFlow( [out] DataFlow *pFlow ); HRESULT ConnectTo( [in] IConnector *pConnectTo ); HRESULT Disconnect(void); HRESULT IsConnected( [out] BOOL *pbConnected ); HRESULT GetConnectedTo( [out] IConnector **ppConTo ); HRESULT GetConnectorIdConnectedTo( [out] LPWSTR *ppwstrConnectorId ); HRESULT GetDeviceIdConnectedTo( [out] LPWSTR *ppwstrDeviceId ); } [ pointer_default(unique), nonextensible, uuid(82149a85-dba6-4487-86bb-ea8f7fefcc71), local, object ] interface ISubUnit: IUnknown { /* Empty IUnknown interface.. */ } [ pointer_default(unique), nonextensible, uuid(45d37c3f-5140-444a-ae24-400789f3cbf3), local, object ] interface IControlInterface : IUnknown { HRESULT GetName( [out] LPWSTR *ppwstrName ); HRESULT GetIID( [out] GUID *pIID ); } [ pointer_default(unique), nonextensible, uuid(a09513ed-c709-4d21-bd7b-5f34c47f3947), local, object ] interface IControlChangeNotify : IUnknown { HRESULT OnNotify( [in] DWORD dwSenderProcessId, [in] LPCGUID ppguidEventContext ); } [ pointer_default(unique), nonextensible, uuid(2a07407e-6497-4a18-9787-32f79bd0d98f), local, object ] interface IDeviceTopology : IUnknown { HRESULT GetConnectorCount( [out] UINT *pCount ); HRESULT GetConnector( [in] UINT nIndex, [out] IConnector **ppConnector ); HRESULT GetSubunitCount( [out] UINT *pCount ); HRESULT GetSubunit( [in] UINT nIndex, [out] ISubUnit **ppConnector ); HRESULT GetPartById( [in] UINT nId, [out] IPart **ppPart ); HRESULT GetDeviceId( [out] LPWSTR *ppwstrDeviceId ); HRESULT GetSignalPath( [in] IPart *pIPartFrom, [in] IPart *pIPartTo, [in] BOOL bRejectMixedPaths, [out] IPartsList **ppParts ); } [ uuid(51b9a01d-8181-4363-b59c-e678f476dd0e), version(1.0) ] library DevTopologyLib { [ uuid(1df639d0-5ec1-47aa-9379-828dc1aa8c59), ] coclass DeviceTopology { interface IDeviceTopology; } }