summaryrefslogtreecommitdiff
path: root/audio/sysvad/PhoneAudioSample
diff options
context:
space:
mode:
authorGirish Pattabiraman <[email protected]>2018-08-13 10:54:19 -0700
committerAdonais Romero González <[email protected]>2018-08-13 10:54:19 -0700
commit2af3e666d01a60568c2875b4ccbd56b122ad714f (patch)
tree29825a7b7cb0f6a9f77f1ab6e5813665d45ca4cc /audio/sysvad/PhoneAudioSample
parent181c180357cdf9a04d5e3bb21a8e86dc2155ca69 (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')
-rw-r--r--audio/sysvad/PhoneAudioSample/Cellulartopo.cpp190
-rw-r--r--audio/sysvad/PhoneAudioSample/Cellulartopo.h25
-rw-r--r--audio/sysvad/PhoneAudioSample/Cellulartoptable.h16
-rw-r--r--audio/sysvad/PhoneAudioSample/Cellularwavtable.h12
-rw-r--r--audio/sysvad/PhoneAudioSample/FMWavTable.h7
-rw-r--r--audio/sysvad/PhoneAudioSample/PhoneAudioSample.rc30
-rw-r--r--audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj13
-rw-r--r--audio/sysvad/PhoneAudioSample/PhoneAudioSample.vcxproj.Filters55
-rw-r--r--audio/sysvad/PhoneAudioSample/handsetmictopo.cpp2
-rw-r--r--audio/sysvad/PhoneAudioSample/handsetmicwavtable.h6
-rw-r--r--audio/sysvad/PhoneAudioSample/handsetspeakertopo.cpp2
-rw-r--r--audio/sysvad/PhoneAudioSample/handsetspeakerwavtable.h6
-rw-r--r--audio/sysvad/PhoneAudioSample/michswavtable.h6
-rw-r--r--audio/sysvad/PhoneAudioSample/minipairs.h44
-rw-r--r--audio/sysvad/PhoneAudioSample/phoneaudiosample.inx (renamed from audio/sysvad/PhoneAudioSample/phoneaudiosample.inf)bin45134 -> 45318 bytes
-rw-r--r--audio/sysvad/PhoneAudioSample/sources23
-rw-r--r--audio/sysvad/PhoneAudioSample/speakerhswavtable.h6
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
index 5c7fb491..c7b6c110 100644
--- a/audio/sysvad/PhoneAudioSample/phoneaudiosample.inf
+++ b/audio/sysvad/PhoneAudioSample/phoneaudiosample.inx
Binary files differ
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
}
};