1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/bdaplgin/signalstatistics.cpp
5 * PURPOSE: IBDA_FrequencyFilter interface
6 *
7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
8 */
9
10 #include "precomp.h"
11
12 #ifndef _MSC_VER
13 const GUID IID_IBDA_SignalStatistics = {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac, 0x0d, 0x9a, 0x2a, 0x43, 0x38}};
14 const GUID KSPROPSETID_BdaSignalStats = {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac, 0xd, 0x9a, 0x2a, 0x43, 0x38}};
15 #endif
16
17 class CBDASignalStatistics : public IBDA_SignalStatistics
18 {
19 public:
20 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
21
AddRef()22 STDMETHODIMP_(ULONG) AddRef()
23 {
24 InterlockedIncrement(&m_Ref);
25 return m_Ref;
26 }
Release()27 STDMETHODIMP_(ULONG) Release()
28 {
29 InterlockedDecrement(&m_Ref);
30 if (!m_Ref)
31 {
32 delete this;
33 return 0;
34 }
35 return m_Ref;
36 }
37
38 // IBDA_SignalStatistics methods
39 HRESULT STDMETHODCALLTYPE put_SignalStrength(LONG lDbStrength);
40 HRESULT STDMETHODCALLTYPE get_SignalStrength(LONG *plDbStrength);
41 HRESULT STDMETHODCALLTYPE put_SignalQuality(LONG lPercentQuality);
42 HRESULT STDMETHODCALLTYPE get_SignalQuality(LONG *plPercentQuality);
43 HRESULT STDMETHODCALLTYPE put_SignalPresent(BOOLEAN fPresent);
44 HRESULT STDMETHODCALLTYPE get_SignalPresent(BOOLEAN *pfPresent);
45 HRESULT STDMETHODCALLTYPE put_SignalLocked(BOOLEAN fLocked);
46 HRESULT STDMETHODCALLTYPE get_SignalLocked(BOOLEAN *pfLocked);
47 HRESULT STDMETHODCALLTYPE put_SampleTime(LONG lmsSampleTime);
48 HRESULT STDMETHODCALLTYPE get_SampleTime(LONG *plmsSampleTime);
49
CBDASignalStatistics(IKsPropertySet * pProperty,ULONG NodeId)50 CBDASignalStatistics(IKsPropertySet * pProperty, ULONG NodeId) : m_Ref(0), m_pProperty(pProperty), m_NodeId(NodeId){};
~CBDASignalStatistics()51 ~CBDASignalStatistics(){};
52
53 protected:
54 LONG m_Ref;
55 IKsPropertySet * m_pProperty;
56 ULONG m_NodeId;
57 };
58
59 HRESULT
60 STDMETHODCALLTYPE
QueryInterface(IN REFIID refiid,OUT PVOID * Output)61 CBDASignalStatistics::QueryInterface(
62 IN REFIID refiid,
63 OUT PVOID* Output)
64 {
65 *Output = NULL;
66
67 if (IsEqualGUID(refiid, IID_IUnknown))
68 {
69 *Output = PVOID(this);
70 reinterpret_cast<IUnknown*>(*Output)->AddRef();
71 return NOERROR;
72 }
73
74 if (IsEqualGUID(refiid, IID_IBDA_SignalStatistics))
75 {
76 *Output = (IBDA_SignalStatistics*)(this);
77 reinterpret_cast<IBDA_SignalStatistics*>(*Output)->AddRef();
78 return NOERROR;
79 }
80 return E_NOINTERFACE;
81 }
82
83 HRESULT
84 STDMETHODCALLTYPE
put_SignalStrength(LONG lDbStrength)85 CBDASignalStatistics::put_SignalStrength(LONG lDbStrength)
86 {
87 return E_NOINTERFACE;
88 }
89
90 HRESULT
91 STDMETHODCALLTYPE
get_SignalStrength(LONG * plDbStrength)92 CBDASignalStatistics::get_SignalStrength(LONG *plDbStrength)
93 {
94 KSP_NODE Node;
95 HRESULT hr;
96 ULONG BytesReturned;
97
98 // setup request
99 Node.NodeId = (ULONG)-1;
100 Node.Reserved = 0;
101
102 assert(m_pProperty);
103
104 hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SIGNAL_STRENGTH, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), plDbStrength, sizeof(LONG), &BytesReturned);
105
106
107 #ifdef BDAPLGIN_TRACE
108 WCHAR Buffer[100];
109 swprintf(Buffer, L"CBDASignalStatistics::get_SignalStrength: m_NodeId %lu hr %lx, BytesReturned %lu plDbStrength %ld\n", m_NodeId, hr, BytesReturned, *plDbStrength);
110 OutputDebugStringW(Buffer);
111 #endif
112
113 return hr;
114 }
115
116 HRESULT
117 STDMETHODCALLTYPE
put_SignalQuality(LONG lPercentQuality)118 CBDASignalStatistics::put_SignalQuality(LONG lPercentQuality)
119 {
120 return E_NOINTERFACE;
121 }
122
123 HRESULT
124 STDMETHODCALLTYPE
get_SignalQuality(LONG * plPercentQuality)125 CBDASignalStatistics::get_SignalQuality(LONG *plPercentQuality)
126 {
127 KSP_NODE Node;
128 HRESULT hr;
129 ULONG BytesReturned;
130
131 // setup request
132 Node.NodeId = (ULONG)-1;
133 Node.Reserved = 0;
134
135 // perform request
136 hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SIGNAL_QUALITY, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), plPercentQuality, sizeof(LONG), &BytesReturned);
137
138 #ifdef BDAPLGIN_TRACE
139 WCHAR Buffer[100];
140 swprintf(Buffer, L"CBDASignalStatistics::get_SignalQuality: m_NodeId %lu hr %lx, BytesReturned %lu plPercentQuality %lu\n", m_NodeId, hr, BytesReturned, *plPercentQuality);
141 OutputDebugStringW(Buffer);
142 #endif
143
144 return hr;
145 }
146
147 HRESULT
148 STDMETHODCALLTYPE
put_SignalPresent(BOOLEAN fPresent)149 CBDASignalStatistics::put_SignalPresent(BOOLEAN fPresent)
150 {
151 return E_NOINTERFACE;
152 }
153
154 HRESULT
155 STDMETHODCALLTYPE
get_SignalPresent(BOOLEAN * pfPresent)156 CBDASignalStatistics::get_SignalPresent(BOOLEAN *pfPresent)
157 {
158 KSP_NODE Node;
159 HRESULT hr;
160 ULONG Present;
161 ULONG BytesReturned;
162
163 // setup request
164 Node.NodeId = (ULONG)-1;
165 Node.Reserved = 0;
166
167 // perform request
168 hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SIGNAL_PRESENT, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &Present, sizeof(ULONG), &BytesReturned);
169
170 // store result
171 *pfPresent = Present;
172
173 #ifdef BDAPLGIN_TRACE
174 WCHAR Buffer[100];
175 swprintf(Buffer, L"CBDASignalStatistics::get_SignalPresent: m_NodeId %lu hr %lx, BytesReturned %lu Present %lu\n", m_NodeId, hr, BytesReturned, Present);
176 OutputDebugStringW(Buffer);
177 #endif
178
179 return hr;
180 }
181
182 HRESULT
183 STDMETHODCALLTYPE
put_SignalLocked(BOOLEAN fLocked)184 CBDASignalStatistics::put_SignalLocked(BOOLEAN fLocked)
185 {
186 return E_NOINTERFACE;
187 }
188
189 HRESULT
190 STDMETHODCALLTYPE
get_SignalLocked(BOOLEAN * pfLocked)191 CBDASignalStatistics::get_SignalLocked(BOOLEAN *pfLocked)
192 {
193 KSP_NODE Node;
194 HRESULT hr;
195 ULONG Locked;
196 ULONG BytesReturned;
197
198 // setup request
199 Node.NodeId = (ULONG)-1;
200 Node.Reserved = 0;
201
202 // perform request
203 hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SIGNAL_LOCKED, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &Locked, sizeof(ULONG), &BytesReturned);
204
205 *pfLocked = Locked;
206
207 #ifdef BDAPLGIN_TRACE
208 WCHAR Buffer[100];
209 swprintf(Buffer, L"CBDASignalStatistics::get_SignalLocked: m_NodeId %lu hr %lx, BytesReturned %lu Locked %lu\n", m_NodeId, hr, BytesReturned, Locked);
210 OutputDebugStringW(Buffer);
211 #endif
212
213 return hr;
214 }
215
216 HRESULT
217 STDMETHODCALLTYPE
put_SampleTime(LONG lmsSampleTime)218 CBDASignalStatistics::put_SampleTime(LONG lmsSampleTime)
219 {
220 KSP_NODE Node;
221 HRESULT hr;
222
223 // setup request
224 Node.NodeId = (ULONG)-1;
225 Node.Reserved = 0;
226
227 // perform request
228 hr = m_pProperty->Set(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SAMPLE_TIME, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &lmsSampleTime, sizeof(LONG));
229
230 #ifdef BDAPLGIN_TRACE
231 WCHAR Buffer[100];
232 swprintf(Buffer, L"CBDASignalStatistics::put_SampleTime: m_NodeId %lu hr %lx\n", m_NodeId, hr);
233 OutputDebugStringW(Buffer);
234 #endif
235
236 return hr;
237 }
238
239 HRESULT
240 STDMETHODCALLTYPE
get_SampleTime(LONG * plmsSampleTime)241 CBDASignalStatistics::get_SampleTime(LONG *plmsSampleTime)
242 {
243 KSP_NODE Node;
244 HRESULT hr;
245 ULONG BytesReturned;
246
247 // setup request
248 Node.NodeId = (ULONG)-1;
249 Node.Reserved = 0;
250
251 // perform request
252 hr = m_pProperty->Get(KSPROPSETID_BdaSignalStats, KSPROPERTY_BDA_SAMPLE_TIME, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), plmsSampleTime, sizeof(LONG), &BytesReturned);
253
254 #ifdef BDAPLGIN_TRACE
255 WCHAR Buffer[100];
256 swprintf(Buffer, L"CBDASignalStatistics::get_SampleTime: m_NodeId %lu hr %lx, BytesReturned %lu \n", m_NodeId, hr, BytesReturned);
257 OutputDebugStringW(Buffer);
258 #endif
259
260 return hr;
261 }
262
263 HRESULT
264 WINAPI
CBDASignalStatistics_fnConstructor(IKsPropertySet * pProperty,ULONG NodeId,REFIID riid,LPVOID * ppv)265 CBDASignalStatistics_fnConstructor(
266 IKsPropertySet * pProperty,
267 ULONG NodeId,
268 REFIID riid,
269 LPVOID * ppv)
270 {
271 // construct device control
272 CBDASignalStatistics * handler = new CBDASignalStatistics(pProperty, NodeId);
273
274 #ifdef BDAPLGIN_TRACE
275 OutputDebugStringW(L"CBDASignalStatistics_fnConstructor\n");
276 #endif
277
278 if (!handler)
279 return E_OUTOFMEMORY;
280
281 if (FAILED(handler->QueryInterface(riid, ppv)))
282 {
283 /* not supported */
284 delete handler;
285 return E_NOINTERFACE;
286 }
287
288 return NOERROR;
289 }
290