sync with trunk (r46275)
[reactos.git] / dll / directx / msvidctl / tuningspace.cpp
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/msvidctl/tuningspace.cpp
5 * PURPOSE: ITuningSpace interface
6 *
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
8 */
9 #include "precomp.h"
10
11 const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
12
13 class CTuningSpace : public IDVBTuningSpace
14 {
15 public:
16 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
17
18 STDMETHODIMP_(ULONG) AddRef()
19 {
20 InterlockedIncrement(&m_Ref);
21 return m_Ref;
22 }
23 STDMETHODIMP_(ULONG) Release()
24 {
25 InterlockedDecrement(&m_Ref);
26
27 WCHAR Buffer[100];
28 swprintf(Buffer, L"CTuningSpace::Release : %p Ref %lu\n", this, m_Ref);
29 OutputDebugStringW(Buffer);
30
31 if (!m_Ref)
32 {
33 //delete this;
34 return 0;
35 }
36 return m_Ref;
37 }
38
39 // IDispatch methods
40 HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
41 HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
42 HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
43 HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
44
45
46 //ITuningSpace methods
47 HRESULT STDMETHODCALLTYPE get_UniqueName(BSTR *Name);
48 HRESULT STDMETHODCALLTYPE put_UniqueName(BSTR Name);
49 HRESULT STDMETHODCALLTYPE get_FriendlyName(BSTR *Name);
50 HRESULT STDMETHODCALLTYPE put_FriendlyName(BSTR Name);
51 HRESULT STDMETHODCALLTYPE get_CLSID(BSTR *SpaceCLSID);
52 HRESULT STDMETHODCALLTYPE get_NetworkType(BSTR *NetworkTypeGuid);
53 HRESULT STDMETHODCALLTYPE put_NetworkType(BSTR NetworkTypeGuid);
54 HRESULT STDMETHODCALLTYPE get__NetworkType(GUID *NetworkTypeGuid);
55 HRESULT STDMETHODCALLTYPE put__NetworkType(REFCLSID NetworkTypeGuid);
56 HRESULT STDMETHODCALLTYPE CreateTuneRequest(ITuneRequest **TuneRequest);
57 HRESULT STDMETHODCALLTYPE EnumCategoryGUIDs(IEnumGUID **ppEnum);
58 HRESULT STDMETHODCALLTYPE EnumDeviceMonikers(IEnumMoniker **ppEnum);
59 HRESULT STDMETHODCALLTYPE get_DefaultPreferredComponentTypes(IComponentTypes **ComponentTypes);
60 HRESULT STDMETHODCALLTYPE put_DefaultPreferredComponentTypes(IComponentTypes *NewComponentTypes);
61 HRESULT STDMETHODCALLTYPE get_FrequencyMapping(BSTR *pMapping);
62 HRESULT STDMETHODCALLTYPE put_FrequencyMapping(BSTR Mapping);
63 HRESULT STDMETHODCALLTYPE get_DefaultLocator(ILocator **LocatorVal);
64 HRESULT STDMETHODCALLTYPE put_DefaultLocator(ILocator *LocatorVal);
65 HRESULT STDMETHODCALLTYPE Clone(ITuningSpace **NewTS);
66 // IDVBTuningSpace
67 HRESULT STDMETHODCALLTYPE get_SystemType(DVBSystemType *SysType);
68 HRESULT STDMETHODCALLTYPE put_SystemType(DVBSystemType SysType);
69
70 CTuningSpace() : m_Ref(0){};
71
72 virtual ~CTuningSpace(){};
73
74 protected:
75 LONG m_Ref;
76 };
77
78 HRESULT
79 STDMETHODCALLTYPE
80 CTuningSpace::QueryInterface(
81 IN REFIID refiid,
82 OUT PVOID* Output)
83 {
84 if (IsEqualGUID(refiid, IID_IUnknown))
85 {
86 *Output = PVOID(this);
87 reinterpret_cast<IUnknown*>(*Output)->AddRef();
88 return NOERROR;
89 }
90
91 if (IsEqualGUID(refiid, IID_ITuningSpace))
92 {
93 *Output = (ITuningSpace*)this;
94 reinterpret_cast<ITuningSpace*>(*Output)->AddRef();
95 return NOERROR;
96 }
97
98 if (IsEqualGUID(refiid, IID_IDVBTuningSpace))
99 {
100 *Output = (IDVBTuningSpace*)this;
101 reinterpret_cast<IDVBTuningSpace*>(*Output)->AddRef();
102 return NOERROR;
103 }
104
105
106 WCHAR Buffer[MAX_PATH];
107 LPOLESTR lpstr;
108 StringFromCLSID(refiid, &lpstr);
109 swprintf(Buffer, L"CTuningSpace::QueryInterface: NoInterface for %s", lpstr);
110 OutputDebugStringW(Buffer);
111 CoTaskMemFree(lpstr);
112
113
114 return E_NOINTERFACE;
115 }
116
117 //-------------------------------------------------------------------
118 // IDispatch methods
119 //
120 HRESULT
121 STDMETHODCALLTYPE
122 CTuningSpace::GetTypeInfoCount(UINT *pctinfo)
123 {
124 OutputDebugStringW(L"CTuningSpace::GetTypeInfoCount : NotImplemented\n");
125 return E_NOTIMPL;
126 }
127
128 HRESULT
129 STDMETHODCALLTYPE
130 CTuningSpace::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
131 {
132 OutputDebugStringW(L"CTuningSpace::GetTypeInfo : NotImplemented\n");
133 return E_NOTIMPL;
134 }
135 HRESULT
136 STDMETHODCALLTYPE
137 CTuningSpace::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
138 {
139 OutputDebugStringW(L"CTuningSpace::GetIDsOfNames : NotImplemented\n");
140 return E_NOTIMPL;
141 }
142 HRESULT
143 STDMETHODCALLTYPE
144 CTuningSpace::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
145 {
146 OutputDebugStringW(L"CTuningSpace::Invoke : NotImplemented\n");
147 return E_NOTIMPL;
148 }
149
150
151 //-------------------------------------------------------------------
152 // ITuningSpace interface
153 //
154
155 HRESULT
156 STDMETHODCALLTYPE
157 CTuningSpace::get_UniqueName(BSTR *Name)
158 {
159 OutputDebugStringW(L"CTuningSpace::get_UniqueName : NotImplemented\n");
160 return E_NOTIMPL;
161 }
162
163 HRESULT
164 STDMETHODCALLTYPE
165 CTuningSpace::put_UniqueName(BSTR Name)
166 {
167 OutputDebugStringW(L"CTuningSpace::put_UniqueName : NotImplemented\n");
168 return E_NOTIMPL;
169 }
170
171 HRESULT
172 STDMETHODCALLTYPE
173 CTuningSpace::get_FriendlyName(BSTR *Name)
174 {
175 OutputDebugStringW(L"CTuningSpace::get_FriendlyName : NotImplemented\n");
176 return E_NOTIMPL;
177 }
178
179 HRESULT
180 STDMETHODCALLTYPE
181 CTuningSpace::put_FriendlyName(BSTR Name)
182 {
183 OutputDebugStringW(L"CTuningSpace::put_FriendlyName : NotImplemented\n");
184 return E_NOTIMPL;
185 }
186
187 HRESULT
188 STDMETHODCALLTYPE
189 CTuningSpace::get_CLSID(BSTR *SpaceCLSID)
190 {
191 OutputDebugStringW(L"CTuningSpace::get_CLSID : NotImplemented\n");
192 return E_NOTIMPL;
193 }
194
195 HRESULT
196 STDMETHODCALLTYPE
197 CTuningSpace::get_NetworkType(BSTR *NetworkTypeGuid)
198 {
199 OutputDebugStringW(L"CTuningSpace::get_NetworkType : stub\n");
200 return StringFromCLSID(CLSID_DVBTNetworkProvider, (LPOLESTR*)NetworkTypeGuid);
201
202 }
203
204 HRESULT
205 STDMETHODCALLTYPE
206 CTuningSpace::put_NetworkType(BSTR NetworkTypeGuid)
207 {
208 OutputDebugStringW(L"CTuningSpace::put_NetworkType : NotImplemented\n");
209 return E_NOTIMPL;
210 }
211
212 HRESULT
213 STDMETHODCALLTYPE
214 CTuningSpace::get__NetworkType(GUID *NetworkTypeGuid)
215 {
216 #ifdef MSVIDCTL_TRACE
217 WCHAR Buffer[100];
218 swprintf(Buffer, L"CTuningSpace::get__NetworkType : %p stub\n", NetworkTypeGuid);
219 OutputDebugStringW(Buffer);
220 #endif
221
222 CopyMemory(NetworkTypeGuid, &CLSID_DVBTNetworkProvider, sizeof(GUID));
223 OutputDebugStringW(L"CTuningSpace::get__NetworkType : done\n");
224 return S_OK;
225 }
226
227 HRESULT
228 STDMETHODCALLTYPE
229 CTuningSpace::put__NetworkType(REFCLSID NetworkTypeGuid)
230 {
231 OutputDebugStringW(L"CTuningSpace::put__NetworkType : NotImplemented\n");
232 return E_NOTIMPL;
233 }
234
235 HRESULT
236 STDMETHODCALLTYPE
237 CTuningSpace::CreateTuneRequest(ITuneRequest **TuneRequest)
238 {
239 OutputDebugStringW(L"CTuningSpace::CreateTuneRequest : stub\n");
240 return CTuneRequest_fnConstructor(NULL, (ITuningSpace*)this, IID_ITuneRequest, (void**)TuneRequest);
241 }
242
243 HRESULT
244 STDMETHODCALLTYPE
245 CTuningSpace::EnumCategoryGUIDs(IEnumGUID **ppEnum)
246 {
247 OutputDebugStringW(L"CTuningSpace::EnumCategoryGUIDs : NotImplemented\n");
248 return E_NOTIMPL;
249 }
250
251 HRESULT
252 STDMETHODCALLTYPE
253 CTuningSpace::EnumDeviceMonikers(IEnumMoniker **ppEnum)
254 {
255 OutputDebugStringW(L"CTuningSpace::EnumDeviceMonikers : NotImplemented\n");
256 return E_NOTIMPL;
257 }
258
259 HRESULT
260 STDMETHODCALLTYPE
261 CTuningSpace::get_DefaultPreferredComponentTypes(IComponentTypes **ComponentTypes)
262 {
263 OutputDebugStringW(L"CTuningSpace::get_DefaultPreferredComponentTypes : NotImplemented\n");
264 return E_NOTIMPL;
265 }
266
267 HRESULT
268 STDMETHODCALLTYPE
269 CTuningSpace::put_DefaultPreferredComponentTypes(IComponentTypes *NewComponentTypes)
270 {
271 OutputDebugStringW(L"CTuningSpace::put_DefaultPreferredComponentTypes : NotImplemented\n");
272 return E_NOTIMPL;
273 }
274
275 HRESULT
276 STDMETHODCALLTYPE
277 CTuningSpace::get_FrequencyMapping(BSTR *pMapping)
278 {
279 OutputDebugStringW(L"CTuningSpace::get_FrequencyMapping : NotImplemented\n");
280 return E_NOTIMPL;
281 }
282
283 HRESULT
284 STDMETHODCALLTYPE
285 CTuningSpace::put_FrequencyMapping(BSTR Mapping)
286 {
287 OutputDebugStringW(L"CTuningSpace::put_FrequencyMapping : NotImplemented\n");
288 return E_NOTIMPL;
289 }
290
291 HRESULT
292 STDMETHODCALLTYPE
293 CTuningSpace::get_DefaultLocator(ILocator **LocatorVal)
294 {
295 OutputDebugStringW(L"CTuningSpace::get_DefaultLocator : NotImplemented\n");
296 return E_NOTIMPL;
297 }
298
299 HRESULT
300 STDMETHODCALLTYPE
301 CTuningSpace::put_DefaultLocator(ILocator *LocatorVal)
302 {
303 OutputDebugStringW(L"CTuningSpace::put_DefaultLocator : NotImplemented\n");
304 return E_NOTIMPL;
305 }
306
307 HRESULT
308 STDMETHODCALLTYPE
309 CTuningSpace::Clone(ITuningSpace **NewTS)
310 {
311 OutputDebugStringW(L"CTuningSpace::Clone : NotImplemented\n");
312 return E_NOTIMPL;
313 }
314
315 //-------------------------------------------------------------------
316 // IDVBTuningSpace
317 //
318 HRESULT
319 STDMETHODCALLTYPE
320 CTuningSpace::get_SystemType(DVBSystemType *SysType)
321 {
322 OutputDebugStringW(L"CTuningSpace::get_SystemType : NotImplemented\n");
323 return E_NOTIMPL;
324 }
325
326 HRESULT
327 STDMETHODCALLTYPE
328 CTuningSpace::put_SystemType(DVBSystemType SysType)
329 {
330 OutputDebugStringW(L"CTuningSpace::put_SystemType : NotImplemented\n");
331 return E_NOTIMPL;
332 }
333
334 HRESULT
335 WINAPI
336 CTuningSpace_fnConstructor(
337 IUnknown *pUnknown,
338 REFIID riid,
339 LPVOID * ppv)
340 {
341 // construct device control
342 CTuningSpace * space = new CTuningSpace();
343
344 #ifdef MSVIDCTL_TRACE
345 WCHAR Buffer[MAX_PATH];
346 LPOLESTR lpstr;
347 StringFromCLSID(riid, &lpstr);
348 swprintf(Buffer, L"CTuningSpace_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
349 OutputDebugStringW(Buffer);
350 #endif
351
352 if (!space)
353 return E_OUTOFMEMORY;
354
355 if (FAILED(space->QueryInterface(riid, ppv)))
356 {
357 /* not supported */
358 delete space;
359 return E_NOINTERFACE;
360 }
361
362 return NOERROR;
363 }
364
365