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/handsetspeakertopo.cpp | |
| 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/handsetspeakertopo.cpp')
| -rw-r--r-- | audio/sysvad/PhoneAudioSample/handsetspeakertopo.cpp | 561 |
1 files changed, 0 insertions, 561 deletions
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() - |
