Reactos
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 (johannes.anderwald@reactos.org)
8 */
9#include "precomp.h"
10
11const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
12
13class CTuningSpace : public IDVBTuningSpace
14{
15public:
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
74protected:
75 LONG m_Ref;
76};
77
78HRESULT
79STDMETHODCALLTYPE
80CTuningSpace::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//
120HRESULT
121STDMETHODCALLTYPE
122CTuningSpace::GetTypeInfoCount(UINT *pctinfo)
123{
124 OutputDebugStringW(L"CTuningSpace::GetTypeInfoCount : NotImplemented\n");
125 return E_NOTIMPL;
126}
127
128HRESULT
129STDMETHODCALLTYPE
130CTuningSpace::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
131{
132 OutputDebugStringW(L"CTuningSpace::GetTypeInfo : NotImplemented\n");
133 return E_NOTIMPL;
134}
135HRESULT
136STDMETHODCALLTYPE
137CTuningSpace::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
138{
139 OutputDebugStringW(L"CTuningSpace::GetIDsOfNames : NotImplemented\n");
140 return E_NOTIMPL;
141}
142HRESULT
143STDMETHODCALLTYPE
144CTuningSpace::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
155HRESULT
156STDMETHODCALLTYPE
157CTuningSpace::get_UniqueName(BSTR *Name)
158{
159 OutputDebugStringW(L"CTuningSpace::get_UniqueName : NotImplemented\n");
160 return E_NOTIMPL;
161}
162
163HRESULT
164STDMETHODCALLTYPE
165CTuningSpace::put_UniqueName(BSTR Name)
166{
167 OutputDebugStringW(L"CTuningSpace::put_UniqueName : NotImplemented\n");
168 return E_NOTIMPL;
169}
170
171HRESULT
172STDMETHODCALLTYPE
173CTuningSpace::get_FriendlyName(BSTR *Name)
174{
175 OutputDebugStringW(L"CTuningSpace::get_FriendlyName : NotImplemented\n");
176 return E_NOTIMPL;
177}
178
179HRESULT
180STDMETHODCALLTYPE
181CTuningSpace::put_FriendlyName(BSTR Name)
182{
183 OutputDebugStringW(L"CTuningSpace::put_FriendlyName : NotImplemented\n");
184 return E_NOTIMPL;
185}
186
187HRESULT
188STDMETHODCALLTYPE
189CTuningSpace::get_CLSID(BSTR *SpaceCLSID)
190{
191 OutputDebugStringW(L"CTuningSpace::get_CLSID : NotImplemented\n");
192 return E_NOTIMPL;
193}
194
195HRESULT
196STDMETHODCALLTYPE
197CTuningSpace::get_NetworkType(BSTR *NetworkTypeGuid)
198{
199 OutputDebugStringW(L"CTuningSpace::get_NetworkType : stub\n");
200 return StringFromCLSID(CLSID_DVBTNetworkProvider, (LPOLESTR*)NetworkTypeGuid);
201
202}
203
204HRESULT
205STDMETHODCALLTYPE
206CTuningSpace::put_NetworkType(BSTR NetworkTypeGuid)
207{
208 OutputDebugStringW(L"CTuningSpace::put_NetworkType : NotImplemented\n");
209 return E_NOTIMPL;
210}
211
212HRESULT
213STDMETHODCALLTYPE
214CTuningSpace::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
227HRESULT
228STDMETHODCALLTYPE
229CTuningSpace::put__NetworkType(REFCLSID NetworkTypeGuid)
230{
231 OutputDebugStringW(L"CTuningSpace::put__NetworkType : NotImplemented\n");
232 return E_NOTIMPL;
233}
234
235HRESULT
236STDMETHODCALLTYPE
237CTuningSpace::CreateTuneRequest(ITuneRequest **TuneRequest)
238{
239 OutputDebugStringW(L"CTuningSpace::CreateTuneRequest : stub\n");
240 return CTuneRequest_fnConstructor(NULL, (ITuningSpace*)this, IID_ITuneRequest, (void**)TuneRequest);
241}
242
243HRESULT
244STDMETHODCALLTYPE
245CTuningSpace::EnumCategoryGUIDs(IEnumGUID **ppEnum)
246{
247 OutputDebugStringW(L"CTuningSpace::EnumCategoryGUIDs : NotImplemented\n");
248 return E_NOTIMPL;
249}
250
251HRESULT
252STDMETHODCALLTYPE
253CTuningSpace::EnumDeviceMonikers(IEnumMoniker **ppEnum)
254{
255 OutputDebugStringW(L"CTuningSpace::EnumDeviceMonikers : NotImplemented\n");
256 return E_NOTIMPL;
257}
258
259HRESULT
260STDMETHODCALLTYPE
261CTuningSpace::get_DefaultPreferredComponentTypes(IComponentTypes **ComponentTypes)
262{
263 OutputDebugStringW(L"CTuningSpace::get_DefaultPreferredComponentTypes : NotImplemented\n");
264 return E_NOTIMPL;
265}
266
267HRESULT
268STDMETHODCALLTYPE
269CTuningSpace::put_DefaultPreferredComponentTypes(IComponentTypes *NewComponentTypes)
270{
271 OutputDebugStringW(L"CTuningSpace::put_DefaultPreferredComponentTypes : NotImplemented\n");
272 return E_NOTIMPL;
273}
274
275HRESULT
276STDMETHODCALLTYPE
277CTuningSpace::get_FrequencyMapping(BSTR *pMapping)
278{
279 OutputDebugStringW(L"CTuningSpace::get_FrequencyMapping : NotImplemented\n");
280 return E_NOTIMPL;
281}
282
283HRESULT
284STDMETHODCALLTYPE
285CTuningSpace::put_FrequencyMapping(BSTR Mapping)
286{
287 OutputDebugStringW(L"CTuningSpace::put_FrequencyMapping : NotImplemented\n");
288 return E_NOTIMPL;
289}
290
291HRESULT
292STDMETHODCALLTYPE
293CTuningSpace::get_DefaultLocator(ILocator **LocatorVal)
294{
295 OutputDebugStringW(L"CTuningSpace::get_DefaultLocator : NotImplemented\n");
296 return E_NOTIMPL;
297}
298
299HRESULT
300STDMETHODCALLTYPE
301CTuningSpace::put_DefaultLocator(ILocator *LocatorVal)
302{
303 OutputDebugStringW(L"CTuningSpace::put_DefaultLocator : NotImplemented\n");
304 return E_NOTIMPL;
305}
306
307HRESULT
308STDMETHODCALLTYPE
309CTuningSpace::Clone(ITuningSpace **NewTS)
310{
311 OutputDebugStringW(L"CTuningSpace::Clone : NotImplemented\n");
312 return E_NOTIMPL;
313}
314
315//-------------------------------------------------------------------
316// IDVBTuningSpace
317//
318HRESULT
319STDMETHODCALLTYPE
320CTuningSpace::get_SystemType(DVBSystemType *SysType)
321{
322 OutputDebugStringW(L"CTuningSpace::get_SystemType : NotImplemented\n");
323 return E_NOTIMPL;
324}
325
326HRESULT
327STDMETHODCALLTYPE
328CTuningSpace::put_SystemType(DVBSystemType SysType)
329{
330 OutputDebugStringW(L"CTuningSpace::put_SystemType : NotImplemented\n");
331 return E_NOTIMPL;
332}
333
334HRESULT
335WINAPI
336CTuningSpace_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