Reactos
at master 284 lines 7.3 kB view raw
1/* 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 6 * 7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org) 8 */ 9 10#include "precomp.h" 11 12#ifndef _MSC_VER 13const GUID IID_IBDA_FrequencyFilter = {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x00, 0xc0, 0x4f, 0x79, 0x71, 0xe0}}; 14const GUID KSPROPSETID_BdaFrequencyFilter = {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}}; 15#endif 16 17class CBDAFrequencyFilter : public IBDA_FrequencyFilter 18{ 19public: 20 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); 21 22 STDMETHODIMP_(ULONG) AddRef() 23 { 24 InterlockedIncrement(&m_Ref); 25 return m_Ref; 26 } 27 STDMETHODIMP_(ULONG) Release() 28 { 29 InterlockedDecrement(&m_Ref); 30 if (!m_Ref) 31 { 32 delete this; 33 return 0; 34 } 35 return m_Ref; 36 } 37 38 HRESULT STDMETHODCALLTYPE put_Autotune(ULONG ulTransponder); 39 HRESULT STDMETHODCALLTYPE get_Autotune(ULONG *pulTransponder); 40 HRESULT STDMETHODCALLTYPE put_Frequency(ULONG ulFrequency); 41 HRESULT STDMETHODCALLTYPE get_Frequency(ULONG *pulFrequency); 42 HRESULT STDMETHODCALLTYPE put_Polarity(Polarisation Polarity); 43 HRESULT STDMETHODCALLTYPE get_Polarity(Polarisation *pPolarity); 44 HRESULT STDMETHODCALLTYPE put_Range(ULONG ulRange); 45 HRESULT STDMETHODCALLTYPE get_Range(ULONG *pulRange); 46 HRESULT STDMETHODCALLTYPE put_Bandwidth(ULONG ulBandwidth); 47 HRESULT STDMETHODCALLTYPE get_Bandwidth(ULONG *pulBandwidth); 48 HRESULT STDMETHODCALLTYPE put_FrequencyMultiplier(ULONG ulMultiplier); 49 HRESULT STDMETHODCALLTYPE get_FrequencyMultiplier(ULONG *pulMultiplier); 50 51 CBDAFrequencyFilter(IKsPropertySet * pProperty, ULONG NodeId) : m_Ref(0), m_pProperty(pProperty), m_NodeId(NodeId){}; 52 virtual ~CBDAFrequencyFilter(){}; 53 54protected: 55 LONG m_Ref; 56 IKsPropertySet * m_pProperty; 57 ULONG m_NodeId; 58}; 59 60HRESULT 61STDMETHODCALLTYPE 62CBDAFrequencyFilter::QueryInterface( 63 IN REFIID refiid, 64 OUT PVOID* Output) 65{ 66 *Output = NULL; 67 68 if (IsEqualGUID(refiid, IID_IUnknown)) 69 { 70 *Output = PVOID(this); 71 reinterpret_cast<IUnknown*>(*Output)->AddRef(); 72 return NOERROR; 73 } 74 75 if (IsEqualGUID(refiid, IID_IBDA_FrequencyFilter)) 76 { 77 *Output = (IBDA_FrequencyFilter*)(this); 78 reinterpret_cast<IBDA_FrequencyFilter*>(*Output)->AddRef(); 79 return NOERROR; 80 } 81 82#ifdef BDAPLGIN_TRACE 83 WCHAR Buffer[MAX_PATH]; 84 LPOLESTR lpstr; 85 StringFromCLSID(refiid, &lpstr); 86 swprintf(Buffer, L"CControlNode::QueryInterface: NoInterface for %s", lpstr); 87 OutputDebugStringW(Buffer); 88 CoTaskMemFree(lpstr); 89DebugBreak(); 90#endif 91 92 return E_NOINTERFACE; 93} 94 95HRESULT 96STDMETHODCALLTYPE 97CBDAFrequencyFilter::put_Autotune(ULONG ulTransponder) 98{ 99 return E_NOINTERFACE; 100} 101 102HRESULT 103STDMETHODCALLTYPE 104CBDAFrequencyFilter::get_Autotune(ULONG *pulTransponder) 105{ 106 return E_NOINTERFACE; 107} 108 109HRESULT 110STDMETHODCALLTYPE 111CBDAFrequencyFilter::put_Frequency(ULONG ulFrequency) 112{ 113 KSP_NODE Node; 114 HRESULT hr; 115 116 // setup request 117 Node.NodeId = m_NodeId; 118 Node.Reserved = 0; 119 120 // perform request 121 hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_FREQUENCY, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulFrequency, sizeof(ULONG)); 122 123#ifdef BDAPLGIN_TRACE 124 WCHAR Buffer[100]; 125 swprintf(Buffer, L"CBDAFrequencyFilter::put_Frequency: m_NodeId %lu ulFrequency %lu hr %lx\n", m_NodeId, ulFrequency, hr); 126 OutputDebugStringW(Buffer); 127#endif 128 129 return hr; 130} 131 132HRESULT 133STDMETHODCALLTYPE 134CBDAFrequencyFilter::get_Frequency(ULONG *pulFrequency) 135{ 136 return E_NOINTERFACE; 137} 138 139HRESULT 140STDMETHODCALLTYPE 141CBDAFrequencyFilter::put_Polarity(Polarisation Polarity) 142{ 143 KSP_NODE Node; 144 HRESULT hr; 145 146 // setup request 147 Node.NodeId = m_NodeId; 148 Node.Reserved = 0; 149 150 // perform request 151 hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_POLARITY, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &Polarity, sizeof(Polarisation)); 152 153#ifdef BDAPLGIN_TRACE 154 WCHAR Buffer[100]; 155 swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu Polarity %lu hr %lx\n", m_NodeId, Polarity, hr); 156 OutputDebugStringW(Buffer); 157#endif 158 159 return hr; 160} 161 162HRESULT 163STDMETHODCALLTYPE 164CBDAFrequencyFilter::get_Polarity(Polarisation *pPolarity) 165{ 166 return E_NOINTERFACE; 167} 168 169HRESULT 170STDMETHODCALLTYPE 171CBDAFrequencyFilter::put_Range(ULONG ulRange) 172{ 173 KSP_NODE Node; 174 HRESULT hr; 175 176 // setup request 177 Node.NodeId = m_NodeId; 178 Node.Reserved = 0; 179 180 // perform request 181 hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_RANGE, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulRange, sizeof(ULONG)); 182 183#ifdef BDAPLGIN_TRACE 184 WCHAR Buffer[100]; 185 swprintf(Buffer, L"CBDAFrequencyFilter::put_Range: m_NodeId %lu ulRange %lu hr %lx\n", m_NodeId, ulRange, hr); 186 OutputDebugStringW(Buffer); 187#endif 188 189 return hr; 190} 191 192HRESULT 193STDMETHODCALLTYPE 194CBDAFrequencyFilter::get_Range(ULONG *pulRange) 195{ 196 return E_NOINTERFACE; 197} 198 199HRESULT 200STDMETHODCALLTYPE 201CBDAFrequencyFilter::put_Bandwidth(ULONG ulBandwidth) 202{ 203 KSP_NODE Node; 204 HRESULT hr; 205 206 // setup request 207 Node.NodeId = m_NodeId; 208 Node.Reserved = 0; 209 210 // perform request 211 hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_BANDWIDTH, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulBandwidth, sizeof(ULONG)); 212 213#ifdef BDAPLGIN_TRACE 214 WCHAR Buffer[100]; 215 swprintf(Buffer, L"CBDAFrequencyFilter::put_Bandwidth: m_NodeId %lu ulBandwidth %lu hr %lx\n", m_NodeId, ulBandwidth, hr); 216 OutputDebugStringW(Buffer); 217#endif 218 219 return hr; 220} 221 222HRESULT 223STDMETHODCALLTYPE 224CBDAFrequencyFilter::get_Bandwidth(ULONG *pulBandwidth) 225{ 226 return E_NOINTERFACE; 227} 228HRESULT 229STDMETHODCALLTYPE 230CBDAFrequencyFilter::put_FrequencyMultiplier(ULONG ulMultiplier) 231{ 232 KSP_NODE Node; 233 HRESULT hr; 234 235 // setup request 236 Node.NodeId = m_NodeId; 237 Node.Reserved = 0; 238 239 // perform request 240 hr = m_pProperty->Set(KSPROPSETID_BdaFrequencyFilter, KSPROPERTY_BDA_RF_TUNER_FREQUENCY_MULTIPLIER, &Node.NodeId, sizeof(KSP_NODE)-sizeof(KSPROPERTY), &ulMultiplier, sizeof(ULONG)); 241 242#ifdef BDAPLGIN_TRACE 243 WCHAR Buffer[100]; 244 swprintf(Buffer, L"CBDAFrequencyFilter::put_FrequencyMultiplier: m_NodeId %lu ulMultiplier %lu hr %lx\n", m_NodeId, ulMultiplier, hr); 245 OutputDebugStringW(Buffer); 246#endif 247 248 return hr; 249} 250 251HRESULT 252STDMETHODCALLTYPE 253CBDAFrequencyFilter::get_FrequencyMultiplier(ULONG *pulMultiplier) 254{ 255 return E_NOINTERFACE; 256} 257 258HRESULT 259WINAPI 260CBDAFrequencyFilter_fnConstructor( 261 IKsPropertySet* pProperty, 262 ULONG NodeId, 263 REFIID riid, 264 LPVOID * ppv) 265{ 266 // construct device control 267 CBDAFrequencyFilter * handler = new CBDAFrequencyFilter(pProperty, NodeId); 268 269#ifdef BDAPLGIN_TRACE 270 OutputDebugStringW(L"CBDAFrequencyFilter_fnConstructor\n"); 271#endif 272 273 if (!handler) 274 return E_OUTOFMEMORY; 275 276 if (FAILED(handler->QueryInterface(riid, ppv))) 277 { 278 /* not supported */ 279 delete handler; 280 return E_NOINTERFACE; 281 } 282 283 return NOERROR; 284}