2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/bdaplgin/frequencyfilter.cpp
5 * PURPOSE: IBDA_FrequencyFilter interface
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
12 const GUID IID_IBDA_FrequencyFilter
= {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x00, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
13 const GUID KSPROPSETID_BdaFrequencyFilter
= {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
15 class CBDAFrequencyFilter
: public IBDA_FrequencyFilter
18 STDMETHODIMP
QueryInterface( REFIID InterfaceId
, PVOID
* Interface
);
20 STDMETHODIMP_(ULONG
) AddRef()
22 InterlockedIncrement(&m_Ref
);
25 STDMETHODIMP_(ULONG
) Release()
27 InterlockedDecrement(&m_Ref
);
36 HRESULT STDMETHODCALLTYPE
put_Autotune(ULONG ulTransponder
);
37 HRESULT STDMETHODCALLTYPE
get_Autotune(ULONG
*pulTransponder
);
38 HRESULT STDMETHODCALLTYPE
put_Frequency(ULONG ulFrequency
);
39 HRESULT STDMETHODCALLTYPE
get_Frequency(ULONG
*pulFrequency
);
40 HRESULT STDMETHODCALLTYPE
put_Polarity(Polarisation Polarity
);
41 HRESULT STDMETHODCALLTYPE
get_Polarity(Polarisation
*pPolarity
);
42 HRESULT STDMETHODCALLTYPE
put_Range(ULONG ulRange
);
43 HRESULT STDMETHODCALLTYPE
get_Range(ULONG
*pulRange
);
44 HRESULT STDMETHODCALLTYPE
put_Bandwidth(ULONG ulBandwidth
);
45 HRESULT STDMETHODCALLTYPE
get_Bandwidth(ULONG
*pulBandwidth
);
46 HRESULT STDMETHODCALLTYPE
put_FrequencyMultiplier(ULONG ulMultiplier
);
47 HRESULT STDMETHODCALLTYPE
get_FrequencyMultiplier(ULONG
*pulMultiplier
);
49 CBDAFrequencyFilter(HANDLE hFile
, ULONG NodeId
) : m_Ref(0), m_hFile(hFile
), m_NodeId(NodeId
){};
50 virtual ~CBDAFrequencyFilter(){};
60 CBDAFrequencyFilter::QueryInterface(
66 if (IsEqualGUID(refiid
, IID_IUnknown
))
68 *Output
= PVOID(this);
69 reinterpret_cast<IUnknown
*>(*Output
)->AddRef();
73 if (IsEqualGUID(refiid
, IID_IBDA_FrequencyFilter
))
75 *Output
= (IBDA_FrequencyFilter
*)(this);
76 reinterpret_cast<IBDA_FrequencyFilter
*>(*Output
)->AddRef();
81 WCHAR Buffer
[MAX_PATH
];
83 StringFromCLSID(refiid
, &lpstr
);
84 swprintf(Buffer
, L
"CControlNode::QueryInterface: NoInterface for %s", lpstr
);
85 OutputDebugStringW(Buffer
);
94 CBDAFrequencyFilter::put_Autotune(ULONG ulTransponder
)
101 CBDAFrequencyFilter::get_Autotune(ULONG
*pulTransponder
)
103 return E_NOINTERFACE
;
108 CBDAFrequencyFilter::put_Frequency(ULONG ulFrequency
)
116 Node
.Property
.Set
= KSPROPSETID_BdaFrequencyFilter
;
117 Node
.Property
.Id
= KSPROPERTY_BDA_RF_TUNER_FREQUENCY
;
118 Node
.Property
.Flags
= KSPROPERTY_TYPE_SET
| KSPROPERTY_TYPE_TOPOLOGY
;
119 Node
.NodeId
= m_NodeId
;
122 hr
= KsSynchronousDeviceControl(m_hFile
, IOCTL_KS_PROPERTY
, (PVOID
)&Node
, sizeof(KSP_NODE
), &ulFrequency
, sizeof(ULONG
), &BytesReturned
);
124 #ifdef BDAPLGIN_TRACE
126 swprintf(Buffer
, L
"CBDAFrequencyFilter::put_Frequency: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId
, hr
, BytesReturned
);
127 OutputDebugStringW(Buffer
);
135 CBDAFrequencyFilter::get_Frequency(ULONG
*pulFrequency
)
137 return E_NOINTERFACE
;
142 CBDAFrequencyFilter::put_Polarity(Polarisation Polarity
)
149 Node
.Property
.Set
= KSPROPSETID_BdaFrequencyFilter
;
150 Node
.Property
.Id
= KSPROPERTY_BDA_RF_TUNER_POLARITY
;
151 Node
.Property
.Flags
= KSPROPERTY_TYPE_SET
| KSPROPERTY_TYPE_TOPOLOGY
;
152 Node
.NodeId
= m_NodeId
;
155 hr
= KsSynchronousDeviceControl(m_hFile
, IOCTL_KS_PROPERTY
, (PVOID
)&Node
, sizeof(KSP_NODE
), &Polarity
, sizeof(Polarisation
), &BytesReturned
);
157 #ifdef BDAPLGIN_TRACE
159 swprintf(Buffer
, L
"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId
, hr
, BytesReturned
);
160 OutputDebugStringW(Buffer
);
168 CBDAFrequencyFilter::get_Polarity(Polarisation
*pPolarity
)
170 return E_NOINTERFACE
;
175 CBDAFrequencyFilter::put_Range(ULONG ulRange
)
182 Node
.Property
.Set
= KSPROPSETID_BdaFrequencyFilter
;
183 Node
.Property
.Id
= KSPROPERTY_BDA_RF_TUNER_RANGE
;
184 Node
.Property
.Flags
= KSPROPERTY_TYPE_SET
| KSPROPERTY_TYPE_TOPOLOGY
;
185 Node
.NodeId
= m_NodeId
;
188 hr
= KsSynchronousDeviceControl(m_hFile
, IOCTL_KS_PROPERTY
, (PVOID
)&Node
, sizeof(KSP_NODE
), &ulRange
, sizeof(ULONG
), &BytesReturned
);
190 #ifdef BDAPLGIN_TRACE
192 swprintf(Buffer
, L
"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId
, hr
, BytesReturned
);
193 OutputDebugStringW(Buffer
);
201 CBDAFrequencyFilter::get_Range(ULONG
*pulRange
)
203 return E_NOINTERFACE
;
208 CBDAFrequencyFilter::put_Bandwidth(ULONG ulBandwidth
)
215 Node
.Property
.Set
= KSPROPSETID_BdaFrequencyFilter
;
216 Node
.Property
.Id
= KSPROPERTY_BDA_RF_TUNER_BANDWIDTH
;
217 Node
.Property
.Flags
= KSPROPERTY_TYPE_SET
| KSPROPERTY_TYPE_TOPOLOGY
;
218 Node
.NodeId
= m_NodeId
;
221 hr
= KsSynchronousDeviceControl(m_hFile
, IOCTL_KS_PROPERTY
, (PVOID
)&Node
, sizeof(KSP_NODE
), &ulBandwidth
, sizeof(ULONG
), &BytesReturned
);
223 #ifdef BDAPLGIN_TRACE
225 swprintf(Buffer
, L
"CBDAFrequencyFilter::put_Bandwidth: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId
, hr
, BytesReturned
);
226 OutputDebugStringW(Buffer
);
234 CBDAFrequencyFilter::get_Bandwidth(ULONG
*pulBandwidth
)
236 return E_NOINTERFACE
;
240 CBDAFrequencyFilter::put_FrequencyMultiplier(ULONG ulMultiplier
)
247 Node
.Property
.Set
= KSPROPSETID_BdaFrequencyFilter
;
248 Node
.Property
.Id
= KSPROPERTY_BDA_RF_TUNER_FREQUENCY_MULTIPLIER
;
249 Node
.Property
.Flags
= KSPROPERTY_TYPE_SET
| KSPROPERTY_TYPE_TOPOLOGY
;
250 Node
.NodeId
= m_NodeId
;
253 hr
= KsSynchronousDeviceControl(m_hFile
, IOCTL_KS_PROPERTY
, (PVOID
)&Node
, sizeof(KSP_NODE
), &ulMultiplier
, sizeof(ULONG
), &BytesReturned
);
255 #ifdef BDAPLGIN_TRACE
257 swprintf(Buffer
, L
"CBDAFrequencyFilter::put_FrequencyMultiplier: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId
, hr
, BytesReturned
);
258 OutputDebugStringW(Buffer
);
266 CBDAFrequencyFilter::get_FrequencyMultiplier(ULONG
*pulMultiplier
)
268 return E_NOINTERFACE
;
273 CBDAFrequencyFilter_fnConstructor(
279 // construct device control
280 CBDAFrequencyFilter
* handler
= new CBDAFrequencyFilter(hFile
, NodeId
);
282 #ifdef BDAPLGIN_TRACE
283 OutputDebugStringW(L
"CBDAFrequencyFilter_fnConstructor\n");
287 return E_OUTOFMEMORY
;
289 if (FAILED(handler
->QueryInterface(riid
, ppv
)))
293 return E_NOINTERFACE
;