sync with trunk (r46275)
[reactos.git] / dll / directx / msdvbnp / scanningtuner.cpp
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Network Provider for MPEG2 based networks
4 * FILE: dll/directx/msdvbnp/networkprovider.cpp
5 * PURPOSE: IScanningTunner interface
6 *
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
8 */
9 #include "precomp.h"
10
11 class CScanningTunner : public IScanningTuner
12 {
13 public:
14 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
15
16 STDMETHODIMP_(ULONG) AddRef()
17 {
18 InterlockedIncrement(&m_Ref);
19 return m_Ref;
20 }
21 STDMETHODIMP_(ULONG) Release()
22 {
23 InterlockedDecrement(&m_Ref);
24 if (!m_Ref)
25 {
26 delete this;
27 return 0;
28 }
29 return m_Ref;
30 }
31
32 //ITuner methods
33 HRESULT STDMETHODCALLTYPE get_TuningSpace(ITuningSpace **TuningSpace);
34 HRESULT STDMETHODCALLTYPE put_TuningSpace(ITuningSpace *TuningSpace);
35 HRESULT STDMETHODCALLTYPE EnumTuningSpaces(IEnumTuningSpaces **ppEnum);
36 HRESULT STDMETHODCALLTYPE get_TuneRequest(ITuneRequest **TuneRequest);
37 HRESULT STDMETHODCALLTYPE put_TuneRequest(ITuneRequest *TuneRequest);
38 HRESULT STDMETHODCALLTYPE Validate(ITuneRequest *TuneRequest);
39 HRESULT STDMETHODCALLTYPE get_PreferredComponentTypes(IComponentTypes **ComponentTypes);
40 HRESULT STDMETHODCALLTYPE put_PreferredComponentTypes(IComponentTypes *ComponentTypes);
41 HRESULT STDMETHODCALLTYPE get_SignalStrength(long *Strength);
42 HRESULT STDMETHODCALLTYPE TriggerSignalEvents(long Interval);
43
44 //IScanningTuner methods
45 HRESULT STDMETHODCALLTYPE SeekUp();
46 HRESULT STDMETHODCALLTYPE SeekDown();
47 HRESULT STDMETHODCALLTYPE ScanUp(long MillisecondsPause);
48 HRESULT STDMETHODCALLTYPE ScanDown(long MillisecondsPause);
49 HRESULT STDMETHODCALLTYPE AutoProgram();
50
51 CScanningTunner() : m_Ref(0), m_TuningSpace(0){};
52 virtual ~CScanningTunner(){};
53
54 protected:
55 LONG m_Ref;
56 ITuningSpace * m_TuningSpace;
57 };
58
59 HRESULT
60 STDMETHODCALLTYPE
61 CScanningTunner::QueryInterface(
62 IN REFIID refiid,
63 OUT PVOID* Output)
64 {
65 if (IsEqualGUID(refiid, IID_IUnknown))
66 {
67 *Output = PVOID(this);
68 reinterpret_cast<IUnknown*>(*Output)->AddRef();
69 return NOERROR;
70 }
71 if (IsEqualGUID(refiid, IID_ITuner))
72 {
73 *Output = (ITuner*)(this);
74 reinterpret_cast<ITuner*>(*Output)->AddRef();
75 return NOERROR;
76 }
77
78 if (IsEqualGUID(refiid, IID_IScanningTuner))
79 {
80 *Output = (IScanningTuner*)(this);
81 reinterpret_cast<IScanningTuner*>(*Output)->AddRef();
82 return NOERROR;
83 }
84
85 WCHAR Buffer[MAX_PATH];
86 LPOLESTR lpstr;
87 StringFromCLSID(refiid, &lpstr);
88 swprintf(Buffer, L"CScanningTunner::QueryInterface: NoInterface for %s\n", lpstr);
89 OutputDebugStringW(Buffer);
90 CoTaskMemFree(lpstr);
91
92
93 return E_NOINTERFACE;
94 }
95
96 //-------------------------------------------------------------------
97 //ITuner
98 //
99 HRESULT
100 STDMETHODCALLTYPE
101 CScanningTunner::get_TuningSpace(
102 ITuningSpace **TuningSpace)
103 {
104 OutputDebugStringW(L"CScanningTunner::get_TuningSpace\n");
105
106 *TuningSpace = m_TuningSpace;
107 return S_OK;
108 }
109
110 HRESULT
111 STDMETHODCALLTYPE
112 CScanningTunner::put_TuningSpace(
113 ITuningSpace *TuningSpace)
114 {
115 OutputDebugStringW(L"CScanningTunner::put_TuningSpace\n");
116 m_TuningSpace = TuningSpace;
117 return S_OK;
118 }
119
120 HRESULT
121 STDMETHODCALLTYPE
122 CScanningTunner::EnumTuningSpaces(
123 IEnumTuningSpaces **ppEnum)
124 {
125 OutputDebugStringW(L"CScanningTunner::EnumTuningSpaces : NotImplemented\n");
126 return E_NOTIMPL;
127 }
128
129 HRESULT
130 STDMETHODCALLTYPE
131 CScanningTunner::get_TuneRequest(
132 ITuneRequest **TuneRequest)
133 {
134 OutputDebugStringW(L"CScanningTunner::get_TuneRequest : NotImplemented\n");
135 return E_NOTIMPL;
136 }
137
138 HRESULT
139 STDMETHODCALLTYPE
140 CScanningTunner::put_TuneRequest(
141 ITuneRequest *TuneRequest)
142 {
143 OutputDebugStringW(L"CScanningTunner::put_TuneRequest : NotImplemented\n");
144 return E_NOTIMPL;
145 }
146
147 HRESULT
148 STDMETHODCALLTYPE
149 CScanningTunner::Validate(
150 ITuneRequest *TuneRequest)
151 {
152 OutputDebugStringW(L"CScanningTunner::Validate : NotImplemented\n");
153 return E_NOTIMPL;
154 }
155
156 HRESULT
157 STDMETHODCALLTYPE
158 CScanningTunner::get_PreferredComponentTypes(
159 IComponentTypes **ComponentTypes)
160 {
161 OutputDebugStringW(L"CScanningTunner::get_PreferredComponentTypes : NotImplemented\n");
162 return E_NOTIMPL;
163 }
164
165 HRESULT
166 STDMETHODCALLTYPE
167 CScanningTunner::put_PreferredComponentTypes(
168 IComponentTypes *ComponentTypes)
169 {
170 OutputDebugStringW(L"CScanningTunner::put_PreferredComponentTypes : NotImplemented\n");
171 return E_NOTIMPL;
172 }
173
174 HRESULT
175 STDMETHODCALLTYPE
176 CScanningTunner::get_SignalStrength(
177 long *Strength)
178 {
179 OutputDebugStringW(L"CScanningTunner::get_SignalStrength : NotImplemented\n");
180 return E_NOTIMPL;
181 }
182
183 HRESULT
184 STDMETHODCALLTYPE
185 CScanningTunner::TriggerSignalEvents(
186 long Interval)
187 {
188 OutputDebugStringW(L"CScanningTunner::TriggerSignalEvents : NotImplemented\n");
189 return E_NOTIMPL;
190 }
191
192 //-------------------------------------------------------------------
193 //IScanningTuner
194 HRESULT
195 STDMETHODCALLTYPE
196 CScanningTunner::SeekUp()
197 {
198 OutputDebugStringW(L"CScanningTunner::SeekUp : NotImplemented\n");
199 return E_NOTIMPL;
200 }
201
202 HRESULT
203 STDMETHODCALLTYPE
204 CScanningTunner::SeekDown()
205 {
206 OutputDebugStringW(L"CScanningTunner::SeekDown : NotImplemented\n");
207 return E_NOTIMPL;
208 }
209
210 HRESULT
211 STDMETHODCALLTYPE
212 CScanningTunner::ScanUp(
213 long MillisecondsPause)
214 {
215 OutputDebugStringW(L"CScanningTunner::ScanUp : NotImplemented\n");
216 return E_NOTIMPL;
217 }
218
219 HRESULT
220 STDMETHODCALLTYPE
221 CScanningTunner::ScanDown(
222 long MillisecondsPause)
223 {
224 OutputDebugStringW(L"CScanningTunner::ScanDown : NotImplemented\n");
225 return E_NOTIMPL;
226 }
227
228 HRESULT
229 STDMETHODCALLTYPE
230 CScanningTunner::AutoProgram()
231 {
232 OutputDebugStringW(L"CScanningTunner::AutoProgram : NotImplemented\n");
233 return E_NOTIMPL;
234 }
235
236 HRESULT
237 WINAPI
238 CScanningTunner_fnConstructor(
239 IUnknown *pUnknown,
240 REFIID riid,
241 LPVOID * ppv)
242 {
243 CScanningTunner * handler = new CScanningTunner();
244
245 #ifdef MSDVBNP_TRACE
246 WCHAR Buffer[MAX_PATH];
247 LPOLESTR lpstr;
248 StringFromCLSID(riid, &lpstr);
249 swprintf(Buffer, L"CScanningTunner_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
250 OutputDebugStringW(Buffer);
251 #endif
252
253 if (!handler)
254 return E_OUTOFMEMORY;
255
256 if (FAILED(handler->QueryInterface(riid, ppv)))
257 {
258 /* not supported */
259 delete handler;
260 return E_NOINTERFACE;
261 }
262
263 return NOERROR;
264 }