' ########################################################################################
' Microsoft Windows
' File: DeviceTopology.inc
' Contents: Master include file for DAO 3.6
' Copyright (c) 2011 Jos? Roca
' Portions Copyright (c) Microsoft Corporation.
' All Rights Reserved.
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
' EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
' MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
' ########################################################################################
#IF NOT %DEF(PBX_devicetopology_PBI)
#DEFINE PBX_devicetopology_PBI
%EQUATE `DEVICETOPOLOGY_INC = 1
'/* header files for imported files */
#INCLUDE ONCE "Legacy/COM/OAIdl.inc"
#INCLUDE ONCE "Legacy/COM/OCIdl.inc"
#INCLUDE ONCE "Legacy/System/PropIdl.inc"
$CLSID_DeviceTopology = GUID$("{1DF639D0-5EC1-47AA-9379-828DC1AA8C59}")
'#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
%EQUATE `E_NOTFOUND = -2147023728&
'//
'// Flag for clients of IControlChangeNotify::OnNotify to allow those clients to identify hardware initiated notifications
'//
$DEVTOPO_HARDWARE_INITIATED_EVENTCONTEXT = "draH"
'/* E2C2E9DE-09B1-4B04-84E5-07931225EE04 */
'DEFINE_GUID(EVENTCONTEXT_VOLUMESLIDER, 0xE2C2E9DE,0x09B1,0x4B04,0x84, 0xE5, 0x07, 0x93, 0x12, 0x25, 0xEE, 0x04);
$EVENTCONTEXT_VOLUMESLIDER = GUID$("{E2C2E9DE-09B1-4B04-84E5-07931225EE04}")
'#define _IKsControl_
'#include "ks.h"
'#include "ksmedia.h"
'#ifndef _KS_
' // Size = 64 bytes
TYPE KSDATAFORMAT DWORD
 FormatSize AS DWORD ' ULONG
 Flags AS DWORD ' ULONG
 SampleSize AS DWORD ' ULONG
 Reserved AS DWORD ' ULONG
 MajorFormat AS GUID ' GUID
 SubFormat AS GUID ' GUID
 Specifier AS GUID ' GUID
END TYPE
'typedef /* [public][public][public][public][public][public][public][public][public][public] */ struct __MIDL___MIDL_itf_devicetopology_0000_0000_0002
' {
' union
' {
' struct
' {
' GUID Set;
' ULONG Id;
' ULONG Flags;
' } ;
' LONGLONG Alignment;
' } ;
' } KSIDENTIFIER;
' // Size = 24 bytes
TYPE KSIDENTIFIER_STRUCT DWORD
 Set AS GUID ' GUID
 Id AS DWORD ' ULONG
 Flags AS DWORD ' ULONG
END TYPE
' // Size = 24 bytes
UNION KSIDENTIFIER DWORD
 KSIDENTIFIER_STRUCT
 Alignment AS QUAD
END UNION
'typedef struct __MIDL___MIDL_itf_devicetopology_0000_0000_0002 *PKSIDENTIFIER;
'typedef KSIDENTIFIER KSPROPERTY;
'typedef KSIDENTIFIER *PKSPROPERTY;
'typedef KSIDENTIFIER KSMETHOD;
'typedef KSIDENTIFIER *PKSMETHOD;
'typedef KSIDENTIFIER KSEVENT;
'typedef KSIDENTIFIER *PKSEVENT;
' *** Removed in the Windows 7 SDK ***
' EChannelMapping enum
'%ePcxChanMap_FL_FR = 0
'%ePcxChanMap_FC_LFE = %ePcxChanMap_FL_FR + 1
'%ePcxChanMap_BL_BR = %ePcxChanMap_FC_LFE + 1
'%ePcxChanMap_FLC_FRC = %ePcxChanMap_BL_BR + 1
'%ePcxChanMap_SL_SR = %ePcxChanMap_FLC_FRC + 1
'%ePcxChanMap_Unknown = %ePcxChanMap_SL_SR + 1
' EPcxConnectionType enum
%EQUATE `eConnTypeUnknown = 0
%EQUATE `eConnType3Point5mm = %eConnTypeUnknown + 1
%EQUATE `eConnTypeQuarter = %eConnType3Point5mm + 1
%EQUATE `eConnTypeAtapiInternal = %eConnTypeQuarter + 1
%EQUATE `eConnTypeRCA = %eConnTypeAtapiInternal + 1
%EQUATE `eConnTypeOptical = %eConnTypeRCA + 1
%EQUATE `eConnTypeOtherDigital = %eConnTypeOptical + 1
%EQUATE `eConnTypeOtherAnalog = %eConnTypeOtherDigital + 1
%EQUATE `eConnTypeMultichannelAnalogDIN = %eConnTypeOtherAnalog + 1
%EQUATE `eConnTypeXlrProfessional = %eConnTypeMultichannelAnalogDIN + 1
%EQUATE `eConnTypeRJ11Modem = %eConnTypeXlrProfessional + 1
%EQUATE `eConnTypeCombination = %eConnTypeRJ11Modem + 1
' EPcxGeoLocation enum
%EQUATE `eGeoLocRear = &H1
%EQUATE `eGeoLocFront = %eGeoLocRear + 1
%EQUATE `eGeoLocLeft = %eGeoLocFront + 1
%EQUATE `eGeoLocRight = %eGeoLocLeft + 1
%EQUATE `eGeoLocTop = %eGeoLocRight + 1
%EQUATE `eGeoLocBottom = %eGeoLocTop + 1
%EQUATE `eGeoLocRearPanel = %eGeoLocBottom + 1
%EQUATE `eGeoLocRiser = %eGeoLocRearPanel + 1
%EQUATE `eGeoLocInsideMobileLid = %eGeoLocRiser + 1
%EQUATE `eGeoLocDrivebay = %eGeoLocInsideMobileLid + 1
%EQUATE `eGeoLocHDMI = %eGeoLocDrivebay + 1
%EQUATE `eGeoLocOutsideMobileLid = %eGeoLocHDMI + 1
%EQUATE `eGeoLocATAPI = %eGeoLocOutsideMobileLid + 1
%EQUATE `eGeoLocReserved5 = %eGeoLocATAPI + 1
%EQUATE `eGeoLocReserved6 = %eGeoLocReserved5 + 1
' EPcxGenLocation enum
%EQUATE `eGenLocPrimaryBox = 0
%EQUATE `eGenLocInternal = %eGenLocPrimaryBox + 1
%EQUATE `eGenLocSeparate = %eGenLocInternal + 1
%EQUATE `eGenLocOther = %eGenLocSeparate + 1
' EPxcPortConnection enum
%EQUATE `ePortConnJack = 0
%EQUATE `ePortConnIntegratedDevice = %ePortConnJack + 1
%EQUATE `ePortConnBothIntegratedAndJack = %ePortConnIntegratedDevice + 1
%EQUATE `ePortConnUnknown = %ePortConnBothIntegratedAndJack + 1
' // Size = 28 bytes
TYPE KSJACK_DESCRIPTION DWORD
 ChannelMapping AS DWORD
 Color AS DWORD ' COLORREF
 ConnectionType AS LONG ' EPcxConnectionType
 GeoLocation AS LONG ' EPcxGeoLocation
 GenLocation AS LONG ' EPcxGenLocation
 PortConnection AS LONG ' EPxcPortConnection
 IsConnected AS LONG
END TYPE
'typedef struct __MIDL___MIDL_itf_devicetopology_0000_0000_0010 *PKSJACK_DESCRIPTION;
#IF NOT %DEF(%LUID_DEFINED)
%EQUATE `LUID_DEFINED = 1
' // Size = 8 bytes
TYPE LUID_STRUCT DWORD
 LowPart AS DWORD
 HighPart AS LONG
END TYPE
UNION LUID
 LUID_STRUCT
 QuadPart AS QUAD
END UNION
#ENDIF
'typedef struct _LUID *PLUID;
' enum KSJACK_SINK_CONNECTIONTYPE
%EQUATE `KSJACK_SINK_CONNECTIONTYPE_HDMI = 0
%EQUATE `KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT = %KSJACK_SINK_CONNECTIONTYPE_HDMI + 1
' // Size = 96 bytes
TYPE KSJACK_SINK_INFORMATION DWORD FILL
 ConnType AS LONG ' KSJACK_SINK_CONNECTIONTYPE
 ManufacturerId AS WORD ' WORD
 ProductId AS WORD ' WORD
 AudioLatency AS WORD ' WORD
 HDCPCapable AS LONG
 AICapable AS LONG
 SinkDescriptionLength AS BYTE ' UCHAR
 SinkDescription AS WSTRINGZ * 32 ' WCHAR
 PortId AS QUAD ' LUID
END TYPE
' // Size = 8 bytes
TYPE KSJACK_DESCRIPTION2 DWORD
 DeviceStateInfo AS DWORD
 JackCapabilities AS DWORD
END TYPE
'typedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2;
'#endif
'typedef /* [public][public] */
'enum __MIDL___MIDL_itf_devicetopology_0000_0000_0011
' { In = 0,
' Out = ( In + 1 )
' } DataFlow;
' DataFlow enum
%EQUATE `DataFlow_In = 0
%EQUATE `DataFlow_Out = %DataFlow_In + 1
' PartType enum
%EQUATE `PartType_Connector = 0
%EQUATE `PartType_Subunit = %PartType_Connector + 1
' *** Removed in the Windows 7 SDK ***
'%PARTTYPE_FLAG_CONNECTOR = &H00010000
'%PARTTYPE_FLAG_SUBUNIT = &H00020000
'%PARTTYPE_MASK = &H00030000
'%PARTID_MASK = &H0000ffff
' ConnectorType enum
%EQUATE `ConnectorType_Unknown_Connector = 0
%EQUATE `ConnectorType_Physical_Internal = %ConnectorType_Unknown_Connector + 1
%EQUATE `ConnectorType_Physical_External = %ConnectorType_Physical_Internal + 1
%EQUATE `ConnectorType_Software_IO = %ConnectorType_Physical_External + 1
%EQUATE `ConnectorType_Software_Fixed = %ConnectorType_Software_IO + 1
%EQUATE `ConnectorType_Network = %ConnectorType_Software_Fixed + 1
' ########################################################################################
' Interface name = IKsControl
' IID = 28F54685-06FD-11D2-B27A-00A0C9223196
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IKsControl_INTERFACE_DEFINED)
 %IKsControl_INTERFACE_DEFINED = 1
$IID_IKsControl = GUID$("{28F54685-06FD-11D2-B27A-00A0C9223196}")
INTERFACE IKsControl $IID_IKsControl
 INHERIT IUnknown
 ' =====================================================================================
 METHOD KsProperty ( ' VTable offset = 12
 BYREF Property AS KSIDENTIFIER
 , BYVAL PropertyLength AS DWORD
 , BYVAL PropertyData AS DWORD
 , BYVAL DataLength AS DWORD
 , BYREF BytesReturned AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD KsMethod ( ' VTable offset = 16
 BYREF Method AS KSIDENTIFIER
 , BYVAL MethodLength AS DWORD
 , BYVAL MethodData AS DWORD
 , BYVAL DataLength AS DWORD
 , BYREF BytesReturned AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD KsEvent ( ' VTable offset = 20
 BYREF Event AS KSIDENTIFIER
 , BYVAL EventLength AS DWORD
 , BYVAL EventData AS DWORD
 , BYVAL DataLength AS DWORD
 , BYREF BytesReturned AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IKsControl_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IPerChannelDbLevel
' IID = C2F8E001-F205-4BC9-99BC-C13B1E048CCB
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IPerChannelDbLevel_INTERFACE_DEFINED)
 %IPerChannelDbLevel_INTERFACE_DEFINED = 1
$IID_IPerChannelDbLevel = GUID$("{C2F8E001-F205-4BC9-99BC-C13B1E048CCB}")
INTERFACE IPerChannelDbLevel $IID_IPerChannelDbLevel
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetChannelCount ( ' VTable offset = 12
 BYREF pcChannels AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetLevelRange ( ' VTable offset = 16
 BYVAL nChannel AS DWORD
 , BYREF pfMinLevelDB AS SINGLE
 , BYREF pfMaxLevelDB AS SINGLE
 , BYREF pfStepping AS SINGLE
 ) AS LONG
 ' =====================================================================================
 METHOD GetLevel ( ' VTable offset = 20
 BYVAL nChannel AS DWORD
 , BYREF pfLevelDB AS SINGLE
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevel ( ' VTable offset = 24
 BYVAL nChannel AS DWORD
 , BYVAL fLevelDB AS SINGLE
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevelUniform ( ' VTable offset = 28
 BYVAL fLevelDB AS SINGLE
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevelAllChannels ( ' VTable offset = 32
 BYREF aLevelsDB AS SINGLE
 , BYVAL cChannels AS DWORD
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IPerChannelDbLevel_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAudioVolumeLevel
' IID = 7FB7B48F-531D-44A2-BCB3-5AD5A134B3DC
' Inherited interface = IPerChannelDbLevel
' ########################################################################################
#IF NOT %DEF(%IAudioVolumeLevel_INTERFACE_DEFINED)
 %IAudioVolumeLevel_INTERFACE_DEFINED = 1
$IID_IAudioVolumeLevel = GUID$("{7FB7B48F-531D-44A2-BCB3-5AD5A134B3DC}")
INTERFACE IAudioVolumeLevel $IID_IAudioVolumeLevel
 INHERIT IUnknown
 ' =====================================================================================
 ' IPerChannelDbLevel methods
 ' =====================================================================================
 METHOD GetChannelCount ( ' VTable offset = 12
 BYREF pcChannels AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetLevelRange ( ' VTable offset = 16
 BYVAL nChannel AS DWORD
 , BYREF pfMinLevelDB AS SINGLE
 , BYREF pfMaxLevelDB AS SINGLE
 , BYREF pfStepping AS SINGLE
 ) AS LONG
 ' =====================================================================================
 METHOD GetLevel ( ' VTable offset = 20
 BYVAL nChannel AS DWORD
 , BYREF pfLevelDB AS SINGLE
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevel ( ' VTable offset = 24
 BYVAL nChannel AS DWORD
 , BYVAL fLevelDB AS SINGLE
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevelUniform ( ' VTable offset = 28
 BYVAL fLevelDB AS SINGLE
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevelAllChannels ( ' VTable offset = 32
 BYREF aLevelsDB AS SINGLE
 , BYVAL cChannels AS DWORD
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAudioVolumeLevel_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAudioChannelConfig
' IID = BB11C46F-EC28-493C-B88A-5DB88062CE98
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IAudioChannelConfig_INTERFACE_DEFINED)
 %IAudioChannelConfig_INTERFACE_DEFINED = 1
$IID_IAudioChannelConfig = GUID$("{BB11C46F-EC28-493C-B88A-5DB88062CE98}")
INTERFACE IAudioChannelConfig $IID_IAudioChannelConfig
 INHERIT IUnknown
 ' =====================================================================================
 METHOD SetChannelConfig ( ' VTable offset = 12
 BYVAL dwConfig AS DWORD
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD GetChannelConfig ( ' VTable offset = 16
 BYREF pdwConfig AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAudioChannelConfig_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAudioLoudness
' IID = 7D8B1437-DD53-4350-9C1B-1EE2890BD938
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IAudioLoudness_INTERFACE_DEFINED)
 %IAudioLoudness_INTERFACE_DEFINED = 1
$IID_IAudioLoudness = GUID$("{7D8B1437-DD53-4350-9C1B-1EE2890BD938}")
INTERFACE IAudioLoudness $IID_IAudioLoudness
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetEnabled ( ' VTable offset = 12
 BYREF pbEnabled AS LONG
 ) AS LONG
 ' =====================================================================================
 METHOD SetEnabled ( ' VTable offset = 16
 BYVAL bEnable AS LONG
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAudioLoudness_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAudioInputSelector
' IID = 4F03DC02-5E6E-4653-8F72-A030C123D598
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IAudioInputSelector_INTERFACE_DEFINED)
 %IAudioInputSelector_INTERFACE_DEFINED = 1
$IID_IAudioInputSelector = GUID$("{4F03DC02-5E6E-4653-8F72-A030C123D598}")
INTERFACE IAudioInputSelector $IID_IAudioInputSelector
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetSelection ( ' VTable offset = 12
 BYREF pnIdSelected AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetSelection ( ' VTable offset = 16
 BYVAL nIdSelect AS DWORD
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAudioInputSelector_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAudioOutputSelector
' IID = BB515F69-94A7-429E-8B9C-271B3F11A3AB
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IAudioOutputSelector_INTERFACE_DEFINED)
 %IAudioOutputSelector_INTERFACE_DEFINED = 1
$IID_IAudioOutputSelector = GUID$("{BB515F69-94A7-429E-8B9C-271B3F11A3AB}")
INTERFACE IAudioOutputSelector $IID_IAudioOutputSelector
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetSelection ( ' VTable offset = 12
 BYREF pnIdSelected AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetSelection ( ' VTable offset = 16
 BYVAL nIdSelect AS DWORD
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAudioOutputSelector_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAudioMute
' IID = DF45AEEA-B74A-4B6B-AFAD-2366B6AA012E
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IAudioMute_INTERFACE_DEFINED)
 %IAudioMute_INTERFACE_DEFINED = 1
$IID_IAudioMute = GUID$("{DF45AEEA-B74A-4B6B-AFAD-2366B6AA012E}")
INTERFACE IAudioMute $IID_IAudioMute
 INHERIT IUnknown
 ' =====================================================================================
 METHOD SetMute ( ' VTable offset = 12
 BYVAL bMuted AS LONG
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD GetMute ( ' VTable offset = 16
 BYREF pbMuted AS LONG
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAudioMute_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAudioBass
' IID = A2B1A1D9-4DB3-425D-A2B2-BD335CB3E2E5
' Inherited interface = IPerChannelDbLevel
' ########################################################################################
#IF NOT %DEF(%IAudioBass_INTERFACE_DEFINED)
 %IAudioBass_INTERFACE_DEFINED = 1
$IID_IAudioBass = GUID$("{A2B1A1D9-4DB3-425D-A2B2-BD335CB3E2E5}")
INTERFACE IAudioBass $IID_IAudioBass
 INHERIT IUnknown
 ' =====================================================================================
 ' IPerChannelDbLevel methods
 ' =====================================================================================
 METHOD GetChannelCount ( ' VTable offset = 12
 BYREF pcChannels AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetLevelRange ( ' VTable offset = 16
 BYVAL nChannel AS DWORD
 , BYREF pfMinLevelDB AS SINGLE
 , BYREF pfMaxLevelDB AS SINGLE
 , BYREF pfStepping AS SINGLE
 ) AS LONG
 ' =====================================================================================
 METHOD GetLevel ( ' VTable offset = 20
 BYVAL nChannel AS DWORD
 , BYREF pfLevelDB AS SINGLE
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevel ( ' VTable offset = 24
 BYVAL nChannel AS DWORD
 , BYVAL fLevelDB AS SINGLE
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevelUniform ( ' VTable offset = 28
 BYVAL fLevelDB AS SINGLE
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevelAllChannels ( ' VTable offset = 32
 BYREF aLevelsDB AS SINGLE
 , BYVAL cChannels AS DWORD
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAudioBass_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAudioMidrange
' IID = 5E54B6D7-B44B-40D9-9A9E-E691D9CE6EDF
' Inherited interface = IPerChannelDbLevel
' ########################################################################################
#IF NOT %DEF(%IAudioMidrange_INTERFACE_DEFINED)
 %IAudioMidrange_INTERFACE_DEFINED = 1
$IID_IAudioMidrange = GUID$("{5E54B6D7-B44B-40D9-9A9E-E691D9CE6EDF}")
INTERFACE IAudioMidrange $IID_IAudioMidrange
 INHERIT IUnknown
 ' =====================================================================================
 ' IPerChannelDbLevel methods
 ' =====================================================================================
 METHOD GetChannelCount ( ' VTable offset = 12
 BYREF pcChannels AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetLevelRange ( ' VTable offset = 16
 BYVAL nChannel AS DWORD
 , BYREF pfMinLevelDB AS SINGLE
 , BYREF pfMaxLevelDB AS SINGLE
 , BYREF pfStepping AS SINGLE
 ) AS LONG
 ' =====================================================================================
 METHOD GetLevel ( ' VTable offset = 20
 BYVAL nChannel AS DWORD
 , BYREF pfLevelDB AS SINGLE
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevel ( ' VTable offset = 24
 BYVAL nChannel AS DWORD
 , BYVAL fLevelDB AS SINGLE
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevelUniform ( ' VTable offset = 28
 BYVAL fLevelDB AS SINGLE
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevelAllChannels ( ' VTable offset = 32
 BYREF aLevelsDB AS SINGLE
 , BYVAL cChannels AS DWORD
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAudioMidrange_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAudioTreble
' IID = 0A717812-694E-4907-B74B-BAFA5CFDCA7B
' Inherited interface = IPerChannelDbLevel
' ########################################################################################
#IF NOT %DEF(%IAudioTreble_INTERFACE_DEFINED)
 %IAudioTreble_INTERFACE_DEFINED = 1
$IID_IAudioTreble = GUID$("{0A717812-694E-4907-B74B-BAFA5CFDCA7B}")
INTERFACE IAudioTreble $IID_IAudioTreble
 INHERIT IUnknown
 ' =====================================================================================
 ' IPerChannelDbLevel methods
 ' =====================================================================================
 METHOD GetChannelCount ( ' VTable offset = 12
 BYREF pcChannels AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetLevelRange ( ' VTable offset = 16
 BYVAL nChannel AS DWORD
 , BYREF pfMinLevelDB AS SINGLE
 , BYREF pfMaxLevelDB AS SINGLE
 , BYREF pfStepping AS SINGLE
 ) AS LONG
 ' =====================================================================================
 METHOD GetLevel ( ' VTable offset = 20
 BYVAL nChannel AS DWORD
 , BYREF pfLevelDB AS SINGLE
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevel ( ' VTable offset = 24
 BYVAL nChannel AS DWORD
 , BYVAL fLevelDB AS SINGLE
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevelUniform ( ' VTable offset = 28
 BYVAL fLevelDB AS SINGLE
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD SetLevelAllChannels ( ' VTable offset = 32
 BYREF aLevelsDB AS SINGLE
 , BYVAL cChannels AS DWORD
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAudioTreble_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAudioAutoGainControl
' IID = 85401FD4-6DE4-4B9D-9869-2D6753A82F3C
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IAudioAutoGainControl_INTERFACE_DEFINED)
 %IAudioAutoGainControl_INTERFACE_DEFINED = 1
$IID_IAudioAutoGainControl = GUID$("{85401FD4-6DE4-4B9D-9869-2D6753A82F3C}")
INTERFACE IAudioAutoGainControl $IID_IAudioAutoGainControl
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetEnabled ( ' VTable offset = 12
 BYREF pbEnabled AS LONG
 ) AS LONG
 ' =====================================================================================
 METHOD SetEnabled ( ' VTable offset = 16
 BYVAL bEnable AS LONG
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAudioAutoGainControl_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAudioPeakMeter
' IID = DD79923C-0599-45E0-B8B6-C8DF7DB6E796
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IAudioPeakMeter_INTERFACE_DEFINED)
 %IAudioPeakMeter_INTERFACE_DEFINED = 1
$IID_IAudioPeakMeter = GUID$("{DD79923C-0599-45E0-B8B6-C8DF7DB6E796}")
INTERFACE IAudioPeakMeter $IID_IAudioPeakMeter
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetChannelCount ( ' VTable offset = 12
 BYREF pcChannels AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetLevel ( ' VTable offset = 16
 BYVAL nChannel AS DWORD
 , BYREF pfLevel AS SINGLE
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAudioPeakMeter_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IDeviceSpecificProperty
' IID = 3B22BCBF-2586-4AF0-8583-205D391B807C
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IDeviceSpecificProperty_INTERFACE_DEFINED)
 %IDeviceSpecificProperty_INTERFACE_DEFINED = 1
$IID_IDeviceSpecificProperty = GUID$("{3B22BCBF-2586-4AF0-8583-205D391B807C}")
INTERFACE IDeviceSpecificProperty $IID_IDeviceSpecificProperty
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetType ( ' VTable offset = 12
 BYREF pVType AS WORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetValue ( ' VTable offset = 16
 BYREF pvValue AS DWORD
 , BYREF pcbValue AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetValue ( ' VTable offset = 20
 BYVAL pvValue AS DWORD
 , BYVAL cbValue AS DWORD
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD Get4BRange ( ' VTable offset = 24
 BYREF plMin AS LONG
 , BYREF plMax AS LONG
 , BYREF plStepping AS LONG
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IDeviceSpecificProperty_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IKsFormatSupport
' IID = 3CB4A69D-BB6F-4D2B-95B7-452D2C155DB5
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IKsFormatSupport_INTERFACE_DEFINED)
 %IKsFormatSupport_INTERFACE_DEFINED = 1
$IID_IKsFormatSupport = GUID$("{3CB4A69D-BB6F-4D2B-95B7-452D2C155DB5}")
INTERFACE IKsFormatSupport $IID_IKsFormatSupport
 INHERIT IUnknown
 ' =====================================================================================
 METHOD IsFormatSupported ( ' VTable offset = 12
 BYREF pKsFormat AS KSDATAFORMAT
 , BYVAL cbFormat AS DWORD
 , BYREF pbSupported AS LONG
 ) AS LONG
 ' =====================================================================================
 METHOD GetDevicePreferredFormat ( ' VTable offset = 16
 BYREF ppKsFormat AS KSDATAFORMAT
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IKsFormatSupport_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IKsJackDescription
' IID = 4509F757-2D46-4637-8E62-CE7DB944F57B
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IKsJackDescription_INTERFACE_DEFINED)
 %IKsJackDescription_INTERFACE_DEFINED = 1
$IID_IKsJackDescription = GUID$("{4509F757-2D46-4637-8E62-CE7DB944F57B}")
INTERFACE IKsJackDescription $IID_IKsJackDescription
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetJackCount ( ' VTable offset = 12
 BYREF pcJacks AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetJackDescription ( ' VTable offset = 16
 BYVAL nJack AS DWORD
 , BYREF pDescription AS KSJACK_DESCRIPTION
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IKsJackDescription_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IKsJackDescription2
' IID = 478F3A9B-E0C9-4827-9228-6F5505FFE76A
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IKsJackDescription2_INTERFACE_DEFINED)
 %IKsJackDescription2_INTERFACE_DEFINED = 1
$IID_IKsJackDescription2 = GUID$("{478F3A9B-E0C9-4827-9228-6F5505FFE76A}")
INTERFACE IKsJackDescription2 $IID_IKsJackDescription2
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetJackCount ( ' VTable offset = 12
 BYREF pcJacks AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetJackDescription2 ( ' VTable offset = 16
 BYVAL nJack AS DWORD
 , BYREF pDescription AS KSJACK_DESCRIPTION2
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IKsJackDescription2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IKsJackSinkInformation
' IID = D9BD72ED-290F-4581-9FF3-61027A8FE532
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IKsJackSinkInformation_INTERFACE_DEFINED)
 %IKsJackSinkInformation_INTERFACE_DEFINED = 1
$IID_IKsJackSinkInformation = GUID$("{D9BD72ED-290F-4581-9FF3-61027A8FE532}")
INTERFACE IKsJackSinkInformation $IID_IKsJackSinkInformation
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetJackSinkInformation ( ' VTable offset = 12
 BYREF pJackSinkInformation AS KSJACK_SINK_INFORMATION
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IKsJackSinkInformation_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IPartsList
' IID = 6DAA848C-5EB0-45CC-AEA5-998A2CDA1FFB
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IPartsList_INTERFACE_DEFINED)
 %IPartsList_INTERFACE_DEFINED = 1
$IID_IPartsList = GUID$("{6DAA848C-5EB0-45CC-AEA5-998A2CDA1FFB}")
INTERFACE IPartsList $IID_IPartsList
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetCount ( ' VTable offset = 12
 BYREF pCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetPart ( ' VTable offset = 16
 BYVAL nIndex AS DWORD
 , BYREF ppPart AS IPart
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IPartsList_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IPart
' IID = AE2DE0E4-5BCA-4F2D-AA46-5D13F8FDB3A9
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IPart_INTERFACE_DEFINED)
 %IPart_INTERFACE_DEFINED = 1
$IID_IPart = GUID$("{AE2DE0E4-5BCA-4F2D-AA46-5D13F8FDB3A9}")
INTERFACE IPart $IID_IPart
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 12
 BYREF ppwstrName AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetLocalId ( ' VTable offset = 16
 BYREF pnId AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetGlobalId ( ' VTable offset = 20
 BYREF ppwstrGlobalId AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetPartType ( ' VTable offset = 24
 BYREF pPartType AS LONG
 ) AS LONG
 ' =====================================================================================
 METHOD GetSubType ( ' VTable offset = 28
 BYREF pSubType AS GUID
 ) AS LONG
 ' =====================================================================================
 METHOD GetControlInterfaceCount ( ' VTable offset = 32
 BYREF pCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetControlInterface ( ' VTable offset = 36
 BYVAL nIndex AS DWORD
 , BYREF ppInterfaceDesc AS IControlInterface
 ) AS LONG
 ' =====================================================================================
 METHOD EnumPartsIncoming ( ' VTable offset = 40
 BYREF ppParts AS IPartsList
 ) AS LONG
 ' =====================================================================================
 METHOD EnumPartsOutgoing ( ' VTable offset = 44
 BYREF ppParts AS IPartsList
 ) AS LONG
 ' =====================================================================================
 METHOD GetTopologyObject ( ' VTable offset = 48
 BYREF ppTopology AS IDeviceTopology
 ) AS LONG
 ' =====================================================================================
 METHOD Activate ( ' VTable offset = 52
 BYVAL dwClsContext AS DWORD
 , BYREF refiid AS GUID
 , BYREF ppvObject AS IUnknown
 ) AS LONG
 ' =====================================================================================
 METHOD RegisterControlChangeCallback ( ' VTable offset = 56
 BYREF riid AS GUID
 , BYVAL pNotify AS IControlChangeNotify
 ) AS LONG
 ' =====================================================================================
 METHOD UnregisterControlChangeCallback ( ' VTable offset = 60
 BYVAL pNotify AS IControlChangeNotify
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IPart_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IConnector
' IID = 9C2C4058-23F5-41DE-877A-DF3AF236A09E
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IConnector_INTERFACE_DEFINED)
 %IConnector_INTERFACE_DEFINED = 1
$IID_IConnector = GUID$("{9C2C4058-23F5-41DE-877A-DF3AF236A09E}")
INTERFACE IConnector $IID_IConnector
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetType ( ' VTable offset = 12
 BYREF pType AS LONG
 ) AS LONG
 ' =====================================================================================
 METHOD GetDataFlow ( ' VTable offset = 16
 BYREF pFlow AS LONG
 ) AS LONG
 ' =====================================================================================
 METHOD ConnectTo ( ' VTable offset = 20
 BYVAL pConnectTo AS IConnector
 ) AS LONG
 ' =====================================================================================
 METHOD Disconnect ( ' VTable offset = 24
 ) AS LONG
 ' =====================================================================================
 METHOD IsConnected ( ' VTable offset = 28
 BYREF pbConnected AS LONG
 ) AS LONG
 ' =====================================================================================
 METHOD GetConnectedTo ( ' VTable offset = 32
 BYREF ppConTo AS IConnector
 ) AS LONG
 ' =====================================================================================
 METHOD GetConnectorIdConnectedTo ( ' VTable offset = 36
 BYREF ppwstrConnectorId AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDeviceIdConnectedTo ( ' VTable offset = 40
 BYREF ppwstrDeviceId AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IConnector_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = ISubunit
' IID = 82149A85-DBA6-4487-86BB-EA8F7FEFCC71
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%ISubunit_INTERFACE_DEFINED)
 %ISubunit_INTERFACE_DEFINED = 1
$IID_ISubunit = GUID$("{82149A85-DBA6-4487-86BB-EA8F7FEFCC71}")
INTERFACE ISubunit $IID_ISubunit
 INHERIT IUnknown
END INTERFACE
#ENDIF ' /* __ISubunit_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IControlInterface
' IID = 45D37C3F-5140-444A-AE24-400789F3CBF3
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IControlInterface_INTERFACE_DEFINED)
 %IControlInterface_INTERFACE_DEFINED = 1
$IID_IControlInterface = GUID$("{45D37C3F-5140-444A-AE24-400789F3CBF3}")
INTERFACE IControlInterface $IID_IControlInterface
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 12
 BYREF ppwstrName AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetIID ( ' VTable offset = 16
 BYREF pIID AS GUID
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IControlInterface_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IControlChangeNotify
' IID = A09513ED-C709-4D21-BD7B-5F34C47F3947
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IControlChangeNotify_INTERFACE_DEFINED)
 %IControlChangeNotify_INTERFACE_DEFINED = 1
$IID_IControlChangeNotify = GUID$("{A09513ED-C709-4D21-BD7B-5F34C47F3947}")
INTERFACE IControlChangeNotify $IID_IControlChangeNotify
 INHERIT IUnknown
 ' =====================================================================================
 METHOD OnNotify ( ' VTable offset = 12
 BYVAL dwSenderProcessId AS DWORD
 , BYREF pguidEventContext AS GUID
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IControlChangeNotify_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IDeviceTopology
' IID = 2A07407E-6497-4A18-9787-32F79BD0D98F
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IDeviceTopology_INTERFACE_DEFINED)
 %IDeviceTopology_INTERFACE_DEFINED = 1
$IID_IDeviceTopology = GUID$("{2A07407E-6497-4A18-9787-32F79BD0D98F}")
INTERFACE IDeviceTopology $IID_IDeviceTopology
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetConnectorCount ( ' VTable offset = 12
 BYREF pCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetConnector ( ' VTable offset = 16
 BYVAL nIndex AS DWORD
 , BYREF ppConnector AS IConnector
 ) AS LONG
 ' =====================================================================================
 METHOD GetSubunitCount ( ' VTable offset = 20
 BYREF pCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSubunit ( ' VTable offset = 20
 BYVAL nIndex AS DWORD
 , BYREF ppSubunit AS ISubunit
 ) AS LONG
 ' =====================================================================================
 METHOD GetPartById ( ' VTable offset = 24
 BYVAL nId AS DWORD
 , BYREF ppPart AS IPart
 ) AS LONG
 ' =====================================================================================
 METHOD GetDeviceId ( ' VTable offset = 28
 BYREF ppwstrDeviceId AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSignalPath ( ' VTable offset = 32
 BYVAL pIPartFrom AS IPart
 , BYVAL pIPartTo AS IPart
 , BYVAL bRejectMixedPaths AS LONG
 , BYREF ppParts AS IPartsList
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IDeviceTopology_INTERFACE_DEFINED__ */
#ENDIF
