diff options
| author | Girish Pattabiraman <[email protected]> | 2018-08-13 10:54:19 -0700 |
|---|---|---|
| committer | Adonais Romero González <[email protected]> | 2018-08-13 10:54:19 -0700 |
| commit | 2af3e666d01a60568c2875b4ccbd56b122ad714f (patch) | |
| tree | 29825a7b7cb0f6a9f77f1ab6e5813665d45ca4cc /audio/sysvad/PhoneAudioSample | |
| parent | 181c180357cdf9a04d5e3bb21a8e86dc2155ca69 (diff) | |
Update sample to get ready for RS4 changes - merge pre-RS4 fixes. (#256)
* Format Changes
==============
* Add KSEVENT_PINCAPS_FORMATCHANGE to Bluetooth HFP Endpoints
* Remove 8 bit formats from Bluetooth HFP Endpoints
Name Template
==============
* Bluetooth Endpoints are now based on templates in INF and then customized with endpoints specific data
Sideband Common Interface for future Sideband buses
===================================================
* Add ISidebandDevice
* Add current directory to TabletAudioSample include path. Remove unused compiler flags.
* RS4 bug fixes
Diffstat (limited to 'audio/sysvad/PhoneAudioSample')
17 files changed, 337 insertions, 106 deletions
diff --git a/audio/sysvad/PhoneAudioSample/Cellulartopo.cpp b/audio/sysvad/PhoneAudioSample/Cellulartopo.cpp index 250a03ba..7329a9f9 100644 --- a/audio/sysvad/PhoneAudioSample/Cellulartopo.cpp +++ b/audio/sysvad/PhoneAudioSample/Cellulartopo.cpp @@ -121,6 +121,9 @@ CCellularMiniportTopology::CCellularMiniportTopology { 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)); } @@ -147,6 +150,13 @@ Return Value: { 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 @@ -282,14 +292,36 @@ Return Value: DPF_ENTER(("[CCellularMiniportTopology::Init]")); - NTSTATUS ntStatus; + NTSTATUS ntStatus = STATUS_SUCCESS; - ntStatus = - CMiniportTopologySYSVAD::Init - ( - UnknownAdapter, - Port_ - ); + 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 @@ -325,7 +357,7 @@ Return Value: if (IsEqualGUIDAligned(Interface, IID_IUnknown)) { - *Object = PVOID(PUNKNOWN(this)); + *Object = PVOID(PUNKNOWN(static_cast<IMiniportTopology*>( this ))); } else if (IsEqualGUIDAligned(Interface, IID_IMiniport)) { @@ -339,6 +371,10 @@ Return Value: { *Object = PVOID(PCELLULARTOPOLOGY(this)); } + else if (IsEqualGUIDAligned(Interface, IID_IMiniportChange)) + { + *Object = PVOID(static_cast<PMINIPORTCHANGE>( this )); + } else { *Object = NULL; @@ -576,12 +612,22 @@ Return Value: 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) + sizeof(g_EndpointList)); + 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)) { @@ -594,8 +640,8 @@ Return Value: PropDesc->DescriptionSize = ulExpectedSize; PropDesc->PropTypeSet.Set = KSPROPSETID_TelephonyTopology; PropDesc->PropTypeSet.Id = KSPROPERTY_TELEPHONY_ENDPOINTIDPAIR; + PropDesc->MembersListCount = 0; PropDesc->PropTypeSet.Flags = 0; - PropDesc->MembersListCount = 1; PropDesc->Reserved = 0; // buffer is big enough to hold the full data, add that @@ -604,12 +650,23 @@ Return Value: 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 = SIZEOF_ARRAY(g_EndpointList); + MembersHeader->MembersCount = countOfValidEndpointPairs; MembersHeader->Flags = 0; - memcpy(MembersHeader + 1, g_EndpointList, sizeof(g_EndpointList)); + 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; @@ -638,6 +695,8 @@ Return Value: { ntStatus = STATUS_BUFFER_TOO_SMALL; } + + ExReleaseFastMutex(&m_EndpointFastMutex); } else { @@ -667,16 +726,22 @@ Return Value: 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; - for (int i = 0; i < SIZEOF_ARRAY(g_EndpointList); i++) + + ExAcquireFastMutex(&m_EndpointFastMutex); + + for (le = m_EndpointPairs.Flink; le != &m_EndpointPairs; le = le->Flink) { - if (g_EndpointList[i].RenderEndpoint.PinId == EndpointIdPair->RenderEndpoint.PinId && - 0 == _wcsnicmp(g_EndpointList[i].RenderEndpoint.TopologyName, EndpointIdPair->RenderEndpoint.TopologyName, MAX_PATH) && - g_EndpointList[i].CaptureEndpoint.PinId == EndpointIdPair->CaptureEndpoint.PinId && - 0 == _wcsnicmp(g_EndpointList[i].CaptureEndpoint.TopologyName, EndpointIdPair->CaptureEndpoint.TopologyName, MAX_PATH)) + 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) && @@ -693,16 +758,17 @@ Return Value: // 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 { @@ -865,7 +931,7 @@ Return Value: // MajorTarget is a pointer to miniport object for miniports. // NTSTATUS ntStatus = STATUS_INVALID_DEVICE_REQUEST; - PCCellularMiniportTopology pMiniport = (PCCellularMiniportTopology)PropertyRequest->MajorTarget; + PCCellularMiniportTopology pMiniport = reinterpret_cast<PCCellularMiniportTopology>(PropertyRequest->MajorTarget); if (IsEqualGUIDAligned(*PropertyRequest->PropertyItem->Set, KSPROPSETID_Jack)) { @@ -890,7 +956,6 @@ Return Value: } } - return ntStatus; } // PropertyHandler_CellularTopoFilter @@ -970,4 +1035,83 @@ NTSTATUS CCellularMiniportTopology::EventHandler_JackState 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 index bcd4aba7..b898741c 100644 --- a/audio/sysvad/PhoneAudioSample/Cellulartopo.h +++ b/audio/sysvad/PhoneAudioSample/Cellulartopo.h @@ -42,6 +42,12 @@ Abstract: #define TELEPHONY_VOLUME_STEPPING (3 * 0x10000) // 10 steps +typedef struct _ENDPOINT_PAIR_ENTRY +{ + LIST_ENTRY ListEntry; + KSTOPOLOGY_ENDPOINTIDPAIR data; +} ENDPOINT_PAIR_ENTRY; + //============================================================================= // Defines //============================================================================= @@ -80,6 +86,7 @@ typedef ICellularTopology *PCELLULARTOPOLOGY; class CCellularMiniportTopology : public CMiniportTopologySYSVAD, public ICellularTopology, + public IMiniportChange, public CUnknown { private: @@ -87,6 +94,9 @@ class CCellularMiniportTopology : KSTOPOLOGY_ENDPOINTID m_CellularCaptureEndpoint; ULONG m_CellularVolume; + FAST_MUTEX m_EndpointFastMutex; + LIST_ENTRY m_EndpointPairs; + public: DECLARE_STD_UNKNOWN(); CCellularMiniportTopology @@ -135,6 +145,21 @@ class CCellularMiniportTopology : _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; diff --git a/audio/sysvad/PhoneAudioSample/Cellulartoptable.h b/audio/sysvad/PhoneAudioSample/Cellulartoptable.h index 9b6766ab..53eef9ae 100644 --- a/audio/sysvad/PhoneAudioSample/Cellulartoptable.h +++ b/audio/sysvad/PhoneAudioSample/Cellulartoptable.h @@ -214,13 +214,25 @@ NTSTATUS CCellularMiniportWaveRT_EventHandler_JackState _In_ PPCEVENT_REQUEST EventRequest ); -static PCEVENT_ITEM JackInfoChangeEvent[] = +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 } }; @@ -229,7 +241,7 @@ static PCEVENT_ITEM JackInfoChangeEvent[] = ***************************************************************************** * Automation table for jack descripton/detection. */ -DEFINE_PCAUTOMATION_TABLE_PROP_EVENT(AutomationCellularTopoFilter, PropertiesCellularTopoFilter, JackInfoChangeEvent); +DEFINE_PCAUTOMATION_TABLE_PROP_EVENT(AutomationCellularTopoFilter, PropertiesCellularTopoFilter, TelephonyEvents); //============================================================================= diff --git a/audio/sysvad/PhoneAudioSample/Cellularwavtable.h b/audio/sysvad/PhoneAudioSample/Cellularwavtable.h index 7f9447ec..806cb05d 100644 --- a/audio/sysvad/PhoneAudioSample/Cellularwavtable.h +++ b/audio/sysvad/PhoneAudioSample/Cellularwavtable.h @@ -218,42 +218,42 @@ PCPROPERTY_ITEM PropertiesCellularWaveFilter[] = 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, diff --git a/audio/sysvad/PhoneAudioSample/FMWavTable.h b/audio/sysvad/PhoneAudioSample/FMWavTable.h index 0fe0337c..6ef9fb46 100644 --- a/audio/sysvad/PhoneAudioSample/FMWavTable.h +++ b/audio/sysvad/PhoneAudioSample/FMWavTable.h @@ -216,7 +216,12 @@ PCPROPERTY_ITEM PropertiesFmWaveFilter[] = 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, diff --git a/audio/sysvad/PhoneAudioSample/PhoneAudioSample.rc b/audio/sysvad/PhoneAudioSample/PhoneAudioSample.rc new file mode 100644 index 00000000..b81a3c58 --- /dev/null +++ b/audio/sysvad/PhoneAudioSample/PhoneAudioSample.rc @@ -0,0 +1,30 @@ +/*++ + +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 index cf608ab0..eeb7b6c6 100644 --- a/audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj +++ b/audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj @@ -184,7 +184,7 @@ </Link> <ClCompile> <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_IPortClsRuntimePower</PreprocessorDefinitions> + <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_IPortClsRuntimePower;_NEW_DELETE_OPERATORS_</PreprocessorDefinitions> <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> <ExceptionHandling> </ExceptionHandling> @@ -207,7 +207,7 @@ </Link> <ClCompile> <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_IPortClsRuntimePower</PreprocessorDefinitions> + <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_IPortClsRuntimePower;_NEW_DELETE_OPERATORS_</PreprocessorDefinitions> <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> <ExceptionHandling> </ExceptionHandling> @@ -230,7 +230,7 @@ </Link> <ClCompile> <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_IPortClsRuntimePower</PreprocessorDefinitions> + <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_IPortClsRuntimePower;_NEW_DELETE_OPERATORS_</PreprocessorDefinitions> <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> <ExceptionHandling> </ExceptionHandling> @@ -253,7 +253,7 @@ </Link> <ClCompile> <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_WAVERT_;SYSVAD_BTH_BYPASS</PreprocessorDefinitions> - <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_IPortClsRuntimePower</PreprocessorDefinitions> + <PreprocessorDefinitions>%(PreprocessorDefinitions);_USE_IPortClsRuntimePower;_NEW_DELETE_OPERATORS_</PreprocessorDefinitions> <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\EndpointsCommon</AdditionalIncludeDirectories> <ExceptionHandling> </ExceptionHandling> @@ -273,6 +273,7 @@ <ItemGroup> <ClCompile Include="..\adapter.cpp" /> <ClCompile Include="..\basetopo.cpp" /> + <ClCompile Include="..\BthhfpDevice.cpp" /> <ClCompile Include="..\common.cpp" /> <ClCompile Include="..\hw.cpp" /> <ClCompile Include="..\kshelper.cpp" /> @@ -286,10 +287,10 @@ <ClCompile Include="handsetspeakertopo.cpp" /> <ClCompile Include="michstopo.cpp" /> <ClCompile Include="speakerhstopo.cpp" /> - <ResourceCompile Include="..\sysvad.rc" /> + <ResourceCompile Include="PhoneAudioSample.rc" /> </ItemGroup> <ItemGroup> - <Inf Exclude="@(Inf)" Include="*.inf" /> + <Inf Exclude="@(Inx)" Include="*.inx" /> <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" /> </ItemGroup> <ItemGroup> diff --git a/audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj.Filters b/audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj.Filters index 981f44c4..c6c87ad1 100644 --- a/audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj.Filters +++ b/audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj.Filters @@ -19,55 +19,26 @@ </Filter> </ItemGroup> <ItemGroup> - <ClCompile Include="..\adapter.cpp"> + <ClCompile Include="..\*.cpp"> <Filter>Source Files</Filter> </ClCompile> - <ClCompile Include="..\basetopo.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\common.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\hw.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\kshelper.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\savedata.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\tonegenerator.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="cellulartopo.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="cellularwave.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="fmtopo.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="fmwave.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="handsetmictopo.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="handsetspeakertopo.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="michstopo.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="speakerhstopo.cpp"> + <ClCompile Include="*.cpp"> <Filter>Source Files</Filter> </ClCompile> </ItemGroup> <ItemGroup> - <ResourceCompile Include="..\sysvad.rc"> + <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>
\ No newline at end of file diff --git a/audio/sysvad/PhoneAudioSample/handsetmictopo.cpp b/audio/sysvad/PhoneAudioSample/handsetmictopo.cpp index d4854a90..4e181c62 100644 --- a/audio/sysvad/PhoneAudioSample/handsetmictopo.cpp +++ b/audio/sysvad/PhoneAudioSample/handsetmictopo.cpp @@ -204,7 +204,7 @@ Return Value: // 0x00000001 - JACKDESC2_PRESENCE_DETECT_CAPABILITY // 0x00000002 - JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY // - pDesc->JackCapabilities = JACKDESC2_PRESENCE_DETECT_CAPABILITY; + pDesc->JackCapabilities = 0; ntStatus = STATUS_SUCCESS; } diff --git a/audio/sysvad/PhoneAudioSample/handsetmicwavtable.h b/audio/sysvad/PhoneAudioSample/handsetmicwavtable.h index 45f35ce1..5470e521 100644 --- a/audio/sysvad/PhoneAudioSample/handsetmicwavtable.h +++ b/audio/sysvad/PhoneAudioSample/handsetmicwavtable.h @@ -415,6 +415,12 @@ PCPROPERTY_ITEM PropertiesHandsetMicWaveFilter[] = KSPROPERTY_PIN_PROPOSEDATAFORMAT, KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, PropertyHandler_WaveFilter + }, + { + &KSPROPSETID_Pin, + KSPROPERTY_PIN_PROPOSEDATAFORMAT2, + KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, + PropertyHandler_WaveFilter } }; diff --git a/audio/sysvad/PhoneAudioSample/handsetspeakertopo.cpp b/audio/sysvad/PhoneAudioSample/handsetspeakertopo.cpp index 9e72ce85..161e5bf0 100644 --- a/audio/sysvad/PhoneAudioSample/handsetspeakertopo.cpp +++ b/audio/sysvad/PhoneAudioSample/handsetspeakertopo.cpp @@ -496,7 +496,7 @@ Return Value: // 0x00000001 - JACKDESC2_PRESENCE_DETECT_CAPABILITY // 0x00000002 - JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY // - pDesc->JackCapabilities = JACKDESC2_PRESENCE_DETECT_CAPABILITY; + pDesc->JackCapabilities = 0; ntStatus = STATUS_SUCCESS; } diff --git a/audio/sysvad/PhoneAudioSample/handsetspeakerwavtable.h b/audio/sysvad/PhoneAudioSample/handsetspeakerwavtable.h index 4eaa32ee..73548626 100644 --- a/audio/sysvad/PhoneAudioSample/handsetspeakerwavtable.h +++ b/audio/sysvad/PhoneAudioSample/handsetspeakerwavtable.h @@ -518,6 +518,12 @@ PCPROPERTY_ITEM PropertiesHandsetSpeakerWaveFilter[] = 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); diff --git a/audio/sysvad/PhoneAudioSample/michswavtable.h b/audio/sysvad/PhoneAudioSample/michswavtable.h index 5b46eb43..4bfa66db 100644 --- a/audio/sysvad/PhoneAudioSample/michswavtable.h +++ b/audio/sysvad/PhoneAudioSample/michswavtable.h @@ -415,6 +415,12 @@ PCPROPERTY_ITEM PropertiesMicHsWaveFilter[] = KSPROPERTY_PIN_PROPOSEDATAFORMAT, KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, PropertyHandler_WaveFilter + }, + { + &KSPROPSETID_Pin, + KSPROPERTY_PIN_PROPOSEDATAFORMAT2, + KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, + PropertyHandler_WaveFilter } }; diff --git a/audio/sysvad/PhoneAudioSample/minipairs.h b/audio/sysvad/PhoneAudioSample/minipairs.h index eaa7a240..6b219462 100644 --- a/audio/sysvad/PhoneAudioSample/minipairs.h +++ b/audio/sysvad/PhoneAudioSample/minipairs.h @@ -172,10 +172,12 @@ 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 name matches with KSNAME_WaveSpeaker in the inf's [Strings] section + 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 @@ -218,10 +220,12 @@ 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 name matches with KSNAME_WaveSpeakerHeadset in the inf's [Strings] section + 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 @@ -263,10 +267,12 @@ 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 name matches with KSNAME_WaveMicHeadset in the inf's [Strings] section + 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 @@ -308,11 +314,13 @@ static ENDPOINT_MINIPAIR MicArray1Miniports = { eMicArrayDevice1, - L"TopologyMicArray1", // make sure this name matches with KSNAME_TopologyMicArray1 in the inf's [Strings] section + 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 name matches with KSNAME_WaveMicArray1 in the inf's [Strings] section + 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 @@ -363,11 +371,13 @@ static ENDPOINT_MINIPAIR CellularMiniports = { eCellularDevice, - L"TopologyCellular", // make sure this name matches with KSNAME_TopologyCellular in the inf's [Strings] section + 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 name matches with KSNAME_WaveCellular in the inf's [Strings] section + 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 @@ -395,11 +405,13 @@ static ENDPOINT_MINIPAIR CellularMiniports2 = { eCellularDevice, - L"TopologyCellular", // make sure this name matches with KSNAME_TopologyCellular in the inf's [Strings] section + 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 name matches with KSNAME_WaveCellular in the inf's [Strings] section + 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 @@ -439,10 +451,12 @@ 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 name matches with KSNAME_WaveHandsetSpeaker in the inf's [Strings] section + 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 @@ -451,7 +465,7 @@ ENDPOINT_MINIPAIR HandsetSpeakerMiniports = SIZEOF_ARRAY(HandsetSpeakerPinDeviceFormatsAndModes), HandsetSpeakerTopologyPhysicalConnections, SIZEOF_ARRAY(HandsetSpeakerTopologyPhysicalConnections), - ENDPOINT_NO_FLAGS, + ENDPOINT_LOOPBACK_SUPPORTED, NULL, 0, NULL, // audio module settings. }; @@ -484,10 +498,12 @@ 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 name matches with KSNAME_WaveHandsetMic in the inf's [Strings] section + 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 @@ -525,10 +541,12 @@ 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 name matches with KSNAME_WaveFmRx in the inf's [Strings] section + 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 diff --git a/audio/sysvad/PhoneAudioSample/phoneaudiosample.inf b/audio/sysvad/PhoneAudioSample/phoneaudiosample.inx Binary files differindex 5c7fb491..c7b6c110 100644 --- a/audio/sysvad/PhoneAudioSample/phoneaudiosample.inf +++ b/audio/sysvad/PhoneAudioSample/phoneaudiosample.inx diff --git a/audio/sysvad/PhoneAudioSample/sources b/audio/sysvad/PhoneAudioSample/sources index 0d1551ce..46aa7bad 100644 --- a/audio/sysvad/PhoneAudioSample/sources +++ b/audio/sysvad/PhoneAudioSample/sources @@ -35,19 +35,20 @@ KMDF_VERSION_MAJOR=1 C_DEFINES= $(C_DEFINES) -D_USE_IPortClsRuntimePower #C_DEFINES= $(C_DEFINES) -D_USE_SingleComponentMultiFxStates -INCLUDES= \ - $(INCLUDES); \ - ..\EndpointsCommon; \ +INCLUDES= \ + $(INCLUDES); \ + ..\EndpointsCommon; \ SOURCES=$(SOURCES) \ - cellulartopo.cpp \ - fmtopo.cpp \ - handsetspeakertopo.cpp \ - handsetmictopo.cpp \ - michstopo.cpp \ - speakerhstopo.cpp \ - cellularwave.cpp \ - fmwave.cpp \ + cellulartopo.cpp \ + fmtopo.cpp \ + handsetspeakertopo.cpp \ + handsetmictopo.cpp \ + michstopo.cpp \ + speakerhstopo.cpp \ + cellularwave.cpp \ + fmwave.cpp \ + PhoneAudioSample.rc \ # Indicate that this module must be included in the driver package DDK_NO_PACKAGE_PROJECT=0 diff --git a/audio/sysvad/PhoneAudioSample/speakerhswavtable.h b/audio/sysvad/PhoneAudioSample/speakerhswavtable.h index 9cd103ef..cc7b55fc 100644 --- a/audio/sysvad/PhoneAudioSample/speakerhswavtable.h +++ b/audio/sysvad/PhoneAudioSample/speakerhswavtable.h @@ -722,6 +722,12 @@ PCPROPERTY_ITEM PropertiesSpeakerHsWaveFilter[] = KSPROPERTY_PIN_PROPOSEDATAFORMAT, KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT, PropertyHandler_WaveFilter + }, + { + &KSPROPSETID_Pin, + KSPROPERTY_PIN_PROPOSEDATAFORMAT2, + KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_BASICSUPPORT, + PropertyHandler_WaveFilter } }; |
