diff options
| author | Daniel Rugerio <[email protected]> | 2019-12-04 09:56:11 -0800 |
|---|---|---|
| committer | Adonais Romero González <[email protected]> | 2019-12-04 09:56:11 -0800 |
| commit | ba80e2f67f8c1fb9013f05bfffdf649220327902 (patch) | |
| tree | dd4b5585b3e410eb57f82c9d958a5f26a2233b53 /audio/sysvad/PhoneAudioSample | |
| parent | d805073e39ec65e391b4fc2141ecb2120755a76c (diff) | |
Updates on the SysVAD driver sample (#443)104069
* Update SysVAD public sample.
* Add WaveTest public sample.
* Modify the componentized audio samples to include the addComponent directive.
* Dropped the Phone Audio sample.
* Updated README.md.
* Added explanation for the Phone Audio sample.
Diffstat (limited to 'audio/sysvad/PhoneAudioSample')
33 files changed, 0 insertions, 10382 deletions
diff --git a/audio/sysvad/PhoneAudioSample/CellularWave.cpp b/audio/sysvad/PhoneAudioSample/CellularWave.cpp deleted file mode 100644 index 1a999c1e..00000000 --- a/audio/sysvad/PhoneAudioSample/CellularWave.cpp +++ /dev/null @@ -1,685 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - cellularwave.cpp - -Abstract: - - Implementation of wavert miniport for cellular - ---*/ - -#pragma warning (disable : 4127) - -#include <sysvad.h> -#include "simple.h" -#include "CellularWave.h" -#include "CellularTopo.h" -#include "CellularToptable.h" - -//============================================================================= -// CCellularMiniportWaveRT -//============================================================================= - -//============================================================================= -#pragma code_seg("PAGE") -NTSTATUS -CreateCellularMiniportWaveRT -( - _Out_ PUNKNOWN * Unknown, - _In_ REFCLSID, - _In_opt_ PUNKNOWN UnknownOuter, - _When_((PoolType & NonPagedPoolMustSucceed) != 0, - __drv_reportError("Must succeed pool allocations are forbidden. " - "Allocation failures cause a system crash")) - _In_ POOL_TYPE PoolType, - _In_ PUNKNOWN UnknownAdapter, - _In_opt_ PVOID DeviceContext, - _In_ PENDPOINT_MINIPAIR MiniportPair -) -/*++ - -Routine Description: - - Create the wavert miniport. - -Arguments: - - Unknown - - - RefClsId - - - UnknownOuter - - - PoolType - - - UnkownAdapter - - - DeviceContext - - - MiniportPair - - -Return Value: - - NT status code. - ---*/ -{ - UNREFERENCED_PARAMETER(UnknownOuter); - - PAGED_CODE(); - - ASSERT(Unknown); - ASSERT(MiniportPair); - - CMiniportWaveRT *obj = new (PoolType, MINWAVERT_POOLTAG) CCellularMiniportWaveRT - ( - UnknownAdapter, - MiniportPair, - DeviceContext - ); - if (NULL == obj) - { - return STATUS_INSUFFICIENT_RESOURCES; - } - - obj->AddRef(); - *Unknown = reinterpret_cast<IUnknown*>(obj); - - return STATUS_SUCCESS; -} - -//============================================================================= -#pragma code_seg("PAGE") -CCellularMiniportWaveRT::~CCellularMiniportWaveRT -( - void -) -/*++ - -Routine Description: - - Destructor for wavert miniport - -Arguments: - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - DPF_ENTER(("[CCellularMiniportWaveRT::~CCellularMiniportWaveRT]")); - -} // ~CCellularMiniportWaveRT - - -//============================================================================= -#pragma code_seg("PAGE") -STDMETHODIMP -CCellularMiniportWaveRT::NonDelegatingQueryInterface -( - _In_ REFIID Interface, - _COM_Outptr_ PVOID * Object -) -/*++ - -Routine Description: - - QueryInterface for CCellularMiniportWaveRT - -Arguments: - - Interface - GUID of the interface - - Object - interface object to be returned. - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(Object); - - if (IsEqualGUIDAligned(Interface, IID_IAdapterPowerManagement)) - { - *Object = PVOID(PADAPTERPOWERMANAGEMENT(this)); - } - else - { - *Object = NULL; - } - - if (*Object) - { - // We reference the interface for the caller. - - PUNKNOWN(*Object)->AddRef(); - return STATUS_SUCCESS; - } - - return CMiniportWaveRT::NonDelegatingQueryInterface(Interface, Object); -} - -#pragma code_seg("PAGE") -NTSTATUS -PropertyHandler_CellularWaveFilter -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Redirects general property request to miniport object - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - CCellularMiniportWaveRT* pWaveHelper = reinterpret_cast<CCellularMiniportWaveRT*>(PropertyRequest->MajorTarget); - - if (pWaveHelper == NULL) - { - return STATUS_INVALID_PARAMETER; - } - - pWaveHelper->AddRef(); - - if (pWaveHelper->m_DeviceType == eCellularDevice && - IsEqualGUIDAligned(*PropertyRequest->PropertyItem->Set, KSPROPSETID_TelephonyControl)) - { - switch (PropertyRequest->PropertyItem->Id) - { - case KSPROPERTY_TELEPHONY_PROVIDERID: - ntStatus = pWaveHelper->PropertyHandler_TelephonyProviderId(PropertyRequest); - break; - - case KSPROPERTY_TELEPHONY_CALLINFO: - ntStatus = pWaveHelper->PropertyHandler_TelephonyCallInfo(PropertyRequest); - break; - - case KSPROPERTY_TELEPHONY_CALLCONTROL: - case KSPROPERTY_TELEPHONY_PROVIDERCHANGE: - ntStatus = pWaveHelper->PropertyHandler_TelephonyCallState(PropertyRequest); - break; - - case KSPROPERTY_TELEPHONY_CALLHOLD: - ntStatus = pWaveHelper->PropertyHandler_TelephonyCallHold(PropertyRequest); - break; - - case KSPROPERTY_TELEPHONY_MUTE_TX: - ntStatus = pWaveHelper->PropertyHandler_TelephonyMuteTx(PropertyRequest); - break; - - default: - DPF(D_TERSE, ("[PropertyHandler_CellularWaveFilter: Invalid Device Request]")); - } - } - else - { - ntStatus = PropertyHandler_WaveFilter(PropertyRequest); - } - - pWaveHelper->Release(); - - return ntStatus; -} // PropertyHandler_CellularWaveFilter - -//============================================================================= -#pragma code_seg("PAGE") -NTSTATUS -CCellularMiniportWaveRT::PropertyHandler_TelephonyProviderId -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -{ - NTSTATUS ntStatus = STATUS_INVALID_PARAMETER; - - PAGED_CODE(); - - DPF_ENTER(("[CCellularMiniportWaveRT::PropertyHandler_TelephonyProviderId]")); - - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ULONG flags = PropertyRequest->PropertyItem->Flags; - ntStatus = PropertyHandler_BasicSupport(PropertyRequest, flags, VT_ILLEGAL); - } - else - { - ULONG cbMinSize = sizeof(ULONG); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbMinSize; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbMinSize) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - ULONG* providerId = (ULONG*)PropertyRequest->Value; - // Return supported TelephonyProviderId (executor id). - *providerId = m_TelephonyProviderId; - ntStatus = STATUS_SUCCESS; - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - } - - return ntStatus; -} // PropertyHandler_TelephonyProviderId - -//============================================================================= -#pragma code_seg("PAGE") -NTSTATUS -CCellularMiniportWaveRT::PropertyHandler_TelephonyCallInfo -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -{ - NTSTATUS ntStatus = STATUS_INVALID_PARAMETER; - - PAGED_CODE(); - - DPF_ENTER(("[CCellularMiniportWaveRT::PropertyHandler_TelephonyCallInfo]")); - - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ULONG flags = PropertyRequest->PropertyItem->Flags; - ntStatus = PropertyHandler_BasicSupport(PropertyRequest, flags, VT_ILLEGAL); - } - else - { - ULONG cbMinSize = sizeof(KSTELEPHONY_CALLINFO); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbMinSize; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbMinSize) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSTELEPHONY_CALLINFO TelephonyCallInfo = static_cast<PKSTELEPHONY_CALLINFO>(PropertyRequest->Value); - // Return current CallType and CallState information. CallType information is not valid when the CallState is disabled. - TelephonyCallInfo->CallType = m_TelephonyCallType; - TelephonyCallInfo->CallState = m_TelephonyCallState; - ntStatus = STATUS_SUCCESS; - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - } - - return ntStatus; -} // PropertyHandler_TelephonyCallInfo - -#pragma code_seg("PAGE") -NTSTATUS -CCellularMiniportWaveRT::UpdateTopologyJackState -( - _In_ ULONG TelephonyId, - _In_ BOOL NewState -) -{ - PAGED_CODE (); - NTSTATUS ntStatus = STATUS_SUCCESS; - IUnknown *pUnknown = NULL; - ICellularTopology *pCellularTopology = NULL; - - // GetFilters returns the topology port, then topology miniport, then wave port, then wave miniport. - // we only need the topology miniport. - ntStatus = m_pAdapterCommon->GetFilters(m_pMiniportPair, NULL, &pUnknown, NULL, NULL); - if (NT_SUCCESS(ntStatus)) - { - ntStatus = pUnknown->QueryInterface(IID_ICellularTopology, (PVOID *)&pCellularTopology); - if (NT_SUCCESS(ntStatus)) - { - ntStatus = pCellularTopology->UpdateTopologyJackState(TelephonyId, NewState); - } - } - - SAFE_RELEASE(pCellularTopology); - SAFE_RELEASE(pUnknown); - - return STATUS_SUCCESS; -} -#pragma code_seg() - -//============================================================================= -#pragma code_seg("PAGE") -NTSTATUS -CCellularMiniportWaveRT::PropertyHandler_TelephonyCallState -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -{ - NTSTATUS ntStatus = STATUS_INVALID_PARAMETER; - - PAGED_CODE(); - - DPF_ENTER(("[CCellularMiniportWaveRT::PropertyHandler_TelephonyCallState]")); - - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ULONG flags = PropertyRequest->PropertyItem->Flags; - ntStatus = PropertyHandler_BasicSupport(PropertyRequest, flags, VT_ILLEGAL); - } - else - { - ULONG cbMinSize = 0; - - if (PropertyRequest->PropertyItem->Id == KSPROPERTY_TELEPHONY_CALLCONTROL) - { - cbMinSize = sizeof(KSTELEPHONY_CALLCONTROL); - } - else if (PropertyRequest->PropertyItem->Id == KSPROPERTY_TELEPHONY_PROVIDERCHANGE) - { - cbMinSize = sizeof(KSTELEPHONY_PROVIDERCHANGE); - } - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbMinSize; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbMinSize) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_SET) - { - if (PropertyRequest->PropertyItem->Id == KSPROPERTY_TELEPHONY_CALLCONTROL) - { - PKSTELEPHONY_CALLCONTROL TelephonyCallControl = static_cast<PKSTELEPHONY_CALLCONTROL>(PropertyRequest->Value); - - // KSPROPERTY_TELEPHONY_CALLCONTROL has info about CallType and CallControlOp. TELEPHONY_CALLCONTROLOP_ENABLE will start - // cellular call from audio driver perspective, update jack state for associated cellular bidi endpoint to active, - // save call type and update the call state to Enabled. TELEPHONY_CALLCONTROLOP_DISABLE will terminate cellular call - // from audio driver perspective, update jack state for associated cellular bidi endpoint to unplugged and update - // call state to Disabled. Call type is ignored in this case. - switch (TelephonyCallControl->CallControlOp) - { - case TELEPHONY_CALLCONTROLOP_DISABLE: - ASSERT(m_TelephonyCallState != TELEPHONY_CALLSTATE_DISABLED); - m_TelephonyCallState = TELEPHONY_CALLSTATE_DISABLED; - UpdateTopologyJackState(m_TelephonyProviderId, FALSE); - // Release our idle power management requirement - m_pAdapterCommon->SetIdlePowerManagement(m_pMiniportPair, TRUE); - ntStatus = STATUS_SUCCESS; - break; - - case TELEPHONY_CALLCONTROLOP_ENABLE: - ASSERT(m_TelephonyCallState != TELEPHONY_CALLSTATE_ENABLED); - m_TelephonyCallType = TelephonyCallControl->CallType; - m_TelephonyCallState = TELEPHONY_CALLSTATE_ENABLED; - UpdateTopologyJackState(m_TelephonyProviderId, TRUE); - // When we're in a call, we need idle power management disabled. - m_pAdapterCommon->SetIdlePowerManagement(m_pMiniportPair, FALSE); - ntStatus = STATUS_SUCCESS; - break; - - default: - ntStatus = STATUS_INVALID_PARAMETER; - break; - } - } - else if (PropertyRequest->PropertyItem->Id == KSPROPERTY_TELEPHONY_PROVIDERCHANGE) - { - PKSTELEPHONY_PROVIDERCHANGE TelephonyProviderChange = static_cast<PKSTELEPHONY_PROVIDERCHANGE>(PropertyRequest->Value); - - // KSPROPERTY_TELEPHONY_PROVIDERCHANGE has info about CallType and ProviderChangeOp. TELEPHONY_PROVIDERCHANGEOP_BEGIN will indicate - // start of SRVCC to audio driver. Audio driver will then start the SRVCC and update the call state to ProviderTransition. - // TELEPHONY_PROVIDERCHANGEOP_END will indicate end of SRVCC to audio driver and driver will end SRVCC process and update - // call state to Enabled. TELEPHONY_PROVIDERCHANGEOP_CANCEL will indicate SRVCC was aborted and audio driver will revert back to - // pre SRVCC call. - switch (TelephonyProviderChange->ProviderChangeOp) - { - case TELEPHONY_PROVIDERCHANGEOP_END: - m_TelephonyCallState = TELEPHONY_CALLSTATE_ENABLED; - ntStatus = STATUS_SUCCESS; - break; - - case TELEPHONY_PROVIDERCHANGEOP_BEGIN: - m_PreviousTelephonyCallType = m_TelephonyCallType; - m_TelephonyCallType = TelephonyProviderChange->CallType; - m_TelephonyCallState = TELEPHONY_CALLSTATE_PROVIDERTRANSITION; - ntStatus = STATUS_SUCCESS; - break; - - case TELEPHONY_PROVIDERCHANGEOP_CANCEL: - m_TelephonyCallType = m_PreviousTelephonyCallType; - m_TelephonyCallState = TELEPHONY_CALLSTATE_ENABLED; - ntStatus = STATUS_SUCCESS; - break; - - default: - ntStatus = STATUS_INVALID_PARAMETER; - break; - } - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - } - - return ntStatus; -} // PropertyHandler_TelephonyCallState - -//============================================================================= -#pragma code_seg("PAGE") -NTSTATUS -CCellularMiniportWaveRT::PropertyHandler_TelephonyCallHold -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -{ - NTSTATUS ntStatus = STATUS_INVALID_PARAMETER; - - PAGED_CODE(); - - DPF_ENTER(("[CCellularMiniportWaveRT::PropertyHandler_TelephonyCallHold]")); - - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ULONG flags = PropertyRequest->PropertyItem->Flags; - ntStatus = PropertyHandler_BasicSupport(PropertyRequest, flags, VT_ILLEGAL); - } - else - { - ULONG cbMinSize = sizeof(BOOL); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbMinSize; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbMinSize) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - BOOL* bTelephonyHold = (BOOL*) PropertyRequest->Value; - // Return if the call is on hold or not - *bTelephonyHold = m_bTelephonyHold; - ntStatus = STATUS_SUCCESS; - } - else if (PropertyRequest->Verb & KSPROPERTY_TYPE_SET) - { - BOOL* bTelephonyHold = (BOOL*) PropertyRequest->Value; - m_bTelephonyHold = *bTelephonyHold; - - // If this property is TRUE, put the call on hold and update the call state to hold. - // If this property is FALSE, take the call out of hold and update the call state to enabled. - m_TelephonyCallState = (*bTelephonyHold) ? TELEPHONY_CALLSTATE_HOLD : TELEPHONY_CALLSTATE_ENABLED; - ntStatus = STATUS_SUCCESS; - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - } - - return ntStatus; -} // PropertyHandler_TelephonyCallHold - -//============================================================================= -#pragma code_seg("PAGE") -NTSTATUS -CCellularMiniportWaveRT::PropertyHandler_TelephonyMuteTx -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -{ - NTSTATUS ntStatus = STATUS_INVALID_PARAMETER; - - PAGED_CODE(); - - DPF_ENTER(("[CCellularMiniportWaveRT::PropertyHandler_TelephonyMuteTx]")); - - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ULONG flags = PropertyRequest->PropertyItem->Flags; - ntStatus = PropertyHandler_BasicSupport(PropertyRequest, flags, VT_ILLEGAL); - } - else - { - ULONG cbMinSize = sizeof(BOOL); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbMinSize; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbMinSize) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - BOOL* bTxMute = (BOOL*) PropertyRequest->Value; - // Return if the cellular Tx is on muted or not - *bTxMute = m_bTelephonyMuteTx; - ntStatus = STATUS_SUCCESS; - } - else if (PropertyRequest->Verb & KSPROPERTY_TYPE_SET) - { - BOOL* bTxMute = (BOOL*) PropertyRequest->Value; - // If this property is TRUE, mute cellular Tx data. However, it should not mute the data that was injected to KSNODETYPE_TELEPHONY_TX. - // If this property is FALSE, unmute cellular Tx data. - m_bTelephonyMuteTx = *bTxMute; - ntStatus = STATUS_SUCCESS; - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - } - - return ntStatus; -} // PropertyHandler_TelephonyMuteTx - -//============================================================================= -#pragma code_seg() -STDMETHODIMP_(void) -CCellularMiniportWaveRT::PowerChangeState -( - _In_ POWER_STATE NewState -) -{ - DPF_ENTER(("[CCellularMiniportWaveRT::PowerChangeState]")); - UNREFERENCED_PARAMETER(NewState); - - /* - Turn on and off cellular specific hardware here, if applicable. - */ - -} // PowerStateChange - -//============================================================================= -#pragma code_seg() -STDMETHODIMP_(NTSTATUS) -CCellularMiniportWaveRT::QueryDeviceCapabilities -( - _Inout_updates_bytes_(sizeof(DEVICE_CAPABILITIES)) PDEVICE_CAPABILITIES PowerDeviceCaps -) -{ - UNREFERENCED_PARAMETER(PowerDeviceCaps); - - /* - Unused at the miniport layer. Any device capabilities should be reported in CAdapterCommon - */ - - return (STATUS_SUCCESS); -} // QueryDeviceCapabilities - -//============================================================================= -#pragma code_seg() -STDMETHODIMP_(NTSTATUS) -CCellularMiniportWaveRT::QueryPowerChangeState -( - _In_ POWER_STATE NewStateQuery -) -{ - UNREFERENCED_PARAMETER(NewStateQuery); - - DPF_ENTER(("[CCellularMiniportWaveRT::QueryPowerChangeState]")); - - // if we're in a call state other than disabled, then we need the hardware turned on. - if (TELEPHONY_CALLSTATE_DISABLED != m_TelephonyCallState) - { - return STATUS_RESOURCE_IN_USE; - } - - return STATUS_SUCCESS; -} // QueryPowerChangeState - - diff --git a/audio/sysvad/PhoneAudioSample/CellularWave.h b/audio/sysvad/PhoneAudioSample/CellularWave.h deleted file mode 100644 index 1704ff0c..00000000 --- a/audio/sysvad/PhoneAudioSample/CellularWave.h +++ /dev/null @@ -1,126 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - cellularwave.h - -Abstract: - - Definition of wavert miniport class for cellular - ---*/ - -#include "MinWaveRT.h" - -#ifndef _SYSVAD_CELLULARMINWAVERT_H_ -#define _SYSVAD_CELLULARMINWAVERT_H_ - -NTSTATUS -CreateCellularMiniportWaveRT -( - _Out_ PUNKNOWN * Unknown, - _In_ REFCLSID, - _In_opt_ PUNKNOWN UnknownOuter, - _When_((PoolType & NonPagedPoolMustSucceed) != 0, - __drv_reportError("Must succeed pool allocations are forbidden. " - "Allocation failures cause a system crash")) - _In_ POOL_TYPE PoolType, - _In_ PUNKNOWN UnknownAdapter, - _In_opt_ PVOID DeviceContext, - _In_ PENDPOINT_MINIPAIR MiniportPair -); - -//============================================================================= -// Classes -//============================================================================= -/////////////////////////////////////////////////////////////////////////////// -// CCellularMiniportWaveRT -// -class CCellularMiniportWaveRT : - public CMiniportWaveRT, - public IAdapterPowerManagement -{ -private: - ULONG m_TelephonyProviderId; - TELEPHONY_CALLTYPE m_TelephonyCallType; - TELEPHONY_CALLTYPE m_PreviousTelephonyCallType; - TELEPHONY_CALLSTATE m_TelephonyCallState; - BOOL m_bTelephonyHold; - BOOL m_bTelephonyMuteTx; - -public: - DECLARE_STD_UNKNOWN(); - IMP_IAdapterPowerManagement; - - CCellularMiniportWaveRT( - _In_ PUNKNOWN UnknownAdapter, - _In_ PENDPOINT_MINIPAIR MiniportPair, - _In_opt_ PVOID DeviceContext - ) - :CMiniportWaveRT(UnknownAdapter, MiniportPair, DeviceContext), - m_TelephonyProviderId(0), - m_TelephonyCallType(TELEPHONY_CALLTYPE_CIRCUITSWITCHED), - m_PreviousTelephonyCallType(TELEPHONY_CALLTYPE_CIRCUITSWITCHED), - m_TelephonyCallState(TELEPHONY_CALLSTATE_DISABLED), - m_bTelephonyHold(FALSE), - m_bTelephonyMuteTx(FALSE) - { - if (IsCellularDevice()) - { - if (m_DeviceFlags & ENDPOINT_CELLULAR_PROVIDER1) - { - m_TelephonyProviderId = 0; - } - else if (m_DeviceFlags & ENDPOINT_CELLULAR_PROVIDER2) - { - m_TelephonyProviderId = 1; - } - } - } - - ~CCellularMiniportWaveRT(); - - friend NTSTATUS PropertyHandler_CellularWaveFilter - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - -public: - NTSTATUS PropertyHandler_TelephonyProviderId - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandler_TelephonyCallInfo - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandler_TelephonyCallState - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandler_TelephonyCallHold - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandler_TelephonyMuteTx - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - -private: - NTSTATUS UpdateTopologyJackState - ( - _In_ ULONG TelephonyId, - _In_ BOOL NewState - ); -}; -typedef CCellularMiniportWaveRT *PCCellularMiniportWaveRT; - -#endif // _SYSVAD_CELLULARMINWAVERT_H_ - diff --git a/audio/sysvad/PhoneAudioSample/Cellulartopo.cpp b/audio/sysvad/PhoneAudioSample/Cellulartopo.cpp deleted file mode 100644 index 7329a9f9..00000000 --- a/audio/sysvad/PhoneAudioSample/Cellulartopo.cpp +++ /dev/null @@ -1,1117 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - cellulartopo.cpp - -Abstract: - - Implementation of topology miniport for the cellular endpoint. - ---*/ - -#pragma warning (disable : 4127) - -#include <sysvad.h> -#include "simple.h" -#include "mintopo.h" -#include "cellulartopo.h" -#include "cellulartoptable.h" -#include <ntstrsafe.h> - - -#pragma code_seg("PAGE") - - -// table of valid render/capture combinations for cellular routing. -// speaker and mic (speakerphone) -// headset speaker and headset mic (wired headset) -// headset speaker and mic (wired headset without microphone) -// handset speaker and handset mic (handset) -// HFP speaker and HFP mic (bluetooth hands free) -// special host routing pair -KSTOPOLOGY_ENDPOINTIDPAIR g_EndpointList[] = -{ - { HANDSET_SPEAKER_TOPONAME, KSPIN_TOPO_LINEOUT_DEST, HANDSET_MIC_TOPONAME, KSPIN_TOPO_MIC_ELEMENTS }, - { SPEAKER_TOPONAME, KSPIN_TOPO_LINEOUT_DEST, MIC_ARRAY1_TOPONAME, KSPIN_TOPO_MIC_ELEMENTS }, - { SPEAKER_HEADSET_TOPONAME, KSPIN_TOPO_LINEOUT_DEST, MIC_HEADSET_TOPONAME, KSPIN_TOPO_MIC_ELEMENTS }, - { SPEAKER_HEADSET_TOPONAME, KSPIN_TOPO_LINEOUT_DEST, MIC_ARRAY1_TOPONAME, KSPIN_TOPO_MIC_ELEMENTS }, - { HFP_SPEAKER_TOPONAME, KSPIN_TOPO_LINEOUT_DEST, HFP_MIC_TOPONAME, KSPIN_TOPO_MIC_ELEMENTS }, - { HOSTRENDER_TOPONAME, HOSTRENDER_PIN, HOSTCAPTURE_TOPONAME, HOSTCAPTURE_PIN } -}; - -//============================================================================= -NTSTATUS -CreateCellularMiniportTopology -( - _Out_ PUNKNOWN * Unknown, - _In_ REFCLSID, - _In_opt_ PUNKNOWN UnknownOuter, - _When_((PoolType & NonPagedPoolMustSucceed) != 0, - __drv_reportError("Must succeed pool allocations are forbidden. " - "Allocation failures cause a system crash")) - _In_ POOL_TYPE PoolType, - _In_ PUNKNOWN UnknownAdapter, - _In_opt_ PVOID DeviceContext, - _In_ PENDPOINT_MINIPAIR MiniportPair -) -/*++ - -Routine Description: - - Creates a new topology miniport. - -Arguments: - - Unknown - - - RefclsId - - - UnknownOuter - - - PoolType - - - UnknownAdapter - - - DeviceContext - - - MiniportPair - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(Unknown); - ASSERT(MiniportPair); - - UNREFERENCED_PARAMETER(UnknownAdapter); - UNREFERENCED_PARAMETER(DeviceContext); - - CCellularMiniportTopology *obj = - new (PoolType, MINWAVERT_POOLTAG) - CCellularMiniportTopology( UnknownOuter, - MiniportPair->TopoDescriptor, - MiniportPair->DeviceMaxChannels); - if (NULL == obj) - { - return STATUS_INSUFFICIENT_RESOURCES; - } - - obj->AddRef(); - *Unknown = reinterpret_cast<IUnknown*>(obj); - - return STATUS_SUCCESS; -} // CreateCellularMiniportTopology - -CCellularMiniportTopology::CCellularMiniportTopology -( - _In_opt_ PUNKNOWN UnknownOuter, - _In_ PCFILTER_DESCRIPTOR *FilterDesc, - _In_ USHORT DeviceMaxChannels -) -: CUnknown(UnknownOuter), - CMiniportTopologySYSVAD(FilterDesc, DeviceMaxChannels), - m_CellularVolume(0) -{ - PAGED_CODE(); - - InitializeListHead(&m_EndpointPairs); - - // populate the initial state - memcpy(&m_CellularRenderEndpoint, &(g_EndpointList[0].RenderEndpoint), sizeof(m_CellularRenderEndpoint)); - memcpy(&m_CellularCaptureEndpoint, &(g_EndpointList[0].CaptureEndpoint), sizeof(m_CellularCaptureEndpoint)); -} - - -//============================================================================= -CCellularMiniportTopology::~CCellularMiniportTopology -( - void -) -/*++ - -Routine Description: - - Topology miniport destructor - -Arguments: - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - while (!IsListEmpty(&m_EndpointPairs)) - { - PLIST_ENTRY le = RemoveHeadList(&m_EndpointPairs); - ENDPOINT_PAIR_ENTRY *pRecord = CONTAINING_RECORD(le, ENDPOINT_PAIR_ENTRY, ListEntry); - delete pRecord; - } - - DPF_ENTER(("[CCellularMiniportTopology::~CCellularMiniportTopology]")); -} // ~CCellularMiniportTopology - -//============================================================================= -NTSTATUS -CCellularMiniportTopology::DataRangeIntersection -( - _In_ ULONG PinId, - _In_ PKSDATARANGE ClientDataRange, - _In_ PKSDATARANGE MyDataRange, - _In_ ULONG OutputBufferLength, - _Out_writes_bytes_to_opt_(OutputBufferLength, *ResultantFormatLength) - PVOID ResultantFormat OPTIONAL, - _Out_ PULONG ResultantFormatLength -) -/*++ - -Routine Description: - - The DataRangeIntersection function determines the highest quality - intersection of two data ranges. - -Arguments: - - PinId - Pin for which data intersection is being determined. - - ClientDataRange - Pointer to KSDATARANGE structure which contains the data range - submitted by client in the data range intersection property - request. - - MyDataRange - Pin's data range to be compared with client's data range. - - OutputBufferLength - Size of the buffer pointed to by the resultant format - parameter. - - ResultantFormat - Pointer to value where the resultant format should be - returned. - - ResultantFormatLength - Actual length of the resultant format that is placed - at ResultantFormat. This should be less than or equal - to OutputBufferLength. - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - return - CMiniportTopologySYSVAD::DataRangeIntersection - ( - PinId, - ClientDataRange, - MyDataRange, - OutputBufferLength, - ResultantFormat, - ResultantFormatLength - ); -} // DataRangeIntersection - -//============================================================================= -STDMETHODIMP -CCellularMiniportTopology::GetDescription -( - _Out_ PPCFILTER_DESCRIPTOR * OutFilterDescriptor -) -/*++ - -Routine Description: - - The GetDescription function gets a pointer to a filter description. - It provides a location to deposit a pointer in miniport's description - structure. This is the placeholder for the FromNode or ToNode fields in - connections which describe connections to the filter's pins. - -Arguments: - - OutFilterDescriptor - Pointer to the filter description. - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(OutFilterDescriptor); - - return CMiniportTopologySYSVAD::GetDescription(OutFilterDescriptor); -} // GetDescription - -//============================================================================= -STDMETHODIMP -CCellularMiniportTopology::Init -( - _In_ PUNKNOWN UnknownAdapter, - _In_ PRESOURCELIST ResourceList, - _In_ PPORTTOPOLOGY Port_ -) -/*++ - -Routine Description: - - The Init function initializes the miniport. Callers of this function - should run at IRQL PASSIVE_LEVEL - -Arguments: - - UnknownAdapter - A pointer to the Iuknown interface of the adapter object. - - ResourceList - Pointer to the resource list to be supplied to the miniport - during initialization. The port driver is free to examine the - contents of the ResourceList. The port driver will not be - modify the ResourceList contents. - - Port - Pointer to the topology port object that is linked with this miniport. - -Return Value: - - NT status code. - ---*/ -{ - UNREFERENCED_PARAMETER(ResourceList); - - PAGED_CODE(); - - ASSERT(UnknownAdapter); - ASSERT(Port_); - - DPF_ENTER(("[CCellularMiniportTopology::Init]")); - - NTSTATUS ntStatus = STATUS_SUCCESS; - - ExInitializeFastMutex(&m_EndpointFastMutex); - - // copy the full static list over to the dynamic list. - for (int i = 0; i < SIZEOF_ARRAY(g_EndpointList) && NT_SUCCESS(ntStatus); i++) - { - ENDPOINT_PAIR_ENTRY *newEntry = new(NonPagedPoolNx, MINADAPTER_POOLTAG) ENDPOINT_PAIR_ENTRY; - - if (!newEntry) - { - DPF(D_TERSE, ("Insufficient memory to create endpoint pair")); - ntStatus = STATUS_INSUFFICIENT_RESOURCES; - } - else - { - memcpy(&(newEntry->data), &(g_EndpointList[i]), sizeof(KSTOPOLOGY_ENDPOINTIDPAIR)); - InsertTailList(&m_EndpointPairs, &newEntry->ListEntry); - } - } - - if (NT_SUCCESS(ntStatus)) - { - ntStatus = - CMiniportTopologySYSVAD::Init - ( - UnknownAdapter, - Port_ - ); - } - - return ntStatus; -} // Init - -//============================================================================= -STDMETHODIMP -CCellularMiniportTopology::NonDelegatingQueryInterface -( - _In_ REFIID Interface, - _COM_Outptr_ PVOID * Object -) -/*++ - -Routine Description: - - QueryInterface for MiniportTopology - -Arguments: - - Interface - GUID of the interface - - Object - interface object to be returned. - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(Object); - - if (IsEqualGUIDAligned(Interface, IID_IUnknown)) - { - *Object = PVOID(PUNKNOWN(static_cast<IMiniportTopology*>( this ))); - } - else if (IsEqualGUIDAligned(Interface, IID_IMiniport)) - { - *Object = PVOID(PMINIPORT(this)); - } - else if (IsEqualGUIDAligned(Interface, IID_IMiniportTopology)) - { - *Object = PVOID(PMINIPORTTOPOLOGY(this)); - } - else if (IsEqualGUIDAligned(Interface, IID_ICellularTopology)) - { - *Object = PVOID(PCELLULARTOPOLOGY(this)); - } - else if (IsEqualGUIDAligned(Interface, IID_IMiniportChange)) - { - *Object = PVOID(static_cast<PMINIPORTCHANGE>( this )); - } - else - { - *Object = NULL; - } - - if (*Object) - { - // We reference the interface for the caller. - PUNKNOWN(*Object)->AddRef(); - return(STATUS_SUCCESS); - } - - return(STATUS_INVALID_PARAMETER); -} // NonDelegatingQueryInterface - -//============================================================================= -NTSTATUS -CCellularMiniportTopology::PropertyHandlerJackDescription -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_Jack, KSPROPERTY_JACK_DESCRIPTION ) - -Arguments: - - PropertyRequest - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandlerJackDescription]")); - - ULONG cJackDescriptions = ARRAYSIZE(CellularJackDescriptions); - PKSJACK_DESCRIPTION * JackDescriptions = CellularJackDescriptions; - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - ULONG nPinId = (ULONG)-1; - - if (PropertyRequest->InstanceSize >= sizeof(ULONG)) - { - nPinId = *(PULONG(PropertyRequest->Instance)); - - if ((nPinId < cJackDescriptions) && (JackDescriptions[nPinId] != NULL)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupport - ( - PropertyRequest, - KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET, - VT_ILLEGAL - ); - } - else - { - ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM) + sizeof(KSJACK_DESCRIPTION); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value; - PKSJACK_DESCRIPTION pDesc = (PKSJACK_DESCRIPTION)(pMI+1); - - pMI->Size = cbNeeded; - pMI->Count = 1; - - RtlCopyMemory(pDesc, JackDescriptions[nPinId], sizeof(KSJACK_DESCRIPTION)); - ntStatus = STATUS_SUCCESS; - } - } - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -CCellularMiniportTopology::PropertyHandlerJackDescription2 -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_Jack, KSPROPERTY_JACK_DESCRIPTION2 ) - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandlerJackDescription2]")); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - ULONG nPinId = (ULONG)-1; - - ULONG cJackDescriptions = ARRAYSIZE(CellularJackDescriptions); - PKSJACK_DESCRIPTION * JackDescriptions = CellularJackDescriptions; - - if (PropertyRequest->InstanceSize >= sizeof(ULONG)) - { - nPinId = *(PULONG(PropertyRequest->Instance)); - - if ((nPinId < cJackDescriptions) && (JackDescriptions[nPinId] != NULL)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupport - ( - PropertyRequest, - KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET, - VT_ILLEGAL - ); - } - else - { - ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM) + sizeof(KSJACK_DESCRIPTION2); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value; - PKSJACK_DESCRIPTION2 pDesc = (PKSJACK_DESCRIPTION2)(pMI+1); - - pMI->Size = cbNeeded; - pMI->Count = 1; - - RtlZeroMemory(pDesc, sizeof(KSJACK_DESCRIPTION2)); - - // - // Specifies the lower 16 bits of the DWORD parameter. This parameter indicates whether - // the jack is currently active, streaming, idle, or hardware not ready. - // - pDesc->DeviceStateInfo = 0; - - // - // From MSDN: - // "If an audio device lacks jack presence detection, the IsConnected member of - // the KSJACK_DESCRIPTION structure must always be set to TRUE. To remove the - // ambiguity that results from this dual meaning of the TRUE value for IsConnected, - // a client application can call IKsJackDescription2::GetJackDescription2 to read - // the JackCapabilities flag of the KSJACK_DESCRIPTION2 structure. If this flag has - // the JACKDESC2_PRESENCE_DETECT_CAPABILITY bit set, it indicates that the endpoint - // does in fact support jack presence detection. In that case, the return value of - // the IsConnected member can be interpreted to accurately reflect the insertion status - // of the jack." - // - // Bit definitions: - // 0x00000001 - JACKDESC2_PRESENCE_DETECT_CAPABILITY - // 0x00000002 - JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY - // - pDesc->JackCapabilities = JACKDESC2_PRESENCE_DETECT_CAPABILITY; - - ntStatus = STATUS_SUCCESS; - } - } - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -CCellularMiniportTopology::PropertyHandlerTelephonyEndpointIdPair -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_TelephonyTopology, KSPROPERTY_TELEPHONY_ENDPOINTIDPAIR ) - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandlerTelephonyEndpointIdPair]")); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = STATUS_INVALID_PARAMETER; - ULONG ulExpectedSize = (sizeof(KSPROPERTY_DESCRIPTION) + sizeof(KSPROPERTY_MEMBERSHEADER)); - - PLIST_ENTRY le = NULL; - int countOfValidEndpointPairs = 0; - - ExAcquireFastMutex(&m_EndpointFastMutex); - - for (le = m_EndpointPairs.Flink; le != &m_EndpointPairs; le = le->Flink) - { - countOfValidEndpointPairs++; - } - ulExpectedSize += (countOfValidEndpointPairs * sizeof(KSTOPOLOGY_ENDPOINTIDPAIR)); - - if (PropertyRequest->ValueSize >= sizeof(KSPROPERTY_DESCRIPTION)) - { - // if return buffer can hold a KSPROPERTY_DESCRIPTION, return it - // - PKSPROPERTY_DESCRIPTION PropDesc = - PKSPROPERTY_DESCRIPTION(PropertyRequest->Value); - - PropDesc->AccessFlags = KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_SET |KSPROPERTY_TYPE_GET; - PropDesc->DescriptionSize = ulExpectedSize; - PropDesc->PropTypeSet.Set = KSPROPSETID_TelephonyTopology; - PropDesc->PropTypeSet.Id = KSPROPERTY_TELEPHONY_ENDPOINTIDPAIR; - PropDesc->MembersListCount = 0; - PropDesc->PropTypeSet.Flags = 0; - PropDesc->Reserved = 0; - - // buffer is big enough to hold the full data, add that - if (PropertyRequest->ValueSize >= ulExpectedSize) - { - PKSPROPERTY_MEMBERSHEADER MembersHeader = - PKSPROPERTY_MEMBERSHEADER(PropDesc + 1); - - // we're now adding the members header. - PropDesc->MembersListCount = 1; - - MembersHeader->MembersFlags = KSPROPERTY_MEMBER_VALUES; - MembersHeader->MembersSize = sizeof(KSTOPOLOGY_ENDPOINTIDPAIR); - MembersHeader->MembersCount = countOfValidEndpointPairs; - MembersHeader->Flags = 0; - - le = NULL; - PKSTOPOLOGY_ENDPOINTIDPAIR returnData = (PKSTOPOLOGY_ENDPOINTIDPAIR) (MembersHeader + 1); - - for (le = m_EndpointPairs.Flink; le != &m_EndpointPairs; le = le->Flink) - { - ENDPOINT_PAIR_ENTRY *pRecord = CONTAINING_RECORD(le, ENDPOINT_PAIR_ENTRY, ListEntry); - memcpy(returnData, &(pRecord->data), sizeof(pRecord->data)); - returnData++; - } - - // tell them how much space we really used, which controls how much data is copied into the user buffer. - PropertyRequest->ValueSize = ulExpectedSize; - } - else - { - // tell them how much space we really used, which controls how much data is copied into the user buffer. - PropertyRequest->ValueSize = sizeof(KSPROPERTY_DESCRIPTION); - } - - ntStatus = STATUS_SUCCESS; - } - else if (PropertyRequest->ValueSize >= sizeof(ULONG)) - { - // if return buffer can hold a ULONG, return the access flags. - *(PULONG(PropertyRequest->Value)) = KSPROPERTY_TYPE_SET |KSPROPERTY_TYPE_GET; - PropertyRequest->ValueSize = sizeof(ULONG); - ntStatus = STATUS_SUCCESS; - } - else if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = ulExpectedSize; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - - ExReleaseFastMutex(&m_EndpointFastMutex); - } - else - { - ULONG cbNeeded = sizeof(KSTOPOLOGY_ENDPOINTIDPAIR); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSTOPOLOGY_ENDPOINTIDPAIR EndpointIdPair = static_cast<PKSTOPOLOGY_ENDPOINTIDPAIR>(PropertyRequest->Value); - - // Return endpoints (render and capture) info where cellular audio is being routed to. - memcpy(&(EndpointIdPair->RenderEndpoint), &m_CellularRenderEndpoint, sizeof(m_CellularRenderEndpoint)); - memcpy(&(EndpointIdPair->CaptureEndpoint), &m_CellularCaptureEndpoint, sizeof(m_CellularCaptureEndpoint)); - - ntStatus = STATUS_SUCCESS; - } - else if (PropertyRequest->Verb & KSPROPERTY_TYPE_SET) - { - PKSTOPOLOGY_ENDPOINTIDPAIR EndpointIdPair = static_cast<PKSTOPOLOGY_ENDPOINTIDPAIR>(PropertyRequest->Value); - PLIST_ENTRY le = NULL; - - // verify the requested combination is in the list of valid endpoint combinations, fail with - // invalid parameter if not found. - ntStatus = STATUS_INVALID_PARAMETER; - - ExAcquireFastMutex(&m_EndpointFastMutex); - - for (le = m_EndpointPairs.Flink; le != &m_EndpointPairs; le = le->Flink) - { - ENDPOINT_PAIR_ENTRY *pRecord = CONTAINING_RECORD(le, ENDPOINT_PAIR_ENTRY, ListEntry); - - if (pRecord->data.RenderEndpoint.PinId == EndpointIdPair->RenderEndpoint.PinId && - 0 == _wcsnicmp(pRecord->data.RenderEndpoint.TopologyName, EndpointIdPair->RenderEndpoint.TopologyName, MAX_PATH) && - pRecord->data.CaptureEndpoint.PinId == EndpointIdPair->CaptureEndpoint.PinId && - 0 == _wcsnicmp(pRecord->data.CaptureEndpoint.TopologyName, EndpointIdPair->CaptureEndpoint.TopologyName, MAX_PATH)) - { - if (HOSTRENDER_PIN == EndpointIdPair->RenderEndpoint.PinId && - 0 == _wcsnicmp(HOSTRENDER_TOPONAME, EndpointIdPair->RenderEndpoint.TopologyName, MAX_PATH) && - HOSTCAPTURE_PIN == EndpointIdPair->CaptureEndpoint.PinId && - 0 == _wcsnicmp(HOSTCAPTURE_TOPONAME, EndpointIdPair->CaptureEndpoint.TopologyName, MAX_PATH)) - { - // This is an indication that cellular audio is being routed through OS (For example, user plugs in USB headset - // for cellular audio) and driver must stop rendering cellular audio to any physical audio endpoint. Driver must - // also stop capturing data from any physical audio endpoint for cellular. This will update audio routing for - // all the active cellular calls. - } - else - { - // Route cellular audio to these new endpoints (render and capture). This will update audio routing for - // all the active cellular calls. - } - - memcpy(&m_CellularRenderEndpoint, &(EndpointIdPair->RenderEndpoint), sizeof(m_CellularRenderEndpoint)); - memcpy(&m_CellularCaptureEndpoint, &(EndpointIdPair->CaptureEndpoint), sizeof(m_CellularCaptureEndpoint)); - - // we found the entry, so return success - ntStatus = STATUS_SUCCESS; - break; - } - } - - ExReleaseFastMutex(&m_EndpointFastMutex); - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -CCellularMiniportTopology::PropertyHandlerTelephonyVolume -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_TelephonyTopology, KSPROPERTY_TELEPHONY_VOLUME ) - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandlerTelephonyVolume]")); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupportVolume - ( - PropertyRequest, - 1 // Telephony audio is only ever 1 channel - ); - - ULONG cbFullProperty = - sizeof(KSPROPERTY_DESCRIPTION) + - sizeof(KSPROPERTY_MEMBERSHEADER) + - sizeof(KSPROPERTY_STEPPING_LONG); - - if (NT_SUCCESS(ntStatus) && PropertyRequest->ValueSize >= cbFullProperty) - { - // Access proper values - PKSPROPERTY_DESCRIPTION PropDesc = - PKSPROPERTY_DESCRIPTION(PropertyRequest->Value); - PKSPROPERTY_MEMBERSHEADER Members = - PKSPROPERTY_MEMBERSHEADER(PropDesc + 1); - PKSPROPERTY_STEPPING_LONG Range = - PKSPROPERTY_STEPPING_LONG(Members + 1); - - // Telephony volume is only ever single channel, so the - // MULTICHANNEL and UNIFORM flags are meaningless - Members->Flags = 0; - - // Telephony Values that may be different from standard volume values - Range->Bounds.SignedMaximum = TELEPHONY_VOLUME_MAXIMUM; - Range->Bounds.SignedMinimum = TELEPHONY_VOLUME_MINIMUM; - Range->SteppingDelta = TELEPHONY_VOLUME_STEPPING; - } - } - else - { - ntStatus = - ValidatePropertyParams - ( - PropertyRequest, - sizeof(LONG), // volume value is a LONG - 0 // there is no channel associated with telephony volume - ); - - - if (NT_SUCCESS(ntStatus)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - LONG* volume = (LONG*)PropertyRequest->Value; - // Return current cellular volume (Incall volume). - *volume = m_CellularVolume; - PropertyRequest->ValueSize = sizeof(LONG); - ntStatus = STATUS_SUCCESS; - } - else if (PropertyRequest->Verb & KSPROPERTY_TYPE_SET) - { - LONG* volume = (LONG*)PropertyRequest->Value; - - LONG normalizedVolume = - VALUE_NORMALIZE_IN_RANGE_EX - ( - *volume, - TELEPHONY_VOLUME_MINIMUM, - TELEPHONY_VOLUME_MAXIMUM, - TELEPHONY_VOLUME_STEPPING - ); - if (normalizedVolume == *volume) - { - // Update the cellular volume (Incall volume). This will update cellular volume for all the active cellular calls. - m_CellularVolume = *volume; - ntStatus = STATUS_SUCCESS; - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -PropertyHandler_CellularTopoFilter -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Redirects property request to miniport object - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandler_CellularTopoFilter]")); - - // PropertryRequest structure is filled by portcls. - // MajorTarget is a pointer to miniport object for miniports. - // - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - PCCellularMiniportTopology pMiniport = reinterpret_cast<PCCellularMiniportTopology>(PropertyRequest->MajorTarget); - - if (IsEqualGUIDAligned(*PropertyRequest->PropertyItem->Set, KSPROPSETID_Jack)) - { - if (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION) - { - ntStatus = pMiniport->PropertyHandlerJackDescription(PropertyRequest); - } - else if (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION2) - { - ntStatus = pMiniport->PropertyHandlerJackDescription2(PropertyRequest); - } - } - else if (IsEqualGUIDAligned(*PropertyRequest->PropertyItem->Set, KSPROPSETID_TelephonyTopology)) - { - if (PropertyRequest->PropertyItem->Id == KSPROPERTY_TELEPHONY_ENDPOINTIDPAIR) - { - ntStatus = pMiniport->PropertyHandlerTelephonyEndpointIdPair(PropertyRequest); - } - else if (PropertyRequest->PropertyItem->Id == KSPROPERTY_TELEPHONY_VOLUME) - { - ntStatus = pMiniport->PropertyHandlerTelephonyVolume(PropertyRequest); - } - } - - return ntStatus; -} // PropertyHandler_CellularTopoFilter - -#pragma code_seg("PAGE") -STDMETHODIMP_(NTSTATUS) -CCellularMiniportTopology::UpdateTopologyJackState -( - _In_ ULONG TelephonyId, - _In_ BOOL NewState -) -{ - PAGED_CODE (); - - struct JackState - { - ULONG TelephonyId; - ULONG PinId; - PKSJACK_DESCRIPTION JackControl; - }; - - JackState Jacks[] = - { - { - 0, - KSPIN_TOPO_BIDI1, - &CellularJackDesc - }, - { - 1, - KSPIN_TOPO_BIDI2, - &CellularJackDesc2 - } - }; - - // Query the registry and update the jack state for all of the pins. - for (int i = 0; i < SIZEOF_ARRAY(Jacks); i++) - { - if (Jacks[i].TelephonyId == TelephonyId) - { - Jacks[i].JackControl->IsConnected = NewState; - - // we have multiple pins which share the same jack state, - // notify for every pin using that jack state - GenerateEventList( - (GUID*)&KSEVENTSETID_PinCapsChange, // event set. NULL is a wild card for all events. - KSEVENT_PINCAPS_JACKINFOCHANGE, // event ID. - TRUE, // use pid ID. - Jacks[i].PinId, // pin ID. - FALSE, // do not use node ID. - ULONG(-1)); // node ID, not used. - } - } - - return STATUS_SUCCESS; -} - -#pragma code_seg() -NTSTATUS CCellularMiniportWaveRT_EventHandler_JackState -( - _In_ PPCEVENT_REQUEST EventRequest -) -{ - CCellularMiniportTopology* miniport = reinterpret_cast<CCellularMiniportTopology*>(EventRequest->MajorTarget); - return miniport->EventHandler_JackState(EventRequest); -} - -NTSTATUS CCellularMiniportTopology::EventHandler_JackState -( - _In_ PPCEVENT_REQUEST EventRequest -) -{ - if (EventRequest->Verb == PCEVENT_VERB_ADD) - { - m_PortEvents->AddEventToEventList(EventRequest->EventEntry); - } - - return STATUS_SUCCESS; -} - -#pragma code_seg("PAGE") -STDMETHODIMP_(NTSTATUS) -CCellularMiniportTopology::NotifyEndpointPair -( - _In_ WCHAR *RenderEndpointTopoName, - _In_ ULONG RenderEndpointNameLen, - _In_ ULONG RenderPinId, - _In_ WCHAR *CaptureEndpointTopoName, - _In_ ULONG CaptureEndpointNameLen, - _In_ ULONG CapturePinId -) -{ - PAGED_CODE (); - - NTSTATUS ntStatus = STATUS_SUCCESS; - - ENDPOINT_PAIR_ENTRY *newEntry = new(NonPagedPoolNx, MINADAPTER_POOLTAG) ENDPOINT_PAIR_ENTRY; - - if (!newEntry) - { - DPF(D_TERSE, ("Insufficient memory to create endpoint pair")); - ntStatus = STATUS_INSUFFICIENT_RESOURCES; - } - - if (NT_SUCCESS(ntStatus)) - { - KSTOPOLOGY_ENDPOINTIDPAIR *endpointPair = &newEntry->data; - - RtlStringCchCopyNW(endpointPair->RenderEndpoint.TopologyName, - SIZEOF_ARRAY(endpointPair->RenderEndpoint.TopologyName), - RenderEndpointTopoName, - RenderEndpointNameLen); - endpointPair->RenderEndpoint.PinId = RenderPinId; - - RtlStringCchCopyNW(endpointPair->CaptureEndpoint.TopologyName, - SIZEOF_ARRAY(endpointPair->CaptureEndpoint.TopologyName), - CaptureEndpointTopoName, - CaptureEndpointNameLen); - endpointPair->CaptureEndpoint.PinId = CapturePinId; - - ExAcquireFastMutex(&m_EndpointFastMutex); - InsertTailList(&m_EndpointPairs, &newEntry->ListEntry); - ExReleaseFastMutex(&m_EndpointFastMutex); - - GenerateEventList( - (GUID*)&KSEVENTSETID_Telephony, - KSEVENT_TELEPHONY_ENDPOINTPAIRS_CHANGED, - FALSE, - NULL, - FALSE, - ULONG(-1)); - } - - return ntStatus; -} - -#pragma code_seg() -NTSTATUS CCellularMiniportWaveRT_EventHandler_Telephony -( - _In_ PPCEVENT_REQUEST EventRequest -) -{ - CCellularMiniportTopology* miniport = reinterpret_cast<CCellularMiniportTopology*>(EventRequest->MajorTarget); - return miniport->EventHandler_Telephony(EventRequest); -} - -NTSTATUS CCellularMiniportTopology::EventHandler_Telephony -( - _In_ PPCEVENT_REQUEST EventRequest -) -{ - if (EventRequest->Verb == PCEVENT_VERB_ADD) - { - m_PortEvents->AddEventToEventList(EventRequest->EventEntry); - } - - return STATUS_SUCCESS; -} - - diff --git a/audio/sysvad/PhoneAudioSample/Cellulartopo.h b/audio/sysvad/PhoneAudioSample/Cellulartopo.h deleted file mode 100644 index b898741c..00000000 --- a/audio/sysvad/PhoneAudioSample/Cellulartopo.h +++ /dev/null @@ -1,184 +0,0 @@ - -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - cellulartopo.h - -Abstract: - - Declaration of topology miniport for the cellular endpoint. - ---*/ - -#ifndef _SYSVAD_CELLULARTOPO_H_ -#define _SYSVAD_CELLULARTOPO_H_ - -#include "basetopo.h" - -// make sure all of these names matches with KSNAME_* in the inf's [Strings] section -#define SPEAKER_TOPONAME L"TopologySpeaker" -#define SPEAKER_HEADSET_TOPONAME L"TopologySpeakerHeadset" -#define MIC_HEADSET_TOPONAME L"TopologyMicHeadset" -#define MIC_ARRAY1_TOPONAME L"TopologyMicArray1" -#define HANDSET_SPEAKER_TOPONAME L"TopologyHandsetSpeaker" -#define HANDSET_MIC_TOPONAME L"TopologyHandsetMic" - -// from bthhfpminipairs.h, static name of bluetooth speaker and mic topologies -#define HFP_SPEAKER_TOPONAME L"TopologyBthHfpSpeaker" -#define HFP_MIC_TOPONAME L"TopologyBthHfpMic" - -// Special routing endpoints -#define HOSTRENDER_TOPONAME L"HostRender" -#define HOSTRENDER_PIN 0 -#define HOSTCAPTURE_TOPONAME L"HostCapture" -#define HOSTCAPTURE_PIN 0 - -// Telephony Volume Stepping information -#define TELEPHONY_VOLUME_MAXIMUM 0 // 0 dB -#define TELEPHONY_VOLUME_MINIMUM (-30 * 0x10000) // -30 dB -#define TELEPHONY_VOLUME_STEPPING (3 * 0x10000) // 10 steps - - -typedef struct _ENDPOINT_PAIR_ENTRY -{ - LIST_ENTRY ListEntry; - KSTOPOLOGY_ENDPOINTIDPAIR data; -} ENDPOINT_PAIR_ENTRY; - -//============================================================================= -// Defines -//============================================================================= -// {3829F9C3-F341-4B82-976F-A635EB3CEA0D} -DEFINE_GUID(IID_ICellularTopology, -0x3829f9c3, 0xf341, 0x4b82, 0x97, 0x6f, 0xa6, 0x35, 0xeb, 0x3c, 0xea, 0xd); - - -//============================================================================= -// Interfaces -//============================================================================= - -/////////////////////////////////////////////////////////////////////////////// -// ICellularTopology -// -DECLARE_INTERFACE_(ICellularTopology, IMiniportTopology) -{ - STDMETHOD_(NTSTATUS, UpdateTopologyJackState) - ( - THIS_ - _In_ ULONG TelephonyId, - _In_ BOOL NewState - ) PURE; -}; - -typedef ICellularTopology *PCELLULARTOPOLOGY; - -//============================================================================= -// Classes -//============================================================================= - -/////////////////////////////////////////////////////////////////////////////// -// CCellularMiniportTopology -// - -class CCellularMiniportTopology : - public CMiniportTopologySYSVAD, - public ICellularTopology, - public IMiniportChange, - public CUnknown -{ - private: - KSTOPOLOGY_ENDPOINTID m_CellularRenderEndpoint; - KSTOPOLOGY_ENDPOINTID m_CellularCaptureEndpoint; - ULONG m_CellularVolume; - - FAST_MUTEX m_EndpointFastMutex; - LIST_ENTRY m_EndpointPairs; - - public: - DECLARE_STD_UNKNOWN(); - CCellularMiniportTopology - ( - _In_opt_ PUNKNOWN UnknownOuter, - _In_ PCFILTER_DESCRIPTOR *FilterDesc, - _In_ USHORT DeviceMaxChannels - ); - - ~CCellularMiniportTopology(); - - IMP_IMiniportTopology; - - NTSTATUS PropertyHandlerJackSinkInfo - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandlerJackDescription - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandlerJackDescription2 - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandlerTelephonyEndpointIdPair - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandlerTelephonyVolume - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS EventHandler_JackState - ( - _In_ PPCEVENT_REQUEST _pEventRequest - ); - - STDMETHODIMP_(NTSTATUS) UpdateTopologyJackState - ( - _In_ ULONG TelephonyId, - _In_ BOOL NewState - ); - - NTSTATUS EventHandler_Telephony - ( - _In_ PPCEVENT_REQUEST _pEventRequest - ); - - STDMETHODIMP_(NTSTATUS) NotifyEndpointPair - ( - _In_ WCHAR *RenderEndpointTopoName, - _In_ ULONG RenderEndpointNameLen, - _In_ ULONG RenderPinId, - _In_ WCHAR *CaptureEndpointTopoName, - _In_ ULONG CaptureEndpointNameLen, - _In_ ULONG CapturePinId - ); -}; - -typedef CCellularMiniportTopology *PCCellularMiniportTopology; - -NTSTATUS -CreateCellularMiniportTopology( - _Out_ PUNKNOWN * Unknown, - _In_ REFCLSID, - _In_opt_ PUNKNOWN UnknownOuter, - _When_((PoolType & NonPagedPoolMustSucceed) != 0, - __drv_reportError("Must succeed pool allocations are forbidden. " - "Allocation failures cause a system crash")) - _In_ POOL_TYPE PoolType, - _In_ PUNKNOWN UnknownAdapter, - _In_opt_ PVOID DeviceContext, - _In_ PENDPOINT_MINIPAIR MiniportPair - ); - -NTSTATUS PropertyHandler_CellularTopoFilter(_In_ PPCPROPERTY_REQUEST PropertyRequest); - -#endif // _SYSVAD_CELLULARTOPO_H_ - diff --git a/audio/sysvad/PhoneAudioSample/Cellulartoptable.h b/audio/sysvad/PhoneAudioSample/Cellulartoptable.h deleted file mode 100644 index 53eef9ae..00000000 --- a/audio/sysvad/PhoneAudioSample/Cellulartoptable.h +++ /dev/null @@ -1,267 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - cellulartoptable.h - -Abstract: - - Declaration of topology tables for the cellular endpoint. - ---*/ - -#ifndef _SYSVAD_CELLULARTOPTABLE_H_ -#define _SYSVAD_CELLULARTOPTABLE_H_ - -// {896BC350-BF57-4039-A6B6-64DCEC3AEEB8} -DEFINE_GUID(CELLULARBIDI1_CUSTOM_NAME, -0x896bc350, 0xbf57, 0x4039, 0xa6, 0xb6, 0x64, 0xdc, 0xec, 0x3a, 0xee, 0xb8); - -// {80CC64DA-166A-4A2C-ADF7-1464C49D3B0E} -DEFINE_GUID(CELLULARBIDI2_CUSTOM_NAME, -0x80cc64da, 0x166a, 0x4a2c, 0xad, 0xf7, 0x14, 0x64, 0xc4, 0x9d, 0x3b, 0xe); - -//============================================================================= -static -KSDATARANGE CellularTopoPinDataRangesBridge[] = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) - } -}; - -//============================================================================= -static -PKSDATARANGE CellularTopoPinDataRangePointersBridge[] = -{ - &CellularTopoPinDataRangesBridge[0] -}; - -//============================================================================= -static -PCPIN_DESCRIPTOR CellularTopoMiniportPins[] = -{ - // KSPIN_TOPO_BIDI1 - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(CellularTopoPinDataRangePointersBridge), // DataRangesCount - CellularTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_IN, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSNODETYPE_TELEPHONY_BIDI, // Category - &CELLULARBIDI1_CUSTOM_NAME, // Name - 0 // Reserved - } - }, - // KSPIN_TOPO_BIDI1_BRIDGE - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(CellularTopoPinDataRangePointersBridge), // DataRangesCount - CellularTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_OUT, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSCATEGORY_AUDIO, // Category - NULL, // Name - 0 // Reserved - } - }, - // KSPIN_TOPO_BIDI2 - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(CellularTopoPinDataRangePointersBridge), // DataRangesCount - CellularTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_IN, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSNODETYPE_TELEPHONY_BIDI, // Category - &CELLULARBIDI2_CUSTOM_NAME, // Name - 0 // Reserved - } - }, - // KSPIN_TOPO_BIDI2_BRIDGE - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(CellularTopoPinDataRangePointersBridge), // DataRangesCount - CellularTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_OUT, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSCATEGORY_AUDIO, // Category - NULL, // Name - 0 // Reserved - } - } -}; - -//============================================================================= -static -KSJACK_DESCRIPTION CellularJackDesc = -{ - KSAUDIO_SPEAKER_MONO, - 0x0000, // no color - eConnTypeUnknown, - eGeoLocNotApplicable, - eGenLocInternal, - ePortConnUnknown, - TRUE // NOTE: cellular jacks should be "unplugged" at boot, and only changed to active during a call. - // However, for convienience during development, the jack state is set to active at boot for this milestone. -}; - -static -KSJACK_DESCRIPTION CellularJackDesc2 = -{ - KSAUDIO_SPEAKER_MONO, - 0x0000, // no color - eConnTypeUnknown, - eGeoLocNotApplicable, - eGenLocInternal, - ePortConnUnknown, - TRUE // NOTE: cellular jacks should be "unplugged" at boot, and only changed to active during a call. - // However, for convienience during development, the jack state is set to active at boot for this milestone. -}; - - -// Only return a KSJACK_DESCRIPTION for the physical bridge pin. -static -PKSJACK_DESCRIPTION CellularJackDescriptions[] = -{ - &CellularJackDesc, - NULL, - &CellularJackDesc2, - NULL -}; - -//============================================================================= -static -PCCONNECTION_DESCRIPTOR CellularTopoMiniportConnections[] = -{ - // FromNode, FromPin, ToNode, ToPin - { PCFILTER_NODE, KSPIN_TOPO_BIDI1, PCFILTER_NODE, KSPIN_TOPO_BIDI1_BRIDGE}, - { PCFILTER_NODE, KSPIN_TOPO_BIDI2, PCFILTER_NODE, KSPIN_TOPO_BIDI2_BRIDGE} -}; - - -//============================================================================= -static -PCPROPERTY_ITEM PropertiesCellularTopoFilter[] = -{ - { - &KSPROPSETID_Jack, - KSPROPERTY_JACK_DESCRIPTION, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_CellularTopoFilter - }, - { - &KSPROPSETID_Jack, - KSPROPERTY_JACK_DESCRIPTION2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_CellularTopoFilter - }, - { - &KSPROPSETID_TelephonyTopology, - KSPROPERTY_TELEPHONY_ENDPOINTIDPAIR, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_CellularTopoFilter - }, - { - &KSPROPSETID_TelephonyTopology, - KSPROPERTY_TELEPHONY_VOLUME, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_CellularTopoFilter - } -}; - -NTSTATUS CCellularMiniportWaveRT_EventHandler_JackState -( - _In_ PPCEVENT_REQUEST EventRequest -); - -NTSTATUS CCellularMiniportWaveRT_EventHandler_Telephony -( - _In_ PPCEVENT_REQUEST EventRequest -); - - -static PCEVENT_ITEM TelephonyEvents[] = -{ - { - &KSEVENTSETID_PinCapsChange, // Something changed - KSEVENT_PINCAPS_JACKINFOCHANGE, // Jack Info Changes - KSEVENT_TYPE_ENABLE | KSEVENT_TYPE_BASICSUPPORT, - CCellularMiniportWaveRT_EventHandler_JackState - }, - { - &KSEVENTSETID_Telephony, - KSEVENT_TELEPHONY_ENDPOINTPAIRS_CHANGED, - KSEVENT_TYPE_ENABLE | KSEVENT_TYPE_BASICSUPPORT, - CCellularMiniportWaveRT_EventHandler_Telephony - } -}; - -/***************************************************************************** - * PropertiesTopologyFilter - ***************************************************************************** - * Automation table for jack descripton/detection. - */ -DEFINE_PCAUTOMATION_TABLE_PROP_EVENT(AutomationCellularTopoFilter, PropertiesCellularTopoFilter, TelephonyEvents); - - -//============================================================================= -static -PCFILTER_DESCRIPTOR CellularTopoMiniportFilterDescriptor = -{ - 0, // Version - &AutomationCellularTopoFilter, // AutomationTable - sizeof(PCPIN_DESCRIPTOR), // PinSize - SIZEOF_ARRAY(CellularTopoMiniportPins), // PinCount - CellularTopoMiniportPins, // Pins - sizeof(PCNODE_DESCRIPTOR), // NodeSize - 0, // NodeCount - NULL, // Nodes - SIZEOF_ARRAY(CellularTopoMiniportConnections), // ConnectionCount - CellularTopoMiniportConnections, // Connections - 0, // CategoryCount - NULL // Categories -}; - -#endif // _SYSVAD_CELLULARTOPTABLE_H_ - - diff --git a/audio/sysvad/PhoneAudioSample/Cellularwavtable.h b/audio/sysvad/PhoneAudioSample/Cellularwavtable.h deleted file mode 100644 index 806cb05d..00000000 --- a/audio/sysvad/PhoneAudioSample/Cellularwavtable.h +++ /dev/null @@ -1,286 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - cellularwavtable.h - -Abstract: - - Declaration of wave miniport tables for the cellular endpoint. - ---*/ - -#ifndef _SYSVAD_CELLULARWAVTABLE_H_ -#define _SYSVAD_CELLULARWAVTABLE_H_ - - -#define CELLULAR_DEVICE_MAX_CHANNELS 1 // Max Channels. - -#define CELLULAR_CAPTURE_MAX_CHANNELS 1 // Max Channels. -#define CELLULAR_CAPTURE_MIN_BITS_PER_SAMPLE 16 // Min Bits Per Sample -#define CELLULAR_CAPTURE_MAX_BITS_PER_SAMPLE 16 // Max Bits Per Sample -#define CELLULAR_CAPTURE_MIN_SAMPLE_RATE 16000 // Min Sample Rate -#define CELLULAR_CAPTURE_MAX_SAMPLE_RATE 16000 // Max Sample Rate - -// -// Max # of pin instances. -// -#define CELLULAR_MAX_INPUT_SYSTEM_STREAMS 1 - - -//============================================================================= -static -KSDATAFORMAT_WAVEFORMATEXTENSIBLE CellularCapturePinSupportedDeviceFormats[] = -{ - { // 0 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 16000, - 32000, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, -}; - -// -// Supported modes (only on streaming pins). -// -static -MODE_AND_DEFAULT_FORMAT CellularCapturePinSupportedDeviceModes[] = -{ - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_RAW, - &CellularCapturePinSupportedDeviceFormats[SIZEOF_ARRAY(CellularCapturePinSupportedDeviceFormats) - 1].DataFormat - } -}; - -//============================================================================= -// The entries here must follow the same order as the filter's pin -// descriptor array. -// -static -PIN_DEVICE_FORMATS_AND_MODES CellularPinDeviceFormatsAndModes[] = -{ - { // BIDI - TelephonyBidiPin, - CellularCapturePinSupportedDeviceFormats, - SIZEOF_ARRAY(CellularCapturePinSupportedDeviceFormats), - CellularCapturePinSupportedDeviceModes, - SIZEOF_ARRAY(CellularCapturePinSupportedDeviceModes) - }, - { - BridgePin, - NULL, - 0, - NULL, - 0, - } -}; - -//============================================================================= -static -KSDATARANGE_AUDIO CellularPinDataRangesStream[] = -{ - { // 0 - { - sizeof(KSDATARANGE_AUDIO), - KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - CELLULAR_CAPTURE_MAX_CHANNELS, - CELLULAR_CAPTURE_MIN_BITS_PER_SAMPLE, - CELLULAR_CAPTURE_MAX_BITS_PER_SAMPLE, - CELLULAR_CAPTURE_MIN_SAMPLE_RATE, - CELLULAR_CAPTURE_MAX_SAMPLE_RATE - } -}; - -static -PKSDATARANGE CellularPinDataRangePointersBiDiStream[] = -{ - PKSDATARANGE(&CellularPinDataRangesStream[0]), - PKSDATARANGE(&PinDataRangeAttributeList) -}; - -//============================================================================= -static -KSDATARANGE CellularPinDataRangesBridge[] = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) - } -}; - -static -PKSDATARANGE CellularPinDataRangePointersBridge[] = -{ - &CellularPinDataRangesBridge[0] -}; - - -//============================================================================= -static -PCPIN_DESCRIPTOR CellularWaveMiniportPins[] = -{ - // Wave Out Streaming Pin (Renderer) KSPIN_WAVE_BIDI - { - CELLULAR_MAX_INPUT_SYSTEM_STREAMS, - CELLULAR_MAX_INPUT_SYSTEM_STREAMS, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(CellularPinDataRangePointersBiDiStream), - CellularPinDataRangePointersBiDiStream, - KSPIN_DATAFLOW_OUT, - KSPIN_COMMUNICATION_SINK, - &KSCATEGORY_AUDIO, - NULL, - 0 - } - }, - // Wave Out Bridge Pin (Renderer) KSPIN_WAVE_BIDI_BRIDGE - { - 0, - 0, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(CellularPinDataRangePointersBridge), - CellularPinDataRangePointersBridge, - KSPIN_DATAFLOW_IN, - KSPIN_COMMUNICATION_NONE, - &KSCATEGORY_AUDIO, - NULL, - 0 - } - } -}; - -//============================================================================= -// -// Note: -// -// ----- -// | | -// BiDi pin 1 <--| |<-- 0 BiDi bridge pin -// ----- - -static -PCCONNECTION_DESCRIPTOR CellularWaveMiniportConnections[] = -{ - { PCFILTER_NODE, KSPIN_WAVE_BIDI_BRIDGE, PCFILTER_NODE, KSPIN_WAVE_BIDI } -}; - -//============================================================================= -static -PCPROPERTY_ITEM PropertiesCellularWaveFilter[] = -{ - { - &KSPROPSETID_Pin, - KSPROPERTY_PIN_PROPOSEDATAFORMAT, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - }, - { - &KSPROPSETID_Pin, - KSPROPERTY_PIN_PROPOSEDATAFORMAT2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - }, - { - &KSPROPSETID_TelephonyControl, - KSPROPERTY_TELEPHONY_PROVIDERID, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_CellularWaveFilter - }, - { - &KSPROPSETID_TelephonyControl, - KSPROPERTY_TELEPHONY_CALLINFO, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_CellularWaveFilter - }, - { - &KSPROPSETID_TelephonyControl, - KSPROPERTY_TELEPHONY_CALLCONTROL, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_CellularWaveFilter - }, - { - &KSPROPSETID_TelephonyControl, - KSPROPERTY_TELEPHONY_PROVIDERCHANGE, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_CellularWaveFilter - }, - { - &KSPROPSETID_TelephonyControl, - KSPROPERTY_TELEPHONY_CALLHOLD, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_CellularWaveFilter - }, - { - &KSPROPSETID_TelephonyControl, - KSPROPERTY_TELEPHONY_MUTE_TX, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_CellularWaveFilter - }, -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationCellularWaveFilter, PropertiesCellularWaveFilter); - -//============================================================================= -static -PCFILTER_DESCRIPTOR CellularWaveMiniportFilterDescriptor = -{ - 0, // Version - &AutomationCellularWaveFilter, // AutomationTable - sizeof(PCPIN_DESCRIPTOR), // PinSize - SIZEOF_ARRAY(CellularWaveMiniportPins), // PinCount - CellularWaveMiniportPins, // Pins - sizeof(PCNODE_DESCRIPTOR), // NodeSize - 0, // NodeCount - NULL, // Nodes - SIZEOF_ARRAY(CellularWaveMiniportConnections), // ConnectionCount - CellularWaveMiniportConnections, // Connections - 0, // CategoryCount - NULL // Categories - use defaults (audio, render, capture) -}; - -#endif // _SYSVAD_CELLULARWAVTABLE_H_ - diff --git a/audio/sysvad/PhoneAudioSample/FMTopTable.h b/audio/sysvad/PhoneAudioSample/FMTopTable.h deleted file mode 100644 index ae8ddf9e..00000000 --- a/audio/sysvad/PhoneAudioSample/FMTopTable.h +++ /dev/null @@ -1,199 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - fmtoptable.h - -Abstract: - - Declaration of topology tables for the fm endpoint. - ---*/ - -#ifndef _SYSVAD_FMTOPTABLE_H_ -#define _SYSVAD_FMTOPTABLE_H_ - -// {344EC7D7-F209-4FC4-B6C1-B324E8309E8D} -DEFINE_GUID(FMRX_CUSTOM_NAME, - 0x344ec7d7, 0xf209, 0x4fc4, 0xb6, 0xc1, 0xb3, 0x24, 0xe8, 0x30, 0x9e, 0x8d); - -//============================================================================= -static -KSDATARANGE FmTopoPinDataRangesBridge[] = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) - } -}; - -//============================================================================= -static -PKSDATARANGE FmTopoPinDataRangePointersBridge[] = -{ - &FmTopoPinDataRangesBridge[0] -}; - -//============================================================================= -static -PCPIN_DESCRIPTOR FmTopoMiniportPins[] = -{ - // KSPIN_TOPO_FMRX - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(FmTopoPinDataRangePointersBridge), // DataRangesCount - FmTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_IN, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSNODETYPE_FM_RX, // Category - &FMRX_CUSTOM_NAME, // Name - 0 // Reserved - } - }, - // KSPIN_TOPO_FMRX_BRIDGE - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(FmTopoPinDataRangePointersBridge), // DataRangesCount - FmTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_OUT, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSCATEGORY_AUDIO, // Category - NULL, // Name - 0 // Reserved - } - }, -}; - -//============================================================================= -static -KSJACK_DESCRIPTION FmRxJackDesc = -{ - KSAUDIO_SPEAKER_STEREO, - 0x0000, // no color - eConnTypeOtherAnalog, - eGeoLocNotApplicable, - eGenLocInternal, - ePortConnUnknown, - FALSE -}; - -// Only return a KSJACK_DESCRIPTION for the physical bridge pin. -static -PKSJACK_DESCRIPTION FmJackDescriptions[] = -{ - &FmRxJackDesc, - NULL, -}; - -//============================================================================= -static -PCCONNECTION_DESCRIPTOR FmTopoMiniportConnections[] = -{ - // FromNode, FromPin, ToNode, ToPin - { PCFILTER_NODE, KSPIN_TOPO_FMRX, PCFILTER_NODE, KSPIN_TOPO_FMRX_BRIDGE}, -}; - - -//============================================================================= -static -PCPROPERTY_ITEM PropertiesFmTopoFilter[] = -{ - { - &KSPROPSETID_Jack, - KSPROPERTY_JACK_DESCRIPTION, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_FmRxTopoFilter - }, - { - &KSPROPSETID_Jack, - KSPROPERTY_JACK_DESCRIPTION2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_FmRxTopoFilter - }, - { - &KSPROPSETID_FMRXTopology, - KSPROPERTY_FMRX_ENDPOINTID, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_FmRxTopoFilter - }, - { - &KSPROPSETID_FMRXTopology, - KSPROPERTY_FMRX_VOLUME, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_FmRxTopoFilter - }, - { - &KSPROPSETID_FMRXTopology, - KSPROPERTY_FMRX_ANTENNAENDPOINTID, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_FmRxTopoFilter - }, -}; - -NTSTATUS CFmMiniportWaveRT_EventHandler_JackState -( - _In_ PPCEVENT_REQUEST EventRequest -); - -static PCEVENT_ITEM FmRxJackInfoChangeEvent[] = -{ - { - &KSEVENTSETID_PinCapsChange, // Something changed - KSEVENT_PINCAPS_JACKINFOCHANGE, // Jack Info Changes - KSEVENT_TYPE_ENABLE | KSEVENT_TYPE_BASICSUPPORT, - CFmMiniportWaveRT_EventHandler_JackState - } -}; - -/***************************************************************************** - * PropertiesTopologyFilter - ***************************************************************************** - * Automation table for jack descripton/detection. - */ -DEFINE_PCAUTOMATION_TABLE_PROP_EVENT(AutomationFmTopoFilter, PropertiesFmTopoFilter, FmRxJackInfoChangeEvent); - - -//============================================================================= -static -PCFILTER_DESCRIPTOR FmTopoMiniportFilterDescriptor = -{ - 0, // Version - &AutomationFmTopoFilter, // AutomationTable - sizeof(PCPIN_DESCRIPTOR), // PinSize - SIZEOF_ARRAY(FmTopoMiniportPins), // PinCount - FmTopoMiniportPins, // Pins - sizeof(PCNODE_DESCRIPTOR), // NodeSize - 0, // NodeCount - NULL, // Nodes - SIZEOF_ARRAY(FmTopoMiniportConnections), // ConnectionCount - FmTopoMiniportConnections, // Connections - 0, // CategoryCount - NULL // Categories -}; - -#endif // _SYSVAD_FMTOPTABLE_H_ - - diff --git a/audio/sysvad/PhoneAudioSample/FMTopo.cpp b/audio/sysvad/PhoneAudioSample/FMTopo.cpp deleted file mode 100644 index 9c43168f..00000000 --- a/audio/sysvad/PhoneAudioSample/FMTopo.cpp +++ /dev/null @@ -1,985 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - fmtopo.cpp - -Abstract: - - Implementation of topology miniport for the fm endpoint. - ---*/ - -#pragma warning (disable : 4127) - -#include <sysvad.h> -#include "simple.h" -#include "mintopo.h" -#include "fmtopo.h" -#include "fmtoptable.h" -#include <ntstrsafe.h> - - -#pragma code_seg("PAGE") - -// Table of valid render endpoints for FM -KSTOPOLOGY_ENDPOINTID g_EndpointList[] = -{ - { SPEAKER_TOPONAME, KSPIN_TOPO_LINEOUT_DEST }, - { SPEAKER_HEADSET_TOPONAME, KSPIN_TOPO_LINEOUT_DEST }, - { HOSTRENDER_TOPONAME, HOSTRENDER_PIN } -}; - -KSTOPOLOGY_ENDPOINTID g_AntennaEndpoint = -{ - SPEAKER_HEADSET_TOPONAME, KSPIN_TOPO_LINEOUT_DEST -}; - -//============================================================================= -NTSTATUS -CreateFmMiniportTopology -( - _Out_ PUNKNOWN * Unknown, - _In_ REFCLSID, - _In_opt_ PUNKNOWN UnknownOuter, - _When_((PoolType & NonPagedPoolMustSucceed) != 0, - __drv_reportError("Must succeed pool allocations are forbidden. " - "Allocation failures cause a system crash")) - _In_ POOL_TYPE PoolType, - _In_ PUNKNOWN UnknownAdapter, - _In_opt_ PVOID DeviceContext, - _In_ PENDPOINT_MINIPAIR MiniportPair -) -/*++ - -Routine Description: - - Creates a new topology miniport. - -Arguments: - - Unknown - - - RefclsId - - - UnknownOuter - - - PoolType - - - UnknownAdapter - - - DeviceContext - - - MiniportPair - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(Unknown); - ASSERT(MiniportPair); - - UNREFERENCED_PARAMETER(UnknownAdapter); - UNREFERENCED_PARAMETER(DeviceContext); - - CFmMiniportTopology *obj = - new (PoolType, MINWAVERT_POOLTAG) - CFmMiniportTopology( UnknownOuter, - MiniportPair->TopoDescriptor, - MiniportPair->DeviceMaxChannels); - if (NULL == obj) - { - return STATUS_INSUFFICIENT_RESOURCES; - } - - obj->AddRef(); - *Unknown = reinterpret_cast<IUnknown*>(obj); - - return STATUS_SUCCESS; -} // CreateFmMiniportTopology - -CFmMiniportTopology::CFmMiniportTopology -( - _In_opt_ PUNKNOWN UnknownOuter, - _In_ PCFILTER_DESCRIPTOR *FilterDesc, - _In_ USHORT DeviceMaxChannels -) -: CUnknown(UnknownOuter), - CMiniportTopologySYSVAD(FilterDesc, DeviceMaxChannels), - m_FmRxVolume(FMRX_VOLUME_MAXIMUM) -{ - PAGED_CODE(); - - memcpy(&m_FmRxTargetEndpoint, &g_EndpointList[0], sizeof(m_FmRxTargetEndpoint)); -} - - -//============================================================================= -CFmMiniportTopology::~CFmMiniportTopology -( - void -) -/*++ - -Routine Description: - - Topology miniport destructor - -Arguments: - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - DPF_ENTER(("[CFmMiniportTopology::~CFmMiniportTopology]")); -} // ~CFmMiniportTopology - -//============================================================================= -NTSTATUS -CFmMiniportTopology::DataRangeIntersection -( - _In_ ULONG PinId, - _In_ PKSDATARANGE ClientDataRange, - _In_ PKSDATARANGE MyDataRange, - _In_ ULONG OutputBufferLength, - _Out_writes_bytes_to_opt_(OutputBufferLength, *ResultantFormatLength) - PVOID ResultantFormat OPTIONAL, - _Out_ PULONG ResultantFormatLength -) -/*++ - -Routine Description: - - The DataRangeIntersection function determines the highest quality - intersection of two data ranges. - -Arguments: - - PinId - Pin for which data intersection is being determined. - - ClientDataRange - Pointer to KSDATARANGE structure which contains the data range - submitted by client in the data range intersection property - request. - - MyDataRange - Pin's data range to be compared with client's data range. - - OutputBufferLength - Size of the buffer pointed to by the resultant format - parameter. - - ResultantFormat - Pointer to value where the resultant format should be - returned. - - ResultantFormatLength - Actual length of the resultant format that is placed - at ResultantFormat. This should be less than or equal - to OutputBufferLength. - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - return - CMiniportTopologySYSVAD::DataRangeIntersection - ( - PinId, - ClientDataRange, - MyDataRange, - OutputBufferLength, - ResultantFormat, - ResultantFormatLength - ); -} // DataRangeIntersection - -//============================================================================= -STDMETHODIMP -CFmMiniportTopology::GetDescription -( - _Out_ PPCFILTER_DESCRIPTOR * OutFilterDescriptor -) -/*++ - -Routine Description: - - The GetDescription function gets a pointer to a filter description. - It provides a location to deposit a pointer in miniport's description - structure. This is the placeholder for the FromNode or ToNode fields in - connections which describe connections to the filter's pins. - -Arguments: - - OutFilterDescriptor - Pointer to the filter description. - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(OutFilterDescriptor); - - return CMiniportTopologySYSVAD::GetDescription(OutFilterDescriptor); -} // GetDescription - -//============================================================================= -STDMETHODIMP -CFmMiniportTopology::Init -( - _In_ PUNKNOWN UnknownAdapter, - _In_ PRESOURCELIST ResourceList, - _In_ PPORTTOPOLOGY Port_ -) -/*++ - -Routine Description: - - The Init function initializes the miniport. Callers of this function - should run at IRQL PASSIVE_LEVEL - -Arguments: - - UnknownAdapter - A pointer to the Iuknown interface of the adapter object. - - ResourceList - Pointer to the resource list to be supplied to the miniport - during initialization. The port driver is free to examine the - contents of the ResourceList. The port driver will not be - modify the ResourceList contents. - - Port - Pointer to the topology port object that is linked with this miniport. - -Return Value: - - NT status code. - ---*/ -{ - UNREFERENCED_PARAMETER(ResourceList); - - PAGED_CODE(); - - ASSERT(UnknownAdapter); - ASSERT(Port_); - - DPF_ENTER(("[CFmMiniportTopology::Init]")); - - NTSTATUS ntStatus; - - ntStatus = - CMiniportTopologySYSVAD::Init - ( - UnknownAdapter, - Port_ - ); - - return ntStatus; -} // Init - -//============================================================================= -STDMETHODIMP -CFmMiniportTopology::NonDelegatingQueryInterface -( - _In_ REFIID Interface, - _COM_Outptr_ PVOID * Object -) -/*++ - -Routine Description: - - QueryInterface for MiniportTopology - -Arguments: - - Interface - GUID of the interface - - Object - interface object to be returned. - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(Object); - - if (IsEqualGUIDAligned(Interface, IID_IUnknown)) - { - *Object = PVOID(PUNKNOWN(this)); - } - else if (IsEqualGUIDAligned(Interface, IID_IMiniport)) - { - *Object = PVOID(PMINIPORT(this)); - } - else if (IsEqualGUIDAligned(Interface, IID_IMiniportTopology)) - { - *Object = PVOID(PMINIPORTTOPOLOGY(this)); - } - else if (IsEqualGUIDAligned(Interface, IID_IFmTopology)) - { - *Object = PVOID(PFMTOPOLOGY(this)); - } - else - { - *Object = NULL; - } - - if (*Object) - { - // We reference the interface for the caller. - PUNKNOWN(*Object)->AddRef(); - return(STATUS_SUCCESS); - } - - return(STATUS_INVALID_PARAMETER); -} // NonDelegatingQueryInterface - -//============================================================================= -NTSTATUS -CFmMiniportTopology::PropertyHandlerJackDescription -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_Jack, KSPROPERTY_JACK_DESCRIPTION ) - -Arguments: - - PropertyRequest - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandlerJackDescription]")); - - ULONG cJackDescriptions = ARRAYSIZE(FmJackDescriptions); - PKSJACK_DESCRIPTION * JackDescriptions = FmJackDescriptions; - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - ULONG nPinId = (ULONG)-1; - - if (PropertyRequest->InstanceSize >= sizeof(ULONG)) - { - nPinId = *(PULONG(PropertyRequest->Instance)); - - if ((nPinId < cJackDescriptions) && (JackDescriptions[nPinId] != NULL)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupport - ( - PropertyRequest, - KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET, - VT_ILLEGAL - ); - } - else - { - ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM) + sizeof(KSJACK_DESCRIPTION); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value; - PKSJACK_DESCRIPTION pDesc = (PKSJACK_DESCRIPTION)(pMI+1); - - pMI->Size = cbNeeded; - pMI->Count = 1; - - RtlCopyMemory(pDesc, JackDescriptions[nPinId], sizeof(KSJACK_DESCRIPTION)); - ntStatus = STATUS_SUCCESS; - } - } - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -CFmMiniportTopology::PropertyHandlerJackDescription2 -( -_In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - -Handles ( KSPROPSETID_Jack, KSPROPERTY_JACK_DESCRIPTION2 ) - -Arguments: - -PropertyRequest - - -Return Value: - -NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandlerJackDescription2]")); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - ULONG nPinId = (ULONG)-1; - - ULONG cJackDescriptions = ARRAYSIZE(FmJackDescriptions); - PKSJACK_DESCRIPTION * JackDescriptions = FmJackDescriptions; - - if (PropertyRequest->InstanceSize >= sizeof(ULONG)) - { - nPinId = *(PULONG(PropertyRequest->Instance)); - - if ((nPinId < cJackDescriptions) && (JackDescriptions[nPinId] != NULL)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupport - ( - PropertyRequest, - KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET, - VT_ILLEGAL - ); - } - else - { - ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM)+sizeof(KSJACK_DESCRIPTION2); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value; - PKSJACK_DESCRIPTION2 pDesc = (PKSJACK_DESCRIPTION2)(pMI + 1); - - pMI->Size = cbNeeded; - pMI->Count = 1; - - RtlZeroMemory(pDesc, sizeof(KSJACK_DESCRIPTION2)); - - // - // Specifies the lower 16 bits of the DWORD parameter. This parameter indicates whether - // the jack is currently active, streaming, idle, or hardware not ready. - // - pDesc->DeviceStateInfo = 0; - - // - // From MSDN: - // "If an audio device lacks jack presence detection, the IsConnected member of - // the KSJACK_DESCRIPTION structure must always be set to TRUE. To remove the - // ambiguity that results from this dual meaning of the TRUE value for IsConnected, - // a client application can call IKsJackDescription2::GetJackDescription2 to read - // the JackCapabilities flag of the KSJACK_DESCRIPTION2 structure. If this flag has - // the JACKDESC2_PRESENCE_DETECT_CAPABILITY bit set, it indicates that the endpoint - // does in fact support jack presence detection. In that case, the return value of - // the IsConnected member can be interpreted to accurately reflect the insertion status - // of the jack." - // - // Bit definitions: - // 0x00000001 - JACKDESC2_PRESENCE_DETECT_CAPABILITY - // 0x00000002 - JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY - // - pDesc->JackCapabilities = JACKDESC2_PRESENCE_DETECT_CAPABILITY; - - ntStatus = STATUS_SUCCESS; - } - } - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -CFmMiniportTopology::PropertyHandlerFmRxEndpointId -( -_In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - -Handles ( KSPROPSETID_FMRXTopology, KSPROPERTY_FMRX_ENDPOINTID ) - -Arguments: - -PropertyRequest - -Return Value: - -NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandlerFmRxEndpointId]")); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = STATUS_INVALID_PARAMETER; - ULONG ulExpectedSize = (sizeof(KSPROPERTY_DESCRIPTION)+sizeof(KSPROPERTY_MEMBERSHEADER)+sizeof(g_EndpointList)); - - if (PropertyRequest->ValueSize >= sizeof(KSPROPERTY_DESCRIPTION)) - { - // if return buffer can hold a KSPROPERTY_DESCRIPTION, return it - // - PKSPROPERTY_DESCRIPTION PropDesc = - PKSPROPERTY_DESCRIPTION(PropertyRequest->Value); - - PropDesc->AccessFlags = KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_GET; - PropDesc->DescriptionSize = ulExpectedSize; - PropDesc->PropTypeSet.Set = KSPROPSETID_FMRXTopology; - PropDesc->PropTypeSet.Id = KSPROPERTY_FMRX_ENDPOINTID; - PropDesc->PropTypeSet.Flags = 0; - PropDesc->MembersListCount = 1; - PropDesc->Reserved = 0; - - // buffer is big enough to hold the full data, add that - if (PropertyRequest->ValueSize >= ulExpectedSize) - { - PKSPROPERTY_MEMBERSHEADER MembersHeader = - PKSPROPERTY_MEMBERSHEADER(PropDesc + 1); - - MembersHeader->MembersFlags = KSPROPERTY_MEMBER_VALUES; - MembersHeader->MembersSize = sizeof(KSTOPOLOGY_ENDPOINTID); - MembersHeader->MembersCount = SIZEOF_ARRAY(g_EndpointList); - MembersHeader->Flags = 0; - - memcpy(MembersHeader + 1, g_EndpointList, sizeof(g_EndpointList)); - - // tell them how much space we really used, which controls how much data is copied into the user buffer. - PropertyRequest->ValueSize = ulExpectedSize; - } - else - { - // tell them how much space we really used, which controls how much data is copied into the user buffer. - PropertyRequest->ValueSize = sizeof(KSPROPERTY_DESCRIPTION); - } - - ntStatus = STATUS_SUCCESS; - } - else if (PropertyRequest->ValueSize >= sizeof(ULONG)) - { - // if return buffer can hold a ULONG, return the access flags. - *(PULONG(PropertyRequest->Value)) = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_GET; - PropertyRequest->ValueSize = sizeof(ULONG); - ntStatus = STATUS_SUCCESS; - } - else if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = ulExpectedSize; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - } - else - { - ntStatus = - ValidatePropertyParams - ( - PropertyRequest, - sizeof(KSTOPOLOGY_ENDPOINTID), - 0 - ); - - if (NT_SUCCESS(ntStatus)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSTOPOLOGY_ENDPOINTID EndpointId = static_cast<PKSTOPOLOGY_ENDPOINTID>(PropertyRequest->Value); - - memcpy(EndpointId, &m_FmRxTargetEndpoint, sizeof(m_FmRxTargetEndpoint)); - - ntStatus = STATUS_SUCCESS; - } - else if (PropertyRequest->Verb & KSPROPERTY_TYPE_SET) - { - PKSTOPOLOGY_ENDPOINTID EndpointId = static_cast<PKSTOPOLOGY_ENDPOINTID>(PropertyRequest->Value); - - ntStatus = STATUS_INVALID_PARAMETER; - for (int i = 0; i < SIZEOF_ARRAY(g_EndpointList); i++) - { - if (g_EndpointList[i].PinId == EndpointId->PinId && - 0 == _wcsnicmp(g_EndpointList[i].TopologyName, EndpointId->TopologyName, MAX_PATH)) - { - memcpy(&m_FmRxTargetEndpoint, EndpointId, sizeof(m_FmRxTargetEndpoint)); - - if (HOSTRENDER_PIN == EndpointId->PinId && - 0 == _wcsnicmp(HOSTRENDER_TOPONAME, EndpointId->TopologyName, MAX_PATH)) - { - // This is an indication that FM audio is being routed through OS (For example, user plugs in - // USB headset for FM audio) and driver must stop rendering FM audio to any physical audio endpoint. - } - else - { - // Route FM audio to this new endpoint. - } - ntStatus = STATUS_SUCCESS; - break; - } - } - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -CFmMiniportTopology::PropertyHandlerFmRxVolume -( -_In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - -Handles ( KSPROPSETID_FMRXTopology, KSPROPERTY_FMRX_VOLUME ) - -Arguments: - -PropertyRequest - -Return Value: - -NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandlerFmRxVolume]")); - - UNREFERENCED_PARAMETER(PropertyRequest); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupportVolume - ( - PropertyRequest, - 1 // FM audio technically supports Stereo, but we only support a single volume - ); - - ULONG cbFullProperty = - sizeof(KSPROPERTY_DESCRIPTION)+ - sizeof(KSPROPERTY_MEMBERSHEADER)+ - sizeof(KSPROPERTY_STEPPING_LONG); - - if (NT_SUCCESS(ntStatus) && PropertyRequest->ValueSize >= cbFullProperty) - { - // Access proper values - PKSPROPERTY_DESCRIPTION PropDesc = - PKSPROPERTY_DESCRIPTION(PropertyRequest->Value); - PKSPROPERTY_MEMBERSHEADER Members = - PKSPROPERTY_MEMBERSHEADER(PropDesc + 1); - PKSPROPERTY_STEPPING_LONG Range = - PKSPROPERTY_STEPPING_LONG(Members + 1); - - Members->Flags = 0; - - Range->Bounds.SignedMaximum = FMRX_VOLUME_MAXIMUM; - Range->Bounds.SignedMinimum = FMRX_VOLUME_MINIMUM; - Range->SteppingDelta = FMRX_VOLUME_STEPPING; - } - } - else - { - ntStatus = - ValidatePropertyParams - ( - PropertyRequest, - sizeof(LONG), // volume value is a LONG - 0 // No support for channel since this is a property - // on the topo filter, not a volume node. - ); - - - if (NT_SUCCESS(ntStatus)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - LONG* volume = (LONG*)PropertyRequest->Value; - // Return current FM volume - *volume = m_FmRxVolume; - ntStatus = STATUS_SUCCESS; - } - else if (PropertyRequest->Verb & KSPROPERTY_TYPE_SET) - { - LONG* volume = (LONG*)PropertyRequest->Value; - - LONG normalizedVolume = - VALUE_NORMALIZE_IN_RANGE_EX - ( - *volume, - FMRX_VOLUME_MINIMUM, - FMRX_VOLUME_MAXIMUM, - FMRX_VOLUME_STEPPING - ); - if (normalizedVolume == *volume) - { - m_FmRxVolume = *volume; - ntStatus = STATUS_SUCCESS; - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -CFmMiniportTopology::PropertyHandlerFmRxAntennaEndpointId -( -_In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - -Handles ( KSPROPSETID_FMRXTopology, KSPROPERTY_FMRX_ANTENNAENDPOINTID ) - -Arguments: - -PropertyRequest - -Return Value: - -NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandlerFmRxAntennaEndpoint]")); - - UNREFERENCED_PARAMETER(PropertyRequest); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ULONG flags = PropertyRequest->PropertyItem->Flags; - ntStatus = PropertyHandler_BasicSupport(PropertyRequest, flags, VT_ILLEGAL); - } - else - { - ntStatus = - ValidatePropertyParams - ( - PropertyRequest, - sizeof(KSTOPOLOGY_ENDPOINTID), - 0 - ); - - - if (NT_SUCCESS(ntStatus)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSTOPOLOGY_ENDPOINTID pEndpointId = (PKSTOPOLOGY_ENDPOINTID)PropertyRequest->Value; - memcpy(pEndpointId, &g_AntennaEndpoint, sizeof(*pEndpointId)); - ntStatus = STATUS_SUCCESS; - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -PropertyHandler_FmRxTopoFilter -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Redirects property request to miniport object - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandler_FmRxTopoFilter]")); - - // PropertryRequest structure is filled by portcls. - // MajorTarget is a pointer to miniport object for miniports. - // - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - PCFmMiniportTopology pMiniport = (PCFmMiniportTopology)PropertyRequest->MajorTarget; - - if (IsEqualGUIDAligned(*PropertyRequest->PropertyItem->Set, KSPROPSETID_Jack)) - { - if (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION) - { - ntStatus = pMiniport->PropertyHandlerJackDescription(PropertyRequest); - } - else if (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION2) - { - ntStatus = pMiniport->PropertyHandlerJackDescription2(PropertyRequest); - } - } - else if (IsEqualGUIDAligned(*PropertyRequest->PropertyItem->Set, KSPROPSETID_FMRXTopology)) - { - if (PropertyRequest->PropertyItem->Id == KSPROPERTY_FMRX_ENDPOINTID) - { - ntStatus = pMiniport->PropertyHandlerFmRxEndpointId(PropertyRequest); - } - else if (PropertyRequest->PropertyItem->Id == KSPROPERTY_FMRX_VOLUME) - { - ntStatus = pMiniport->PropertyHandlerFmRxVolume(PropertyRequest); - } - else if (PropertyRequest->PropertyItem->Id == KSPROPERTY_FMRX_ANTENNAENDPOINTID) - { - ntStatus = pMiniport->PropertyHandlerFmRxAntennaEndpointId(PropertyRequest); - } - } - - return ntStatus; -} // PropertyHandler_FmRxTopoFilter - -#pragma code_seg("PAGE") -STDMETHODIMP_(NTSTATUS) -CFmMiniportTopology::UpdateTopologyJackState -( - _In_ BOOL NewState -) -{ - PAGED_CODE (); - - FmRxJackDesc.IsConnected = NewState; - - // we have multiple pins which share the same jack state, - // notify for every pin using that jack state - GenerateEventList( - (GUID*)&KSEVENTSETID_PinCapsChange, // event set. NULL is a wild card for all events. - KSEVENT_PINCAPS_JACKINFOCHANGE, // event ID. - TRUE, // use pid ID. - KSPIN_TOPO_FMRX, // pin ID. - FALSE, // do not use node ID. - ULONG(-1)); // node ID, not used. - - return STATUS_SUCCESS; -} - -#pragma code_seg() -NTSTATUS CFmMiniportWaveRT_EventHandler_JackState -( - _In_ PPCEVENT_REQUEST EventRequest -) -{ - CFmMiniportTopology* miniport = reinterpret_cast<CFmMiniportTopology*>(EventRequest->MajorTarget); - return miniport->EventHandler_JackState(EventRequest); -} - -NTSTATUS CFmMiniportTopology::EventHandler_JackState -( - _In_ PPCEVENT_REQUEST EventRequest -) -{ - if (EventRequest->Verb == PCEVENT_VERB_ADD) - { - m_PortEvents->AddEventToEventList(EventRequest->EventEntry); - } - - return STATUS_SUCCESS; -} - - diff --git a/audio/sysvad/PhoneAudioSample/FMTopo.h b/audio/sysvad/PhoneAudioSample/FMTopo.h deleted file mode 100644 index ae279bf1..00000000 --- a/audio/sysvad/PhoneAudioSample/FMTopo.h +++ /dev/null @@ -1,152 +0,0 @@ - -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - FMtopo.h - -Abstract: - - Declaration of topology miniport for the fm endpoint. - ---*/ - -#ifndef _SYSVAD_FMTOPO_H_ -#define _SYSVAD_FMTOPO_H_ - -#include "basetopo.h" - -// make sure all of these names matches with KSNAME_* in the inf's [Strings] section -#define SPEAKER_TOPONAME L"TopologySpeaker" -#define SPEAKER_HEADSET_TOPONAME L"TopologySpeakerHeadset" - -// Special routing endpoint -#define HOSTRENDER_TOPONAME L"HostRender" -#define HOSTRENDER_PIN 0 - -// FM Volume Stepping information -#define FMRX_VOLUME_MAXIMUM 0 // 0 dB -#define FMRX_VOLUME_MINIMUM (-96 * 0x10000) // -96 dB -#define FMRX_VOLUME_STEPPING (0x8000) // 0.5 dB steps - - -//============================================================================= -// Defines -//============================================================================= -// {949F42F1-A5F5-4FBD-B4BB-C543ACC24AE0} -DEFINE_GUID(IID_IFmTopology, - 0x949f42f1, 0xa5f5, 0x4fbd, 0xb4, 0xbb, 0xc5, 0x43, 0xac, 0xc2, 0x4a, 0xe0); - - -//============================================================================= -// Interfaces -//============================================================================= - -/////////////////////////////////////////////////////////////////////////////// -// IFmTopology -// -DECLARE_INTERFACE_(IFmTopology, IMiniportTopology) -{ - STDMETHOD_(NTSTATUS, UpdateTopologyJackState) - ( - THIS_ - _In_ BOOL NewState - ) PURE; -}; - -typedef IFmTopology *PFMTOPOLOGY; - -//============================================================================= -// Classes -//============================================================================= - -/////////////////////////////////////////////////////////////////////////////// -// CFmMiniportTopology -// - -class CFmMiniportTopology : - public CMiniportTopologySYSVAD, - public IFmTopology, - public CUnknown -{ - private: - KSTOPOLOGY_ENDPOINTID m_FmRxTargetEndpoint; - KSTOPOLOGY_ENDPOINTID m_FmRxAntennaEndpoint; - ULONG m_FmRxVolume; - - public: - DECLARE_STD_UNKNOWN(); - CFmMiniportTopology - ( - _In_opt_ PUNKNOWN UnknownOuter, - _In_ PCFILTER_DESCRIPTOR *FilterDesc, - _In_ USHORT DeviceMaxChannels - ); - - ~CFmMiniportTopology(); - - IMP_IMiniportTopology; - - NTSTATUS PropertyHandlerJackSinkInfo - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandlerJackDescription - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandlerJackDescription2 - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandlerFmRxEndpointId - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandlerFmRxVolume - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandlerFmRxAntennaEndpointId - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS EventHandler_JackState - ( - _In_ PPCEVENT_REQUEST _pEventRequest - ); - - STDMETHODIMP_(NTSTATUS) UpdateTopologyJackState - ( - _In_ BOOL NewState - ); -}; - -typedef CFmMiniportTopology *PCFmMiniportTopology; - -NTSTATUS -CreateFmMiniportTopology( - _Out_ PUNKNOWN * Unknown, - _In_ REFCLSID, - _In_opt_ PUNKNOWN UnknownOuter, - _When_((PoolType & NonPagedPoolMustSucceed) != 0, - __drv_reportError("Must succeed pool allocations are forbidden. " - "Allocation failures cause a system crash")) - _In_ POOL_TYPE PoolType, - _In_ PUNKNOWN UnknownAdapter, - _In_opt_ PVOID DeviceContext, - _In_ PENDPOINT_MINIPAIR MiniportPair - ); - -NTSTATUS PropertyHandler_FmRxTopoFilter(_In_ PPCPROPERTY_REQUEST PropertyRequest); - -#endif // _SYSVAD_FMTOPO_H_ - diff --git a/audio/sysvad/PhoneAudioSample/FMWavTable.h b/audio/sysvad/PhoneAudioSample/FMWavTable.h deleted file mode 100644 index 6ef9fb46..00000000 --- a/audio/sysvad/PhoneAudioSample/FMWavTable.h +++ /dev/null @@ -1,254 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - fmwavtable.h - -Abstract: - - Declaration of wave miniport tables for the fm endpoint. - - Note: the FM in this sample shows how to do h/w loopback - for non-offloaded devices. - ---*/ - -#ifndef _SYSVAD_FMWAVTABLE_H_ -#define _SYSVAD_FMWAVTABLE_H_ - - -#define FMRX_DEVICE_MAX_CHANNELS 2 // Max Channels. - -#define FMRX_MAX_CHANNELS 2 // Max Channels. -#define FMRX_MIN_BITS_PER_SAMPLE 16 // Min Bits Per Sample -#define FMRX_MAX_BITS_PER_SAMPLE 16 // Max Bits Per Sample -#define FMRX_MIN_SAMPLE_RATE 48000 // Min Sample Rate -#define FMRX_MAX_SAMPLE_RATE 48000 // Max Sample Rate -#define FMRX_MAX_INPUT_SYSTEM_STREAMS 1 - - -//============================================================================= -static -KSDATAFORMAT_WAVEFORMATEXTENSIBLE FmRxPinSupportedDeviceFormats[] = -{ - { // 0 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 48000, - 192000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - } -}; - -// -// Supported modes (only on streaming pins). -// -static -MODE_AND_DEFAULT_FORMAT FmRxPinSupportedDeviceModes[] = -{ - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_RAW, - &FmRxPinSupportedDeviceFormats[SIZEOF_ARRAY(FmRxPinSupportedDeviceFormats) - 1].DataFormat - } -}; - -//============================================================================= -// The entries here must follow the same order as the filter's pin -// descriptor array. -// -static -PIN_DEVICE_FORMATS_AND_MODES FmRxPinDeviceFormatsAndModes[] = -{ - { // RX - SystemCapturePin, - FmRxPinSupportedDeviceFormats, - SIZEOF_ARRAY(FmRxPinSupportedDeviceFormats), - FmRxPinSupportedDeviceModes, - SIZEOF_ARRAY(FmRxPinSupportedDeviceModes) - }, - { - BridgePin, - NULL, - 0, - NULL, - 0, - }, -}; - -//============================================================================= -static -KSDATARANGE_AUDIO FmPinDataRangesStream[] = -{ - { // 0 - { - sizeof(KSDATARANGE_AUDIO), - KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - FMRX_MAX_CHANNELS, - FMRX_MIN_BITS_PER_SAMPLE, - FMRX_MAX_BITS_PER_SAMPLE, - FMRX_MIN_SAMPLE_RATE, - FMRX_MAX_SAMPLE_RATE - }, -}; - -static -PKSDATARANGE FmPinDataRangePointersStream[] = -{ - PKSDATARANGE(&FmPinDataRangesStream[0]), - PKSDATARANGE(&PinDataRangeAttributeList) -}; - -//============================================================================= -static -KSDATARANGE FmPinDataRangesBridge[] = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) - } -}; - -static -PKSDATARANGE FmPinDataRangePointersBridge[] = -{ - &FmPinDataRangesBridge[0] -}; - - -//============================================================================= -static -PCPIN_DESCRIPTOR FmWaveMiniportPins[] = -{ - // Wave In Streaming Pin KSPIN_WAVE_FMRX - { - FMRX_MAX_INPUT_SYSTEM_STREAMS, - FMRX_MAX_INPUT_SYSTEM_STREAMS, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(FmPinDataRangePointersStream), - FmPinDataRangePointersStream, - KSPIN_DATAFLOW_OUT, - KSPIN_COMMUNICATION_SINK, - &KSCATEGORY_AUDIO, - NULL, - 0 - } - }, - // Wave In Bridge Pin KSPIN_WAVE_FMRX_BRIDGE - { - 0, - 0, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(FmPinDataRangePointersBridge), - FmPinDataRangePointersBridge, - KSPIN_DATAFLOW_IN, - KSPIN_COMMUNICATION_NONE, - &KSCATEGORY_AUDIO, - NULL, - 0 - } - }, -}; - -//============================================================================= -// -// ----- -// | | -// FM RX bridge pin 1 -->| |--> 0 FM RX pin -// | | -// ----- - -static -PCCONNECTION_DESCRIPTOR FmWaveMiniportConnections[] = -{ - { PCFILTER_NODE, KSPIN_WAVE_FMRX_BRIDGE, PCFILTER_NODE, KSPIN_WAVE_FMRX }, -}; - -//============================================================================= -static -PCPROPERTY_ITEM PropertiesFmWaveFilter[] = -{ - { - &KSPROPSETID_Pin, - KSPROPERTY_PIN_PROPOSEDATAFORMAT, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - }, - { - &KSPROPSETID_Pin, - KSPROPERTY_PIN_PROPOSEDATAFORMAT2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - }, - { - &KSPROPSETID_FMRXControl, - KSPROPERTY_FMRX_STATE, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_FmRxWaveFilter - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationFmWaveFilter, PropertiesFmWaveFilter); - -//============================================================================= -static -PCFILTER_DESCRIPTOR FmWaveMiniportFilterDescriptor = -{ - 0, // Version - &AutomationFmWaveFilter, // AutomationTable - sizeof(PCPIN_DESCRIPTOR), // PinSize - SIZEOF_ARRAY(FmWaveMiniportPins), // PinCount - FmWaveMiniportPins, // Pins - sizeof(PCNODE_DESCRIPTOR), // NodeSize - 0, // NodeCount - NULL, // Nodes - SIZEOF_ARRAY(FmWaveMiniportConnections), // ConnectionCount - FmWaveMiniportConnections, // Connections - 0, // CategoryCount - NULL // Categories - use defaults (audio, render, capture) -}; - -#endif // _SYSVAD_FMWAVTABLE_H_ - diff --git a/audio/sysvad/PhoneAudioSample/FMWave.cpp b/audio/sysvad/PhoneAudioSample/FMWave.cpp deleted file mode 100644 index 4d571f57..00000000 --- a/audio/sysvad/PhoneAudioSample/FMWave.cpp +++ /dev/null @@ -1,389 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - fmwave.cpp - -Abstract: - - Implementation of wavert miniport for fm - ---*/ - -#pragma warning (disable : 4127) - -#include <sysvad.h> -#include "simple.h" -#include "FmWave.h" -#include "FmTopo.h" -#include "FmToptable.h" - -//============================================================================= -// CFmMiniportWaveRT -//============================================================================= - -//============================================================================= -#pragma code_seg("PAGE") -NTSTATUS -CreateFmMiniportWaveRT -( - _Out_ PUNKNOWN * Unknown, - _In_ REFCLSID, - _In_opt_ PUNKNOWN UnknownOuter, - _When_((PoolType & NonPagedPoolMustSucceed) != 0, - __drv_reportError("Must succeed pool allocations are forbidden. " - "Allocation failures cause a system crash")) - _In_ POOL_TYPE PoolType, - _In_ PUNKNOWN UnknownAdapter, - _In_opt_ PVOID DeviceContext, - _In_ PENDPOINT_MINIPAIR MiniportPair -) -/*++ - -Routine Description: - - Create the wavert miniport. - -Arguments: - - Unknown - - - RefClsId - - - UnknownOuter - - - PoolType - - - UnkownAdapter - - - DeviceContext - - - MiniportPair - - -Return Value: - - NT status code. - ---*/ -{ - UNREFERENCED_PARAMETER(UnknownOuter); - - PAGED_CODE(); - - ASSERT(Unknown); - ASSERT(MiniportPair); - - CMiniportWaveRT *obj = new (PoolType, MINWAVERT_POOLTAG) CFmMiniportWaveRT - ( - UnknownAdapter, - MiniportPair, - DeviceContext - ); - if (NULL == obj) - { - return STATUS_INSUFFICIENT_RESOURCES; - } - - obj->AddRef(); - *Unknown = reinterpret_cast<IUnknown*>(obj); - - return STATUS_SUCCESS; -} - -//============================================================================= -#pragma code_seg("PAGE") -CFmMiniportWaveRT::~CFmMiniportWaveRT -( - void -) -/*++ - -Routine Description: - - Destructor for wavert miniport - -Arguments: - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - DPF_ENTER(("[CFmMiniportWaveRT::~CFmMiniportWaveRT]")); - -} // ~CFmMiniportWaveRT - - -//============================================================================= -#pragma code_seg("PAGE") -STDMETHODIMP -CFmMiniportWaveRT::NonDelegatingQueryInterface -( - _In_ REFIID Interface, - _COM_Outptr_ PVOID * Object -) -/*++ - -Routine Description: - - QueryInterface for CFmMiniportWaveRT - -Arguments: - - Interface - GUID of the interface - - Object - interface object to be returned. - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(Object); - - if (IsEqualGUIDAligned(Interface, IID_IAdapterPowerManagement)) - { - *Object = PVOID(PADAPTERPOWERMANAGEMENT(this)); - } - else - { - *Object = NULL; - } - - if (*Object) - { - // We reference the interface for the caller. - - PUNKNOWN(*Object)->AddRef(); - return STATUS_SUCCESS; - } - - return CMiniportWaveRT::NonDelegatingQueryInterface(Interface, Object); -} - -#pragma code_seg("PAGE") -NTSTATUS -PropertyHandler_FmRxWaveFilter -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Redirects general property request to miniport object - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - CFmMiniportWaveRT* pWaveHelper = reinterpret_cast<CFmMiniportWaveRT*>(PropertyRequest->MajorTarget); - - if (pWaveHelper == NULL) - { - return STATUS_INVALID_PARAMETER; - } - - pWaveHelper->AddRef(); - - if (pWaveHelper->m_DeviceType == eFmRxDevice && - IsEqualGUIDAligned(*PropertyRequest->PropertyItem->Set, KSPROPSETID_FMRXControl)) - { - switch (PropertyRequest->PropertyItem->Id) - { - case KSPROPERTY_FMRX_STATE: - ntStatus = pWaveHelper->PropertyHandler_FmRxState(PropertyRequest); - break; - - default: - DPF(D_TERSE, ("[PropertyHandler_FmRxWaveFilter: Invalid Device Request")); - } - } - else - { - ntStatus = PropertyHandler_WaveFilter(PropertyRequest); - } - - pWaveHelper->Release(); - - return ntStatus; -} // PropertyHandler_FmRxWaveFilter - -//============================================================================= -#pragma code_seg("PAGE") -NTSTATUS -CFmMiniportWaveRT::PropertyHandler_FmRxState -( -_In_ PPCPROPERTY_REQUEST PropertyRequest -) -{ - NTSTATUS ntStatus = STATUS_INVALID_PARAMETER; - - PAGED_CODE(); - - DPF_ENTER(("[CFmMiniportWaveRT::PropertyHandler_FmRxState]")); - - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ULONG flags = PropertyRequest->PropertyItem->Flags; - ntStatus = PropertyHandler_BasicSupport(PropertyRequest, flags, VT_ILLEGAL); - } - else - { - ntStatus = - ValidatePropertyParams - ( - PropertyRequest, - sizeof(BOOL), - 0 - ); - - if (NT_SUCCESS(ntStatus)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - BOOL* fmrxState = (BOOL*)PropertyRequest->Value; - *fmrxState = m_bFmRxState; - ntStatus = STATUS_SUCCESS; - } - else if (PropertyRequest->Verb & KSPROPERTY_TYPE_SET) - { - BOOL fmrxNewState = *(BOOL*)PropertyRequest->Value; - if (fmrxNewState == m_bFmRxState) - { - ntStatus = STATUS_SUCCESS; - } - else - { - // Turn on FM hardware - m_bFmRxState = fmrxNewState; - - // NOTE: Set the Jack state to Active ONLY if the driver supports - // recording FM data. If the driver doesn't support recording FM - // data, the jack state should never be changed to Active - ntStatus = UpdateTopologyJackState(m_bFmRxState); - - // When we're using FM, we need idle power management disabled. - // passing true here enables power management, false disables. - // when FM is enabled (true), we want to pass false do disable idle - // power management - m_pAdapterCommon->SetIdlePowerManagement(m_pMiniportPair, m_bFmRxState?FALSE:TRUE); - } - } - else - { - ntStatus = STATUS_INVALID_PARAMETER; - } - } - } - - return ntStatus; -} // PropertyHandler_FmRxState - - - -#pragma code_seg("PAGE") -NTSTATUS -CFmMiniportWaveRT::UpdateTopologyJackState -( - _In_ BOOL NewState -) -{ - PAGED_CODE (); - NTSTATUS ntStatus = STATUS_SUCCESS; - IUnknown *pUnknown = NULL; - IFmTopology *pFmTopology = NULL; - - // GetFilters returns the topology port, then topology miniport, then wave port, then wave miniport. - // we only need the topology miniport. - ntStatus = m_pAdapterCommon->GetFilters(m_pMiniportPair, NULL, &pUnknown, NULL, NULL); - if (NT_SUCCESS(ntStatus)) - { - ntStatus = pUnknown->QueryInterface(IID_IFmTopology, (PVOID *)&pFmTopology); - if (NT_SUCCESS(ntStatus)) - { - ntStatus = pFmTopology->UpdateTopologyJackState(NewState); - } - } - - SAFE_RELEASE(pFmTopology); - SAFE_RELEASE(pUnknown); - - return STATUS_SUCCESS; -} -#pragma code_seg() - - -//============================================================================= -#pragma code_seg() -STDMETHODIMP_(void) -CFmMiniportWaveRT::PowerChangeState -( - _In_ POWER_STATE NewState -) -{ - DPF_ENTER(("[CFmMiniportWaveRT::PowerChangeState]")); - UNREFERENCED_PARAMETER(NewState); - - /* - Turn on and off fm specific hardware here, if applicable. - */ - -} // PowerStateChange - -//============================================================================= -#pragma code_seg() -STDMETHODIMP_(NTSTATUS) -CFmMiniportWaveRT::QueryDeviceCapabilities -( - _Inout_updates_bytes_(sizeof(DEVICE_CAPABILITIES)) PDEVICE_CAPABILITIES PowerDeviceCaps -) -{ - UNREFERENCED_PARAMETER(PowerDeviceCaps); - - /* - Unused at the miniport layer. Any device capabilities should be reported in CAdapterCommon - */ - - return (STATUS_SUCCESS); -} // QueryDeviceCapabilities - -//============================================================================= -#pragma code_seg() -STDMETHODIMP_(NTSTATUS) -CFmMiniportWaveRT::QueryPowerChangeState -( - _In_ POWER_STATE NewStateQuery -) -{ - UNREFERENCED_PARAMETER(NewStateQuery); - - DPF_ENTER(("[CFmMiniportWaveRT::QueryPowerChangeState]")); - - // if we're in a call state other than disabled, then we need the hardware turned on - if (m_bFmRxState) - { - return STATUS_RESOURCE_IN_USE; - } - - return STATUS_SUCCESS; -} // QueryPowerChangeState - - diff --git a/audio/sysvad/PhoneAudioSample/FMWave.h b/audio/sysvad/PhoneAudioSample/FMWave.h deleted file mode 100644 index 1134b680..00000000 --- a/audio/sysvad/PhoneAudioSample/FMWave.h +++ /dev/null @@ -1,84 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - fmwave.h - -Abstract: - - Definition of wavert miniport class for fm - ---*/ - -#include "MinWaveRT.h" - -#ifndef _SYSVAD_FMMINWAVERT_H_ -#define _SYSVAD_FMMINWAVERT_H_ - -NTSTATUS -CreateFmMiniportWaveRT -( - _Out_ PUNKNOWN * Unknown, - _In_ REFCLSID, - _In_opt_ PUNKNOWN UnknownOuter, - _When_((PoolType & NonPagedPoolMustSucceed) != 0, - __drv_reportError("Must succeed pool allocations are forbidden. " - "Allocation failures cause a system crash")) - _In_ POOL_TYPE PoolType, - _In_ PUNKNOWN UnknownAdapter, - _In_opt_ PVOID DeviceContext, - _In_ PENDPOINT_MINIPAIR MiniportPair -); - -//============================================================================= -// Classes -//============================================================================= -/////////////////////////////////////////////////////////////////////////////// -// CFmMiniportWaveRT -// -class CFmMiniportWaveRT : - public CMiniportWaveRT, - public IAdapterPowerManagement -{ -private: - BOOL m_bFmRxState; - -public: - DECLARE_STD_UNKNOWN(); - IMP_IAdapterPowerManagement; - - CFmMiniportWaveRT( - _In_ PUNKNOWN UnknownAdapter, - _In_ PENDPOINT_MINIPAIR MiniportPair, - _In_opt_ PVOID DeviceContext - ) - :CMiniportWaveRT(UnknownAdapter, MiniportPair, DeviceContext), - m_bFmRxState(FALSE) - { - } - - ~CFmMiniportWaveRT(); - - friend NTSTATUS PropertyHandler_FmRxWaveFilter - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - -public: - NTSTATUS PropertyHandler_FmRxState - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - -private: - NTSTATUS UpdateTopologyJackState - ( - _In_ BOOL NewState - ); -}; -typedef CFmMiniportWaveRT *PCFmMiniportWaveRT; - -#endif // _SYSVAD_FMMINWAVERT_H_ - diff --git a/audio/sysvad/PhoneAudioSample/PhoneAudioSample.rc b/audio/sysvad/PhoneAudioSample/PhoneAudioSample.rc deleted file mode 100644 index b81a3c58..00000000 --- a/audio/sysvad/PhoneAudioSample/PhoneAudioSample.rc +++ /dev/null @@ -1,30 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - PhoneAudioSample.rc - -Abstract: - - ---*/ - -#include <windows.h> - -#include <ntverp.h> - -#define VER_FILETYPE VFT_DRV -#define VER_FILESUBTYPE VFT2_DRV_SOUND -#define VER_FILEDESCRIPTION_STR "Microsoft Virtual Audio Phone Sample Driver" -#define VER_INTERNALNAME_STR "PhoneAudioSample.sys" -#define VER_ORIGINALFILENAME_STR "PhoneAudioSample.sys" - -#define VER_LEGALCOPYRIGHT_YEARS "2013" -#define VER_LEGALCOPYRIGHT_STR "Copyright (C) Microsoft Corp." VER_LEGALCOPYRIGHT_YEARS - -#include "common.ver" - - - diff --git a/audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj b/audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj deleted file mode 100644 index 49ccee70..00000000 --- a/audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj +++ /dev/null @@ -1,419 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ARM64"> - <Configuration>Debug</Configuration> - <Platform>ARM64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ARM64"> - <Configuration>Release</Configuration> - <Platform>ARM64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{FABA4668-DB5E-4F6C-9D25-A0B25AD084EE}</ProjectGuid> - <RootNamespace>$(MSBuildProjectName)</RootNamespace> - <KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR> - <SupportsPackaging>false</SupportsPackaging> - <RequiresPackageProject>true</RequiresPackageProject> - <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration> - <Platform Condition="'$(Platform)' == ''">Win32</Platform> - <SampleGuid>{791E3C3E-132D-46C6-9624-C868C54139F0}</SampleGuid> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <TargetVersion>Windows10</TargetVersion> - <UseDebugLibraries>False</UseDebugLibraries> - <DriverTargetPlatform>Universal</DriverTargetPlatform> - <DriverType>KMDF</DriverType> - <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset> - <ConfigurationType>Driver</ConfigurationType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> - <TargetVersion>Windows10</TargetVersion> - <UseDebugLibraries>False</UseDebugLibraries> - <DriverTargetPlatform>Universal</DriverTargetPlatform> - <DriverType>KMDF</DriverType> - <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset> - <ConfigurationType>Driver</ConfigurationType> - </PropertyGroup> - <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <TargetVersion>Windows10</TargetVersion> - <UseDebugLibraries>True</UseDebugLibraries> - <DriverTargetPlatform>Universal</DriverTargetPlatform> - <DriverType>KMDF</DriverType> - <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset> - <ConfigurationType>Driver</ConfigurationType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> - <TargetVersion>Windows10</TargetVersion> - <UseDebugLibraries>True</UseDebugLibraries> - <DriverTargetPlatform>Universal</DriverTargetPlatform> - <DriverType>KMDF</DriverType> - <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset> - <ConfigurationType>Driver</ConfigurationType> - </PropertyGroup> - <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <TargetVersion>Windows10</TargetVersion> - <UseDebugLibraries>False</UseDebugLibraries> - <DriverTargetPlatform>Universal</DriverTargetPlatform> - <DriverType>KMDF</DriverType> - <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset> - <ConfigurationType>Driver</ConfigurationType> - </PropertyGroup> - <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <TargetVersion>Windows10</TargetVersion> - <UseDebugLibraries>True</UseDebugLibraries> - <DriverTargetPlatform>Universal</DriverTargetPlatform> - <DriverType>KMDF</DriverType> - <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset> - <ConfigurationType>Driver</ConfigurationType> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <PropertyGroup> - <OutDir>$(IntDir)</OutDir> - </PropertyGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> - </ImportGroup> - <ItemGroup Label="WrappedTaskItems" /> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\portcls.lib;$(DDK_LIB_PATH)\stdunk.lib;$(DDK_LIB_PATH)\libcntpr.lib</AdditionalDependencies> - </Link> - <ResourceCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </ResourceCompile> - <ClCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> - <WarningLevel>Level4</WarningLevel> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </ClCompile> - <Midl> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </Midl> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\portcls.lib;$(DDK_LIB_PATH)\stdunk.lib;$(DDK_LIB_PATH)\libcntpr.lib</AdditionalDependencies> - </Link> - <ResourceCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </ResourceCompile> - <ClCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> - <WarningLevel>Level4</WarningLevel> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </ClCompile> - <Midl> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </Midl> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\portcls.lib;$(DDK_LIB_PATH)\stdunk.lib;$(DDK_LIB_PATH)\libcntpr.lib</AdditionalDependencies> - </Link> - <ResourceCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </ResourceCompile> - <ClCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> - <WarningLevel>Level4</WarningLevel> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </ClCompile> - <Midl> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </Midl> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\portcls.lib;$(DDK_LIB_PATH)\stdunk.lib;$(DDK_LIB_PATH)\libcntpr.lib</AdditionalDependencies> - </Link> - <ResourceCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </ResourceCompile> - <ClCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> - <WarningLevel>Level4</WarningLevel> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </ClCompile> - <Midl> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </Midl> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\portcls.lib;$(DDK_LIB_PATH)\stdunk.lib;$(DDK_LIB_PATH)\libcntpr.lib</AdditionalDependencies> - </Link> - <ResourceCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </ResourceCompile> - <ClCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> - <WarningLevel>Level4</WarningLevel> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </ClCompile> - <Midl> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </Midl> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\portcls.lib;$(DDK_LIB_PATH)\stdunk.lib;$(DDK_LIB_PATH)\libcntpr.lib</AdditionalDependencies> - </Link> - <ResourceCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </ResourceCompile> - <ClCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> - <WarningLevel>Level4</WarningLevel> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </ClCompile> - <Midl> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);..</AdditionalIncludeDirectories> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_WIN32;UNICODE;_UNICODE;PC_IMPLEMENTATION</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);DEBUG_LEVEL=DEBUGLVL_TERSE</PreprocessorDefinitions> - </Midl> - </ItemDefinitionGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <TargetName>PhoneAudioSample</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> - <TargetName>PhoneAudioSample</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <TargetName>PhoneAudioSample</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> - <TargetName>PhoneAudioSample</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <TargetName>PhoneAudioSample</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <TargetName>PhoneAudioSample</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);.\..\EndpointsCommon\$(IntDir)\EndpointsCommon.lib</AdditionalDependencies> - </Link> - <ClCompile> - <!-- - Use one of the following pre-processor defines to select the right power management: - - _USE_IPortClsRuntimePower - - _USE_SingleComponentMultiFxStates - Note that the single-component/multi-state feature requires also a registry - value set via the INF. The name of the registry value is SingleComponentMultiFxStates. - see INF file for more info. - --> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower;_NEW_DELETE_OPERATORS_</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon;.</AdditionalIncludeDirectories> - <ExceptionHandling> - </ExceptionHandling> - </ClCompile> - <Midl> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> - </Midl> - <ResourceCompile> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> - </ResourceCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);.\..\EndpointsCommon\$(IntDir)\EndpointsCommon.lib</AdditionalDependencies> - </Link> - <ClCompile> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower;_NEW_DELETE_OPERATORS_</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon;.</AdditionalIncludeDirectories> - <ExceptionHandling> - </ExceptionHandling> - <DisableSpecificWarnings>4595;%(DisableSpecificWarnings)</DisableSpecificWarnings> - </ClCompile> - <Midl> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> - </Midl> - <ResourceCompile> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> - </ResourceCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);.\..\EndpointsCommon\$(IntDir)\EndpointsCommon.lib</AdditionalDependencies> - </Link> - <ClCompile> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower;_NEW_DELETE_OPERATORS_</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon;.</AdditionalIncludeDirectories> - <ExceptionHandling> - </ExceptionHandling> - </ClCompile> - <Midl> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> - </Midl> - <ResourceCompile> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> - </ResourceCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);.\..\EndpointsCommon\$(IntDir)\EndpointsCommon.lib</AdditionalDependencies> - </Link> - <ClCompile> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower;_NEW_DELETE_OPERATORS_</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon;.</AdditionalIncludeDirectories> - <ExceptionHandling> - </ExceptionHandling> - <DisableSpecificWarnings>4595;%(DisableSpecificWarnings)</DisableSpecificWarnings> - </ClCompile> - <Midl> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> - </Midl> - <ResourceCompile> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> - </ResourceCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);.\..\EndpointsCommon\$(IntDir)\EndpointsCommon.lib</AdditionalDependencies> - </Link> - <ClCompile> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower;_NEW_DELETE_OPERATORS_</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon;.</AdditionalIncludeDirectories> - <ExceptionHandling> - </ExceptionHandling> - </ClCompile> - <Midl> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> - </Midl> - <ResourceCompile> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> - </ResourceCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);.\..\EndpointsCommon\$(IntDir)\EndpointsCommon.lib</AdditionalDependencies> - </Link> - <ClCompile> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower;_NEW_DELETE_OPERATORS_</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon;.</AdditionalIncludeDirectories> - <ExceptionHandling> - </ExceptionHandling> - <DisableSpecificWarnings>4595;%(DisableSpecificWarnings)</DisableSpecificWarnings> - </ClCompile> - <Midl> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> - </Midl> - <ResourceCompile> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS;SYSVAD_USB_SIDEBAND;_USE_IPortClsRuntimePower</PreprocessorDefinitions> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> - </ResourceCompile> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\adapter.cpp" /> - <ClCompile Include="..\basetopo.cpp" /> - <ClCompile Include="..\BthhfpDevice.cpp" /> - <ClCompile Include="..\usbhsdevice.cpp" /> - <ClCompile Include="..\common.cpp" /> - <ClCompile Include="..\hw.cpp" /> - <ClCompile Include="..\kshelper.cpp" /> - <ClCompile Include="..\savedata.cpp" /> - <ClCompile Include="..\tonegenerator.cpp" /> - <ClCompile Include="cellulartopo.cpp" /> - <ClCompile Include="cellularwave.cpp" /> - <ClCompile Include="fmtopo.cpp" /> - <ClCompile Include="fmwave.cpp" /> - <ClCompile Include="handsetmictopo.cpp" /> - <ClCompile Include="handsetspeakertopo.cpp" /> - <ClCompile Include="michstopo.cpp" /> - <ClCompile Include="speakerhstopo.cpp" /> - <ResourceCompile Include="PhoneAudioSample.rc" /> - </ItemGroup> - <ItemGroup> - <Inf Exclude="@(Inx)" Include="*.inx" /> - <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" /> - </ItemGroup> - <ItemGroup> - <None Exclude="@(None)" Include="*.txt;*.htm;*.html" /> - <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" /> - <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" /> - </ItemGroup> - <ItemGroup> - <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> -</Project> diff --git a/audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj.Filters b/audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj.Filters deleted file mode 100644 index c57611a0..00000000 --- a/audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj.Filters +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions> - <UniqueIdentifier>{6BC89CB0-7C76-439F-8D55-E3125E355A42}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files"> - <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> - <UniqueIdentifier>{02E55FC1-89F6-4E2D-A10B-A6476FF89B86}</UniqueIdentifier> - </Filter> - <Filter Include="Resource Files"> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions> - <UniqueIdentifier>{B836489B-8D2E-41DD-A232-0D6C40243B08}</UniqueIdentifier> - </Filter> - <Filter Include="Driver Files"> - <Extensions>inf;inv;inx;mof;mc;</Extensions> - <UniqueIdentifier>{850E3B99-7C84-454B-9E04-6A7CF9852E6C}</UniqueIdentifier> - </Filter> - </ItemGroup> - <ItemGroup> - <ClCompile Include="..\*.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="*.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ResourceCompile Include="PhoneAudioSample.rc"> - <Filter>Resource Files</Filter> - </ResourceCompile> - </ItemGroup> - <ItemGroup> - <ClInclude Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd"> - <Filter>Header Files</Filter> - </ClInclude> - </ItemGroup> - <ItemGroup> - <Inf Include="*.inx"> - <Filter>Driver Files</Filter> - </Inf> - </ItemGroup> -</Project> diff --git a/audio/sysvad/PhoneAudioSample/handsetmictopo.cpp b/audio/sysvad/PhoneAudioSample/handsetmictopo.cpp deleted file mode 100644 index 4e181c62..00000000 --- a/audio/sysvad/PhoneAudioSample/handsetmictopo.cpp +++ /dev/null @@ -1,274 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - handsetmictopo.cpp - -Abstract: - - Implementation of topology miniport for the handset mic (internal). - ---*/ - -#pragma warning (disable : 4127) - -#include <sysvad.h> -#include "simple.h" -#include "mintopo.h" -#include "handsetmictopo.h" -#include "handsetmictoptable.h" - - -#pragma code_seg("PAGE") - -//============================================================================= -NTSTATUS -PropertyHandler_HandsetMicJackDescription -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_Jack, KSPROPERTY_JACK_DESCRIPTION ) - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandler_HandsetMicJackDescription]")); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - ULONG nPinId = (ULONG)-1; - - ULONG cJackDescriptions = ARRAYSIZE(HandsetMicJackDescriptions); - PKSJACK_DESCRIPTION * JackDescriptions = HandsetMicJackDescriptions; - - if (PropertyRequest->InstanceSize >= sizeof(ULONG)) - { - nPinId = *(PULONG(PropertyRequest->Instance)); - - if ((nPinId < cJackDescriptions) && (JackDescriptions[nPinId] != NULL)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupport - ( - PropertyRequest, - KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET, - VT_ILLEGAL - ); - } - else - { - ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM) + sizeof(KSJACK_DESCRIPTION); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value; - PKSJACK_DESCRIPTION pDesc = (PKSJACK_DESCRIPTION)(pMI+1); - - pMI->Size = cbNeeded; - pMI->Count = 1; - - RtlCopyMemory(pDesc, JackDescriptions[nPinId], sizeof(KSJACK_DESCRIPTION)); - ntStatus = STATUS_SUCCESS; - } - } - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -PropertyHandler_HandsetMicJackDescription2 -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_Jack, KSPROPERTY_JACK_DESCRIPTION2 ) - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandler_HandsetMicJackDescription2]")); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - ULONG nPinId = (ULONG)-1; - - ULONG cJackDescriptions = ARRAYSIZE(HandsetMicJackDescriptions); - PKSJACK_DESCRIPTION * JackDescriptions = HandsetMicJackDescriptions; - - if (PropertyRequest->InstanceSize >= sizeof(ULONG)) - { - nPinId = *(PULONG(PropertyRequest->Instance)); - - if ((nPinId < cJackDescriptions) && (JackDescriptions[nPinId] != NULL)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupport - ( - PropertyRequest, - KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET, - VT_ILLEGAL - ); - } - else - { - ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM) + sizeof(KSJACK_DESCRIPTION2); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value; - PKSJACK_DESCRIPTION2 pDesc = (PKSJACK_DESCRIPTION2)(pMI+1); - - pMI->Size = cbNeeded; - pMI->Count = 1; - - RtlZeroMemory(pDesc, sizeof(KSJACK_DESCRIPTION2)); - - // - // Specifies the lower 16 bits of the DWORD parameter. This parameter indicates whether - // the jack is currently active, streaming, idle, or hardware not ready. - // - pDesc->DeviceStateInfo = 0; - - // - // From MSDN: - // "If an audio device lacks jack presence detection, the IsConnected member of - // the KSJACK_DESCRIPTION structure must always be set to TRUE. To remove the - // ambiguity that results from this dual meaning of the TRUE value for IsConnected, - // a client application can call IKsJackDescription2::GetJackDescription2 to read - // the JackCapabilities flag of the KSJACK_DESCRIPTION2 structure. If this flag has - // the JACKDESC2_PRESENCE_DETECT_CAPABILITY bit set, it indicates that the endpoint - // does in fact support jack presence detection. In that case, the return value of - // the IsConnected member can be interpreted to accurately reflect the insertion status - // of the jack." - // - // Bit definitions: - // 0x00000001 - JACKDESC2_PRESENCE_DETECT_CAPABILITY - // 0x00000002 - JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY - // - pDesc->JackCapabilities = 0; - - ntStatus = STATUS_SUCCESS; - } - } - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -PropertyHandler_HandsetMicTopoFilter -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Redirects property request to miniport object - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandler_HandsetMicTopoFilter]")); - - // PropertryRequest structure is filled by portcls. - // MajorTarget is a pointer to miniport object for miniports. - // - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - - // - // This line shows how to get a pointer to the miniport topology object. - // - PCMiniportTopology pMiniport = (PCMiniportTopology)PropertyRequest->MajorTarget; - UNREFERENCED_VAR(pMiniport); - - if (IsEqualGUIDAligned(*PropertyRequest->PropertyItem->Set, KSPROPSETID_Jack)) - { - if (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION) - { - ntStatus = PropertyHandler_HandsetMicJackDescription(PropertyRequest); - } - else if (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION2) - { - ntStatus = PropertyHandler_HandsetMicJackDescription2(PropertyRequest); - } - } - - return ntStatus; -} // PropertyHandler_HandsetMicTopoFilter - -#pragma code_seg() - diff --git a/audio/sysvad/PhoneAudioSample/handsetmictopo.h b/audio/sysvad/PhoneAudioSample/handsetmictopo.h deleted file mode 100644 index 07c8ba27..00000000 --- a/audio/sysvad/PhoneAudioSample/handsetmictopo.h +++ /dev/null @@ -1,21 +0,0 @@ - -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - handsetmictopo.h - -Abstract: - - Declaration of topology miniport for the handset mic (internal). - ---*/ - -#ifndef _SYSVAD_HANDSETMICTOPO_H_ -#define _SYSVAD_HANDSETMICTOPO_H_ - -NTSTATUS PropertyHandler_HandsetMicTopoFilter(_In_ PPCPROPERTY_REQUEST PropertyRequest); - -#endif // _SYSVAD_HANDSETMICTOPO_H_ diff --git a/audio/sysvad/PhoneAudioSample/handsetmictoptable.h b/audio/sysvad/PhoneAudioSample/handsetmictoptable.h deleted file mode 100644 index 5fd70010..00000000 --- a/audio/sysvad/PhoneAudioSample/handsetmictoptable.h +++ /dev/null @@ -1,245 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - handsetmictopotable.h - -Abstract: - - Declaration of topology table for the handset mic (internal) - ---*/ - -#ifndef _SYSVAD_HANDSETMICTOPTABLE_H_ -#define _SYSVAD_HANDSETMICTOPTABLE_H_ - -// Function declarations. -NTSTATUS -PropertyHandler_HandsetMicTopoFilter( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - -//============================================================================= -static -KSDATARANGE HandsetMicTopoPinDataRangesBridge[] = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) - } -}; - -//============================================================================= -static -PKSDATARANGE HandsetMicTopoPinDataRangePointersBridge[] = -{ - &HandsetMicTopoPinDataRangesBridge[0] -}; - -//============================================================================= -static -PCPIN_DESCRIPTOR HandsetMicTopoMiniportPins[] = -{ - // KSPIN - topology filter in-pin - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(HandsetMicTopoPinDataRangePointersBridge),// DataRangesCount - HandsetMicTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_IN, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSNODETYPE_HANDSET, // Category - NULL, // Name - 0 // Reserved - } - }, - - // KSPIN - topology filter out-in - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(HandsetMicTopoPinDataRangePointersBridge),// DataRangesCount - HandsetMicTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_OUT, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSCATEGORY_AUDIO, // Category - NULL, // Name - 0 // Reserved - } - } -}; - -//============================================================================= -static -KSJACK_DESCRIPTION HandsetMicJackDesc = -{ - KSAUDIO_SPEAKER_MONO, - 0x0000, // no color - eConnTypeUnknown, - eGeoLocTop, - eGenLocInternal, - ePortConnIntegratedDevice, - TRUE -}; - -//============================================================================= -// Only return a KSJACK_DESCRIPTION for the physical bridge pin. -static -PKSJACK_DESCRIPTION HandsetMicJackDescriptions[] = -{ - &HandsetMicJackDesc, - NULL -}; - -//============================================================================= -static -PCPROPERTY_ITEM HandsetMicPropertiesVolume[] = -{ - { - &KSPROPSETID_Audio, - KSPROPERTY_AUDIO_VOLUMELEVEL, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_Topology - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationHandsetMicVolume, HandsetMicPropertiesVolume); - -//============================================================================= -static -PCPROPERTY_ITEM HandsetMicPropertiesMute[] = -{ - { - &KSPROPSETID_Audio, - KSPROPERTY_AUDIO_MUTE, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_Topology - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationHandsetMicMute, HandsetMicPropertiesMute); - -//============================================================================= -static -PCPROPERTY_ITEM HandsetMicPropertiesPeakMeter[] = -{ - { - &KSPROPSETID_Audio, - KSPROPERTY_AUDIO_PEAKMETER2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_Topology - }, - { - &KSPROPSETID_Audio, - KSPROPERTY_AUDIO_CPU_RESOURCES, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_Topology - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationHandsetMicPeakMeter, HandsetMicPropertiesPeakMeter); - -//============================================================================= -static -PCNODE_DESCRIPTOR HandsetMicTopologyNodes[] = -{ - // KSNODE_TOPO_VOLUME - { - 0, // Flags - &AutomationHandsetMicVolume, // AutomationTable - &KSNODETYPE_VOLUME, // Type - &KSAUDFNAME_MIC_VOLUME // Name - }, - // KSNODE_TOPO_MUTE - { - 0, // Flags - &AutomationHandsetMicMute, // AutomationTable - &KSNODETYPE_MUTE, // Type - &KSAUDFNAME_MIC_MUTE // Name - }, - // KSNODE_TOPO_PEAKMETER - { - 0, // Flags - &AutomationHandsetMicPeakMeter, // AutomationTable - &KSNODETYPE_PEAKMETER, // Type - &KSAUDFNAME_PEAKMETER // Name - } -}; - -C_ASSERT( KSNODE_TOPO_VOLUME == 0 ); -C_ASSERT( KSNODE_TOPO_MUTE == 1 ); -C_ASSERT( KSNODE_TOPO_PEAKMETER == 2 ); - -//============================================================================= -static -PCCONNECTION_DESCRIPTOR HandsetMicMiniportConnections[] = -{ - // FromNode, FromPin, ToNode, ToPin - { PCFILTER_NODE, KSPIN_TOPO_MIC_ELEMENTS, KSNODE_TOPO_VOLUME, 1 }, - { KSNODE_TOPO_VOLUME, 0, KSNODE_TOPO_MUTE, 1 }, - { KSNODE_TOPO_MUTE, 0, KSNODE_TOPO_PEAKMETER, 1 }, - { KSNODE_TOPO_PEAKMETER, 0, PCFILTER_NODE, KSPIN_TOPO_BRIDGE } -}; - - -//============================================================================= -static -PCPROPERTY_ITEM HandsetMicPropertiesTopoFilter[] = -{ - { - &KSPROPSETID_Jack, - KSPROPERTY_JACK_DESCRIPTION, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_HandsetMicTopoFilter - }, - { - &KSPROPSETID_Jack, - KSPROPERTY_JACK_DESCRIPTION2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_HandsetMicTopoFilter - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationHandsetMicTopoFilter, HandsetMicPropertiesTopoFilter); - -//============================================================================= -static -PCFILTER_DESCRIPTOR HandsetMicTopoMiniportFilterDescriptor = -{ - 0, // Version - &AutomationHandsetMicTopoFilter, // AutomationTable - sizeof(PCPIN_DESCRIPTOR), // PinSize - SIZEOF_ARRAY(HandsetMicTopoMiniportPins), // PinCount - HandsetMicTopoMiniportPins, // Pins - sizeof(PCNODE_DESCRIPTOR), // NodeSize - SIZEOF_ARRAY(HandsetMicTopologyNodes), // NodeCount - HandsetMicTopologyNodes, // Nodes - SIZEOF_ARRAY(HandsetMicMiniportConnections), // ConnectionCount - HandsetMicMiniportConnections, // Connections - 0, // CategoryCount - NULL // Categories -}; - -#endif // _SYSVAD_HANDSETMICTOPTABLE_H_ - diff --git a/audio/sysvad/PhoneAudioSample/handsetmicwavtable.h b/audio/sysvad/PhoneAudioSample/handsetmicwavtable.h deleted file mode 100644 index 5470e521..00000000 --- a/audio/sysvad/PhoneAudioSample/handsetmicwavtable.h +++ /dev/null @@ -1,447 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - handsetmicwavtable.h - -Abstract: - - Declaration of wave miniport tables for the handset microphone. - ---*/ - -#ifndef _SYSVAD_HANDSETMICWAVTABLE_H_ -#define _SYSVAD_HANDSETMICWAVTABLE_H_ - -// -// Handset microphone (internal) range. -// -#define HANDSETMIC_DEVICE_MAX_CHANNELS 1 // Max Channels. -#define HANDSETMIC_MIN_BITS_PER_SAMPLE_PCM 16 // Min Bits Per Sample -#define HANDSETMIC_MAX_BITS_PER_SAMPLE_PCM 16 // Max Bits Per Sample -#define HANDSETMIC_MIN_SAMPLE_RATE 8000 // Min Sample Rate -#define HANDSETMIC_MAX_SAMPLE_RATE 48000 // Max Sample Rate - -// -// Max # of pin instances. -// -#define HANDSETMIC_MAX_INPUT_STREAMS 4 - -//============================================================================= -static -KSDATAFORMAT_WAVEFORMATEXTENSIBLE HandsetMicPinSupportedDeviceFormats[] = -{ - { // 0 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 8000, - 16000, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 1 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 11025, - 22050, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 2 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 16000, - 32000, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 3 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 22050, - 44100, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 4 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 24000, - 48000, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 5 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 32000, - 64000, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 6 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 44100, - 88200, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 7 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 48000, - 96000, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - } -}; - -// -// Supported modes (only on streaming pins). -// -static -MODE_AND_DEFAULT_FORMAT HandsetMicPinSupportedDeviceModes[] = -{ - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_RAW, - &HandsetMicPinSupportedDeviceFormats[SIZEOF_ARRAY(HandsetMicPinSupportedDeviceFormats) - 1].DataFormat, // 48KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_DEFAULT, - &HandsetMicPinSupportedDeviceFormats[SIZEOF_ARRAY(HandsetMicPinSupportedDeviceFormats) - 1].DataFormat, // 48KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_SPEECH, - &HandsetMicPinSupportedDeviceFormats[2].DataFormat, // 16KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_COMMUNICATIONS, - &HandsetMicPinSupportedDeviceFormats[4].DataFormat, // 24KHz - } -}; - -// -// The entries here must follow the same order as the filter's pin -// descriptor array. -// -static -PIN_DEVICE_FORMATS_AND_MODES HandsetMicPinDeviceFormatsAndModes[] = -{ - { - BridgePin, - NULL, - 0, - NULL, - 0 - }, - { - SystemCapturePin, - HandsetMicPinSupportedDeviceFormats, - SIZEOF_ARRAY(HandsetMicPinSupportedDeviceFormats), - HandsetMicPinSupportedDeviceModes, - SIZEOF_ARRAY(HandsetMicPinSupportedDeviceModes) - } -}; - -//============================================================================= -static -KSDATARANGE_AUDIO HandsetMicPinDataRangesStream[] = -{ - { - { - sizeof(KSDATARANGE_AUDIO), - KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - HANDSETMIC_DEVICE_MAX_CHANNELS, - HANDSETMIC_MIN_BITS_PER_SAMPLE_PCM, - HANDSETMIC_MAX_BITS_PER_SAMPLE_PCM, - HANDSETMIC_MIN_SAMPLE_RATE, - HANDSETMIC_MAX_SAMPLE_RATE - }, -}; - -static -PKSDATARANGE HandsetMicPinDataRangePointersStream[] = -{ - PKSDATARANGE(&HandsetMicPinDataRangesStream[0]), - PKSDATARANGE(&PinDataRangeAttributeList), -}; - -//============================================================================= -static -KSDATARANGE HandsetMicPinDataRangesBridge[] = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) - } -}; - -static -PKSDATARANGE HandsetMicPinDataRangePointersBridge[] = -{ - &HandsetMicPinDataRangesBridge[0] -}; - -//============================================================================= -static -PCPIN_DESCRIPTOR HandsetMicWaveMiniportPins[] = -{ - // Wave In Bridge Pin (Capture - From Topology) KSPIN_WAVE_BRIDGE - { - 0, - 0, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(HandsetMicPinDataRangePointersBridge), - HandsetMicPinDataRangePointersBridge, - KSPIN_DATAFLOW_IN, - KSPIN_COMMUNICATION_NONE, - &KSCATEGORY_AUDIO, - NULL, - 0 - } - }, - - // Wave In Streaming Pin (Capture) KSPIN_WAVEIN_HOST - { - HANDSETMIC_MAX_INPUT_STREAMS, - HANDSETMIC_MAX_INPUT_STREAMS, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(HandsetMicPinDataRangePointersStream), - HandsetMicPinDataRangePointersStream, - KSPIN_DATAFLOW_OUT, - KSPIN_COMMUNICATION_SINK, - &KSCATEGORY_AUDIO, - &KSAUDFNAME_RECORDING_CONTROL, - 0 - } - } -}; - -//============================================================================= -static -PCNODE_DESCRIPTOR HandsetMicWaveMiniportNodes[] = -{ - // KSNODE_WAVE_ADC - { - 0, // Flags - NULL, // AutomationTable - &KSNODETYPE_ADC, // Type - NULL // Name - } -}; - -//============================================================================= -static -PCCONNECTION_DESCRIPTOR HandsetMicWaveMiniportConnections[] = -{ - { PCFILTER_NODE, KSPIN_WAVE_BRIDGE, KSNODE_WAVE_ADC, 1 }, - { KSNODE_WAVE_ADC, 0, PCFILTER_NODE, KSPIN_WAVEIN_HOST } -}; - -//============================================================================= -static -PCPROPERTY_ITEM PropertiesHandsetMicWaveFilter[] = -{ - { - &KSPROPSETID_General, - KSPROPERTY_GENERAL_COMPONENTID, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - }, - { - &KSPROPSETID_Pin, - KSPROPERTY_PIN_PROPOSEDATAFORMAT, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - }, - { - &KSPROPSETID_Pin, - KSPROPERTY_PIN_PROPOSEDATAFORMAT2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationHandsetMicWaveFilter, PropertiesHandsetMicWaveFilter); - -//============================================================================= -static -PCFILTER_DESCRIPTOR HandsetMicWaveMiniportFilterDescriptor = -{ - 0, // Version - &AutomationHandsetMicWaveFilter, // AutomationTable - sizeof(PCPIN_DESCRIPTOR), // PinSize - SIZEOF_ARRAY(HandsetMicWaveMiniportPins), // PinCount - HandsetMicWaveMiniportPins, // Pins - sizeof(PCNODE_DESCRIPTOR), // NodeSize - SIZEOF_ARRAY(HandsetMicWaveMiniportNodes), // NodeCount - HandsetMicWaveMiniportNodes, // Nodes - SIZEOF_ARRAY(HandsetMicWaveMiniportConnections), // ConnectionCount - HandsetMicWaveMiniportConnections, // Connections - 0, // CategoryCount - NULL // Categories - use defaults (audio, render, capture) -}; - -#endif // _SYSVAD_HANDSETMICWAVTABLE_H_ diff --git a/audio/sysvad/PhoneAudioSample/handsetspeakertopo.cpp b/audio/sysvad/PhoneAudioSample/handsetspeakertopo.cpp deleted file mode 100644 index 161e5bf0..00000000 --- a/audio/sysvad/PhoneAudioSample/handsetspeakertopo.cpp +++ /dev/null @@ -1,561 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - handsetspeakertopo.cpp - -Abstract: - - Implementation of topology miniport for the handsetspeaker endpoint. - ---*/ - -#pragma warning (disable : 4127) - -#include <sysvad.h> -#include "simple.h" -#include "mintopo.h" -#include "handsetspeakertopo.h" -#include "handsetspeakertoptable.h" -#include <ntstrsafe.h> - - -#pragma code_seg("PAGE") - -//============================================================================= -NTSTATUS -CreateHandsetSpeakerMiniportTopology -( - _Out_ PUNKNOWN * Unknown, - _In_ REFCLSID, - _In_opt_ PUNKNOWN UnknownOuter, - _When_((PoolType & NonPagedPoolMustSucceed) != 0, - __drv_reportError("Must succeed pool allocations are forbidden. " - "Allocation failures cause a system crash")) - _In_ POOL_TYPE PoolType, - _In_ PUNKNOWN UnknownAdapter, - _In_opt_ PVOID DeviceContext, - _In_ PENDPOINT_MINIPAIR MiniportPair -) -/*++ - -Routine Description: - - Creates a new topology miniport. - -Arguments: - - Unknown - - - RefclsId - - - UnknownOuter - - - PoolType - - - UnknownAdapter - - - DeviceContext - - - MiniportPair - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(Unknown); - ASSERT(MiniportPair); - - UNREFERENCED_PARAMETER(UnknownAdapter); - UNREFERENCED_PARAMETER(DeviceContext); - - CHandsetSpeakerMiniportTopology *obj = - new (PoolType, MINWAVERT_POOLTAG) - CHandsetSpeakerMiniportTopology( UnknownOuter, - MiniportPair->TopoDescriptor, - MiniportPair->DeviceMaxChannels); - if (NULL == obj) - { - return STATUS_INSUFFICIENT_RESOURCES; - } - - obj->AddRef(); - *Unknown = reinterpret_cast<IUnknown*>(obj); - - return STATUS_SUCCESS; -} // CreateHandsetSpeakerMiniportTopology - -//============================================================================= -CHandsetSpeakerMiniportTopology::~CHandsetSpeakerMiniportTopology -( - void -) -/*++ - -Routine Description: - - Topology miniport destructor - -Arguments: - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - DPF_ENTER(("[CHandsetSpeakerMiniportTopology::~CHandsetSpeakerMiniportTopology]")); -} // ~CHandsetSpeakerMiniportTopology - -//============================================================================= -NTSTATUS -CHandsetSpeakerMiniportTopology::DataRangeIntersection -( - _In_ ULONG PinId, - _In_ PKSDATARANGE ClientDataRange, - _In_ PKSDATARANGE MyDataRange, - _In_ ULONG OutputBufferLength, - _Out_writes_bytes_to_opt_(OutputBufferLength, *ResultantFormatLength) - PVOID ResultantFormat OPTIONAL, - _Out_ PULONG ResultantFormatLength -) -/*++ - -Routine Description: - - The DataRangeIntersection function determines the highest quality - intersection of two data ranges. - -Arguments: - - PinId - Pin for which data intersection is being determined. - - ClientDataRange - Pointer to KSDATARANGE structure which contains the data range - submitted by client in the data range intersection property - request. - - MyDataRange - Pin's data range to be compared with client's data range. - - OutputBufferLength - Size of the buffer pointed to by the resultant format - parameter. - - ResultantFormat - Pointer to value where the resultant format should be - returned. - - ResultantFormatLength - Actual length of the resultant format that is placed - at ResultantFormat. This should be less than or equal - to OutputBufferLength. - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - return - CMiniportTopologySYSVAD::DataRangeIntersection - ( - PinId, - ClientDataRange, - MyDataRange, - OutputBufferLength, - ResultantFormat, - ResultantFormatLength - ); -} // DataRangeIntersection - -//============================================================================= -STDMETHODIMP -CHandsetSpeakerMiniportTopology::GetDescription -( - _Out_ PPCFILTER_DESCRIPTOR * OutFilterDescriptor -) -/*++ - -Routine Description: - - The GetDescription function gets a pointer to a filter description. - It provides a location to deposit a pointer in miniport's description - structure. This is the placeholder for the FromNode or ToNode fields in - connections which describe connections to the filter's pins. - -Arguments: - - OutFilterDescriptor - Pointer to the filter description. - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(OutFilterDescriptor); - - return CMiniportTopologySYSVAD::GetDescription(OutFilterDescriptor); -} // GetDescription - -//============================================================================= -STDMETHODIMP -CHandsetSpeakerMiniportTopology::Init -( - _In_ PUNKNOWN UnknownAdapter, - _In_ PRESOURCELIST ResourceList, - _In_ PPORTTOPOLOGY Port_ -) -/*++ - -Routine Description: - - The Init function initializes the miniport. Callers of this function - should run at IRQL PASSIVE_LEVEL - -Arguments: - - UnknownAdapter - A pointer to the Iuknown interface of the adapter object. - - ResourceList - Pointer to the resource list to be supplied to the miniport - during initialization. The port driver is free to examine the - contents of the ResourceList. The port driver will not be - modify the ResourceList contents. - - Port - Pointer to the topology port object that is linked with this miniport. - -Return Value: - - NT status code. - ---*/ -{ - UNREFERENCED_PARAMETER(ResourceList); - - PAGED_CODE(); - - ASSERT(UnknownAdapter); - ASSERT(Port_); - - DPF_ENTER(("[CHandsetSpeakerMiniportTopology::Init]")); - - NTSTATUS ntStatus; - - ntStatus = - CMiniportTopologySYSVAD::Init - ( - UnknownAdapter, - Port_ - ); - - return ntStatus; -} // Init - -//============================================================================= -STDMETHODIMP -CHandsetSpeakerMiniportTopology::NonDelegatingQueryInterface -( - _In_ REFIID Interface, - _COM_Outptr_ PVOID * Object -) -/*++ - -Routine Description: - - QueryInterface for MiniportTopology - -Arguments: - - Interface - GUID of the interface - - Object - interface object to be returned. - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(Object); - - if (IsEqualGUIDAligned(Interface, IID_IUnknown)) - { - *Object = PVOID(PUNKNOWN(this)); - } - else if (IsEqualGUIDAligned(Interface, IID_IMiniport)) - { - *Object = PVOID(PMINIPORT(this)); - } - else if (IsEqualGUIDAligned(Interface, IID_IMiniportTopology)) - { - *Object = PVOID(PMINIPORTTOPOLOGY(this)); - } - else - { - *Object = NULL; - } - - if (*Object) - { - // We reference the interface for the caller. - PUNKNOWN(*Object)->AddRef(); - return(STATUS_SUCCESS); - } - - return(STATUS_INVALID_PARAMETER); -} // NonDelegatingQueryInterface - -//============================================================================= -NTSTATUS -CHandsetSpeakerMiniportTopology::PropertyHandlerJackDescription -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_Jack, KSPROPERTY_JACK_DESCRIPTION ) - -Arguments: - - PropertyRequest - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandlerJackDescription]")); - - ULONG cJackDescriptions = ARRAYSIZE(HandsetSpeakerJackDescriptions); - PKSJACK_DESCRIPTION * JackDescriptions = HandsetSpeakerJackDescriptions; - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - ULONG nPinId = (ULONG)-1; - - if (PropertyRequest->InstanceSize >= sizeof(ULONG)) - { - nPinId = *(PULONG(PropertyRequest->Instance)); - - if ((nPinId < cJackDescriptions) && (JackDescriptions[nPinId] != NULL)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupport - ( - PropertyRequest, - KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET, - VT_ILLEGAL - ); - } - else - { - ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM) + sizeof(KSJACK_DESCRIPTION); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value; - PKSJACK_DESCRIPTION pDesc = (PKSJACK_DESCRIPTION)(pMI+1); - - pMI->Size = cbNeeded; - pMI->Count = 1; - - RtlCopyMemory(pDesc, JackDescriptions[nPinId], sizeof(KSJACK_DESCRIPTION)); - ntStatus = STATUS_SUCCESS; - } - } - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -CHandsetSpeakerMiniportTopology::PropertyHandlerJackDescription2 -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_Jack, KSPROPERTY_JACK_DESCRIPTION2 ) - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandlerJackDescription2]")); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - ULONG nPinId = (ULONG)-1; - - ULONG cJackDescriptions = ARRAYSIZE(HandsetSpeakerJackDescriptions); - PKSJACK_DESCRIPTION * JackDescriptions = HandsetSpeakerJackDescriptions; - - if (PropertyRequest->InstanceSize >= sizeof(ULONG)) - { - nPinId = *(PULONG(PropertyRequest->Instance)); - - if ((nPinId < cJackDescriptions) && (JackDescriptions[nPinId] != NULL)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupport - ( - PropertyRequest, - KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET, - VT_ILLEGAL - ); - } - else - { - ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM) + sizeof(KSJACK_DESCRIPTION2); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value; - PKSJACK_DESCRIPTION2 pDesc = (PKSJACK_DESCRIPTION2)(pMI+1); - - pMI->Size = cbNeeded; - pMI->Count = 1; - - RtlZeroMemory(pDesc, sizeof(KSJACK_DESCRIPTION2)); - - // - // Specifies the lower 16 bits of the DWORD parameter. This parameter indicates whether - // the jack is currently active, streaming, idle, or hardware not ready. - // - pDesc->DeviceStateInfo = 0; - - // - // From MSDN: - // "If an audio device lacks jack presence detection, the IsConnected member of - // the KSJACK_DESCRIPTION structure must always be set to TRUE. To remove the - // ambiguity that results from this dual meaning of the TRUE value for IsConnected, - // a client application can call IKsJackDescription2::GetJackDescription2 to read - // the JackCapabilities flag of the KSJACK_DESCRIPTION2 structure. If this flag has - // the JACKDESC2_PRESENCE_DETECT_CAPABILITY bit set, it indicates that the endpoint - // does in fact support jack presence detection. In that case, the return value of - // the IsConnected member can be interpreted to accurately reflect the insertion status - // of the jack." - // - // Bit definitions: - // 0x00000001 - JACKDESC2_PRESENCE_DETECT_CAPABILITY - // 0x00000002 - JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY - // - pDesc->JackCapabilities = 0; - - ntStatus = STATUS_SUCCESS; - } - } - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -PropertyHandler_HandsetSpeakerTopoFilter -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Redirects property request to miniport object - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandler_HandsetSpeakerTopoFilter]")); - - // PropertryRequest structure is filled by portcls. - // MajorTarget is a pointer to miniport object for miniports. - // - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - PCHandsetSpeakerMiniportTopology pMiniport = (PCHandsetSpeakerMiniportTopology)PropertyRequest->MajorTarget; - - if (IsEqualGUIDAligned(*PropertyRequest->PropertyItem->Set, KSPROPSETID_Jack)) - { - if (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION) - { - ntStatus = pMiniport->PropertyHandlerJackDescription(PropertyRequest); - } - else if (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION2) - { - ntStatus = pMiniport->PropertyHandlerJackDescription2(PropertyRequest); - } - } - - return ntStatus; -} // PropertyHandler_HandsetSpeakerTopoFilter - -#pragma code_seg() - diff --git a/audio/sysvad/PhoneAudioSample/handsetspeakertopo.h b/audio/sysvad/PhoneAudioSample/handsetspeakertopo.h deleted file mode 100644 index 7b220f70..00000000 --- a/audio/sysvad/PhoneAudioSample/handsetspeakertopo.h +++ /dev/null @@ -1,86 +0,0 @@ - -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - handsetspeakertopo.h - -Abstract: - - Declaration of topology miniport for the handsetspeaker endpoint. - ---*/ - -#ifndef _SYSVAD_HANDSETSPEAKERTOPO_H_ -#define _SYSVAD_HANDSETSPEAKERTOPO_H_ - -#include "basetopo.h" - -//============================================================================= -// Classes -//============================================================================= - -/////////////////////////////////////////////////////////////////////////////// -// CHandsetSpeakerMiniportTopology -// - -class CHandsetSpeakerMiniportTopology : - public CMiniportTopologySYSVAD, - public IMiniportTopology, - public CUnknown -{ - public: - DECLARE_STD_UNKNOWN(); - CHandsetSpeakerMiniportTopology - ( - _In_opt_ PUNKNOWN UnknownOuter, - _In_ PCFILTER_DESCRIPTOR *FilterDesc, - _In_ USHORT DeviceMaxChannels - ) - : CUnknown(UnknownOuter), - CMiniportTopologySYSVAD(FilterDesc, DeviceMaxChannels) - {} - - ~CHandsetSpeakerMiniportTopology(); - - IMP_IMiniportTopology; - - NTSTATUS PropertyHandlerJackSinkInfo - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandlerJackDescription - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - - NTSTATUS PropertyHandlerJackDescription2 - ( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); -}; - -typedef CHandsetSpeakerMiniportTopology *PCHandsetSpeakerMiniportTopology; - - -NTSTATUS -CreateHandsetSpeakerMiniportTopology( - _Out_ PUNKNOWN * Unknown, - _In_ REFCLSID, - _In_opt_ PUNKNOWN UnknownOuter, - _When_((PoolType & NonPagedPoolMustSucceed) != 0, - __drv_reportError("Must succeed pool allocations are forbidden. " - "Allocation failures cause a system crash")) - _In_ POOL_TYPE PoolType, - _In_ PUNKNOWN UnknownAdapter, - _In_opt_ PVOID DeviceContext, - _In_ PENDPOINT_MINIPAIR MiniportPair - ); - -NTSTATUS PropertyHandler_HandsetSpeakerTopoFilter(_In_ PPCPROPERTY_REQUEST PropertyRequest); - -#endif // _SYSVAD_HANDSETSPEAKERTOPO_H_ - diff --git a/audio/sysvad/PhoneAudioSample/handsetspeakertoptable.h b/audio/sysvad/PhoneAudioSample/handsetspeakertoptable.h deleted file mode 100644 index 68873e61..00000000 --- a/audio/sysvad/PhoneAudioSample/handsetspeakertoptable.h +++ /dev/null @@ -1,156 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - handsetspeakertoptable.h - -Abstract: - - Declaration of topology tables for the handsetspeaker endpoint. - ---*/ - -#ifndef _SYSVAD_HANDSETSPEAKERTOPTABLE_H_ -#define _SYSVAD_HANDSETSPEAKERTOPTABLE_H_ - -//============================================================================= -static -KSDATARANGE HandsetSpeakerTopoPinDataRangesBridge[] = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) - } -}; - -//============================================================================= -static -PKSDATARANGE HandsetSpeakerTopoPinDataRangePointersBridge[] = -{ - &HandsetSpeakerTopoPinDataRangesBridge[0] -}; - -//============================================================================= -static -PCPIN_DESCRIPTOR HandsetSpeakerTopoMiniportPins[] = -{ - // KSPIN_TOPO_WAVEOUT_SOURCE - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(HandsetSpeakerTopoPinDataRangePointersBridge), // DataRangesCount - HandsetSpeakerTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_IN, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSCATEGORY_AUDIO, // Category - NULL, // Name - 0 // Reserved - } - }, - // KSPIN_TOPO_LINEOUT_DEST - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(HandsetSpeakerTopoPinDataRangePointersBridge), // DataRangesCount - HandsetSpeakerTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_OUT, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSNODETYPE_HANDSET, // Category - NULL, // Name - 0 // Reserved - } - } -}; - -//============================================================================= -static -KSJACK_DESCRIPTION HandsetSpeakerJackDesc = -{ - KSAUDIO_SPEAKER_MONO, - 0x0000, // no color - eConnTypeUnknown, - eGeoLocBottom, - eGenLocInternal, - ePortConnIntegratedDevice, - TRUE -}; - -// Only return a KSJACK_DESCRIPTION for the physical bridge pin. -static -PKSJACK_DESCRIPTION HandsetSpeakerJackDescriptions[] = -{ - NULL, - &HandsetSpeakerJackDesc -}; - -//============================================================================= -static -PCCONNECTION_DESCRIPTOR HandsetSpeakerTopoMiniportConnections[] = -{ - // FromNode, FromPin, ToNode, ToPin - { PCFILTER_NODE, KSPIN_TOPO_WAVEOUT_SOURCE, PCFILTER_NODE, KSPIN_TOPO_LINEOUT_DEST} -}; - - -//============================================================================= -static -PCPROPERTY_ITEM PropertiesHandsetSpeakerTopoFilter[] = -{ - { - &KSPROPSETID_Jack, - KSPROPERTY_JACK_DESCRIPTION, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_HandsetSpeakerTopoFilter - }, - { - &KSPROPSETID_Jack, - KSPROPERTY_JACK_DESCRIPTION2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_HandsetSpeakerTopoFilter - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationHandsetSpeakerTopoFilter, PropertiesHandsetSpeakerTopoFilter); - -//============================================================================= -static -PCFILTER_DESCRIPTOR HandsetSpeakerTopoMiniportFilterDescriptor = -{ - 0, // Version - &AutomationHandsetSpeakerTopoFilter, // AutomationTable - sizeof(PCPIN_DESCRIPTOR), // PinSize - SIZEOF_ARRAY(HandsetSpeakerTopoMiniportPins), // PinCount - HandsetSpeakerTopoMiniportPins, // Pins - sizeof(PCNODE_DESCRIPTOR), // NodeSize - 0, // NodeCount - NULL, // Nodes - SIZEOF_ARRAY(HandsetSpeakerTopoMiniportConnections), // ConnectionCount - HandsetSpeakerTopoMiniportConnections, // Connections - 0, // CategoryCount - NULL // Categories -}; - -#endif // _SYSVAD_HANDSETSPEAKERTOPTABLE_H_ - - diff --git a/audio/sysvad/PhoneAudioSample/handsetspeakerwavtable.h b/audio/sysvad/PhoneAudioSample/handsetspeakerwavtable.h deleted file mode 100644 index 73548626..00000000 --- a/audio/sysvad/PhoneAudioSample/handsetspeakerwavtable.h +++ /dev/null @@ -1,550 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - handsetspeakerwavtable.h - -Abstract: - - Declaration of wave miniport tables for the handsetspeaker endpoint. - - Note: the HANDSETSPEAKER in this sample shows how to do h/w loopback - for non-offloaded devices. - ---*/ - -#ifndef _SYSVAD_HANDSETSPEAKERWAVTABLE_H_ -#define _SYSVAD_HANDSETSPEAKERWAVTABLE_H_ - - -// To keep the code simple assume device supports only 48KHz, 16-bit, stereo (PCM and NON-PCM) - - -#define HANDSETSPEAKER_DEVICE_MAX_CHANNELS 2 // Max Channels. - -#define HANDSETSPEAKER_HOST_MAX_CHANNELS 2 // Max Channels. -#define HANDSETSPEAKER_HOST_MIN_BITS_PER_SAMPLE 16 // Min Bits Per Sample -#define HANDSETSPEAKER_HOST_MAX_BITS_PER_SAMPLE 16 // Max Bits Per Sample -#define HANDSETSPEAKER_HOST_MIN_SAMPLE_RATE 24000 // Min Sample Rate -#define HANDSETSPEAKER_HOST_MAX_SAMPLE_RATE 96000 // Max Sample Rate - -#define HANDSETSPEAKER_LOOPBACK_MAX_CHANNELS HANDSETSPEAKER_HOST_MAX_CHANNELS // Must be equal to host pin's Max Channels. -#define HANDSETSPEAKER_LOOPBACK_MIN_BITS_PER_SAMPLE HANDSETSPEAKER_HOST_MIN_BITS_PER_SAMPLE // Must be equal to host pin's Min Bits Per Sample -#define HANDSETSPEAKER_LOOPBACK_MAX_BITS_PER_SAMPLE HANDSETSPEAKER_HOST_MAX_BITS_PER_SAMPLE // Must be equal to host pin's Max Bits Per Sample -#define HANDSETSPEAKER_LOOPBACK_MIN_SAMPLE_RATE HANDSETSPEAKER_HOST_MIN_SAMPLE_RATE // Must be equal to host pin's Min Sample Rate -#define HANDSETSPEAKER_LOOPBACK_MAX_SAMPLE_RATE HANDSETSPEAKER_HOST_MAX_SAMPLE_RATE // Must be equal to host pin's Max Sample Rate - -#define HANDSETSPEAKER_DOLBY_DIGITAL_MAX_CHANNELS 2 // Max Channels. -#define HANDSETSPEAKER_DOLBY_DIGITAL_MIN_BITS_PER_SAMPLE 16 // Min Bits Per Sample -#define HANDSETSPEAKER_DOLBY_DIGITAL_MAX_BITS_PER_SAMPLE 16 // Max Bits Per Sample -#define HANDSETSPEAKER_DOLBY_DIGITAL_MIN_SAMPLE_RATE 44100 // Min Sample Rate -#define HANDSETSPEAKER_DOLBY_DIGITAL_MAX_SAMPLE_RATE 44100 // Max Sample Rate - -// -// Max # of pin instances. -// -#define HANDSETSPEAKER_MAX_INPUT_SYSTEM_STREAMS 3 -#define HANDSETSPEAKER_MAX_OUTPUT_LOOPBACK_STREAMS MAX_OUTPUT_LOOPBACK_STREAMS - -//============================================================================= -static -KSDATAFORMAT_WAVEFORMATEXTENSIBLE HandsetSpeakerHostPinSupportedDeviceFormats[] = -{ - { // 0 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 24000, - 96000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 1 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 32000, - 128000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 2 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 44100, - 176400, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 3 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 48000, - 192000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 4 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 88200, - 352800, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 5 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 96000, - 384000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - } -}; - -// -// Supported modes (only on streaming pins). -// -static -MODE_AND_DEFAULT_FORMAT HandsetSpeakerHostPinSupportedDeviceModes[] = -{ - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_RAW, - &HandsetSpeakerHostPinSupportedDeviceFormats[3].DataFormat, // 48KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_DEFAULT, - &HandsetSpeakerHostPinSupportedDeviceFormats[3].DataFormat, // 48KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_COMMUNICATIONS, - &HandsetSpeakerHostPinSupportedDeviceFormats[0].DataFormat, // 24KHz - } -}; - -// -// The entries here must follow the same order as the filter's pin -// descriptor array. -// -static -PIN_DEVICE_FORMATS_AND_MODES HandsetSpeakerPinDeviceFormatsAndModes[] = -{ - { - SystemRenderPin, - HandsetSpeakerHostPinSupportedDeviceFormats, - SIZEOF_ARRAY(HandsetSpeakerHostPinSupportedDeviceFormats), - HandsetSpeakerHostPinSupportedDeviceModes, - SIZEOF_ARRAY(HandsetSpeakerHostPinSupportedDeviceModes) - }, - { - RenderLoopbackPin, - HandsetSpeakerHostPinSupportedDeviceFormats, // Must support all the formats supported by host pin - SIZEOF_ARRAY(HandsetSpeakerHostPinSupportedDeviceFormats), - NULL, // loopback doesn't support modes. - 0 - }, - { - BridgePin, - NULL, - 0, - NULL, - 0 - } -}; - -//============================================================================= -static -KSDATARANGE_AUDIO HandsetSpeakerPinDataRangesStream[] = -{ - { // 0 - { - sizeof(KSDATARANGE_AUDIO), - KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - HANDSETSPEAKER_HOST_MAX_CHANNELS, - HANDSETSPEAKER_HOST_MIN_BITS_PER_SAMPLE, - HANDSETSPEAKER_HOST_MAX_BITS_PER_SAMPLE, - HANDSETSPEAKER_HOST_MIN_SAMPLE_RATE, - HANDSETSPEAKER_HOST_MAX_SAMPLE_RATE - }, - { // 1 - { - sizeof(KSDATARANGE_AUDIO), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - HANDSETSPEAKER_LOOPBACK_MAX_CHANNELS, - HANDSETSPEAKER_LOOPBACK_MIN_BITS_PER_SAMPLE, - HANDSETSPEAKER_LOOPBACK_MAX_BITS_PER_SAMPLE, - HANDSETSPEAKER_LOOPBACK_MIN_SAMPLE_RATE, - HANDSETSPEAKER_LOOPBACK_MAX_SAMPLE_RATE - } -}; - -static -PKSDATARANGE HandsetSpeakerPinDataRangePointersStream[] = -{ - PKSDATARANGE(&HandsetSpeakerPinDataRangesStream[0]), - PKSDATARANGE(&PinDataRangeAttributeList) -}; - -static -PKSDATARANGE HandsetSpeakerPinDataRangePointersLoopbackStream[] = -{ - PKSDATARANGE(&HandsetSpeakerPinDataRangesStream[1]) -}; - -//============================================================================= -static -KSDATARANGE HandsetSpeakerPinDataRangesBridge[] = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) - } -}; - -static -PKSDATARANGE HandsetSpeakerPinDataRangePointersBridge[] = -{ - &HandsetSpeakerPinDataRangesBridge[0] -}; - - -//============================================================================= -static -PCPIN_DESCRIPTOR HandsetSpeakerWaveMiniportPins[] = -{ - // Wave Out Streaming Pin (Renderer) KSPIN_WAVE_RENDER2_SINK_SYSTEM - { - HANDSETSPEAKER_MAX_INPUT_SYSTEM_STREAMS, - HANDSETSPEAKER_MAX_INPUT_SYSTEM_STREAMS, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(HandsetSpeakerPinDataRangePointersStream), - HandsetSpeakerPinDataRangePointersStream, - KSPIN_DATAFLOW_IN, - KSPIN_COMMUNICATION_SINK, - &KSCATEGORY_AUDIO, - NULL, - 0 - } - }, - // Wave Out Streaming Pin (Renderer) KSPIN_WAVE_RENDER2_SINK_LOOPBACK - { - HANDSETSPEAKER_MAX_OUTPUT_LOOPBACK_STREAMS, - HANDSETSPEAKER_MAX_OUTPUT_LOOPBACK_STREAMS, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(HandsetSpeakerPinDataRangePointersLoopbackStream), - HandsetSpeakerPinDataRangePointersLoopbackStream, - KSPIN_DATAFLOW_OUT, - KSPIN_COMMUNICATION_SINK, - &KSNODETYPE_AUDIO_LOOPBACK, - NULL, - 0 - } - }, - // Wave Out Bridge Pin (Renderer) KSPIN_WAVE_RENDER2_SOURCE - { - 0, - 0, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(HandsetSpeakerPinDataRangePointersBridge), - HandsetSpeakerPinDataRangePointersBridge, - KSPIN_DATAFLOW_OUT, - KSPIN_COMMUNICATION_NONE, - &KSCATEGORY_AUDIO, - NULL, - 0 - } - }, -}; - -//============================================================================= -static -PCPROPERTY_ITEM HandsetSpeakerPropertiesVolume[] = -{ - { - &KSPROPSETID_Audio, - KSPROPERTY_AUDIO_VOLUMELEVEL, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationHandsetSpeakerVolume, HandsetSpeakerPropertiesVolume); - -//============================================================================= -static -PCPROPERTY_ITEM HandsetSpeakerPropertiesMute[] = -{ - { - &KSPROPSETID_Audio, - KSPROPERTY_AUDIO_MUTE, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationHandsetSpeakerMute, HandsetSpeakerPropertiesMute); - -//============================================================================= -static -PCPROPERTY_ITEM HandsetSpeakerPropertiesPeakMeter[] = -{ - { - &KSPROPSETID_Audio, - KSPROPERTY_AUDIO_PEAKMETER2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - }, - { - &KSPROPSETID_Audio, - KSPROPERTY_AUDIO_CPU_RESOURCES, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationHandsetSpeakerPeakMeter, HandsetSpeakerPropertiesPeakMeter); - -//============================================================================= -static -PCNODE_DESCRIPTOR HandsetSpeakerWaveMiniportNodes[] = -{ - // KSNODE_WAVE_SUM - { - 0, // Flags - NULL, // AutomationTable - &KSNODETYPE_SUM, // Type - NULL // Name - }, - // KSNODE_WAVE_VOLUME - { - 0, // Flags - &AutomationHandsetSpeakerVolume, // AutomationTable - &KSNODETYPE_VOLUME, // Type - &KSAUDFNAME_WAVE_VOLUME // Name - }, - // KSNODE_WAVE_MUTE - { - 0, // Flags - &AutomationHandsetSpeakerMute, // AutomationTable - &KSNODETYPE_MUTE, // Type - &KSAUDFNAME_WAVE_MUTE // Name - }, - // KSNODE_WAVE_PEAKMETER - { - 0, // Flags - &AutomationHandsetSpeakerPeakMeter, // AutomationTable - &KSNODETYPE_PEAKMETER, // Type - &KSAUDFNAME_PEAKMETER // Name - } -}; - -C_ASSERT( KSNODE_WAVE_SUM == 0 ); -C_ASSERT( KSNODE_WAVE_VOLUME == 1 ); -C_ASSERT( KSNODE_WAVE_MUTE == 2 ); -C_ASSERT( KSNODE_WAVE_PEAKMETER == 3 ); - - -//============================================================================= -// -// Note: -// 1) A sum node can be used to 'sum' multiple streams associated to different -// instances of the same pin. -// 2) Any node output has an implicit 'tee' node associated with it. Thus in the -// scenario below it is ok for the peak meter node to have two identical outputs. -// -// ---------------------------------------------------------- -// | | -// System Pin 0 | |-----| |--------| |------| |-----------| |--> 1 Loopback Pin -// [instances:0...n]-->| -->| Sum |--->| Volume |-->| Mute |-->| PeakMeter |--> | -// | |-----| |--------| |------| |-----------| |--> 2 KSPIN_WAVE_RENDER2_SOURCE -// | | -// ---------------------------------------------------------- - -static -PCCONNECTION_DESCRIPTOR HandsetSpeakerWaveMiniportConnections[] = -{ - { PCFILTER_NODE, KSPIN_WAVE_RENDER2_SINK_SYSTEM, KSNODE_WAVE_SUM, 1 }, - { KSNODE_WAVE_SUM, 0, KSNODE_WAVE_VOLUME, 1 }, - { KSNODE_WAVE_VOLUME, 0, KSNODE_WAVE_MUTE, 1 }, - { KSNODE_WAVE_MUTE, 0, KSNODE_WAVE_PEAKMETER, 1 }, - { KSNODE_WAVE_PEAKMETER, 2, PCFILTER_NODE, KSPIN_WAVE_RENDER2_SINK_LOOPBACK }, - { KSNODE_WAVE_PEAKMETER, 0, PCFILTER_NODE, KSPIN_WAVE_RENDER2_SOURCE }, -}; - -//============================================================================= -static -PCPROPERTY_ITEM PropertiesHandsetSpeakerWaveFilter[] = -{ - { - &KSPROPSETID_Pin, - KSPROPERTY_PIN_PROPOSEDATAFORMAT, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - }, - { - &KSPROPSETID_Pin, - KSPROPERTY_PIN_PROPOSEDATAFORMAT2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationHandsetSpeakerWaveFilter, PropertiesHandsetSpeakerWaveFilter); - -//============================================================================= -static -PCFILTER_DESCRIPTOR HandsetSpeakerWaveMiniportFilterDescriptor = -{ - 0, // Version - &AutomationHandsetSpeakerWaveFilter, // AutomationTable - sizeof(PCPIN_DESCRIPTOR), // PinSize - SIZEOF_ARRAY(HandsetSpeakerWaveMiniportPins), // PinCount - HandsetSpeakerWaveMiniportPins, // Pins - sizeof(PCNODE_DESCRIPTOR), // NodeSize - SIZEOF_ARRAY(HandsetSpeakerWaveMiniportNodes), // NodeCount - HandsetSpeakerWaveMiniportNodes, // Nodes - SIZEOF_ARRAY(HandsetSpeakerWaveMiniportConnections), // ConnectionCount - HandsetSpeakerWaveMiniportConnections, // Connections - 0, // CategoryCount - NULL // Categories - use defaults (audio, render, capture) -}; - -#endif // _SYSVAD_HANDSETSPEAKERWAVTABLE_H_ - diff --git a/audio/sysvad/PhoneAudioSample/michstopo.cpp b/audio/sysvad/PhoneAudioSample/michstopo.cpp deleted file mode 100644 index f96a58e5..00000000 --- a/audio/sysvad/PhoneAudioSample/michstopo.cpp +++ /dev/null @@ -1,275 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - michstopo.cpp - -Abstract: - - Implementation of topology miniport for the mic (external: headset). - ---*/ - -#pragma warning (disable : 4127) - -#include <sysvad.h> -#include "simple.h" -#include "mintopo.h" -#include "michstopo.h" -#include "michstoptable.h" - - -#pragma code_seg("PAGE") - -//============================================================================= -NTSTATUS -PropertyHandler_MicHsJackDescription -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_Jack, KSPROPERTY_JACK_DESCRIPTION ) - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandler_MicHsJackDescription]")); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - ULONG nPinId = (ULONG)-1; - - ULONG cJackDescriptions = ARRAYSIZE(MicHsJackDescriptions); - PKSJACK_DESCRIPTION * JackDescriptions = MicHsJackDescriptions; - - if (PropertyRequest->InstanceSize >= sizeof(ULONG)) - { - nPinId = *(PULONG(PropertyRequest->Instance)); - - if ((nPinId < cJackDescriptions) && (JackDescriptions[nPinId] != NULL)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupport - ( - PropertyRequest, - KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET, - VT_ILLEGAL - ); - } - else - { - ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM) + sizeof(KSJACK_DESCRIPTION); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value; - PKSJACK_DESCRIPTION pDesc = (PKSJACK_DESCRIPTION)(pMI+1); - - pMI->Size = cbNeeded; - pMI->Count = 1; - - RtlCopyMemory(pDesc, JackDescriptions[nPinId], sizeof(KSJACK_DESCRIPTION)); - ntStatus = STATUS_SUCCESS; - } - } - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -PropertyHandler_MicHsJackDescription2 -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_Jack, KSPROPERTY_JACK_DESCRIPTION2 ) - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandler_MicHsJackDescription2]")); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - ULONG nPinId = (ULONG)-1; - - ULONG cJackDescriptions = ARRAYSIZE(MicHsJackDescriptions); - PKSJACK_DESCRIPTION * JackDescriptions = MicHsJackDescriptions; - - if (PropertyRequest->InstanceSize >= sizeof(ULONG)) - { - nPinId = *(PULONG(PropertyRequest->Instance)); - - if ((nPinId < cJackDescriptions) && (JackDescriptions[nPinId] != NULL)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupport - ( - PropertyRequest, - KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET, - VT_ILLEGAL - ); - } - else - { - ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM) + sizeof(KSJACK_DESCRIPTION2); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value; - PKSJACK_DESCRIPTION2 pDesc = (PKSJACK_DESCRIPTION2)(pMI+1); - - pMI->Size = cbNeeded; - pMI->Count = 1; - - RtlZeroMemory(pDesc, sizeof(KSJACK_DESCRIPTION2)); - - // - // Specifies the lower 16 bits of the DWORD parameter. This parameter indicates whether - // the jack is currently active, streaming, idle, or hardware not ready. - // - pDesc->DeviceStateInfo = 0; - - // - // From MSDN: - // "If an audio device lacks jack presence detection, the IsConnected member of - // the KSJACK_DESCRIPTION structure must always be set to TRUE. To remove the - // ambiguity that results from this dual meaning of the TRUE value for IsConnected, - // a client application can call IKsJackDescription2::GetJackDescription2 to read - // the JackCapabilities flag of the KSJACK_DESCRIPTION2 structure. If this flag has - // the JACKDESC2_PRESENCE_DETECT_CAPABILITY bit set, it indicates that the endpoint - // does in fact support jack presence detection. In that case, the return value of - // the IsConnected member can be interpreted to accurately reflect the insertion status - // of the jack." - // - // Bit definitions: - // 0x00000001 - JACKDESC2_PRESENCE_DETECT_CAPABILITY - // 0x00000002 - JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY - // - pDesc->JackCapabilities = JACKDESC2_PRESENCE_DETECT_CAPABILITY; - - ntStatus = STATUS_SUCCESS; - } - } - } - } - } - - return ntStatus; -} - - -//============================================================================= -NTSTATUS -PropertyHandler_MicHsTopoFilter -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Redirects property request to miniport object - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandler_MicHsTopoFilter]")); - - // PropertryRequest structure is filled by portcls. - // MajorTarget is a pointer to miniport object for miniports. - // - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - - // - // This line shows how to get a pointer to the miniport topology object. - // - PCMiniportTopology pMiniport = (PCMiniportTopology)PropertyRequest->MajorTarget; - UNREFERENCED_VAR(pMiniport); - - if (IsEqualGUIDAligned(*PropertyRequest->PropertyItem->Set, KSPROPSETID_Jack)) - { - if (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION) - { - ntStatus = PropertyHandler_MicHsJackDescription(PropertyRequest); - } - else if (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION2) - { - ntStatus = PropertyHandler_MicHsJackDescription2(PropertyRequest); - } - } - - return ntStatus; -} // PropertyHandler_MicHsTopoFilter - -#pragma code_seg() - diff --git a/audio/sysvad/PhoneAudioSample/michstopo.h b/audio/sysvad/PhoneAudioSample/michstopo.h deleted file mode 100644 index b8f9b106..00000000 --- a/audio/sysvad/PhoneAudioSample/michstopo.h +++ /dev/null @@ -1,21 +0,0 @@ - -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - michstopo.h - -Abstract: - - Declaration of topology miniport for the mic (external: headset). - ---*/ - -#ifndef _SYSVAD_MICHSTOPO_H_ -#define _SYSVAD_MICHSTOPO_H_ - -NTSTATUS PropertyHandler_MicHsTopoFilter(_In_ PPCPROPERTY_REQUEST PropertyRequest); - -#endif // _SYSVAD_MICHSTOPO_H_ diff --git a/audio/sysvad/PhoneAudioSample/michstoptable.h b/audio/sysvad/PhoneAudioSample/michstoptable.h deleted file mode 100644 index 0b4ed73c..00000000 --- a/audio/sysvad/PhoneAudioSample/michstoptable.h +++ /dev/null @@ -1,257 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - michstopotable.h - -Abstract: - - Declaration of topology table for the mic (external: headset) - ---*/ - -#ifndef _SYSVAD_MICHSTOPTABLE_H_ -#define _SYSVAD_MICHSTOPTABLE_H_ - -#include <mintopo.h> - -// Function declarations. -NTSTATUS -PropertyHandler_MicHsTopoFilter( - _In_ PPCPROPERTY_REQUEST PropertyRequest - ); - -//============================================================================= -static -KSDATARANGE MicHsTopoPinDataRangesBridge[] = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) - } -}; - -//============================================================================= -static -PKSDATARANGE MicHsTopoPinDataRangePointersBridge[] = -{ - &MicHsTopoPinDataRangesBridge[0] -}; - -//============================================================================= -static -PCPIN_DESCRIPTOR MicHsTopoMiniportPins[] = -{ - // KSPIN - topology filter in-pin - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(MicHsTopoPinDataRangePointersBridge),// DataRangesCount - MicHsTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_IN, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSNODETYPE_HEADSET_MICROPHONE, // Category - NULL, // Name - 0 // Reserved - } - }, - - // KSPIN - topology filter out-in - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(MicHsTopoPinDataRangePointersBridge),// DataRangesCount - MicHsTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_OUT, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSCATEGORY_AUDIO, // Category - NULL, // Name - 0 // Reserved - } - } -}; - -//============================================================================= -static -KSJACK_DESCRIPTION MicHsJackDesc = -{ - KSAUDIO_SPEAKER_MONO, - JACKDESC_RGB(179, 201, 140), - eConnTypeCombination, - eGeoLocRear, - eGenLocPrimaryBox, - ePortConnJack, - FALSE // NOTE: For convenience, wired headset jacks will be "unplugged" at boot. -}; - -//============================================================================= -// Only return a KSJACK_DESCRIPTION for the physical bridge pin. -static -PKSJACK_DESCRIPTION MicHsJackDescriptions[] = -{ - &MicHsJackDesc, - NULL -}; - -//============================================================================= -static -PCPROPERTY_ITEM MicHsPropertiesVolume[] = -{ - { - &KSPROPSETID_Audio, - KSPROPERTY_AUDIO_VOLUMELEVEL, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_Topology - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationMicHsVolume, MicHsPropertiesVolume); - -//============================================================================= -static -PCPROPERTY_ITEM MicHsPropertiesMute[] = -{ - { - &KSPROPSETID_Audio, - KSPROPERTY_AUDIO_MUTE, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_Topology - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationMicHsMute, MicHsPropertiesMute); - -//============================================================================= -static -PCPROPERTY_ITEM MicHsPropertiesPeakMeter[] = -{ - { - &KSPROPSETID_Audio, - KSPROPERTY_AUDIO_PEAKMETER2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_Topology - }, - { - &KSPROPSETID_Audio, - KSPROPERTY_AUDIO_CPU_RESOURCES, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_Topology - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationMicHsPeakMeter, MicHsPropertiesPeakMeter); - -//============================================================================= -static -PCNODE_DESCRIPTOR MicHsTopologyNodes[] = -{ - // KSNODE_TOPO_VOLUME - { - 0, // Flags - &AutomationMicHsVolume, // AutomationTable - &KSNODETYPE_VOLUME, // Type - &KSAUDFNAME_MIC_VOLUME // Name - }, - // KSNODE_TOPO_MUTE - { - 0, // Flags - &AutomationMicHsMute, // AutomationTable - &KSNODETYPE_MUTE, // Type - &KSAUDFNAME_MIC_MUTE // Name - }, - // KSNODE_TOPO_PEAKMETER - { - 0, // Flags - &AutomationMicHsPeakMeter, // AutomationTable - &KSNODETYPE_PEAKMETER, // Type - &KSAUDFNAME_PEAKMETER // Name - } -}; - -C_ASSERT( KSNODE_TOPO_VOLUME == 0 ); -C_ASSERT( KSNODE_TOPO_MUTE == 1 ); -C_ASSERT( KSNODE_TOPO_PEAKMETER == 2 ); - -//============================================================================= -static -PCCONNECTION_DESCRIPTOR MicHsMiniportConnections[] = -{ - // FromNode, FromPin, ToNode, ToPin - { PCFILTER_NODE, KSPIN_TOPO_MIC_ELEMENTS, KSNODE_TOPO_VOLUME, 1 }, - { KSNODE_TOPO_VOLUME, 0, KSNODE_TOPO_MUTE, 1 }, - { KSNODE_TOPO_MUTE, 0, KSNODE_TOPO_PEAKMETER, 1 }, - { KSNODE_TOPO_PEAKMETER, 0, PCFILTER_NODE, KSPIN_TOPO_BRIDGE } -}; - - -//============================================================================= -static -PCPROPERTY_ITEM MicHsPropertiesTopoFilter[] = -{ - { - &KSPROPSETID_Jack, - KSPROPERTY_JACK_DESCRIPTION, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_MicHsTopoFilter - }, - { - &KSPROPSETID_Jack, - KSPROPERTY_JACK_DESCRIPTION2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_MicHsTopoFilter - } -}; - -static PCEVENT_ITEM MicHsJackInfoChangeEvent[] = -{ - { - &KSEVENTSETID_PinCapsChange, // Something changed - KSEVENT_PINCAPS_JACKINFOCHANGE, // Jack Info Changes - KSEVENT_TYPE_ENABLE | KSEVENT_TYPE_BASICSUPPORT, - CMiniportTopology_EventHandler_JackState - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP_EVENT(AutomationMicHsTopoFilter, MicHsPropertiesTopoFilter, MicHsJackInfoChangeEvent); - -//============================================================================= -static -PCFILTER_DESCRIPTOR MicHsTopoMiniportFilterDescriptor = -{ - 0, // Version - &AutomationMicHsTopoFilter, // AutomationTable - sizeof(PCPIN_DESCRIPTOR), // PinSize - SIZEOF_ARRAY(MicHsTopoMiniportPins), // PinCount - MicHsTopoMiniportPins, // Pins - sizeof(PCNODE_DESCRIPTOR), // NodeSize - SIZEOF_ARRAY(MicHsTopologyNodes), // NodeCount - MicHsTopologyNodes, // Nodes - SIZEOF_ARRAY(MicHsMiniportConnections), // ConnectionCount - MicHsMiniportConnections, // Connections - 0, // CategoryCount - NULL // Categories -}; - -#endif // _SYSVAD_MICHSTOPTABLE_H_ - diff --git a/audio/sysvad/PhoneAudioSample/michswavtable.h b/audio/sysvad/PhoneAudioSample/michswavtable.h deleted file mode 100644 index 4bfa66db..00000000 --- a/audio/sysvad/PhoneAudioSample/michswavtable.h +++ /dev/null @@ -1,447 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - michswavtable.h - -Abstract: - - Declaration of wave miniport tables for the mic (external: headset). - ---*/ - -#ifndef _SYSVAD_MICHSWAVTABLE_H_ -#define _SYSVAD_MICHSWAVTABLE_H_ - -// -// Mic in (external: headset) range. -// -#define MICHS_DEVICE_MAX_CHANNELS 1 // Max Channels. -#define MICHS_MIN_BITS_PER_SAMPLE_PCM 16 // Min Bits Per Sample -#define MICHS_MAX_BITS_PER_SAMPLE_PCM 16 // Max Bits Per Sample -#define MICHS_MIN_SAMPLE_RATE 8000 // Min Sample Rate -#define MICHS_MAX_SAMPLE_RATE 48000 // Max Sample Rate - -// -// Max # of pin instances. -// -#define MICHS_MAX_INPUT_STREAMS 4 - -//============================================================================= -static -KSDATAFORMAT_WAVEFORMATEXTENSIBLE MicHsPinSupportedDeviceFormats[] = -{ - { // 0 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 8000, - 16000, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 1 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 11025, - 22050, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 2 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 16000, - 32000, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 3 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 22050, - 44100, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 4 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 24000, - 48000, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 5 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 32000, - 64000, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 6 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 44100, - 88200, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 7 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 1, - 48000, - 96000, - 2, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_MONO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - } -}; - -// -// Supported modes (only on streaming pins). -// -static -MODE_AND_DEFAULT_FORMAT MicHsPinSupportedDeviceModes[] = -{ - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_RAW, - &MicHsPinSupportedDeviceFormats[SIZEOF_ARRAY(MicHsPinSupportedDeviceFormats) - 1].DataFormat, // 48KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_DEFAULT, - &MicHsPinSupportedDeviceFormats[SIZEOF_ARRAY(MicHsPinSupportedDeviceFormats) - 1].DataFormat, // 48KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_SPEECH, - &MicHsPinSupportedDeviceFormats[2].DataFormat, // 16KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_COMMUNICATIONS, - &MicHsPinSupportedDeviceFormats[4].DataFormat, // 24KHz - } -}; - -// -// The entries here must follow the same order as the filter's pin -// descriptor array. -// -static -PIN_DEVICE_FORMATS_AND_MODES MicHsPinDeviceFormatsAndModes[] = -{ - { - BridgePin, - NULL, - 0, - NULL, - 0 - }, - { - SystemCapturePin, - MicHsPinSupportedDeviceFormats, - SIZEOF_ARRAY(MicHsPinSupportedDeviceFormats), - MicHsPinSupportedDeviceModes, - SIZEOF_ARRAY(MicHsPinSupportedDeviceModes) - } -}; - -//============================================================================= -static -KSDATARANGE_AUDIO MicHsPinDataRangesStream[] = -{ - { - { - sizeof(KSDATARANGE_AUDIO), - KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - MICHS_DEVICE_MAX_CHANNELS, - MICHS_MIN_BITS_PER_SAMPLE_PCM, - MICHS_MAX_BITS_PER_SAMPLE_PCM, - MICHS_MIN_SAMPLE_RATE, - MICHS_MAX_SAMPLE_RATE - }, -}; - -static -PKSDATARANGE MicHsPinDataRangePointersStream[] = -{ - PKSDATARANGE(&MicHsPinDataRangesStream[0]), - PKSDATARANGE(&PinDataRangeAttributeList), -}; - -//============================================================================= -static -KSDATARANGE MicHsPinDataRangesBridge[] = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) - } -}; - -static -PKSDATARANGE MicHsPinDataRangePointersBridge[] = -{ - &MicHsPinDataRangesBridge[0] -}; - -//============================================================================= -static -PCPIN_DESCRIPTOR MicHsWaveMiniportPins[] = -{ - // Wave In Bridge Pin (Capture - From Topology) KSPIN_WAVE_BRIDGE - { - 0, - 0, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(MicHsPinDataRangePointersBridge), - MicHsPinDataRangePointersBridge, - KSPIN_DATAFLOW_IN, - KSPIN_COMMUNICATION_NONE, - &KSCATEGORY_AUDIO, - NULL, - 0 - } - }, - - // Wave In Streaming Pin (Capture) KSPIN_WAVEIN_HOST - { - MICHS_MAX_INPUT_STREAMS, - MICHS_MAX_INPUT_STREAMS, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(MicHsPinDataRangePointersStream), - MicHsPinDataRangePointersStream, - KSPIN_DATAFLOW_OUT, - KSPIN_COMMUNICATION_SINK, - &KSCATEGORY_AUDIO, - &KSAUDFNAME_RECORDING_CONTROL, - 0 - } - } -}; - -//============================================================================= -static -PCNODE_DESCRIPTOR MicHsWaveMiniportNodes[] = -{ - // KSNODE_WAVE_ADC - { - 0, // Flags - NULL, // AutomationTable - &KSNODETYPE_ADC, // Type - NULL // Name - } -}; - -//============================================================================= -static -PCCONNECTION_DESCRIPTOR MicHsWaveMiniportConnections[] = -{ - { PCFILTER_NODE, KSPIN_WAVE_BRIDGE, KSNODE_WAVE_ADC, 1 }, - { KSNODE_WAVE_ADC, 0, PCFILTER_NODE, KSPIN_WAVEIN_HOST } -}; - -//============================================================================= -static -PCPROPERTY_ITEM PropertiesMicHsWaveFilter[] = -{ - { - &KSPROPSETID_General, - KSPROPERTY_GENERAL_COMPONENTID, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - }, - { - &KSPROPSETID_Pin, - KSPROPERTY_PIN_PROPOSEDATAFORMAT, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - }, - { - &KSPROPSETID_Pin, - KSPROPERTY_PIN_PROPOSEDATAFORMAT2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationMicHsWaveFilter, PropertiesMicHsWaveFilter); - -//============================================================================= -static -PCFILTER_DESCRIPTOR MicHsWaveMiniportFilterDescriptor = -{ - 0, // Version - &AutomationMicHsWaveFilter, // AutomationTable - sizeof(PCPIN_DESCRIPTOR), // PinSize - SIZEOF_ARRAY(MicHsWaveMiniportPins), // PinCount - MicHsWaveMiniportPins, // Pins - sizeof(PCNODE_DESCRIPTOR), // NodeSize - SIZEOF_ARRAY(MicHsWaveMiniportNodes), // NodeCount - MicHsWaveMiniportNodes, // Nodes - SIZEOF_ARRAY(MicHsWaveMiniportConnections), // ConnectionCount - MicHsWaveMiniportConnections, // Connections - 0, // CategoryCount - NULL // Categories - use defaults (audio, render, capture) -}; - -#endif // _SYSVAD_MICHSWAVTABLE_H_ diff --git a/audio/sysvad/PhoneAudioSample/minipairs.h b/audio/sysvad/PhoneAudioSample/minipairs.h deleted file mode 100644 index 6b219462..00000000 --- a/audio/sysvad/PhoneAudioSample/minipairs.h +++ /dev/null @@ -1,602 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - minipairs.h - -Abstract: - - Local audio endpoint filter definitions. - ---*/ - -#ifndef _SYSVAD_MINIPAIRS_H_ -#define _SYSVAD_MINIPAIRS_H_ - -#include "speakertopo.h" -#include "speakertoptable.h" -#include "speakerwavtable.h" - -#include "speakerhstopo.h" -#include "speakerhstoptable.h" -#include "speakerhswavtable.h" - -#include "michstopo.h" -#include "michstoptable.h" -#include "michswavtable.h" - -#include "micarraytopo.h" -#include "micarray1toptable.h" -#include "micarraywavtable.h" - -#include "cellulartopo.h" -#include "cellularwave.h" -#include "cellulartoptable.h" -#include "cellularwavtable.h" - -#include "fmtopo.h" -#include "fmwave.h" -#include "fmtoptable.h" -#include "fmwavtable.h" - -#include "handsetspeakertopo.h" -#include "handsetspeakertoptable.h" -#include "handsetspeakerwavtable.h" - -#include "handsetmictopo.h" -#include "handsetmictoptable.h" -#include "handsetmicwavtable.h" - - -NTSTATUS -CreateMiniportWaveRTSYSVAD -( - _Out_ PUNKNOWN *, - _In_ REFCLSID, - _In_opt_ PUNKNOWN, - _In_ POOL_TYPE, - _In_ PUNKNOWN, - _In_opt_ PVOID, - _In_ PENDPOINT_MINIPAIR -); - -NTSTATUS -CreateMiniportTopologySYSVAD -( - _Out_ PUNKNOWN *, - _In_ REFCLSID, - _In_opt_ PUNKNOWN, - _In_ POOL_TYPE, - _In_ PUNKNOWN, - _In_opt_ PVOID, - _In_ PENDPOINT_MINIPAIR -); - -// -// Describe buffer size constraints for WaveRT buffers -// -static struct -{ - KSAUDIO_PACKETSIZE_CONSTRAINTS2 TransportPacketConstraints; - KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT AdditionalProcessingConstraints[1]; -} SysvadWaveRtPacketSizeConstraintsRender = -{ - { - 2 * HNSTIME_PER_MILLISECOND, // 2 ms minimum processing interval - FILE_BYTE_ALIGNMENT, // 1 byte packet size alignment - 0, // no maximum packet size constraint - 2, // 2 processing constraints follow - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_DEFAULT, // constraint for default processing mode - 128, // 128 samples per processing frame - 0, // NA hns per processing frame - }, - }, - { - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_MOVIE, // constraint for movie processing mode - 1024, // 1024 samples per processing frame - 0, // NA hns per processing frame - }, - } -}; - -const SYSVAD_DEVPROPERTY SysvadWaveFilterInterfacePropertiesRender[] = -{ - { - &DEVPKEY_KsAudio_PacketSize_Constraints2, // Key - DEVPROP_TYPE_BINARY, // Type - sizeof(SysvadWaveRtPacketSizeConstraintsRender), // BufferSize - &SysvadWaveRtPacketSizeConstraintsRender, // Buffer - }, -}; - -static struct -{ - KSAUDIO_PACKETSIZE_CONSTRAINTS2 TransportPacketConstraints; -} SysvadWaveRtPacketSizeConstraintsCapture = -{ - { - 2 * HNSTIME_PER_MILLISECOND, // 2 ms minimum processing interval - FILE_BYTE_ALIGNMENT, // 1 byte packet size alignment - 0x100000, // 1 MB maximum packet size - 1, // 1 processing constraint follows - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_COMMUNICATIONS, // constraint for communications processing mode - 0, // NA samples per processing frame - 20 * HNSTIME_PER_MILLISECOND, // 200000 hns (20ms) per processing frame - }, - }, -}; - -const SYSVAD_DEVPROPERTY SysvadWaveFilterInterfacePropertiesCapture[] = -{ - { - &DEVPKEY_KsAudio_PacketSize_Constraints2, // Key - DEVPROP_TYPE_BINARY, // Type - sizeof(SysvadWaveRtPacketSizeConstraintsCapture), // BufferSize - &SysvadWaveRtPacketSizeConstraintsCapture, // Buffer - }, -}; - -// -// Render miniports. -// - -/********************************************************************* -* Topology/Wave bridge connection for speaker (internal) * -* * -* +------+ +------+ * -* | Wave | | Topo | * -* | | | | * -* System --->|0 2|---> Loopback | | * -* | | | | * -* Offload --->|1 3|--------------->|0 1|---> Line Out * -* | | | | * -* +------+ +------+ * -*********************************************************************/ -static -PHYSICALCONNECTIONTABLE SpeakerTopologyPhysicalConnections[] = -{ - { - KSPIN_TOPO_WAVEOUT_SOURCE, // TopologyIn - KSPIN_WAVE_RENDER_SOURCE, // WaveOut - CONNECTIONTYPE_WAVE_OUTPUT - } -}; - -static -ENDPOINT_MINIPAIR SpeakerMiniports = -{ - eSpeakerDevice, - SPEAKER_TOPONAME, // defined in cellulartopo.h for use with cellular routing control - NULL, // optional template name - CreateMiniportTopologySYSVAD, - &SpeakerTopoMiniportFilterDescriptor, - 0, NULL, // Interface properties - L"WaveSpeaker", // make sure this or the template name matches with KSNAME_WaveSpeaker in the inf's [Strings] section - NULL, // optional template name - CreateMiniportWaveRTSYSVAD, - &SpeakerWaveMiniportFilterDescriptor, - ARRAYSIZE(SysvadWaveFilterInterfacePropertiesRender), // Interface properties - SysvadWaveFilterInterfacePropertiesRender, - SPEAKER_DEVICE_MAX_CHANNELS, - SpeakerPinDeviceFormatsAndModes, - SIZEOF_ARRAY(SpeakerPinDeviceFormatsAndModes), - SpeakerTopologyPhysicalConnections, - SIZEOF_ARRAY(SpeakerTopologyPhysicalConnections), - ENDPOINT_OFFLOAD_SUPPORTED, - SpeakerModulesWaveFilter, - SIZEOF_ARRAY(SpeakerModulesWaveFilter), - &SpeakerModuleNotificationDeviceId, -}; - -/********************************************************************* -* Topology/Wave bridge connection for speaker (external:headset) * -* * -* +------+ +------+ * -* | Wave | | Topo | * -* | | | | * -* System --->|0 2|---> Loopback | | * -* | | | | * -* Offload --->|1 3|--------------->|0 1|---> Line Out * -* | | | | * -* +------+ +------+ * -*********************************************************************/ -static -PHYSICALCONNECTIONTABLE SpeakerHsTopologyPhysicalConnections[] = -{ - { - KSPIN_TOPO_WAVEOUT_SOURCE, // TopologyIn - KSPIN_WAVE_RENDER_SOURCE, // WaveOut - CONNECTIONTYPE_WAVE_OUTPUT - } -}; - -static -ENDPOINT_MINIPAIR SpeakerHsMiniports = -{ - eSpeakerHsDevice, - SPEAKER_HEADSET_TOPONAME, // defined in cellulartopo.h for use with cellular routing control - NULL, // optional template name - CreateMiniportTopologySYSVAD, - &SpeakerHsTopoMiniportFilterDescriptor, // use the speaker headset topo filter descriptor, not headset. - 0, NULL, // Interface properties - L"WaveSpeakerHeadset", // make sure this or the template name matches with KSNAME_WaveSpeakerHeadset in the inf's [Strings] section - NULL, // optional template name - CreateMiniportWaveRTSYSVAD, - &SpeakerHsWaveMiniportFilterDescriptor, - 0, NULL, // Interface properties - SPEAKERHS_DEVICE_MAX_CHANNELS, - SpeakerHsPinDeviceFormatsAndModes, - SIZEOF_ARRAY(SpeakerHsPinDeviceFormatsAndModes), - SpeakerHsTopologyPhysicalConnections, - SIZEOF_ARRAY(SpeakerHsTopologyPhysicalConnections), - ENDPOINT_OFFLOAD_SUPPORTED, - NULL, 0, NULL, // audio module settings. -}; - -// -// headset microphone miniports. -// - -/********************************************************************* -* Topology/Wave bridge connection for mic in * -* * -* +------+ +------+ * -* | Topo | | Wave | * -* | | | | * -* Mic in --->|0 1|===>|0 1|---> Capture Host Pin * -* | | | | * -* +------+ +------+ * -*********************************************************************/ -static -PHYSICALCONNECTIONTABLE MicHsTopologyPhysicalConnections[] = -{ - { - KSPIN_TOPO_BRIDGE, // TopologyOut - KSPIN_WAVE_BRIDGE, // WaveIn - CONNECTIONTYPE_TOPOLOGY_OUTPUT - } -}; - -static -ENDPOINT_MINIPAIR MicHsMiniports = -{ - eMicHsDevice, - MIC_HEADSET_TOPONAME, // defined in cellulartopo.h for use with cellular routing control - NULL, // optional template name - CreateMiniportTopologySYSVAD, - &MicHsTopoMiniportFilterDescriptor, - 0, NULL, // Interface properties - L"WaveMicHeadset", // make sure this or the template name matches with KSNAME_WaveMicHeadset in the inf's [Strings] section - NULL, // optional template name - CreateMiniportWaveRTSYSVAD, - &MicHsWaveMiniportFilterDescriptor, - 0, NULL, // Interface properties - MICHS_DEVICE_MAX_CHANNELS, - MicHsPinDeviceFormatsAndModes, - SIZEOF_ARRAY(MicHsPinDeviceFormatsAndModes), - MicHsTopologyPhysicalConnections, - SIZEOF_ARRAY(MicHsTopologyPhysicalConnections), - ENDPOINT_NO_FLAGS, - NULL, 0, NULL, // audio module settings. -}; - - -// -// Capture miniports. -// - -/********************************************************************* -* Topology/Wave bridge connection for mic array 1 (front) * -* * -* +------+ +------+ * -* | Topo | | Wave | * -* | | | | * -* Mic in --->|0 1|===>|0 1|---> Capture Host Pin * -* | | | | * -* +------+ +------+ * -*********************************************************************/ -static -PHYSICALCONNECTIONTABLE MicArray1TopologyPhysicalConnections[] = -{ - { - KSPIN_TOPO_BRIDGE, // TopologyOut - KSPIN_WAVE_BRIDGE, // WaveIn - CONNECTIONTYPE_TOPOLOGY_OUTPUT - } -}; - -static -ENDPOINT_MINIPAIR MicArray1Miniports = -{ - eMicArrayDevice1, - L"TopologyMicArray1", // make sure this or the template name matches with KSNAME_TopologyMicArray1 in the inf's [Strings] section - NULL, // optional template name - CreateMicArrayMiniportTopology, - &MicArray1TopoMiniportFilterDescriptor, - 0, NULL, // Interface properties - L"WaveMicArray1", // make sure this or the tempalte name matches with KSNAME_WaveMicArray1 in the inf's [Strings] section - NULL, // optional template name - CreateMiniportWaveRTSYSVAD, - &MicArrayWaveMiniportFilterDescriptor, - ARRAYSIZE(SysvadWaveFilterInterfacePropertiesCapture), // Interface properties - SysvadWaveFilterInterfacePropertiesCapture, - MICARRAY_DEVICE_MAX_CHANNELS, - MicArrayPinDeviceFormatsAndModes, - SIZEOF_ARRAY(MicArrayPinDeviceFormatsAndModes), - MicArray1TopologyPhysicalConnections, - SIZEOF_ARRAY(MicArray1TopologyPhysicalConnections), - ENDPOINT_SOUNDDETECTOR_SUPPORTED, - NULL, 0, NULL, // audio module settings. -}; - -/********************************************************************* -* Topology/Wave bridge connection for cellular endpoint * -* * -* +------+ +------+ * -* | Wave1| | Topo | * -* | | | | * -* | | | | * -* | | | | * -* System BiDi <--|0 1|<---------------|1 0|<-- BIDI * -* | | | | * -* +------+ | | * -* | | * -* +------+ | | * -* | Wave2| | | * -* | | | | * -* | | | | * -* | | | | * -* System BiDi <--|0 1|<---------------|3 2|<-- BIDI * -* | | | | * -* +------+ +------+ * -* * -*********************************************************************/ - -static -PHYSICALCONNECTIONTABLE CellularTopologyPhysicalConnections[] = -{ - { - KSPIN_TOPO_BIDI1_BRIDGE, // TopologyOut - KSPIN_WAVE_BIDI_BRIDGE, // WaveIn - CONNECTIONTYPE_TOPOLOGY_OUTPUT - } -}; - -static -ENDPOINT_MINIPAIR CellularMiniports = -{ - eCellularDevice, - L"TopologyCellular", // make sure this or the template name matches with KSNAME_TopologyCellular in the inf's [Strings] section - NULL, // optional template name - CreateCellularMiniportTopology, - &CellularTopoMiniportFilterDescriptor, - 0, NULL, // Interface properties - L"WaveCellular", // make sure this or the template name matches with KSNAME_WaveCellular in the inf's [Strings] section - NULL, // optional template name - CreateCellularMiniportWaveRT, - &CellularWaveMiniportFilterDescriptor, - 0, NULL, // Interface properties - CELLULAR_DEVICE_MAX_CHANNELS, - CellularPinDeviceFormatsAndModes, - SIZEOF_ARRAY(CellularPinDeviceFormatsAndModes), - CellularTopologyPhysicalConnections, - SIZEOF_ARRAY(CellularTopologyPhysicalConnections), - ENDPOINT_CELLULAR_PROVIDER1, - NULL, 0, NULL, // audio module settings. -}; - - -static -PHYSICALCONNECTIONTABLE CellularTopologyPhysicalConnections2[] = -{ - { - KSPIN_TOPO_BIDI2_BRIDGE, // TopologyOut - KSPIN_WAVE_BIDI_BRIDGE, // WaveIn - CONNECTIONTYPE_TOPOLOGY_OUTPUT - } -}; - -static -ENDPOINT_MINIPAIR CellularMiniports2 = -{ - eCellularDevice, - L"TopologyCellular", // make sure this or the template name matches with KSNAME_TopologyCellular in the inf's [Strings] section - NULL, // optional template name - CreateCellularMiniportTopology, - &CellularTopoMiniportFilterDescriptor, - 0, NULL, // Interface properties - L"WaveCellular2", // make sure this or the template name matches with KSNAME_WaveCellular in the inf's [Strings] section - NULL, // optional template name - CreateCellularMiniportWaveRT, - &CellularWaveMiniportFilterDescriptor, - 0, NULL, // Interface properties - CELLULAR_DEVICE_MAX_CHANNELS, - CellularPinDeviceFormatsAndModes, - SIZEOF_ARRAY(CellularPinDeviceFormatsAndModes), - CellularTopologyPhysicalConnections2, - SIZEOF_ARRAY(CellularTopologyPhysicalConnections2), - ENDPOINT_CELLULAR_PROVIDER2, - NULL, 0, NULL, // audio module settings. -}; - -/********************************************************************* -* Topology/Wave bridge connection for handset speaker endpoint * -* * -* +------+ +------+ * -* | Wave | | Topo | * -* | | | | * -* System --->|0 1|---> Loopback | | * -* | | | | * -* | 2|--------------->|0 1|---> Line Out * -* | | | | * -* +------+ +------+ * -*********************************************************************/ -static -PHYSICALCONNECTIONTABLE HandsetSpeakerTopologyPhysicalConnections[] = -{ - { - KSPIN_TOPO_WAVEOUT_SOURCE, // TopologyIn - KSPIN_WAVE_RENDER2_SOURCE, // WaveOut (no offloading) - CONNECTIONTYPE_WAVE_OUTPUT - } -}; - -static -ENDPOINT_MINIPAIR HandsetSpeakerMiniports = -{ - eHandsetSpeakerDevice, - HANDSET_SPEAKER_TOPONAME, // defined in cellulartopo.h for use with cellular routing control - NULL, // optional template name - CreateHandsetSpeakerMiniportTopology, - &HandsetSpeakerTopoMiniportFilterDescriptor, - 0, NULL, // Interface properties - L"WaveHandsetSpeaker", // make sure this or the template name matches with KSNAME_WaveHandsetSpeaker in the inf's [Strings] section - NULL, // optional template name - CreateMiniportWaveRTSYSVAD, - &HandsetSpeakerWaveMiniportFilterDescriptor, - 0, NULL, // Interface properties - HANDSETSPEAKER_DEVICE_MAX_CHANNELS, - HandsetSpeakerPinDeviceFormatsAndModes, - SIZEOF_ARRAY(HandsetSpeakerPinDeviceFormatsAndModes), - HandsetSpeakerTopologyPhysicalConnections, - SIZEOF_ARRAY(HandsetSpeakerTopologyPhysicalConnections), - ENDPOINT_LOOPBACK_SUPPORTED, - NULL, 0, NULL, // audio module settings. -}; - -// -// handset microphone miniports. -// - -/********************************************************************* -* Topology/Wave bridge connection for mic in * -* * -* +------+ +------+ * -* | Topo | | Wave | * -* | | | | * -* Mic in --->|0 1|===>|0 1|---> Capture Host Pin * -* | | | | * -* +------+ +------+ * -*********************************************************************/ -static -PHYSICALCONNECTIONTABLE HandsetMicTopologyPhysicalConnections[] = -{ - { - KSPIN_TOPO_BRIDGE, // TopologyOut - KSPIN_WAVE_BRIDGE, // WaveIn - CONNECTIONTYPE_TOPOLOGY_OUTPUT - } -}; - -static -ENDPOINT_MINIPAIR HandsetMicMiniports = -{ - eHandsetMicDevice, - HANDSET_MIC_TOPONAME, // defined in cellulartopo.h for use with cellular routing control - NULL, // optional template name - CreateMiniportTopologySYSVAD, - &HandsetMicTopoMiniportFilterDescriptor, - 0, NULL, // Interface properties - L"WaveHandsetMic", // make sure this or the template name matches with KSNAME_WaveHandsetMic in the inf's [Strings] section - NULL, // optional template name - CreateMiniportWaveRTSYSVAD, - &HandsetMicWaveMiniportFilterDescriptor, - 0, NULL, // Interface properties - HANDSETMIC_DEVICE_MAX_CHANNELS, - HandsetMicPinDeviceFormatsAndModes, - SIZEOF_ARRAY(HandsetMicPinDeviceFormatsAndModes), - HandsetMicTopologyPhysicalConnections, - SIZEOF_ARRAY(HandsetMicTopologyPhysicalConnections), - ENDPOINT_NO_FLAGS, - NULL, 0, NULL, // audio module settings. -}; - -/********************************************************************* -* Topology/Wave bridge connection for FM RX * -* * -* +------+ +------+ * -* | Topo | | Wave | * -* | | | | * -* FM RX --->|0 1|===>|1 0|---> Capture Host Pin * -* | | | | * -* +------+ +------+ * -*********************************************************************/ -static -PHYSICALCONNECTIONTABLE FmRxTopologyPhysicalConnections[] = -{ - { - KSPIN_TOPO_FMRX_BRIDGE, // TopologyOut - KSPIN_WAVE_FMRX_BRIDGE, // WaveIn - CONNECTIONTYPE_TOPOLOGY_OUTPUT - } -}; - -static -ENDPOINT_MINIPAIR FmRxMiniports = -{ - eFmRxDevice, - L"TopologyFmRx", // make sure this name matches with KSNAME_TopologyFmRx - NULL, // optional template name - CreateFmMiniportTopology, - &FmTopoMiniportFilterDescriptor, - 0, NULL, // Interface properties - L"WaveFmRx", // make sure this or the template name matches with KSNAME_WaveFmRx in the inf's [Strings] section - NULL, // optional template name - CreateFmMiniportWaveRT, - &FmWaveMiniportFilterDescriptor, - 0, NULL, // Interface properties - FMRX_DEVICE_MAX_CHANNELS, - FmRxPinDeviceFormatsAndModes, - SIZEOF_ARRAY(FmRxPinDeviceFormatsAndModes), - FmRxTopologyPhysicalConnections, - SIZEOF_ARRAY(FmRxTopologyPhysicalConnections), - ENDPOINT_NO_FLAGS, - NULL, 0, NULL, // audio module settings. -}; - -//============================================================================= -// -// Render miniport pairs. NOTE: the split of render and capture is arbitrary and -// unnessary, this array could contain capture endpoints. -// -static -PENDPOINT_MINIPAIR g_RenderEndpoints[] = -{ - &SpeakerMiniports, - &SpeakerHsMiniports, - &HandsetSpeakerMiniports, - &CellularMiniports, // SIM 1 - &CellularMiniports2 // SIM 2 -}; - -#define g_cRenderEndpoints (SIZEOF_ARRAY(g_RenderEndpoints)) - -//============================================================================= -// -// Capture miniport pairs. NOTE: the split of render and capture is arbitrary and -// unnessary, this array could contain render endpoints. -// -static -PENDPOINT_MINIPAIR g_CaptureEndpoints[] = -{ - &MicHsMiniports, - &MicArray1Miniports, - &HandsetMicMiniports, - &FmRxMiniports -}; - -#define g_cCaptureEndpoints (SIZEOF_ARRAY(g_CaptureEndpoints)) - -//============================================================================= -// -// Total miniports = # endpoints * 2 (topology + wave). -// -#define g_MaxMiniports ((g_cRenderEndpoints + g_cCaptureEndpoints) * 2) - -#endif // _SYSVAD_MINIPAIRS_H_ - diff --git a/audio/sysvad/PhoneAudioSample/phoneaudiosample.inx b/audio/sysvad/PhoneAudioSample/phoneaudiosample.inx Binary files differdeleted file mode 100644 index a1d45cf4..00000000 --- a/audio/sysvad/PhoneAudioSample/phoneaudiosample.inx +++ /dev/null diff --git a/audio/sysvad/PhoneAudioSample/speakerhstopo.cpp b/audio/sysvad/PhoneAudioSample/speakerhstopo.cpp deleted file mode 100644 index bbd7a97c..00000000 --- a/audio/sysvad/PhoneAudioSample/speakerhstopo.cpp +++ /dev/null @@ -1,275 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - speakerhstopo.cpp - -Abstract: - - Implementation of topology miniport for the speaker (external: headset). - ---*/ - -#pragma warning (disable : 4127) - -#include <sysvad.h> -#include "simple.h" -#include "mintopo.h" -#include "speakerhstopo.h" -#include "speakerhstoptable.h" - - -#pragma code_seg("PAGE") - -//============================================================================= -NTSTATUS -PropertyHandler_SpeakerHsJackDescription -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_Jack, KSPROPERTY_JACK_DESCRIPTION ) - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandler_SpeakerHsJackDescription]")); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - ULONG nPinId = (ULONG)-1; - - ULONG cJackDescriptions = ARRAYSIZE(SpeakerHsJackDescriptions); - PKSJACK_DESCRIPTION * JackDescriptions = SpeakerHsJackDescriptions; - - if (PropertyRequest->InstanceSize >= sizeof(ULONG)) - { - nPinId = *(PULONG(PropertyRequest->Instance)); - - if ((nPinId < cJackDescriptions) && (JackDescriptions[nPinId] != NULL)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupport - ( - PropertyRequest, - KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET, - VT_ILLEGAL - ); - } - else - { - ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM) + sizeof(KSJACK_DESCRIPTION); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value; - PKSJACK_DESCRIPTION pDesc = (PKSJACK_DESCRIPTION)(pMI+1); - - pMI->Size = cbNeeded; - pMI->Count = 1; - - RtlCopyMemory(pDesc, JackDescriptions[nPinId], sizeof(KSJACK_DESCRIPTION)); - ntStatus = STATUS_SUCCESS; - } - } - } - } - } - - return ntStatus; -} - -//============================================================================= -NTSTATUS -PropertyHandler_SpeakerHsJackDescription2 -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Handles ( KSPROPSETID_Jack, KSPROPERTY_JACK_DESCRIPTION2 ) - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandler_SpeakerHsJackDescription2]")); - - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - ULONG nPinId = (ULONG)-1; - - ULONG cJackDescriptions = ARRAYSIZE(SpeakerHsJackDescriptions); - PKSJACK_DESCRIPTION * JackDescriptions = SpeakerHsJackDescriptions; - - if (PropertyRequest->InstanceSize >= sizeof(ULONG)) - { - nPinId = *(PULONG(PropertyRequest->Instance)); - - if ((nPinId < cJackDescriptions) && (JackDescriptions[nPinId] != NULL)) - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_BASICSUPPORT) - { - ntStatus = - PropertyHandler_BasicSupport - ( - PropertyRequest, - KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET, - VT_ILLEGAL - ); - } - else - { - ULONG cbNeeded = sizeof(KSMULTIPLE_ITEM) + sizeof(KSJACK_DESCRIPTION2); - - if (PropertyRequest->ValueSize == 0) - { - PropertyRequest->ValueSize = cbNeeded; - ntStatus = STATUS_BUFFER_OVERFLOW; - } - else if (PropertyRequest->ValueSize < cbNeeded) - { - ntStatus = STATUS_BUFFER_TOO_SMALL; - } - else - { - if (PropertyRequest->Verb & KSPROPERTY_TYPE_GET) - { - PKSMULTIPLE_ITEM pMI = (PKSMULTIPLE_ITEM)PropertyRequest->Value; - PKSJACK_DESCRIPTION2 pDesc = (PKSJACK_DESCRIPTION2)(pMI+1); - - pMI->Size = cbNeeded; - pMI->Count = 1; - - RtlZeroMemory(pDesc, sizeof(KSJACK_DESCRIPTION2)); - - // - // Specifies the lower 16 bits of the DWORD parameter. This parameter indicates whether - // the jack is currently active, streaming, idle, or hardware not ready. - // - pDesc->DeviceStateInfo = 0; - - // - // From MSDN: - // "If an audio device lacks jack presence detection, the IsConnected member of - // the KSJACK_DESCRIPTION structure must always be set to TRUE. To remove the - // ambiguity that results from this dual meaning of the TRUE value for IsConnected, - // a client application can call IKsJackDescription2::GetJackDescription2 to read - // the JackCapabilities flag of the KSJACK_DESCRIPTION2 structure. If this flag has - // the JACKDESC2_PRESENCE_DETECT_CAPABILITY bit set, it indicates that the endpoint - // does in fact support jack presence detection. In that case, the return value of - // the IsConnected member can be interpreted to accurately reflect the insertion status - // of the jack." - // - // Bit definitions: - // 0x00000001 - JACKDESC2_PRESENCE_DETECT_CAPABILITY - // 0x00000002 - JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY - // - pDesc->JackCapabilities = JACKDESC2_PRESENCE_DETECT_CAPABILITY; - - ntStatus = STATUS_SUCCESS; - } - } - } - } - } - - return ntStatus; -} - - -//============================================================================= -NTSTATUS -PropertyHandler_SpeakerHsTopoFilter -( - _In_ PPCPROPERTY_REQUEST PropertyRequest -) -/*++ - -Routine Description: - - Redirects property request to miniport object - -Arguments: - - PropertyRequest - - -Return Value: - - NT status code. - ---*/ -{ - PAGED_CODE(); - - ASSERT(PropertyRequest); - - DPF_ENTER(("[PropertyHandler_SpeakerHsTopoFilter]")); - - // PropertryRequest structure is filled by portcls. - // MajorTarget is a pointer to miniport object for miniports. - // - NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - - // - // This line shows how to get a pointer to the miniport topology object. - // - PCMiniportTopology pMiniport = (PCMiniportTopology)PropertyRequest->MajorTarget; - UNREFERENCED_VAR(pMiniport); - - if (IsEqualGUIDAligned(*PropertyRequest->PropertyItem->Set, KSPROPSETID_Jack)) - { - if (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION) - { - ntStatus = PropertyHandler_SpeakerHsJackDescription(PropertyRequest); - } - else if (PropertyRequest->PropertyItem->Id == KSPROPERTY_JACK_DESCRIPTION2) - { - ntStatus = PropertyHandler_SpeakerHsJackDescription2(PropertyRequest); - } - } - - return ntStatus; -} // PropertyHandler_SpeakerHsTopoFilter - -#pragma code_seg() - diff --git a/audio/sysvad/PhoneAudioSample/speakerhstopo.h b/audio/sysvad/PhoneAudioSample/speakerhstopo.h deleted file mode 100644 index ea7c760f..00000000 --- a/audio/sysvad/PhoneAudioSample/speakerhstopo.h +++ /dev/null @@ -1,21 +0,0 @@ - -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - speakerhstopo.h - -Abstract: - - Declaration of topology miniport for the speaker (external: headset). - ---*/ - -#ifndef _SYSVAD_SPEAKERHSTOPO_H_ -#define _SYSVAD_SPEAKERHSTOPO_H_ - -NTSTATUS PropertyHandler_SpeakerHsTopoFilter(_In_ PPCPROPERTY_REQUEST PropertyRequest); - -#endif // _SYSVAD_SPEAKERHSTOPO_H_ diff --git a/audio/sysvad/PhoneAudioSample/speakerhstoptable.h b/audio/sysvad/PhoneAudioSample/speakerhstoptable.h deleted file mode 100644 index adb941ff..00000000 --- a/audio/sysvad/PhoneAudioSample/speakerhstoptable.h +++ /dev/null @@ -1,168 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - speakerhstoptable.h - -Abstract: - - Declaration of topology tables for the speaker (external: headset). - ---*/ - -#ifndef _SYSVAD_SPEAKERHSTOPTABLE_H_ -#define _SYSVAD_SPEAKERHSTOPTABLE_H_ - -#include <mintopo.h> - -//============================================================================= -static -KSDATARANGE SpeakerHsTopoPinDataRangesBridge[] = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) - } -}; - -//============================================================================= -static -PKSDATARANGE SpeakerHsTopoPinDataRangePointersBridge[] = -{ - &SpeakerHsTopoPinDataRangesBridge[0] -}; - -//============================================================================= -static -PCPIN_DESCRIPTOR SpeakerHsTopoMiniportPins[] = -{ - // KSPIN - topology filter in-pin - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(SpeakerHsTopoPinDataRangePointersBridge),// DataRangesCount - SpeakerHsTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_IN, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSCATEGORY_AUDIO, // Category - NULL, // Name - 0 // Reserved - } - }, - // KSPIN - topology filter out-pin - { - 0, - 0, - 0, // InstanceCount - NULL, // AutomationTable - { // KsPinDescriptor - 0, // InterfacesCount - NULL, // Interfaces - 0, // MediumsCount - NULL, // Mediums - SIZEOF_ARRAY(SpeakerHsTopoPinDataRangePointersBridge),// DataRangesCount - SpeakerHsTopoPinDataRangePointersBridge, // DataRanges - KSPIN_DATAFLOW_OUT, // DataFlow - KSPIN_COMMUNICATION_NONE, // Communication - &KSNODETYPE_HEADSET_SPEAKERS, // Category - NULL, // Name - 0 // Reserved - } - } -}; - -static -KSJACK_DESCRIPTION SpeakerHsJackDesc = -{ - KSAUDIO_SPEAKER_MONO, - JACKDESC_RGB(179, 201, 140), - eConnTypeCombination, - eGeoLocRear, - eGenLocPrimaryBox, - ePortConnJack, - FALSE // NOTE: For convenience, wired headset jacks will be "unplugged" at boot. -}; - -//============================================================================= -// Only return a KSJACK_DESCRIPTION for the physical bridge pin. -static -PKSJACK_DESCRIPTION SpeakerHsJackDescriptions[] = -{ - NULL, - &SpeakerHsJackDesc -}; - -//============================================================================= -static -PCCONNECTION_DESCRIPTOR SpeakerHsTopoMiniportConnections[] = -{ - // FromNode, FromPin, ToNode, ToPin - { PCFILTER_NODE, KSPIN_TOPO_WAVEOUT_SOURCE, PCFILTER_NODE, KSPIN_TOPO_LINEOUT_DEST} -}; - - -//============================================================================= -static -PCPROPERTY_ITEM PropertiesSpeakerHsTopoFilter[] = -{ - { - &KSPROPSETID_Jack, - KSPROPERTY_JACK_DESCRIPTION, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_SpeakerHsTopoFilter - }, - { - &KSPROPSETID_Jack, - KSPROPERTY_JACK_DESCRIPTION2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_SpeakerHsTopoFilter - } -}; - -static PCEVENT_ITEM SpeakerHsJackInfoChangeEvent[] = -{ - { - &KSEVENTSETID_PinCapsChange, // Something changed - KSEVENT_PINCAPS_JACKINFOCHANGE, // Jack Info Changes - KSEVENT_TYPE_ENABLE | KSEVENT_TYPE_BASICSUPPORT, - CMiniportTopology_EventHandler_JackState - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP_EVENT(AutomationSpeakerHsTopoFilter, PropertiesSpeakerHsTopoFilter, SpeakerHsJackInfoChangeEvent); - -//============================================================================= -static -PCFILTER_DESCRIPTOR SpeakerHsTopoMiniportFilterDescriptor = -{ - 0, // Version - &AutomationSpeakerHsTopoFilter, // AutomationTable - sizeof(PCPIN_DESCRIPTOR), // PinSize - SIZEOF_ARRAY(SpeakerHsTopoMiniportPins), // PinCount - SpeakerHsTopoMiniportPins, // Pins - sizeof(PCNODE_DESCRIPTOR), // NodeSize - 0, // NodeCount - NULL, // Nodes - SIZEOF_ARRAY(SpeakerHsTopoMiniportConnections), // ConnectionCount - SpeakerHsTopoMiniportConnections, // Connections - 0, // CategoryCount - NULL // Categories -}; - -#endif // _SYSVAD_SPEAKERHSTOPTABLE_H_ - - diff --git a/audio/sysvad/PhoneAudioSample/speakerhswavtable.h b/audio/sysvad/PhoneAudioSample/speakerhswavtable.h deleted file mode 100644 index cc7b55fc..00000000 --- a/audio/sysvad/PhoneAudioSample/speakerhswavtable.h +++ /dev/null @@ -1,755 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation All Rights Reserved - -Module Name: - - speakerhswavtable.h - -Abstract: - - Declaration of wave miniport tables for the speaker (external: headset). - ---*/ - -#ifndef _SYSVAD_SPEAKERHSWAVTABLE_H_ -#define _SYSVAD_SPEAKERHSWAVTABLE_H_ - - -// To keep the code simple assume device supports only 48KHz, 16-bit, stereo (PCM and NON-PCM) - -#define SPEAKERHS_DEVICE_MAX_CHANNELS 2 // Max Channels. - -#define SPEAKERHS_HOST_MAX_CHANNELS 2 // Max Channels. -#define SPEAKERHS_HOST_MIN_BITS_PER_SAMPLE 16 // Min Bits Per Sample -#define SPEAKERHS_HOST_MAX_BITS_PER_SAMPLE 16 // Max Bits Per Sample -#define SPEAKERHS_HOST_MIN_SAMPLE_RATE 24000 // Min Sample Rate -#define SPEAKERHS_HOST_MAX_SAMPLE_RATE 96000 // Max Sample Rate - -#define SPEAKERHS_OFFLOAD_MAX_CHANNELS 2 // Max Channels. -#define SPEAKERHS_OFFLOAD_MIN_BITS_PER_SAMPLE 16 // Min Bits Per Sample -#define SPEAKERHS_OFFLOAD_MAX_BITS_PER_SAMPLE 16 // Max Bits Per Sample -#define SPEAKERHS_OFFLOAD_MIN_SAMPLE_RATE 44100 // Min Sample Rate -#define SPEAKERHS_OFFLOAD_MAX_SAMPLE_RATE 48000 // Max Sample Rate - -#define SPEAKERHS_LOOPBACK_MAX_CHANNELS SPEAKERHS_HOST_MAX_CHANNELS // Must be equal to host pin's Max Channels. -#define SPEAKERHS_LOOPBACK_MIN_BITS_PER_SAMPLE SPEAKERHS_HOST_MIN_BITS_PER_SAMPLE // Must be equal to host pin's Min Bits Per Sample -#define SPEAKERHS_LOOPBACK_MAX_BITS_PER_SAMPLE SPEAKERHS_HOST_MAX_BITS_PER_SAMPLE // Must be equal to host pin's Max Bits Per Sample -#define SPEAKERHS_LOOPBACK_MIN_SAMPLE_RATE SPEAKERHS_HOST_MIN_SAMPLE_RATE // Must be equal to host pin's Min Sample Rate -#define SPEAKERHS_LOOPBACK_MAX_SAMPLE_RATE SPEAKERHS_HOST_MAX_SAMPLE_RATE // Must be equal to host pin's Max Sample Rate - -#define SPEAKERHS_DOLBY_DIGITAL_MAX_CHANNELS 2 // Max Channels. -#define SPEAKERHS_DOLBY_DIGITAL_MIN_BITS_PER_SAMPLE 16 // Min Bits Per Sample -#define SPEAKERHS_DOLBY_DIGITAL_MAX_BITS_PER_SAMPLE 16 // Max Bits Per Sample -#define SPEAKERHS_DOLBY_DIGITAL_MIN_SAMPLE_RATE 44100 // Min Sample Rate -#define SPEAKERHS_DOLBY_DIGITAL_MAX_SAMPLE_RATE 44100 // Max Sample Rate - -// -// Max # of pin instances. -// -#define SPEAKERHS_MAX_INPUT_SYSTEM_STREAMS 6 -#define SPEAKERHS_MAX_INPUT_OFFLOAD_STREAMS MAX_INPUT_OFFLOAD_STREAMS -#define SPEAKERHS_MAX_OUTPUT_LOOPBACK_STREAMS MAX_OUTPUT_LOOPBACK_STREAMS - -//============================================================================= -static -KSDATAFORMAT_WAVEFORMATEXTENSIBLE SpeakerHsAudioEngineSupportedDeviceFormats[] = -{ - { // 0 : First entry in htis table is the default format for the audio engine - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 44100, - 176400, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 1 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 24000, - 96000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 2 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 48000, - 192000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 3 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 88200, - 352800, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 4 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 96000, - 384000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - } -}; - -static -KSDATAFORMAT_WAVEFORMATEXTENSIBLE SpeakerHsHostPinSupportedDeviceFormats[] = -{ - { // 0 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 24000, - 96000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 1 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 32000, - 128000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 2 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 44100, - 176400, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 3 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 48000, - 192000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 4 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 88200, - 352800, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 5 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 96000, - 384000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - } -}; - -static -KSDATAFORMAT_WAVEFORMATEXTENSIBLE SpeakerHsOffloadPinSupportedDeviceFormats[] = -{ - { // 0 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 44100, - 176400, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - }, - { // 1 - { - sizeof(KSDATAFORMAT_WAVEFORMATEXTENSIBLE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - { - { - WAVE_FORMAT_EXTENSIBLE, - 2, - 48000, - 192000, - 4, - 16, - sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) - }, - 16, - KSAUDIO_SPEAKER_STEREO, - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM) - } - } -}; - -// -// Supported modes (only on streaming pins). -// -static -MODE_AND_DEFAULT_FORMAT SpeakerHsHostPinSupportedDeviceModes[] = -{ - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_RAW, - &SpeakerHsHostPinSupportedDeviceFormats[3].DataFormat // 48KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_DEFAULT, - &SpeakerHsHostPinSupportedDeviceFormats[3].DataFormat // 48KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_MEDIA, - &SpeakerHsHostPinSupportedDeviceFormats[3].DataFormat // 48KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_MOVIE, - &SpeakerHsHostPinSupportedDeviceFormats[3].DataFormat // 48KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_COMMUNICATIONS, - &SpeakerHsHostPinSupportedDeviceFormats[0].DataFormat // 24KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_NOTIFICATION, - &SpeakerHsHostPinSupportedDeviceFormats[3].DataFormat // 48KHz - } -}; - -static -MODE_AND_DEFAULT_FORMAT SpeakerHsOffloadPinSupportedDeviceModes[] = -{ - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_DEFAULT, - &SpeakerHsOffloadPinSupportedDeviceFormats[1].DataFormat // 48KHz - }, - { - STATIC_AUDIO_SIGNALPROCESSINGMODE_MEDIA, - &SpeakerHsOffloadPinSupportedDeviceFormats[1].DataFormat // 48KHz - } -}; - -// -// The entries here must follow the same order as the filter's pin -// descriptor array. -// -static -PIN_DEVICE_FORMATS_AND_MODES SpeakerHsPinDeviceFormatsAndModes[] = -{ - { - SystemRenderPin, - SpeakerHsHostPinSupportedDeviceFormats, - SIZEOF_ARRAY(SpeakerHsHostPinSupportedDeviceFormats), - SpeakerHsHostPinSupportedDeviceModes, - SIZEOF_ARRAY(SpeakerHsHostPinSupportedDeviceModes) - }, - { - OffloadRenderPin, - SpeakerHsOffloadPinSupportedDeviceFormats, - SIZEOF_ARRAY(SpeakerHsOffloadPinSupportedDeviceFormats), - SpeakerHsOffloadPinSupportedDeviceModes, - SIZEOF_ARRAY(SpeakerHsOffloadPinSupportedDeviceModes), - }, - { - RenderLoopbackPin, - SpeakerHsHostPinSupportedDeviceFormats, // Must support all the formats supported by host pin - SIZEOF_ARRAY(SpeakerHsHostPinSupportedDeviceFormats), - NULL, // loopback doesn't support modes. - 0 - }, - { - BridgePin, - NULL, - 0, - NULL, - 0 - }, - { - NoPin, // For convenience, offload engine device formats appended here - SpeakerHsAudioEngineSupportedDeviceFormats, - SIZEOF_ARRAY(SpeakerHsAudioEngineSupportedDeviceFormats), - NULL, // no modes for this entry. - 0 - } -}; - -//============================================================================= -static -KSDATARANGE_AUDIO SpeakerHsPinDataRangesStream[] = -{ - { // 0 - { - sizeof(KSDATARANGE_AUDIO), - KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - SPEAKERHS_HOST_MAX_CHANNELS, - SPEAKERHS_HOST_MIN_BITS_PER_SAMPLE, - SPEAKERHS_HOST_MAX_BITS_PER_SAMPLE, - SPEAKERHS_HOST_MIN_SAMPLE_RATE, - SPEAKERHS_HOST_MAX_SAMPLE_RATE - }, - { // 1 - { - sizeof(KSDATARANGE_AUDIO), - KSDATARANGE_ATTRIBUTES, // An attributes list follows this data range - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - SPEAKERHS_OFFLOAD_MAX_CHANNELS, - SPEAKERHS_OFFLOAD_MIN_BITS_PER_SAMPLE, - SPEAKERHS_OFFLOAD_MAX_BITS_PER_SAMPLE, - SPEAKERHS_OFFLOAD_MIN_SAMPLE_RATE, - SPEAKERHS_OFFLOAD_MAX_SAMPLE_RATE - }, - { // 2 - { - sizeof(KSDATARANGE_AUDIO), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX) - }, - SPEAKERHS_LOOPBACK_MAX_CHANNELS, - SPEAKERHS_LOOPBACK_MIN_BITS_PER_SAMPLE, - SPEAKERHS_LOOPBACK_MAX_BITS_PER_SAMPLE, - SPEAKERHS_LOOPBACK_MIN_SAMPLE_RATE, - SPEAKERHS_LOOPBACK_MAX_SAMPLE_RATE - } -}; - -static -PKSDATARANGE SpeakerHsPinDataRangePointersStream[] = -{ - PKSDATARANGE(&SpeakerHsPinDataRangesStream[0]), - PKSDATARANGE(&PinDataRangeAttributeList) -}; - -static -PKSDATARANGE SpeakerHsPinDataRangePointersOffloadStream[] = -{ - PKSDATARANGE(&SpeakerHsPinDataRangesStream[1]), - PKSDATARANGE(&PinDataRangeAttributeList) -}; - -static -PKSDATARANGE SpeakerHsPinDataRangePointersLoopbackStream[] = -{ - PKSDATARANGE(&SpeakerHsPinDataRangesStream[2]) -}; - -//============================================================================= -static -KSDATARANGE SpeakerHsPinDataRangesBridge[] = -{ - { - sizeof(KSDATARANGE), - 0, - 0, - 0, - STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO), - STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG), - STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE) - } -}; - -static -PKSDATARANGE SpeakerHsPinDataRangePointersBridge[] = -{ - &SpeakerHsPinDataRangesBridge[0] -}; - -//============================================================================= - -static -PCPROPERTY_ITEM PropertiesSpeakerHsOffloadPin[] = -{ - { - &KSPROPSETID_OffloadPin, // define new property set - KSPROPERTY_OFFLOAD_PIN_GET_STREAM_OBJECT_POINTER, // define properties - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_OffloadPin - }, - { - &KSPROPSETID_OffloadPin, // define new property set - KSPROPERTY_OFFLOAD_PIN_VERIFY_STREAM_OBJECT_POINTER, // define properties - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_OffloadPin - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationSpeakerHsOffloadPin, PropertiesSpeakerHsOffloadPin); - -//============================================================================= -static -PCPIN_DESCRIPTOR SpeakerHsWaveMiniportPins[] = -{ - // Wave Out Streaming Pin (renderer) KSPIN_WAVE_RENDER_SINK_SYSTEM - { - SPEAKERHS_MAX_INPUT_SYSTEM_STREAMS, - SPEAKERHS_MAX_INPUT_SYSTEM_STREAMS, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(SpeakerHsPinDataRangePointersStream), - SpeakerHsPinDataRangePointersStream, - KSPIN_DATAFLOW_IN, - KSPIN_COMMUNICATION_SINK, - &KSCATEGORY_AUDIO, - NULL, - 0 - } - }, - // Wave Out Streaming Pin (Renderer) KSPIN_WAVE_RENDER_SINK_OFFLOAD - { - SPEAKERHS_MAX_INPUT_OFFLOAD_STREAMS, - SPEAKERHS_MAX_INPUT_OFFLOAD_STREAMS, - 0, - &AutomationSpeakerHsOffloadPin, // AutomationTable - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(SpeakerHsPinDataRangePointersOffloadStream), - SpeakerHsPinDataRangePointersOffloadStream, - KSPIN_DATAFLOW_IN, - KSPIN_COMMUNICATION_SINK, - &KSCATEGORY_AUDIO, - NULL, - 0 - } - }, - // Wave Out Streaming Pin (Renderer) KSPIN_WAVE_RENDER_SINK_LOOPBACK - { - SPEAKERHS_MAX_OUTPUT_LOOPBACK_STREAMS, - SPEAKERHS_MAX_OUTPUT_LOOPBACK_STREAMS, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(SpeakerHsPinDataRangePointersLoopbackStream), - SpeakerHsPinDataRangePointersLoopbackStream, - KSPIN_DATAFLOW_OUT, - KSPIN_COMMUNICATION_SINK, - &KSNODETYPE_AUDIO_LOOPBACK, - NULL, - 0 - } - }, - // Wave Out Bridge Pin (Renderer) KSPIN_WAVE_RENDER_SOURCE - { - 0, - 0, - 0, - NULL, - { - 0, - NULL, - 0, - NULL, - SIZEOF_ARRAY(SpeakerHsPinDataRangePointersBridge), - SpeakerHsPinDataRangePointersBridge, - KSPIN_DATAFLOW_OUT, - KSPIN_COMMUNICATION_NONE, - &KSCATEGORY_AUDIO, - NULL, - 0 - } - }, -}; - -//============================================================================= -static -PCNODE_DESCRIPTOR SpeakerHsWaveMiniportNodes[] = -{ - // KSNODE_WAVE_AUDIO_ENGINE - { - 0, // Flags - NULL, // AutomationTable - &KSNODETYPE_AUDIO_ENGINE, // Type KSNODETYPE_AUDIO_ENGINE - NULL // Name - } -}; -//============================================================================= -// -// ---------------------------- -// | | -// System Pin 0-->| |--> 2 Loopback Pin -// | HW Audio Engine node | -// Offload Pin 1-->| |--> 3 KSPIN_WAVE_RENDER_SOURCE -// | | -// ---------------------------- -static -PCCONNECTION_DESCRIPTOR SpeakerHsWaveMiniportConnections[] = -{ - { PCFILTER_NODE, KSPIN_WAVE_RENDER_SINK_SYSTEM, KSNODE_WAVE_AUDIO_ENGINE, 1 }, - { PCFILTER_NODE, KSPIN_WAVE_RENDER_SINK_OFFLOAD, KSNODE_WAVE_AUDIO_ENGINE, 2 }, - { KSNODE_WAVE_AUDIO_ENGINE, 3, PCFILTER_NODE, KSPIN_WAVE_RENDER_SINK_LOOPBACK }, - { KSNODE_WAVE_AUDIO_ENGINE, 0, PCFILTER_NODE, KSPIN_WAVE_RENDER_SOURCE }, -}; - -//============================================================================= -static -PCPROPERTY_ITEM PropertiesSpeakerHsWaveFilter[] = -{ - { - &KSPROPSETID_Pin, - KSPROPERTY_PIN_PROPOSEDATAFORMAT, - KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - }, - { - &KSPROPSETID_Pin, - KSPROPERTY_PIN_PROPOSEDATAFORMAT2, - KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, - PropertyHandler_WaveFilter - } -}; - -DEFINE_PCAUTOMATION_TABLE_PROP(AutomationSpeakerHsWaveFilter, PropertiesSpeakerHsWaveFilter); - -//============================================================================= -static -PCFILTER_DESCRIPTOR SpeakerHsWaveMiniportFilterDescriptor = -{ - 0, // Version - &AutomationSpeakerHsWaveFilter, // AutomationTable - sizeof(PCPIN_DESCRIPTOR), // PinSize - SIZEOF_ARRAY(SpeakerHsWaveMiniportPins), // PinCount - SpeakerHsWaveMiniportPins, // Pins - sizeof(PCNODE_DESCRIPTOR), // NodeSize - SIZEOF_ARRAY(SpeakerHsWaveMiniportNodes), // NodeCount - SpeakerHsWaveMiniportNodes, // Nodes - SIZEOF_ARRAY(SpeakerHsWaveMiniportConnections), // ConnectionCount - SpeakerHsWaveMiniportConnections, // Connections - 0, // CategoryCount - NULL // Categories - use defaults (audio, render, capture) -}; - -#endif // _SYSVAD_SPEAKERHSWAVTABLE_H_ - |
