ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

scanningtuner.cpp
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:       See COPYING in the top level directory
00003  * PROJECT:         ReactOS Network Provider for MPEG2 based networks
00004  * FILE:            dll/directx/msdvbnp/networkprovider.cpp
00005  * PURPOSE:         IScanningTunner interface
00006  *
00007  * PROGRAMMERS:     Johannes Anderwald (janderwald@reactos.org)
00008  */
00009 #include "precomp.h"
00010 
00011 class CScanningTunner : public IScanningTuner
00012 {
00013 public:
00014     STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
00015 
00016     STDMETHODIMP_(ULONG) AddRef()
00017     {
00018         InterlockedIncrement(&m_Ref);
00019         return m_Ref;
00020     }
00021     STDMETHODIMP_(ULONG) Release()
00022     {
00023         InterlockedDecrement(&m_Ref);
00024         if (!m_Ref)
00025         {
00026             delete this;
00027             return 0;
00028         }
00029         return m_Ref;
00030     }
00031 
00032     //ITuner methods
00033     HRESULT STDMETHODCALLTYPE get_TuningSpace(ITuningSpace **TuningSpace);
00034     HRESULT STDMETHODCALLTYPE put_TuningSpace(ITuningSpace *TuningSpace);
00035     HRESULT STDMETHODCALLTYPE EnumTuningSpaces(IEnumTuningSpaces **ppEnum);
00036     HRESULT STDMETHODCALLTYPE get_TuneRequest(ITuneRequest **TuneRequest);
00037     HRESULT STDMETHODCALLTYPE put_TuneRequest(ITuneRequest *TuneRequest);
00038     HRESULT STDMETHODCALLTYPE Validate(ITuneRequest *TuneRequest);
00039     HRESULT STDMETHODCALLTYPE get_PreferredComponentTypes(IComponentTypes **ComponentTypes);
00040     HRESULT STDMETHODCALLTYPE put_PreferredComponentTypes(IComponentTypes *ComponentTypes);
00041     HRESULT STDMETHODCALLTYPE get_SignalStrength(long *Strength);
00042     HRESULT STDMETHODCALLTYPE TriggerSignalEvents(long Interval);
00043 
00044     //IScanningTuner methods
00045     HRESULT STDMETHODCALLTYPE SeekUp();
00046     HRESULT STDMETHODCALLTYPE SeekDown();
00047     HRESULT STDMETHODCALLTYPE ScanUp(long MillisecondsPause);
00048     HRESULT STDMETHODCALLTYPE ScanDown(long MillisecondsPause);
00049     HRESULT STDMETHODCALLTYPE AutoProgram();
00050 
00051     CScanningTunner(std::vector<IUnknown*> & DeviceFilters) : m_Ref(0), m_TuningSpace(0), m_DeviceFilters(DeviceFilters){};
00052     virtual ~CScanningTunner() {};
00053     HRESULT STDMETHODCALLTYPE StartChanges();
00054     HRESULT STDMETHODCALLTYPE CommitChanges();
00055     HRESULT STDMETHODCALLTYPE CheckChanges();
00056     HRESULT STDMETHODCALLTYPE SetLnbInfo(IBDA_LNBInfo * pLnbInfo, ULONG ulLOFLow, ULONG ulLOFHigh, ULONG ulSwitchFrequency);
00057     HRESULT STDMETHODCALLTYPE SetDigitalDemodulator(IBDA_DigitalDemodulator * pDigitalDemo, ModulationType ModType, FECMethod InnerFEC, BinaryConvolutionCodeRate InnerFECRate, FECMethod OuterFEC, BinaryConvolutionCodeRate OuterFECRate, ULONG SymbolRate);
00058     HRESULT SetFrequency(IBDA_FrequencyFilter * pFrequency, ULONG FrequencyMultiplier, ULONG Frequency, Polarisation Polarity, ULONG Range, ULONG Bandwidth);
00059     HRESULT STDMETHODCALLTYPE performDVBTTune(IDVBTuneRequest * pDVBTRequest, IDVBTLocator *pDVBTLocator);
00060 protected:
00061     LONG m_Ref;
00062     ITuningSpace * m_TuningSpace;
00063     std::vector<IUnknown*> & m_DeviceFilters;
00064 };
00065 
00066 HRESULT
00067 STDMETHODCALLTYPE
00068 CScanningTunner::QueryInterface(
00069     IN  REFIID refiid,
00070     OUT PVOID* Output)
00071 {
00072     if (IsEqualGUID(refiid, IID_IUnknown))
00073     {
00074         *Output = PVOID(this);
00075         reinterpret_cast<IUnknown*>(*Output)->AddRef();
00076         return NOERROR;
00077     }
00078     if (IsEqualGUID(refiid, IID_ITuner))
00079     {
00080         *Output = (ITuner*)(this);
00081         reinterpret_cast<ITuner*>(*Output)->AddRef();
00082         return NOERROR;
00083     }
00084 
00085     if (IsEqualGUID(refiid, IID_IScanningTuner))
00086     {
00087         *Output = (IScanningTuner*)(this);
00088         reinterpret_cast<IScanningTuner*>(*Output)->AddRef();
00089         return NOERROR;
00090     }
00091 
00092     WCHAR Buffer[MAX_PATH];
00093     LPOLESTR lpstr;
00094     StringFromCLSID(refiid, &lpstr);
00095     swprintf(Buffer, L"CScanningTunner::QueryInterface: NoInterface for %s\n", lpstr);
00096     OutputDebugStringW(Buffer);
00097     CoTaskMemFree(lpstr);
00098 
00099 
00100     return E_NOINTERFACE;
00101 }
00102 
00103 //-------------------------------------------------------------------
00104 //ITuner
00105 //
00106 HRESULT
00107 STDMETHODCALLTYPE
00108 CScanningTunner::get_TuningSpace(
00109     ITuningSpace **TuningSpace)
00110 {
00111     OutputDebugStringW(L"CScanningTunner::get_TuningSpace\n");
00112 
00113     *TuningSpace = m_TuningSpace;
00114     return S_OK;
00115 }
00116 
00117 HRESULT
00118 STDMETHODCALLTYPE
00119 CScanningTunner::put_TuningSpace(
00120     ITuningSpace *TuningSpace)
00121 {
00122     OutputDebugStringW(L"CScanningTunner::put_TuningSpace\n");
00123     m_TuningSpace = TuningSpace;
00124     return S_OK;
00125 }
00126 
00127 HRESULT
00128 STDMETHODCALLTYPE
00129 CScanningTunner::EnumTuningSpaces(
00130     IEnumTuningSpaces **ppEnum)
00131 {
00132     OutputDebugStringW(L"CScanningTunner::EnumTuningSpaces : NotImplemented\n");
00133     return E_NOTIMPL;
00134 }
00135 
00136 HRESULT
00137 STDMETHODCALLTYPE
00138 CScanningTunner::get_TuneRequest(
00139     ITuneRequest **TuneRequest)
00140 {
00141     OutputDebugStringW(L"CScanningTunner::get_TuneRequest : NotImplemented\n");
00142     return E_NOTIMPL;
00143 }
00144 
00145 HRESULT
00146 STDMETHODCALLTYPE
00147 CScanningTunner::put_TuneRequest(
00148     ITuneRequest *TuneRequest)
00149 {
00150     IDVBTuneRequest * pDVBTRequest;
00151     ILocator *pLocator;
00152     IDVBTLocator *pDVBTLocator;
00153     HRESULT hr;
00154     
00155 
00156     OutputDebugStringW(L"CScanningTunner::put_TuneRequest\n");
00157 
00158     // query for IDVBTuneRequest interface
00159     hr = TuneRequest->QueryInterface(IID_IDVBTuneRequest, (void**)&pDVBTRequest);
00160 
00161     // sanity check
00162     assert(hr == NOERROR);
00163 
00164     // get the IDVBTLocator
00165     hr = pDVBTRequest->get_Locator((ILocator**)&pLocator);
00166 
00167     // sanity check
00168     assert(hr == NOERROR);
00169     assert(pLocator);
00170 
00171     hr = pLocator->QueryInterface(IID_ILocator, (void**)&pDVBTLocator);
00172 
00173     // sanity check
00174     assert(hr == NOERROR);
00175 
00176 
00177     StartChanges();
00178     CommitChanges();
00179     StartChanges();
00180 
00181     hr = performDVBTTune(pDVBTRequest, pDVBTLocator);
00182 
00183 
00184     pDVBTLocator->Release();
00185     pDVBTRequest->Release();
00186 
00187     CheckChanges();
00188     CommitChanges();
00189     StartChanges();
00190 
00191     return NOERROR;
00192 }
00193 
00194 HRESULT
00195 STDMETHODCALLTYPE
00196 CScanningTunner::Validate(
00197     ITuneRequest *TuneRequest)
00198 {
00199     OutputDebugStringW(L"CScanningTunner::Validate : NotImplemented\n");
00200     return E_NOTIMPL;
00201 }
00202 
00203 HRESULT
00204 STDMETHODCALLTYPE
00205 CScanningTunner::get_PreferredComponentTypes(
00206     IComponentTypes **ComponentTypes)
00207 {
00208     OutputDebugStringW(L"CScanningTunner::get_PreferredComponentTypes : NotImplemented\n");
00209     return E_NOTIMPL;
00210 }
00211 
00212 HRESULT
00213 STDMETHODCALLTYPE
00214 CScanningTunner::put_PreferredComponentTypes(
00215     IComponentTypes *ComponentTypes)
00216 {
00217     OutputDebugStringW(L"CScanningTunner::put_PreferredComponentTypes : NotImplemented\n");
00218     return E_NOTIMPL;
00219 }
00220 
00221 HRESULT
00222 STDMETHODCALLTYPE
00223 CScanningTunner::get_SignalStrength(
00224     long *Strength)
00225 {
00226     OutputDebugStringW(L"CScanningTunner::get_SignalStrength : NotImplemented\n");
00227     return E_NOTIMPL;
00228 }
00229 
00230 HRESULT
00231 STDMETHODCALLTYPE
00232 CScanningTunner::TriggerSignalEvents(
00233     long Interval)
00234 {
00235     OutputDebugStringW(L"CScanningTunner::TriggerSignalEvents : NotImplemented\n");
00236     return E_NOTIMPL;
00237 }
00238 
00239 //-------------------------------------------------------------------
00240 //IScanningTuner
00241 HRESULT
00242 STDMETHODCALLTYPE
00243 CScanningTunner::SeekUp()
00244 {
00245     OutputDebugStringW(L"CScanningTunner::SeekUp : NotImplemented\n");
00246     return E_NOTIMPL;
00247 }
00248 
00249 HRESULT
00250 STDMETHODCALLTYPE
00251 CScanningTunner::SeekDown()
00252 {
00253     OutputDebugStringW(L"CScanningTunner::SeekDown : NotImplemented\n");
00254     return E_NOTIMPL;
00255 }
00256 
00257 HRESULT
00258 STDMETHODCALLTYPE
00259 CScanningTunner::ScanUp(
00260     long MillisecondsPause)
00261 {
00262     OutputDebugStringW(L"CScanningTunner::ScanUp : NotImplemented\n");
00263     return E_NOTIMPL;
00264 }
00265 
00266 HRESULT
00267 STDMETHODCALLTYPE
00268 CScanningTunner::ScanDown(
00269     long MillisecondsPause)
00270 {
00271     OutputDebugStringW(L"CScanningTunner::ScanDown : NotImplemented\n");
00272     return E_NOTIMPL;
00273 }
00274 
00275 HRESULT
00276 STDMETHODCALLTYPE
00277 CScanningTunner::AutoProgram()
00278 {
00279     OutputDebugStringW(L"CScanningTunner::AutoProgram : NotImplemented\n");
00280     return E_NOTIMPL;
00281 }
00282 
00283 //-------------------------------------------------------------------
00284 HRESULT
00285 STDMETHODCALLTYPE
00286 CScanningTunner::performDVBTTune(
00287     IDVBTuneRequest * pDVBTRequest,
00288     IDVBTLocator *pDVBTLocator)
00289 {
00290     HRESULT hr = S_OK;
00291     ULONG Index;
00292     IBDA_Topology *pTopo;
00293     IUnknown *pNode;
00294     IBDA_FrequencyFilter * pFrequency;
00295     IBDA_LNBInfo * pLnbInfo;
00296     IBDA_DigitalDemodulator *pDigitalDemo;
00297     LONG BandWidth;
00298     LONG Frequency;
00299     LONG SymbolRate;
00300     FECMethod InnerFEC, OuterFEC;
00301     BinaryConvolutionCodeRate InnerFECRate, OuterFECRate;
00302     ModulationType Modulation;
00303 
00304     pDVBTLocator->get_Bandwidth(&BandWidth);
00305     pDVBTLocator->get_CarrierFrequency(&Frequency);
00306     pDVBTLocator->get_InnerFEC(&InnerFEC);
00307     pDVBTLocator->get_InnerFECRate(&InnerFECRate);
00308     pDVBTLocator->get_Modulation(&Modulation);
00309     pDVBTLocator->get_OuterFEC(&OuterFEC);
00310     pDVBTLocator->get_OuterFECRate(&OuterFECRate);
00311     pDVBTLocator->get_SymbolRate(&SymbolRate);
00312 
00313 
00314     WCHAR Buffer[1000];
00315     swprintf(Buffer, L"BandWidth %lu Frequency %lu Rate %lu InnerFEC %ld OuterFEC %ld InnerFECRate %ld OuterFECRate %ld Modulation %lu\n",
00316              BandWidth, Frequency, SymbolRate, InnerFEC, OuterFEC, InnerFECRate, OuterFECRate, Modulation);
00317 
00318     OutputDebugStringW(Buffer);
00319 
00320 
00321 
00322     for(Index = 0; Index < m_DeviceFilters.size(); Index++)
00323     {
00324         // get device filter
00325         IUnknown * pFilter = m_DeviceFilters[Index];
00326 
00327         if (!pFilter)
00328             continue;
00329 
00330         hr = pFilter->QueryInterface(IID_IBDA_Topology, (void**)&pTopo);
00331         // sanity check
00332         assert(hr == NOERROR);
00333 
00334         pNode = NULL;
00335         hr = pTopo->GetControlNode(0, 1, 0, &pNode); //HACK
00336 
00337         WCHAR Buffer[100];
00338         swprintf(Buffer, L"CScanningTunner::performDVBTTune GetControlNode %lx\n", hr);
00339         OutputDebugStringW(Buffer);
00340 
00341         if (FAILED(hr))
00342             continue;
00343 
00344         // sanity check
00345         assert(hr == NOERROR);
00346         assert(pNode);
00347 
00348         hr = pNode->QueryInterface(IID_IBDA_FrequencyFilter, (void**)&pFrequency);
00349 
00350         swprintf(Buffer, L"CScanningTunner::performDVBTTune IID_IBDA_FrequencyFilter hr %lx\n", hr);
00351         OutputDebugStringW(Buffer);
00352 
00353         // sanity check
00354         assert(hr == NOERROR);
00355 
00356         hr = SetFrequency(pFrequency, 1000 /* FIXME */, Frequency, BDA_POLARISATION_NOT_DEFINED /* FIXME */, BDA_RANGE_NOT_SET /* FIXME */, BandWidth);
00357 
00358         swprintf(Buffer, L"CScanningTunner::performDVBTTune SetFrequency hr %lx\n", hr);
00359         OutputDebugStringW(Buffer);
00360 
00361         //sanity check
00362         assert(hr == NOERROR);
00363 
00364         // release interface
00365         pFrequency->Release();
00366 
00367 
00368         hr = pNode->QueryInterface(IID_IBDA_LNBInfo, (void**)&pLnbInfo);
00369 
00370         swprintf(Buffer, L"CScanningTunner::performDVBTTune IID_IBDA_LNBInfo hr %lx\n", hr);
00371         OutputDebugStringW(Buffer);
00372 
00373         // sanity check
00374         assert(hr == NOERROR);
00375 
00376         hr = SetLnbInfo(pLnbInfo, ULONG_MAX /* FIXME */, ULONG_MAX /* FIXME*/, ULONG_MAX /*FIXME*/);
00377 
00378 
00379         swprintf(Buffer, L"CScanningTunner::performDVBTTune SetLnbInfo hr %lx\n", hr);
00380         OutputDebugStringW(Buffer);
00381 
00382         // sanity check
00383         assert(hr == NOERROR);
00384 
00385         // release interface
00386         pLnbInfo->Release();
00387 
00388         hr = pNode->QueryInterface(IID_IBDA_DigitalDemodulator, (void**)&pDigitalDemo);
00389 
00390         swprintf(Buffer, L"CScanningTunner::performDVBTTune IID_IBDA_DigitalDemodulator hr %lx\n", hr);
00391         OutputDebugStringW(Buffer);
00392 
00393         // sanity check
00394         assert(hr == NOERROR);
00395 
00396         hr = SetDigitalDemodulator(pDigitalDemo, Modulation, InnerFEC, InnerFECRate, OuterFEC, OuterFECRate, SymbolRate);
00397 
00398         swprintf(Buffer, L"CScanningTunner::performDVBTTune SetDigitalDemodulator hr %lx\n", hr);
00399         OutputDebugStringW(Buffer);
00400 
00401         // sanity check
00402         assert(hr == NOERROR);
00403 
00404         // release interface
00405         pDigitalDemo->Release();
00406 
00407         // release control node
00408         pNode->Release();
00409 
00410         // release IBDA_Topology;
00411         pTopo->Release();
00412 
00413     }
00414     return hr;
00415 }
00416 
00417 
00418 
00419 HRESULT
00420 STDMETHODCALLTYPE
00421 CScanningTunner::CheckChanges()
00422 {
00423     ULONG Index;
00424     HRESULT hResult = NOERROR;
00425     IBDA_DeviceControl * pDeviceControl;
00426 
00427     for(Index = 0; Index < m_DeviceFilters.size(); Index++)
00428     {
00429         // get filter
00430         IUnknown * pFilter = m_DeviceFilters[Index];
00431 
00432         if (!pFilter)
00433             continue;
00434 
00435         // query for IBDA_DeviceControl interface
00436         hResult = pFilter->QueryInterface(IID_IBDA_DeviceControl, (void**)&pDeviceControl);
00437 
00438         // sanity check
00439         assert(hResult == NOERROR);
00440 
00441         //start changes
00442         hResult = pDeviceControl->CheckChanges();
00443 
00444         // fix for unimplemented
00445         if (hResult == E_NOTIMPL)
00446             hResult = NOERROR;
00447 
00448         // release interface
00449         pDeviceControl->Release();
00450 
00451         if (FAILED(hResult))
00452         {
00453             //shouldnt happen
00454             break;
00455         }
00456     }
00457     // done
00458     return hResult;
00459 }
00460 
00461 HRESULT
00462 STDMETHODCALLTYPE
00463 CScanningTunner::CommitChanges()
00464 {
00465     ULONG Index;
00466     HRESULT hResult = NOERROR;
00467     IBDA_DeviceControl * pDeviceControl;
00468 
00469     for(Index = 0; Index < m_DeviceFilters.size(); Index++)
00470     {
00471         // get filter
00472         IUnknown * pFilter = m_DeviceFilters[Index];
00473 
00474         if (!pFilter)
00475             continue;
00476 
00477         // query for IBDA_DeviceControl interface
00478         HRESULT hr = pFilter->QueryInterface(IID_IBDA_DeviceControl, (void**)&pDeviceControl);
00479 
00480         // sanity check
00481         assert(hr == NOERROR);
00482 
00483         //start changes
00484         hr = pDeviceControl->CommitChanges();
00485 
00486         // fix for unimplemented
00487         if (hr == E_NOTIMPL)
00488             hr = NOERROR;
00489 
00490         if (FAILED(hr))
00491         {
00492             pDeviceControl->StartChanges();
00493             pDeviceControl->CommitChanges();
00494             hResult = E_UNEXPECTED;
00495         }
00496 
00497         // release interface
00498         pDeviceControl->Release();
00499 
00500     }
00501 
00502     //done
00503     return hResult;
00504 }
00505 
00506 HRESULT
00507 STDMETHODCALLTYPE
00508 CScanningTunner::StartChanges()
00509 {
00510     ULONG Index;
00511     IBDA_DeviceControl * pDeviceControl;
00512 
00513     for(Index = 0; Index < m_DeviceFilters.size(); Index++)
00514     {
00515         // get filter
00516         IUnknown * pFilter = m_DeviceFilters[Index];
00517 
00518         if (!pFilter)
00519             continue;
00520 
00521         // query for IBDA_DeviceControl interface
00522         HRESULT hr = pFilter->QueryInterface(IID_IBDA_DeviceControl, (void**)&pDeviceControl);
00523 
00524         // sanity check
00525         assert(hr == NOERROR);
00526 
00527         //start changes
00528         hr = pDeviceControl->StartChanges();
00529 
00530         // release interface
00531         pDeviceControl->Release();
00532 
00533         // fix for unimplemented
00534         if (hr == E_NOTIMPL)
00535             hr = NOERROR;
00536 
00537         if (FAILED(hr))
00538             return hr;
00539 
00540     }
00541 
00542     // now commit the changes
00543     for(Index = 0; Index < m_DeviceFilters.size(); Index++)
00544     {
00545         // get filter
00546         IUnknown * pFilter = m_DeviceFilters[Index];
00547 
00548         if (!pFilter)
00549             continue;
00550 
00551         // query for IBDA_DeviceControl interface
00552         HRESULT hr = pFilter->QueryInterface(IID_IBDA_DeviceControl, (void**)&pDeviceControl);
00553 
00554         // sanity check
00555         assert(hr == NOERROR);
00556 
00557         hr = pDeviceControl->CommitChanges();
00558 
00559         // release interface
00560         pDeviceControl->Release();
00561     }
00562 
00563     // done
00564     return NOERROR;
00565 }
00566 
00567 HRESULT
00568 STDMETHODCALLTYPE
00569 CScanningTunner::SetLnbInfo(
00570     IBDA_LNBInfo * pLnbInfo,
00571     ULONG ulLOFLow,
00572     ULONG ulLOFHigh,
00573     ULONG ulSwitchFrequency)
00574 {
00575     HRESULT hr;
00576 
00577     hr = pLnbInfo->put_LocalOscilatorFrequencyLowBand(ulLOFLow);
00578     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
00579         hr = NOERROR;
00580 
00581     if (FAILED(hr))
00582         return hr;
00583 
00584     hr = pLnbInfo->put_LocalOscilatorFrequencyHighBand(ulLOFHigh);
00585     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
00586         hr = NOERROR;
00587 
00588     if (FAILED(hr))
00589         return hr;
00590 
00591     hr = pLnbInfo->put_HighLowSwitchFrequency(ulSwitchFrequency);
00592     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
00593         hr = NOERROR;
00594 
00595     return hr;
00596 }
00597 
00598 HRESULT
00599 CScanningTunner::SetFrequency(
00600     IBDA_FrequencyFilter * pFrequency,
00601     ULONG FrequencyMultiplier,
00602     ULONG Frequency,
00603     Polarisation Polarity,
00604     ULONG Range,
00605     ULONG Bandwidth)
00606 {
00607     HRESULT hr;
00608 
00609     hr = pFrequency->put_FrequencyMultiplier(FrequencyMultiplier);
00610     if (FAILED(hr))
00611         return hr;
00612 
00613     hr = pFrequency->put_Frequency(Frequency);
00614     if (FAILED(hr))
00615         return hr;
00616 
00617     hr = pFrequency->put_Polarity(Polarity);
00618     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND))
00619         hr = NOERROR;
00620 
00621     if (FAILED(hr))
00622         return hr;
00623 
00624     hr = pFrequency->put_Range(Range);
00625     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND))
00626         hr = NOERROR;
00627 
00628     if (FAILED(hr))
00629         return hr;
00630 
00631     hr = pFrequency->put_Bandwidth(Bandwidth);
00632     return hr;
00633 }
00634 
00635 HRESULT
00636 STDMETHODCALLTYPE
00637 CScanningTunner::SetDigitalDemodulator(
00638     IBDA_DigitalDemodulator * pDigitalDemo,
00639     ModulationType ModType,
00640     FECMethod InnerFEC,
00641     BinaryConvolutionCodeRate InnerFECRate,
00642     FECMethod OuterFEC,
00643     BinaryConvolutionCodeRate OuterFECRate,
00644     ULONG SymbolRate)
00645 {
00646     HRESULT hr;
00647 
00648     hr = pDigitalDemo->put_ModulationType(&ModType);
00649     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
00650         hr = NOERROR;
00651 
00652     if (FAILED(hr))
00653         return hr;
00654 
00655     hr = pDigitalDemo->put_InnerFECMethod(&InnerFEC);
00656     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
00657         hr = NOERROR;
00658     if (FAILED(hr))
00659         return hr;
00660 
00661     hr = pDigitalDemo->put_InnerFECRate(&InnerFECRate);
00662     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
00663         hr = NOERROR;
00664     if (FAILED(hr))
00665         return hr;
00666 
00667     hr = pDigitalDemo->put_OuterFECMethod(&OuterFEC);
00668     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
00669         hr = NOERROR;
00670     if (FAILED(hr))
00671         return hr;
00672 
00673     hr = pDigitalDemo->put_OuterFECRate(&OuterFECRate);
00674     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
00675         hr = NOERROR;
00676     if (FAILED(hr))
00677         return hr;
00678 
00679     hr = pDigitalDemo->put_SymbolRate(&SymbolRate);
00680     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
00681         hr = NOERROR;
00682     if (FAILED(hr))
00683         return hr;
00684 
00685     SpectralInversion Inversion = BDA_SPECTRAL_INVERSION_NOT_DEFINED;
00686     hr = pDigitalDemo->put_SpectralInversion(&Inversion);
00687     if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
00688         hr = NOERROR;
00689 
00690     return hr;
00691 }
00692 
00693 
00694 HRESULT
00695 WINAPI
00696 CScanningTunner_fnConstructor(
00697     std::vector<IUnknown*> & DeviceFilter,
00698     REFIID riid,
00699     LPVOID * ppv)
00700 {
00701     CScanningTunner * handler = new CScanningTunner(DeviceFilter);
00702 
00703 #ifdef MSDVBNP_TRACE
00704     WCHAR Buffer[MAX_PATH];
00705     LPOLESTR lpstr;
00706     StringFromCLSID(riid, &lpstr);
00707     swprintf(Buffer, L"CScanningTunner_fnConstructor riid %s\n", lpstr);
00708     OutputDebugStringW(Buffer);
00709 #endif
00710 
00711     if (!handler)
00712         return E_OUTOFMEMORY;
00713 
00714     if (FAILED(handler->QueryInterface(riid, ppv)))
00715     {
00716         /* not supported */
00717         delete handler;
00718         return E_NOINTERFACE;
00719     }
00720 
00721     return NOERROR;
00722 }

Generated on Sun May 27 2012 04:21:53 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.