| /* |
| * 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 <ks.h>") |
| cpp_quote("#include <ksmedia.h>") |
| 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; |
| } |
| } |