2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/bdaplgin/frequencyfilter.cpp
5 * PURPOSE: IBDA_FrequencyFilter interface
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
12 const GUID IID_IBDA_SignalStatistics
= {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac, 0x0d, 0x9a, 0x2a, 0x43, 0x38}};
13 const GUID KSPROPSETID_BdaSignalStats
= {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac, 0xd, 0x9a, 0x2a, 0x43, 0x38}};
15 class CBDASignalStatistics
: public IBDA_SignalStatistics
18 STDMETHODIMP
QueryInterface( REFIID InterfaceId
, PVOID
* Interface
);
20 STDMETHODIMP_(ULONG
) AddRef()
22 InterlockedIncrement(&m_Ref
);
25 STDMETHODIMP_(ULONG
) Release()
27 InterlockedDecrement(&m_Ref
);
36 // IBDA_SignalStatistics methods
37 HRESULT STDMETHODCALLTYPE
put_SignalStrength(LONG lDbStrength
);
38 HRESULT STDMETHODCALLTYPE
get_SignalStrength(LONG
*plDbStrength
);
39 HRESULT STDMETHODCALLTYPE
put_SignalQuality(LONG lPercentQuality
);
40 HRESULT STDMETHODCALLTYPE
get_SignalQuality(LONG
*plPercentQuality
);
41 HRESULT STDMETHODCALLTYPE
put_SignalPresent(BOOLEAN fPresent
);
42 HRESULT STDMETHODCALLTYPE
get_SignalPresent(BOOLEAN
*pfPresent
);
43 HRESULT STDMETHODCALLTYPE
put_SignalLocked(BOOLEAN fLocked
);
44 HRESULT STDMETHODCALLTYPE
get_SignalLocked(BOOLEAN
*pfLocked
);
45 HRESULT STDMETHODCALLTYPE
put_SampleTime(LONG lmsSampleTime
);
46 HRESULT STDMETHODCALLTYPE
get_SampleTime(LONG
*plmsSampleTime
);
48 CBDASignalStatistics(HANDLE hFile
, ULONG NodeId
) : m_Ref(0), m_hFile(hFile
), m_NodeId(NodeId
){};
49 ~CBDASignalStatistics(){};
59 CBDASignalStatistics::QueryInterface(
65 if (IsEqualGUID(refiid
, IID_IUnknown
))
67 *Output
= PVOID(this);
68 reinterpret_cast<IUnknown
*>(*Output
)->AddRef();
72 if (IsEqualGUID(refiid
, IID_IBDA_SignalStatistics
))
74 *Output
= (IBDA_SignalStatistics
*)(this);
75 reinterpret_cast<IBDA_SignalStatistics
*>(*Output
)->AddRef();
84 CBDASignalStatistics::put_SignalStrength(LONG lDbStrength
)
91 CBDASignalStatistics::get_SignalStrength(LONG
*plDbStrength
)
98 Node
.Property
.Set
= KSPROPSETID_BdaSignalStats
;
99 Node
.Property
.Id
= KSPROPERTY_BDA_SIGNAL_STRENGTH
;
100 Node
.Property
.Flags
= KSPROPERTY_TYPE_GET
| KSPROPERTY_TYPE_TOPOLOGY
;
101 Node
.NodeId
= (ULONG
)-1;
104 hr
= KsSynchronousDeviceControl(m_hFile
, IOCTL_KS_PROPERTY
, (PVOID
)&Node
, sizeof(KSP_NODE
), plDbStrength
, sizeof(LONG
), &BytesReturned
);
106 #ifdef BDAPLGIN_TRACE
108 swprintf(Buffer
, L
"CBDASignalStatistics::get_SignalStrength: m_NodeId %lu hr %lx, BytesReturned %lu plDbStrength %ld\n", m_NodeId
, hr
, BytesReturned
, *plDbStrength
);
109 OutputDebugStringW(Buffer
);
117 CBDASignalStatistics::put_SignalQuality(LONG lPercentQuality
)
119 return E_NOINTERFACE
;
124 CBDASignalStatistics::get_SignalQuality(LONG
*plPercentQuality
)
131 Node
.Property
.Set
= KSPROPSETID_BdaSignalStats
;
132 Node
.Property
.Id
= KSPROPERTY_BDA_SIGNAL_QUALITY
;
133 Node
.Property
.Flags
= KSPROPERTY_TYPE_GET
| KSPROPERTY_TYPE_TOPOLOGY
;
134 Node
.NodeId
= (ULONG
)-1;
137 hr
= KsSynchronousDeviceControl(m_hFile
, IOCTL_KS_PROPERTY
, (PVOID
)&Node
, sizeof(KSP_NODE
), plPercentQuality
, sizeof(LONG
), &BytesReturned
);
139 #ifdef BDAPLGIN_TRACE
141 swprintf(Buffer
, L
"CBDASignalStatistics::get_SignalQuality: m_NodeId %lu hr %lx, BytesReturned %lu plPercentQuality %lu\n", m_NodeId
, hr
, BytesReturned
, *plPercentQuality
);
142 OutputDebugStringW(Buffer
);
150 CBDASignalStatistics::put_SignalPresent(BOOLEAN fPresent
)
152 return E_NOINTERFACE
;
157 CBDASignalStatistics::get_SignalPresent(BOOLEAN
*pfPresent
)
165 Node
.Property
.Set
= KSPROPSETID_BdaSignalStats
;
166 Node
.Property
.Id
= KSPROPERTY_BDA_SIGNAL_PRESENT
;
167 Node
.Property
.Flags
= KSPROPERTY_TYPE_GET
| KSPROPERTY_TYPE_TOPOLOGY
;
168 Node
.NodeId
= (ULONG
)-1;
171 hr
= KsSynchronousDeviceControl(m_hFile
, IOCTL_KS_PROPERTY
, (PVOID
)&Node
, sizeof(KSP_NODE
), &Present
, sizeof(ULONG
), &BytesReturned
);
173 *pfPresent
= Present
;
175 #ifdef BDAPLGIN_TRACE
177 swprintf(Buffer
, L
"CBDASignalStatistics::get_SignalPresent: m_NodeId %lu hr %lx, BytesReturned %lu Present %lu\n", m_NodeId
, hr
, BytesReturned
, Present
);
178 OutputDebugStringW(Buffer
);
186 CBDASignalStatistics::put_SignalLocked(BOOLEAN fLocked
)
188 return E_NOINTERFACE
;
193 CBDASignalStatistics::get_SignalLocked(BOOLEAN
*pfLocked
)
201 Node
.Property
.Set
= KSPROPSETID_BdaSignalStats
;
202 Node
.Property
.Id
= KSPROPERTY_BDA_SIGNAL_LOCKED
;
203 Node
.Property
.Flags
= KSPROPERTY_TYPE_GET
| KSPROPERTY_TYPE_TOPOLOGY
;
204 Node
.NodeId
= (ULONG
)-1;
207 hr
= KsSynchronousDeviceControl(m_hFile
, IOCTL_KS_PROPERTY
, (PVOID
)&Node
, sizeof(KSP_NODE
), &Locked
, sizeof(ULONG
), &BytesReturned
);
210 #ifdef BDAPLGIN_TRACE
212 swprintf(Buffer
, L
"CBDASignalStatistics::get_SignalLocked: m_NodeId %lu hr %lx, BytesReturned %lu Locked %lu\n", m_NodeId
, hr
, BytesReturned
, Locked
);
213 OutputDebugStringW(Buffer
);
221 CBDASignalStatistics::put_SampleTime(LONG lmsSampleTime
)
228 Node
.Property
.Set
= KSPROPSETID_BdaSignalStats
;
229 Node
.Property
.Id
= KSPROPERTY_BDA_SAMPLE_TIME
;
230 Node
.Property
.Flags
= KSPROPERTY_TYPE_SET
| KSPROPERTY_TYPE_TOPOLOGY
;
231 Node
.NodeId
= (ULONG
)-1;
234 hr
= KsSynchronousDeviceControl(m_hFile
, IOCTL_KS_PROPERTY
, (PVOID
)&Node
, sizeof(KSP_NODE
), &lmsSampleTime
, sizeof(LONG
), &BytesReturned
);
236 #ifdef BDAPLGIN_TRACE
238 swprintf(Buffer
, L
"CBDASignalStatistics::put_SampleTime: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId
, hr
, BytesReturned
);
239 OutputDebugStringW(Buffer
);
247 CBDASignalStatistics::get_SampleTime(LONG
*plmsSampleTime
)
254 Node
.Property
.Set
= KSPROPSETID_BdaSignalStats
;
255 Node
.Property
.Id
= KSPROPERTY_BDA_SAMPLE_TIME
;
256 Node
.Property
.Flags
= KSPROPERTY_TYPE_GET
| KSPROPERTY_TYPE_TOPOLOGY
;
257 Node
.NodeId
= (ULONG
)-1;
260 hr
= KsSynchronousDeviceControl(m_hFile
, IOCTL_KS_PROPERTY
, (PVOID
)&Node
, sizeof(KSP_NODE
), plmsSampleTime
, sizeof(LONG
), &BytesReturned
);
262 #ifdef BDAPLGIN_TRACE
264 swprintf(Buffer
, L
"CBDASignalStatistics::get_SampleTime: m_NodeId %lu hr %lx, BytesReturned %lu \n", m_NodeId
, hr
, BytesReturned
);
265 OutputDebugStringW(Buffer
);
273 CBDASignalStatistics_fnConstructor(
279 // construct device control
280 CBDASignalStatistics
* handler
= new CBDASignalStatistics(hFile
, NodeId
);
282 #ifdef BDAPLGIN_TRACE
283 OutputDebugStringW(L
"CBDASignalStatistics_fnConstructor\n");
287 return E_OUTOFMEMORY
;
289 if (FAILED(handler
->QueryInterface(riid
, ppv
)))
293 return E_NOINTERFACE
;