[BDAPLGIN]
[reactos.git] / reactos / dll / directx / bdaplgin / digitaldemo.cpp
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/bdaplgin/digitaldemo.cpp
5 * PURPOSE: IBDA_DigitalDemodulator interface
6 *
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
8 */
9
10 #include "precomp.h"
11
12 const GUID IID_IBDA_DigitalDemodulator = {0xef30f379, 0x985b, 0x4d10, {0xb6, 0x40, 0xa7, 0x9d, 0x5e, 0x04, 0xe1, 0xe0}};
13
14 class CBDADigitalDemodulator : public IBDA_DigitalDemodulator
15 {
16 public:
17 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
18
19 STDMETHODIMP_(ULONG) AddRef()
20 {
21 InterlockedIncrement(&m_Ref);
22 return m_Ref;
23 }
24 STDMETHODIMP_(ULONG) Release()
25 {
26 InterlockedDecrement(&m_Ref);
27
28 if (!m_Ref)
29 {
30 delete this;
31 return 0;
32 }
33 return m_Ref;
34 }
35 //IBDA_DigitalDemodulator methods
36 HRESULT STDMETHODCALLTYPE put_ModulationType(ModulationType *pModulationType);
37 HRESULT STDMETHODCALLTYPE get_ModulationType(ModulationType *pModulationType);
38 HRESULT STDMETHODCALLTYPE put_InnerFECMethod(FECMethod *pFECMethod);
39 HRESULT STDMETHODCALLTYPE get_InnerFECMethod(FECMethod *pFECMethod);
40 HRESULT STDMETHODCALLTYPE put_InnerFECRate(BinaryConvolutionCodeRate *pFECRate);
41 HRESULT STDMETHODCALLTYPE get_InnerFECRate(BinaryConvolutionCodeRate *pFECRate);
42 HRESULT STDMETHODCALLTYPE put_OuterFECMethod(FECMethod *pFECMethod);
43 HRESULT STDMETHODCALLTYPE get_OuterFECMethod(FECMethod *pFECMethod);
44 HRESULT STDMETHODCALLTYPE put_OuterFECRate(BinaryConvolutionCodeRate *pFECRate);
45 HRESULT STDMETHODCALLTYPE get_OuterFECRate(BinaryConvolutionCodeRate *pFECRate);
46 HRESULT STDMETHODCALLTYPE put_SymbolRate(ULONG *pSymbolRate);
47 HRESULT STDMETHODCALLTYPE get_SymbolRate(ULONG *pSymbolRate);
48 HRESULT STDMETHODCALLTYPE put_SpectralInversion(SpectralInversion *pSpectralInversion);
49 HRESULT STDMETHODCALLTYPE get_SpectralInversion(SpectralInversion *pSpectralInversion);
50
51 CBDADigitalDemodulator(HANDLE hFile) : m_Ref(0), m_hFile(hFile){};
52 ~CBDADigitalDemodulator(){};
53
54 protected:
55 LONG m_Ref;
56 HANDLE m_hFile;
57
58 };
59
60 HRESULT
61 STDMETHODCALLTYPE
62 CBDADigitalDemodulator::QueryInterface(
63 IN REFIID refiid,
64 OUT PVOID* Output)
65 {
66 WCHAR Buffer[MAX_PATH];
67 LPOLESTR lpstr;
68
69 *Output = NULL;
70
71 if (IsEqualGUID(refiid, IID_IUnknown))
72 {
73 *Output = PVOID(this);
74 reinterpret_cast<IUnknown*>(*Output)->AddRef();
75 return NOERROR;
76 }
77
78 if (IsEqualGUID(refiid, IID_IBDA_DigitalDemodulator))
79 {
80 *Output = (IBDA_DigitalDemodulator*)(this);
81 reinterpret_cast<IBDA_DigitalDemodulator*>(*Output)->AddRef();
82 return NOERROR;
83 }
84
85 StringFromCLSID(refiid, &lpstr);
86 swprintf(Buffer, L"CBDADigitalDemodulator::QueryInterface: NoInterface for %s", lpstr);
87 OutputDebugStringW(Buffer);
88 CoTaskMemFree(lpstr);
89
90 return E_NOINTERFACE;
91 }
92
93 HRESULT
94 STDMETHODCALLTYPE
95 CBDADigitalDemodulator::put_ModulationType(ModulationType *pModulationType)
96 {
97 OutputDebugStringW(L"CBDADigitalDemodulator::put_ModulationType NotImplemented\n");
98 return E_NOTIMPL;
99 }
100
101 HRESULT
102 STDMETHODCALLTYPE
103 CBDADigitalDemodulator::get_ModulationType(ModulationType *pModulationType)
104 {
105 OutputDebugStringW(L"CBDADigitalDemodulator::get_ModulationType NotImplemented\n");
106 return E_NOTIMPL;
107 }
108
109 HRESULT
110 STDMETHODCALLTYPE
111 CBDADigitalDemodulator::put_InnerFECMethod(FECMethod *pFECMethod)
112 {
113 OutputDebugStringW(L"CBDADigitalDemodulator::put_InnerFECMethod NotImplemented\n");
114 return E_NOTIMPL;
115 }
116
117 HRESULT
118 STDMETHODCALLTYPE
119 CBDADigitalDemodulator::get_InnerFECMethod(FECMethod *pFECMethod)
120 {
121 OutputDebugStringW(L"CBDADigitalDemodulator::get_InnerFECMethod NotImplemented\n");
122 return E_NOTIMPL;
123 }
124
125 HRESULT
126 STDMETHODCALLTYPE
127 CBDADigitalDemodulator::put_InnerFECRate(BinaryConvolutionCodeRate *pFECRate)
128 {
129 OutputDebugStringW(L"CBDADigitalDemodulator::put_InnerFECRate NotImplemented\n");
130 return E_NOTIMPL;
131 }
132
133 HRESULT
134 STDMETHODCALLTYPE
135 CBDADigitalDemodulator::get_InnerFECRate(BinaryConvolutionCodeRate *pFECRate)
136 {
137 OutputDebugStringW(L"CBDADigitalDemodulator::get_InnerFECRate NotImplemented\n");
138 return E_NOTIMPL;
139 }
140
141 HRESULT
142 STDMETHODCALLTYPE
143 CBDADigitalDemodulator::put_OuterFECMethod(FECMethod *pFECMethod)
144 {
145 OutputDebugStringW(L"CBDADigitalDemodulator::put_OuterFECMethod NotImplemented\n");
146 return E_NOTIMPL;
147 }
148
149
150 HRESULT
151 STDMETHODCALLTYPE CBDADigitalDemodulator::get_OuterFECMethod(FECMethod *pFECMethod)
152 {
153 OutputDebugStringW(L"CBDADigitalDemodulator::get_OuterFECMethod NotImplemented\n");
154 return E_NOTIMPL;
155 }
156
157 HRESULT
158 STDMETHODCALLTYPE
159 CBDADigitalDemodulator::put_OuterFECRate(BinaryConvolutionCodeRate *pFECRate)
160 {
161 OutputDebugStringW(L"CBDADigitalDemodulator::put_OuterFECRate NotImplemented\n");
162 return E_NOTIMPL;
163 }
164
165 HRESULT
166 STDMETHODCALLTYPE
167 CBDADigitalDemodulator::get_OuterFECRate(BinaryConvolutionCodeRate *pFECRate)
168 {
169 OutputDebugStringW(L"CBDADigitalDemodulator::get_OuterFECRate NotImplemented\n");
170 return E_NOTIMPL;
171 }
172
173 HRESULT
174 STDMETHODCALLTYPE
175 CBDADigitalDemodulator::put_SymbolRate(ULONG *pSymbolRate)
176 {
177 OutputDebugStringW(L"CBDADigitalDemodulator::put_SymbolRate NotImplemented\n");
178 return E_NOTIMPL;
179 }
180
181 HRESULT
182 STDMETHODCALLTYPE
183 CBDADigitalDemodulator::get_SymbolRate(ULONG *pSymbolRate)
184 {
185 OutputDebugStringW(L"CBDADigitalDemodulator::get_SymbolRate NotImplemented\n");
186 return E_NOTIMPL;
187 }
188
189 HRESULT
190 STDMETHODCALLTYPE
191 CBDADigitalDemodulator::put_SpectralInversion(SpectralInversion *pSpectralInversion)
192 {
193 OutputDebugStringW(L"CBDADigitalDemodulator::put_SpectralInversion NotImplemented\n");
194 return E_NOTIMPL;
195 }
196
197 HRESULT
198 STDMETHODCALLTYPE
199 CBDADigitalDemodulator::get_SpectralInversion(SpectralInversion *pSpectralInversion)
200 {
201 OutputDebugStringW(L"CBDADigitalDemodulator::get_SpectralInversion NotImplemented\n");
202 return E_NOTIMPL;
203 }
204
205
206 HRESULT
207 WINAPI
208 CBDADigitalDemodulator_fnConstructor(
209 HANDLE hFile,
210 REFIID riid,
211 LPVOID * ppv)
212 {
213 // construct device control
214 CBDADigitalDemodulator * handler = new CBDADigitalDemodulator(hFile);
215
216 OutputDebugStringW(L"CBDADigitalDemodulator_fnConstructor\n");
217
218 if (!handler)
219 return E_OUTOFMEMORY;
220
221 if (FAILED(handler->QueryInterface(riid, ppv)))
222 {
223 /* not supported */
224 delete handler;
225 return E_NOINTERFACE;
226 }
227
228 return NOERROR;
229 }