blob: 7e89d541ad6667f7ffbb2d7a43b7b3e9a9b5d0d5 [file] [log] [blame]
/*
* 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;
}
}