tune.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:31k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //------------------------------------------------------------------------------
  2. // File: Tune.h
  3. //
  4. // Desc: Additional infrastructure to extend the tuner.idl.  Works nicely
  5. //       from C++.
  6. //
  7. // Copyright (c) 1999 - 2000, Microsoft Corporation.  All rights reserved.
  8. //------------------------------------------------------------------------------
  9. #pragma once
  10. #ifndef TUNE_H
  11. #define TUNE_H
  12. #include <tuner.h>
  13. namespace BDATuningModel {
  14. const long DEFAULT_MIN_CHANNEL = 2;
  15. const long DEFAULT_MAX_CHANNEL = 999;
  16. const long DEFAULT_MIN_FREQUENCY = 535;  //bottom us am
  17. const long DEFAULT_MAX_FREQUENCY = 108000; // top us fm
  18. const long DEFAULT_ANALOG_TUNER_COUNTRY_CODE = 1; //usa
  19. const TunerInputType DEFAULT_ANALOG_TUNER_INPUT_TYPE = TunerInputCable; //usa
  20. typedef CComQIPtr<ITuningSpaceContainer> PQTuningSpaceContainer;
  21. typedef CComQIPtr<ITuningSpace> PQTuningSpace;
  22. typedef CComQIPtr<IAnalogRadioTuningSpace> PQAnalogRadioTuningSpace;
  23. typedef CComQIPtr<IAnalogTVTuningSpace> PQAnalogTVTuningSpace;
  24. typedef CComQIPtr<IATSCTuningSpace> PQATSCTuningSpace;
  25. typedef CComQIPtr<ITuneRequest> PQTuneRequest;
  26. typedef CComQIPtr<IChannelTuneRequest> PQChannelTuneRequest;
  27. typedef CComQIPtr<IATSCChannelTuneRequest> PQATSCChannelTuneRequest;
  28. typedef CComQIPtr<ILocator> PQLocator;
  29. typedef CComQIPtr<IATSCLocator> PQATSCLocator;
  30. typedef CComQIPtr<IDVBTuningSpace> PQDVBTuningSpace;
  31. typedef CComQIPtr<IDVBTuneRequest> PQDVBTuneRequest;
  32. typedef CComQIPtr<IDVBSLocator> PQDVBSLocator;
  33. typedef CComQIPtr<IDVBTLocator> PQDVBTLocator;
  34. // tuning space container
  35. class TNTuningSpaceContainer : public PQTuningSpaceContainer {
  36.      TNTuningSpaceContainer() {}
  37.      TNTuningSpaceContainer(const PQTuningSpaceContainer &a) : PQTuningSpaceContainer(a) {}
  38.      TNTuningSpaceContainer(ITuningSpace *p) : PQTuningSpaceContainer(p) {}
  39.      TNTuningSpaceContainer(IUnknown *p) : PQTuningSpaceContainer(p) {}
  40.      TNTuningSpaceContainer(const TNTuningSpaceContainer &a) : PQTuningSpaceContainer(a) {}
  41.      TNTuningSpaceContainer& operator=(TNTuningSpaceContainer& rhs) {
  42.         PQTuningSpaceContainer::operator=(rhs);
  43.         return *this;
  44.     }
  45. };
  46. // tuning spaces
  47. template<class TUNINGSPACETYPE, class TUNEREQUESTTYPE> class TNTuningSpaceHelper : public TUNINGSPACETYPE {
  48. public:
  49.      TNTuningSpaceHelper() {}
  50.      TNTuningSpaceHelper(const TUNINGSPACETYPE &a) : TUNINGSPACETYPE(a) {}
  51.      TNTuningSpaceHelper(ITuningSpace *p) : TUNINGSPACETYPE(p) {}
  52.      TNTuningSpaceHelper(IUnknown *p) : TUNINGSPACETYPE(p) {}
  53.      TNTuningSpaceHelper(const TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE> &a) : TUNINGSPACETYPE(a) {}
  54.      TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& rhs) {
  55.         TUNINGSPACETYPE::operator=(rhs);
  56.         return *this;
  57.     }
  58.      TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TUNINGSPACETYPE& rhs) {
  59.         TUNINGSPACETYPE::operator=(rhs);
  60.         return *this;
  61.     }
  62.      TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(IUnknown *rhs) {
  63.         TUNINGSPACETYPE::operator=(rhs);
  64.         return *this;
  65.     }
  66.      TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(ITuningSpace *rhs) {
  67.         TUNINGSPACETYPE::operator=(rhs);
  68.         return *this;
  69.     }
  70.      bool  operator==(TUNINGSPACETYPE& rhs) {
  71.         CComBSTR rhsname;
  72.         HRESULT hr = rhs->get_UniqueName(&rhsname);
  73.         if (FAILED(hr)) {
  74.             return false;
  75.         }
  76.         CComBSTR name;
  77.         hr = (*this)->get_UniqueName(&name);
  78.         if (FAILED(hr)) {
  79.             return false;
  80.         }
  81.         return name == rhsname;
  82.     }
  83.     PQTuneRequest CreateTuneRequest() {
  84.         PQTuneRequest p;
  85.         HRESULT hr = (*this)->CreateTuneRequest(&p);
  86.         if (FAILED(hr)) {
  87.             return PQTuneRequest();
  88.         }
  89.         return p;
  90.     }
  91.     PQLocator Locator() {
  92.         _ASSERT(*this);
  93.         PQLocator ts;
  94.         HRESULT hr = (*this)->get_DefaultLocator(&ts);
  95.         if (FAILED(hr)) {
  96.             return PQLocator();
  97.         }
  98.         return ts;
  99.     }
  100.     HRESULT Locator(PQLocator& l) {
  101.         _ASSERT(*this);
  102.         return (*this)->put_Locator(l);
  103.     }
  104.     void Clone() {
  105.         PQTuningSpace t;
  106.         HRESULT hr = (*this)->Clone(&t);
  107.         if (FAILED(hr) || !t) {
  108.             Release();  // clone failed, clear ourselves
  109.             return;
  110.         }
  111.         TUNINGSPACETYPE::operator=(t);
  112.     }
  113. };
  114. typedef TNTuningSpaceHelper<PQTuningSpace, PQTuneRequest> TNTuningSpace;
  115. template<class TUNINGSPACETYPE, class TUNEREQUESTTYPE> class TNAnalogRadioTuningSpaceHelper : public TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE> {
  116. public:
  117.      TNAnalogRadioTuningSpaceHelper() {}
  118.      TNAnalogRadioTuningSpaceHelper(const TUNINGSPACETYPE &a) : TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>(a) {}
  119.      TNAnalogRadioTuningSpaceHelper(IUnknown *p) : TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>(p) {}
  120.      TNAnalogRadioTuningSpaceHelper(const TNAnalogRadioTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE> &a) : TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>(a) {}
  121.      TNAnalogRadioTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TNAnalogRadioTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& rhs) {
  122.         TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(rhs);
  123.         return *this;
  124.      }
  125.      template<class TS, class TR> TNAnalogRadioTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TNTuningSpaceHelper<TS, TR>& rhs) {
  126.         TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(TUNINGSPACETYPE(rhs));
  127.         return *this;
  128.      }
  129.      TNAnalogRadioTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TUNINGSPACETYPE& rhs) {
  130.         TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(rhs);
  131.         return *this;
  132.     }
  133.      TNAnalogRadioTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(IUnknown* rhs) {
  134.         TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(rhs);
  135.         return *this;
  136.     }
  137.     long MaxFrequency() {
  138.         _ASSERT(*this);
  139.         long freq;
  140.         HRESULT hr = (*this)->get_MaxFrequency(&freq);
  141.         if (FAILED(hr)) {
  142.             freq = DEFAULT_MAX_FREQUENCY;
  143.         }
  144.         return freq;
  145.     }
  146.     HRESULT MaxFrequency(long freq) {
  147.         _ASSERT(*this);
  148.         return (*this)->put_MaxFrequency(freq);
  149.     }
  150.     long MinFrequency() {
  151.         _ASSERT(*this);
  152.         long freq;
  153.         HRESULT hr = (*this)->get_MinFrequency(&freq);
  154.         if (FAILED(hr)) {
  155.             freq = DEFAULT_MIN_FREQUENCY;
  156.         }
  157.         return freq;
  158.     }
  159.     HRESULT MinFrequency(long freq) {
  160.         _ASSERT(*this);
  161.         return (*this)->put_MinFrequency(freq);
  162.     }
  163. };
  164. typedef TNAnalogRadioTuningSpaceHelper<PQAnalogRadioTuningSpace, PQChannelTuneRequest> TNAnalogRadioTuningSpace;
  165. template<class TUNINGSPACETYPE, class TUNEREQUESTTYPE> class TNAnalogTVTuningSpaceHelper : public TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE> {
  166. public:
  167.     TNAnalogTVTuningSpaceHelper() {}
  168.     TNAnalogTVTuningSpaceHelper(const TUNINGSPACETYPE &a) : TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>(a) {}
  169.     TNAnalogTVTuningSpaceHelper(IUnknown *p) : TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>(p) {}
  170.     TNAnalogTVTuningSpaceHelper(const TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE> &a) : TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>(a) {}
  171.     TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& rhs) {
  172.         TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(rhs);
  173.         return *this;
  174.     }
  175.     template<class TS, class TR> TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TNTuningSpaceHelper<TS, TR>& rhs) {
  176.         TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(TUNINGSPACETYPE(rhs));
  177.         return *this;
  178.     }
  179.     TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TUNINGSPACETYPE& rhs) {
  180.         TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(rhs);
  181.         return *this;
  182.     }
  183.     TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(IUnknown* rhs) {
  184.         TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(rhs);
  185.         return *this;
  186.     }
  187.     TunerInputType InputType() {
  188.         _ASSERT(*this);
  189.         TunerInputType ti;
  190.         HRESULT hr = (*this)->get_InputType(&ti);
  191.         if (FAILED(hr)) {
  192.             ti = DEFAULT_ANALOG_TUNER_INPUT_TYPE;
  193.         }
  194.         return ti;
  195.     }
  196.     HRESULT InputType(TunerInputType ti) {
  197.         _ASSERT(*this);
  198.         return (*this)->put_InputType(&ti);
  199.     }
  200.     long CountryCode() {
  201.         _ASSERT(*this);
  202.         long cc;
  203.         HRESULT hr = (*this)->get_CountryCode(&cc);
  204.         if (FAILED(hr)) {
  205.             cc = DEFAULT_ANALOG_TUNER_INPUT_TYPE;
  206.         }
  207.         return cc;
  208.     }
  209.     HRESULT CountryCode(long cc) {
  210.         _ASSERT(*this);
  211.         return (*this)->put_CountryCode(cc);
  212.     }
  213.     long MinChannel() {
  214.         _ASSERT(*this);
  215.         long chan;
  216.         HRESULT hr = (*this)->get_MinChannel(&chan);
  217.         if (FAILED(hr)) {
  218.             chan = DEFAULT_MIN_CHANNEL;
  219.         }
  220.         return chan;
  221.     }
  222.     HRESULT MinChannel(long chan) {
  223.         _ASSERT(*this);
  224.         return (*this)->put_MinChannel(chan);
  225.     }
  226.     long MaxChannel() {
  227.         _ASSERT(*this);
  228.         long chan;
  229.         HRESULT hr = (*this)->get_MaxChannel(&chan);
  230.         if (FAILED(hr)) {
  231.             chan = DEFAULT_MAX_CHANNEL;
  232.         }
  233.         return chan;
  234.     }
  235.     HRESULT MaxChannel(long chan) {
  236.         _ASSERT(*this);
  237.         return (*this)->put_MaxChannel(chan);
  238.     }
  239. };
  240. typedef TNAnalogTVTuningSpaceHelper<PQAnalogTVTuningSpace, PQChannelTuneRequest> TNAnalogTVTuningSpace;
  241. template<class TUNINGSPACETYPE, class TUNEREQUESTTYPE> class TNATSCTuningSpaceHelper : public TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE> {
  242. public:
  243.     TNATSCTuningSpaceHelper() {}
  244.     TNATSCTuningSpaceHelper(const TUNINGSPACETYPE &a) : TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>(a) {}
  245.     TNATSCTuningSpaceHelper(IUnknown *p) : TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>(p) {}
  246.     TNATSCTuningSpaceHelper(const TNATSCTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE> &a) : TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>(a) {}
  247.     TNATSCTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TNATSCTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& rhs) {
  248.         TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(rhs);
  249.         return *this;
  250.     }
  251.     template<class TS, class TR> TNATSCTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TNTuningSpaceHelper<TS, TR>& rhs) {
  252.         TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(TUNINGSPACETYPE(rhs));
  253.         return *this;
  254.     }
  255.     TNATSCTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TUNINGSPACETYPE& rhs) {
  256.         TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(rhs);
  257.         return *this;
  258.     }
  259.     TNATSCTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(IUnknown* rhs) {
  260.         TNAnalogTVTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(rhs);
  261.         return *this;
  262.     }
  263.     long MinMinorChannel() {
  264.         _ASSERT(*this);
  265.         long chan;
  266.         HRESULT hr = (*this)->get_MinMinorChannel(&chan);
  267.         if (FAILED(hr)) {
  268.             chan = DEFAULT_MIN_CHANNEL;
  269.         }
  270.         return chan;
  271.     }
  272.     HRESULT MinMinorChannel(long chan) {
  273.         _ASSERT(*this);
  274.         return (*this)->put_MinMinorChannel(chan);
  275.     }
  276.     long MaxMinorChannel() {
  277.         _ASSERT(*this);
  278.         long chan;
  279.         HRESULT hr = (*this)->get_MaxMinorChannel(&chan);
  280.         if (FAILED(hr)) {
  281.             chan = DEFAULT_MAX_CHANNEL;
  282.         }
  283.         return chan;
  284.     }
  285.     HRESULT MaxMinorChannel(long chan) {
  286.         _ASSERT(*this);
  287.         return (*this)->put_MaxMinorChannel(chan);
  288.     }
  289.     long MinPhysicalChannel() {
  290.         _ASSERT(*this);
  291.         long chan;
  292.         HRESULT hr = (*this)->get_MinPhysicalChannel(&chan);
  293.         if (FAILED(hr)) {
  294.             chan = DEFAULT_MIN_CHANNEL;
  295.         }
  296.         return chan;
  297.     }
  298.     HRESULT MinPhysicalChannel(long chan) {
  299.         _ASSERT(*this);
  300.         return (*this)->put_MinPhysicalChannel(chan);
  301.     }
  302.     long MaxPhysicalChannel() {
  303.         _ASSERT(*this);
  304.         long chan;
  305.         HRESULT hr = (*this)->get_MaxPhysicalChannel(&chan);
  306.         if (FAILED(hr)) {
  307.             chan = DEFAULT_MAX_CHANNEL;
  308.         }
  309.         return chan;
  310.     }
  311.     HRESULT MaxPhysicalChannel(long chan) {
  312.         _ASSERT(*this);
  313.         return (*this)->put_MaxPhysicalChannel(chan);
  314.     }
  315. };
  316. typedef TNATSCTuningSpaceHelper<PQATSCTuningSpace, PQATSCChannelTuneRequest> TNATSCTuningSpace;
  317. // dvb tuning space
  318. template<class TUNINGSPACETYPE, class TUNEREQUESTTYPE> class TNDVBTuningSpaceHelper : public TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE> {
  319. public:
  320.      TNDVBTuningSpaceHelper() {}
  321.      TNDVBTuningSpaceHelper(const TUNINGSPACETYPE &a) : TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>(a) {}
  322.      TNDVBTuningSpaceHelper(IUnknown *p) : TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>(p) {}
  323.      TNDVBTuningSpaceHelper(const TNDVBTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE> &a) : TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>(a) {}
  324.      TNDVBTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TNDVBTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& rhs) {
  325.         TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(rhs);
  326.         return *this;
  327.      }
  328.      template<class TS, class TR> TNDVBTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TNTuningSpaceHelper<TS, TR>& rhs) {
  329.         TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(TUNINGSPACETYPE(rhs));
  330.         return *this;
  331.      }
  332.      TNDVBTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(TUNINGSPACETYPE& rhs) {
  333.         TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(rhs);
  334.         return *this;
  335.     }
  336.      TNDVBTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>& operator=(IUnknown* rhs) {
  337.         TNTuningSpaceHelper<TUNINGSPACETYPE, TUNEREQUESTTYPE>::operator=(rhs);
  338.         return *this;
  339.     }
  340.     DVBSystemType SystemType() const {
  341.         DVBSystemType st;
  342.         HRESULT hr = (*this)->get_SystemType(&st);
  343.         if (FAILED(hr)) {
  344.             return DVB_Cable;
  345.         }
  346.         return st;
  347.     }
  348.     HRESULT SystemType(DVBSystemType st) {
  349.         _ASSERT(*this);
  350.         return (*this)->put_SystemType(st);
  351.     }
  352. };
  353. typedef TNDVBTuningSpaceHelper<PQDVBTuningSpace, PQDVBTuneRequest> TNDVBTuningSpace;
  354. // locators
  355. template<class LOCATORTYPE> class TNLocatorHelper : public LOCATORTYPE {
  356. public:
  357.      TNLocatorHelper() {}
  358.      TNLocatorHelper(const LOCATORTYPE &a) : LOCATORTYPE(a) {}
  359.      TNLocatorHelper(IUnknown *p) : LOCATORTYPE(p) {}
  360.      TNLocatorHelper(const TNLocatorHelper<LOCATORTYPE> &a) : LOCATORTYPE(a) {}
  361.      TNLocatorHelper(ILocator *p) : LOCATORTYPE(p) {}
  362.      TNLocatorHelper<LOCATORTYPE>& operator=(TNLocatorHelper<LOCATORTYPE>& rhs) {
  363.         LOCATORTYPE::operator=(rhs);
  364.         return *this;
  365.     }
  366.      TNLocatorHelper<LOCATORTYPE>& operator=(LOCATORTYPE& rhs) {
  367.         LOCATORTYPE::operator=(rhs);
  368.         return *this;
  369.     }
  370.      TNLocatorHelper<LOCATORTYPE>& operator=(ILocator* rhs) {
  371.         LOCATORTYPE::operator=(rhs);
  372.         return *this;
  373.     }
  374.      TNLocatorHelper<LOCATORTYPE>& operator=(IUnknown* rhs) {
  375.         LOCATORTYPE::operator=(rhs);
  376.         return *this;
  377.     }
  378.     void Clone() {
  379.         PQLocator t;
  380.         HRESULT hr = (*this)->Clone(&t);
  381.         if (FAILED(hr) || !t) {
  382.             Release();  // clone failed, clear ourselves
  383.             return;
  384.         }
  385.         LOCATORTYPE::operator=(t);
  386.     }
  387.     long CarrierFrequency() {
  388.         _ASSERT(*this);
  389.         long f;
  390.         HRESULT hr = (*this)->get_CarrierFrequency(&f);
  391.         if (FAILED(hr)) {
  392.             return -1;
  393.         }
  394.         return f;
  395.     }
  396.     HRESULT CarrierFrequency(long f) {
  397.         _ASSERT(*this);
  398.         return (*this)->put_CarrierFrequency(f);
  399.     }
  400.     FECMethod InnerFEC() {
  401.         _ASSERT(*this);
  402.         FECMethod f;
  403.         HRESULT hr = (*this)->get_InnerFEC(&f);
  404.         if (FAILED(hr)) {
  405.             return BDA_FEC_METHOD_NOT_SET;
  406.         }
  407.         return f;
  408.     }
  409.     HRESULT InnerFEC(FECMethod f) {
  410.         _ASSERT(*this);
  411.         return (*this)->put_InnerFEC(f);
  412.     }
  413.     BinaryConvolutionCodeRate InnerFECRate() {
  414.         _ASSERT(*this);
  415.         BinaryConvolutionCodeRate f;
  416.         HRESULT hr = (*this)->get_InnerFECRate(&f);
  417.         if (FAILED(hr)) {
  418.             return BDA_BCC_RATE_NOT_SET;
  419.         }
  420.         return f;
  421.     }
  422.     HRESULT InnerFECRate(BinaryConvolutionCodeRate f) {
  423.         _ASSERT(*this);
  424.         return (*this)->put_InnerFECRate(f);
  425.     }
  426.     FECMethod OuterFEC() {
  427.         _ASSERT(*this);
  428.         FECMethod f;
  429.         HRESULT hr = (*this)->get_OuterFEC(&f);
  430.         if (FAILED(hr)) {
  431.             return BDA_FEC_METHOD_NOT_SET;
  432.         }
  433.         return f;
  434.     }
  435.     HRESULT OuterFEC(FECMethod f) {
  436.         _ASSERT(*this);
  437.         return (*this)->put_OuterFEC(f);
  438.     }
  439.     BinaryConvolutionCodeRate OuterFECRate() {
  440.         _ASSERT(*this);
  441.         BinaryConvolutionCodeRate f;
  442.         HRESULT hr = (*this)->get_OuterFECRate(&f);
  443.         if (FAILED(hr)) {
  444.             return BDA_BCC_RATE_NOT_SET;
  445.         }
  446.         return f;
  447.     }
  448.     HRESULT OuterFECRate(BinaryConvolutionCodeRate f) {
  449.         _ASSERT(*this);
  450.         return (*this)->put_OuterFECRate(f);
  451.     }
  452.     ModulationType Modulation() {
  453.         _ASSERT(*this);
  454.         ModulationType f;
  455.         HRESULT hr = (*this)->get_Modulation(&f);
  456.         if (FAILED(hr)) {
  457.             return BDA_MOD_NOT_SET;
  458.         }
  459.         return f;
  460.     }
  461.     HRESULT Modulation(ModulationType f) {
  462.         _ASSERT(*this);
  463.         return (*this)->put_Modulation(f);
  464.     }
  465.     long SymbolRate() {
  466.         _ASSERT(*this);
  467.         long f;
  468.         HRESULT hr = (*this)->get_SymbolRate(&f);
  469.         if (FAILED(hr)) {
  470.             return -1;
  471.         }
  472.         return f;
  473.     }
  474.     HRESULT SymbolRate(long f) {
  475.         _ASSERT(*this);
  476.         return (*this)->put_SymbolRate(f);
  477.     }
  478. };
  479. typedef TNLocatorHelper<PQLocator> TNLocator;
  480. template<class LOCATORTYPE> class TNATSCLocatorHelper : public TNLocatorHelper<LOCATORTYPE> {
  481. public:
  482.     TNATSCLocatorHelper() {}
  483.     TNATSCLocatorHelper(const LOCATORTYPE &a) : TNLocatorHelper<LOCATORTYPE>(a) {}
  484.     TNATSCLocatorHelper(IUnknown *p) : TNLocatorHelper<LOCATORTYPE>(p) {}
  485.     TNATSCLocatorHelper(const TNATSCLocatorHelper<LOCATORTYPE> &a) : TNLocatorHelper<LOCATORTYPE>(a) {}
  486.     TNATSCLocatorHelper(IATSCLocator *p) : TNLocatorHelper<LOCATORTYPE>(p) {}
  487.     TNATSCLocatorHelper(const TNLocatorHelper<LOCATORTYPE> &a) : TNLocatorHelper<LOCATORTYPE>(a) {}
  488.     TNATSCLocatorHelper<LOCATORTYPE>& operator=(TNATSCLocatorHelper<LOCATORTYPE>& rhs) {
  489.         TNLocatorHelper<LOCATORTYPE>::operator=(rhs);
  490.         return *this;
  491.     }
  492.     TNATSCLocatorHelper<LOCATORTYPE>& operator=(TNLocatorHelper<LOCATORTYPE>& rhs) {
  493.         TNLocatorHelper<LOCATORTYPE>::operator=(rhs);
  494.         return *this;
  495.     }
  496.     TNATSCLocatorHelper<LOCATORTYPE>& operator=(LOCATORTYPE& rhs) {
  497.         TNLocatorHelper<LOCATORTYPE>::operator=(rhs);
  498.         return *this;
  499.     }
  500.     TNATSCLocatorHelper<LOCATORTYPE>& operator=(IATSCLocator* rhs) {
  501.         TNLocatorHelper<LOCATORTYPE>::operator=(rhs);
  502.         return *this;
  503.     }
  504.     TNATSCLocatorHelper<LOCATORTYPE>& operator=(IUnknown* rhs) {
  505.         TNLocatorHelper<LOCATORTYPE>::operator=(rhs);
  506.         return *this;
  507.     }
  508.     long PhysicalChannel() {
  509.         _ASSERT(*this);
  510.         long pc;
  511.         HRESULT hr = (*this)->get_PhysicalChannel(&pc);
  512.         if (FAILED(hr)) {
  513.             return -1;
  514.         }
  515.         return pc;
  516.     }
  517.     HRESULT PhysicalChannel(long pc) {
  518.         _ASSERT(*this);
  519.         return (*this)->put_PhysicalChannel(pc);
  520.     }
  521.     long TSID() {
  522.         _ASSERT(*this);
  523.         long pc;
  524.         HRESULT hr = (*this)->get_TSID(&pc);
  525.         if (FAILED(hr)) {
  526.             return -1;
  527.         }
  528.         return pc;
  529.     }
  530.     HRESULT TSID(long pc) {
  531.         _ASSERT(*this);
  532.         return (*this)->put_TSID(pc);
  533.     }
  534.     long ProgramNumber() {
  535.         _ASSERT(*this);
  536.         long pc;
  537.         HRESULT hr = (*this)->get_ProgramNumber(&pc);
  538.         if (FAILED(hr)) {
  539.             return -1;
  540.         }
  541.         return pc;
  542.     }
  543.     HRESULT ProgramNumber(long pc) {
  544.         _ASSERT(*this);
  545.         return (*this)->put_ProgramNumber(pc);
  546.     }
  547. };
  548. typedef TNATSCLocatorHelper<PQATSCLocator> TNATSCLocator;
  549. // tune requests
  550. template<class TUNEREQUESTTYPE, class LOCATORTYPE> class TNTuneRequestHelper : public TUNEREQUESTTYPE {
  551. public:
  552.      TNTuneRequestHelper() {}
  553.      TNTuneRequestHelper(const TUNEREQUESTTYPE &a) : TUNEREQUESTTYPE(a) {}
  554.      TNTuneRequestHelper(IUnknown *p) : TUNEREQUESTTYPE(p) {}
  555.      TNTuneRequestHelper(const TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE> &a) : TUNEREQUESTTYPE(a) {}
  556.      TNTuneRequestHelper(ITuneRequest *p) : TUNEREQUESTTYPE(p) {}
  557.      TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& rhs) {
  558.         TUNEREQUESTTYPE::operator=(rhs);
  559.         return *this;
  560.     }
  561.      TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(TUNEREQUESTTYPE& rhs) {
  562.         TUNEREQUESTTYPE::operator=(rhs);
  563.         return *this;
  564.     }
  565.      TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(ITuneRequest* rhs) {
  566.         TUNEREQUESTTYPE::operator=(rhs);
  567.         return *this;
  568.     }
  569.      TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(IUnknown* rhs) {
  570.         TUNEREQUESTTYPE::operator=(rhs);
  571.         return *this;
  572.     }
  573.     // this function creates a new instance of the base ITuneRequest* and copies
  574.     // all the values of the current ITuneRequest and sets this to the new one
  575.     // this provides the value semantics needed by the network providers
  576.     void Clone() {
  577.         PQTuneRequest t;
  578.         HRESULT hr = (*this)->Clone(&t);
  579.         if (FAILED(hr) || !t) {
  580.             Release();  // clone failed, clear ourselves
  581.             return;
  582.         }
  583.         TUNEREQUESTTYPE::operator=(t);
  584.     }
  585.     PQTuningSpace TuningSpace() {
  586.         _ASSERT(*this);
  587.         PQTuningSpace ts;
  588.         HRESULT hr = (*this)->get_TuningSpace(&ts);
  589.         if (FAILED(hr)) {
  590.             return PQTuningSpace();
  591.         }
  592.         return ts;
  593.     }
  594.     LOCATORTYPE Locator() {
  595.         _ASSERT(*this);
  596.         PQLocator pc;
  597.         HRESULT hr = (*this)->get_Locator(&pc);
  598.         if (FAILED(hr)) {
  599.             return PQLocator();
  600.         }
  601.         return pc;
  602.     }
  603.     HRESULT Locator(LOCATORTYPE& pc) {
  604.         _ASSERT(*this);
  605.         return (*this)->put_Locator(pc);
  606.     }
  607. };
  608. typedef TNTuneRequestHelper<PQTuneRequest, PQLocator> TNTuneRequest;
  609. template<class TUNEREQUESTTYPE, class LOCATORTYPE> class TNChannelTuneRequestHelper : public TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE> {
  610. public:
  611.      TNChannelTuneRequestHelper() {}
  612.      TNChannelTuneRequestHelper(const TNTuneRequest &a) : TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(a) {}
  613.      TNChannelTuneRequestHelper(IChannelTuneRequest *p) : TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(p) {}
  614.      TNChannelTuneRequestHelper(IUnknown *p) : TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(p) {}
  615.      TNChannelTuneRequestHelper(const TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE> &a) : TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(a) {}
  616.      TNChannelTuneRequestHelper(const TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE> &a) : TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(a) {}
  617.      TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& rhs) {
  618.         TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>::operator=(rhs);
  619.         return *this;
  620.     }
  621.     template<class TR, class LOC> TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(TNTuneRequestHelper<TR, LOC>& rhs) {
  622.         TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>::operator=(TUNEREQUESTTYPE(rhs));
  623.         return *this;
  624.     }
  625.      TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(TUNEREQUESTTYPE& rhs) {
  626.         TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>::operator=(rhs);
  627.         return *this;
  628.     }
  629.      TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(IChannelTuneRequest* rhs) {
  630.         TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>::operator=(rhs);
  631.         return *this;
  632.     }
  633.      TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(IUnknown* rhs) {
  634.         TUNEREQUESTTYPE::operator=(rhs);
  635.         return *this;
  636.     }
  637.     long Channel() {
  638.         _ASSERT(*this);
  639.         long c;
  640.         HRESULT hr = (*this)->get_Channel(&c);
  641.         if (FAILED(hr)) {
  642.             return -1;
  643.         }
  644.         return c;
  645.     }
  646.     HRESULT Channel(long c) {
  647.         _ASSERT(*this);
  648.         return (*this)->put_Channel(c);
  649.     }
  650. };
  651. typedef TNChannelTuneRequestHelper<PQChannelTuneRequest, PQLocator> TNChannelTuneRequest;
  652. template<class TUNEREQUESTTYPE, class LOCATORTYPE> class TNATSCChannelTuneRequestHelper : public TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE> {
  653. public:
  654.     TNATSCChannelTuneRequestHelper() {}
  655.     TNATSCChannelTuneRequestHelper(const TNTuneRequest &a) : TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(a) {}
  656.     TNATSCChannelTuneRequestHelper(IATSCChannelTuneRequest *p) : TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(p) {}
  657.     TNATSCChannelTuneRequestHelper(IUnknown *p) : TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(p) {}
  658.     TNATSCChannelTuneRequestHelper(const TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE> &a) : TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(a) {}
  659.     TNATSCChannelTuneRequestHelper(const TNATSCChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE> &a) : TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(a) {}
  660.     TNATSCChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(TNATSCChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& rhs) {
  661.         TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>::operator=(rhs);
  662.         return *this;
  663.     }
  664.     template<class TR, class LOC>TNATSCChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(TNTuneRequestHelper<TR, LOC>& rhs) {
  665.         TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>::operator=(TR(rhs));
  666.         return *this;
  667.     }
  668.     TNATSCChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(TUNEREQUESTTYPE& rhs) {
  669.         TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>::operator=(rhs);
  670.         return *this;
  671.     }
  672.     TNATSCChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(IATSCChannelTuneRequest *rhs) {
  673.         TNChannelTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>::operator=(rhs);
  674.         return *this;
  675.     }
  676.     TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(IUnknown* rhs) {
  677.         TUNEREQUESTTYPE::operator=(rhs);
  678.         return *this;
  679.     }
  680.     long MinorChannel() {
  681.         _ASSERT(*this);
  682.         long mc;
  683.         HRESULT hr = (*this)->get_MinorChannel(&mc);
  684.         if (FAILED(hr)) {
  685.             return -1;
  686.         }
  687.         return mc;
  688.     }
  689.     HRESULT MinorChannel(long mc) {
  690.         _ASSERT(*this);
  691.         return (*this)->put_MinorChannel(mc);
  692.     }
  693. };
  694. typedef TNATSCChannelTuneRequestHelper<PQATSCChannelTuneRequest, PQATSCLocator> TNATSCChannelTuneRequest;
  695. template<class TUNEREQUESTTYPE, class LOCATORTYPE> class TNDVBTuneRequestHelper : public TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE> {
  696. public:
  697.      TNDVBTuneRequestHelper() {}
  698.      TNDVBTuneRequestHelper(const TNTuneRequest &a) : TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(a) {}
  699.      TNDVBTuneRequestHelper(IDVBTuneRequest *p) : TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(p) {}
  700.      TNDVBTuneRequestHelper(IUnknown *p) : TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(p) {}
  701.      TNDVBTuneRequestHelper(const TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE> &a) : TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(a) {}
  702.      TNDVBTuneRequestHelper(const TNDVBTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE> &a) : TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>(a) {}
  703.      TNDVBTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(TNDVBTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& rhs) {
  704.         TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>::operator=(rhs);
  705.         return *this;
  706.     }
  707.     template<class TR, class LOC> TNDVBTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(TNTuneRequestHelper<TR, LOC>& rhs) {
  708.         TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>::operator=(TUNEREQUESTTYPE(rhs));
  709.         return *this;
  710.     }
  711.      TNDVBTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(TUNEREQUESTTYPE& rhs) {
  712.         TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>::operator=(rhs);
  713.         return *this;
  714.     }
  715.      TNDVBTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(IDVBTuneRequest* rhs) {
  716.         TNTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>::operator=(rhs);
  717.         return *this;
  718.     }
  719.      TNDVBTuneRequestHelper<TUNEREQUESTTYPE, LOCATORTYPE>& operator=(IUnknown* rhs) {
  720.         TUNEREQUESTTYPE::operator=(rhs);
  721.         return *this;
  722.     }
  723.     long ONID() {
  724.         _ASSERT(*this);
  725.         long c;
  726.         HRESULT hr = (*this)->get_ONID(&c);
  727.         if (FAILED(hr)) {
  728.             return -1;
  729.         }
  730.         return c;
  731.     }
  732.     HRESULT ONID(long c) {
  733.         _ASSERT(*this);
  734.         return (*this)->put_ONID(c);
  735.     }
  736.     long TSID() {
  737.         _ASSERT(*this);
  738.         long c;
  739.         HRESULT hr = (*this)->get_TSID(&c);
  740.         if (FAILED(hr)) {
  741.             return -1;
  742.         }
  743.         return c;
  744.     }
  745.     HRESULT TSID(long c) {
  746.         _ASSERT(*this);
  747.         return (*this)->put_TSID(c);
  748.     }
  749.     long SID() {
  750.         _ASSERT(*this);
  751.         long c;
  752.         HRESULT hr = (*this)->get_SID(&c);
  753.         if (FAILED(hr)) {
  754.             return -1;
  755.         }
  756.         return c;
  757.     }
  758.     HRESULT SID(long c) {
  759.         _ASSERT(*this);
  760.         return (*this)->put_SID(c);
  761.     }
  762. };
  763. typedef TNDVBTuneRequestHelper<PQDVBTuneRequest, PQLocator> TNDVBTuneRequest;
  764. }; // namespace
  765. #ifndef NO_DEFAULT_BDATUNINGMODEL_NAMESPACE
  766. using namespace BDATuningModel;
  767. #endif
  768. #endif
  769. // end of file - tune.h