private void TestDefaultLocator()
        {
            int      hr = 0;
            ILocator locator;

            hr = tuningSpace.get_DefaultLocator(out locator);
            DsError.ThrowExceptionForHR(hr);

            hr = tuningSpace.put_DefaultLocator(locator);
            DsError.ThrowExceptionForHR(hr);

            Debug.Assert((hr == 0) && (locator != null), "ITuningSpace.get_DefaultLocator / put_DefaultLocator");

            Marshal.ReleaseComObject(locator);
        }
Beispiel #2
0
        /// <summary>
        /// Enumerate all tvcard devices and add them to the list
        /// </summary>
        private void DetectCards()
        {
            ITunerCap _providerType;
            bool      genericNP = false;

            //SkyStar 2 & IP Streaming
            DsDevice[] devices = DsDevice.GetDevicesOfCat(FilterCategory.LegacyAmFilterCategory);
            for (int i = 0; i < devices.Length; ++i)
            {
                if (String.Compare(devices[i].Name, "B2C2 MPEG-2 Source", true) == 0)
                {
                    Log.Log.WriteFile("Detected SkyStar 2 card");
                    TvCardDvbSS2 card = new TvCardDvbSS2(_epgEvents, devices[i]);
                    _cards.Add(card);
                    //break;  maybe more than one B2C2 card ?
                }
                else if (String.Compare(devices[i].Name, "Elecard NWSource-Plus", true) == 0)
                {
                    TvBusinessLayer layer = new TvBusinessLayer();
                    Setting         setting;
                    setting = layer.GetSetting("iptvCardCount", "1");
                    int iptvCardCount = Convert.ToInt32(setting.Value);
                    for (int cardNum = 0; cardNum < iptvCardCount; cardNum++)
                    {
                        Log.Log.WriteFile("Detected IP TV Card " + cardNum);
                        TvCardDVBIP card = new TvCardDVBIPElecard(_epgEvents, devices[i], cardNum);
                        _cards.Add(card);
                    }
                }
                else if (String.Compare(devices[i].Name, "MediaPortal IPTV Source Filter", true) == 0)
                {
                    TvBusinessLayer layer = new TvBusinessLayer();
                    Setting         setting;
                    setting = layer.GetSetting("iptvCardCount", "1");
                    int iptvCardCount = Convert.ToInt32(setting.Value);
                    for (int cardNum = 0; cardNum < iptvCardCount; cardNum++)
                    {
                        Log.Log.WriteFile("Detected IP TV Card " + cardNum);
                        TvCardDVBIP card = new TvCardDVBIPBuiltIn(_epgEvents, devices[i], cardNum);
                        _cards.Add(card);
                    }
                }
            }
            //Hauppauge HD PVR & Colossus
            devices = DsDevice.GetDevicesOfCat(FilterCategory.AMKSCrossbar);
            for (int i = 0; i < devices.Length; ++i)
            {
                if (devices[i].Name == null)
                {
                    continue;
                }
                if (devices[i].Name.Equals("Hauppauge HD PVR Crossbar"))
                {
                    Log.Log.WriteFile("Detected Hauppauge HD PVR");
                    TvCardHDPVR card = new TvCardHDPVR(devices[i]);
                    _cards.Add(card);
                }
                else if (devices[i].Name.Contains("Hauppauge Colossus Crossbar"))
                {
                    Log.Log.WriteFile("Detected Hauppauge Colossus");
                    TvCardHDPVR card = new TvCardHDPVR(devices[i]);
                    _cards.Add(card);
                }
            }
            //BDA TV devices
            devices = DsDevice.GetDevicesOfCat(FilterCategory.BDASourceFiltersCategory);
            if (devices.Length > 0)
            {
                IFilterGraph2 graphBuilder = (IFilterGraph2) new FilterGraph();
                DsROTEntry    rotEntry     = new DsROTEntry(graphBuilder);

                Guid networkProviderClsId = new Guid("{D7D42E5C-EB36-4aad-933B-B4C419429C98}");
                if (FilterGraphTools.IsThisComObjectInstalled(networkProviderClsId))
                {
                    handleInternalNetworkProviderFilter(devices, graphBuilder, networkProviderClsId, rotEntry);
                }
                else
                {
                    ITuningSpace tuningSpace = null;
                    ILocator     locator     = null;

                    //DVBT
                    IBaseFilter networkDVBT = null;
                    try
                    {
                        networkProviderClsId = typeof(DVBTNetworkProvider).GUID;
                        networkDVBT          = FilterGraphTools.AddFilterFromClsid(graphBuilder, networkProviderClsId,
                                                                                   "DVBT Network Provider");
                        tuningSpace = (ITuningSpace) new DVBTuningSpace();
                        tuningSpace.put_UniqueName("DVBT TuningSpace");
                        tuningSpace.put_FriendlyName("DVBT TuningSpace");
                        tuningSpace.put__NetworkType(typeof(DVBTNetworkProvider).GUID);
                        ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Terrestrial);
                        locator = (ILocator) new DVBTLocator();
                        locator.put_CarrierFrequency(-1);
                        locator.put_InnerFEC(FECMethod.MethodNotSet);
                        locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet);
                        locator.put_Modulation(ModulationType.ModNotSet);
                        locator.put_OuterFEC(FECMethod.MethodNotSet);
                        locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet);
                        locator.put_SymbolRate(-1);
                        tuningSpace.put_DefaultLocator(locator);
                        ((ITuner)networkDVBT).put_TuningSpace(tuningSpace);
                    }
                    catch (Exception ex)
                    {
                        Log.Log.Error("DVBT card detection error: {0}", ex.ToString());
                    }

                    //DVBS
                    networkProviderClsId = typeof(DVBSNetworkProvider).GUID;
                    IBaseFilter networkDVBS = FilterGraphTools.AddFilterFromClsid(graphBuilder, networkProviderClsId,
                                                                                  "DVBS Network Provider");
                    tuningSpace = (ITuningSpace) new DVBSTuningSpace();
                    tuningSpace.put_UniqueName("DVBS TuningSpace");
                    tuningSpace.put_FriendlyName("DVBS TuningSpace");
                    tuningSpace.put__NetworkType(typeof(DVBSNetworkProvider).GUID);
                    ((IDVBSTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Satellite);
                    locator = (ILocator) new DVBTLocator();
                    locator.put_CarrierFrequency(-1);
                    locator.put_InnerFEC(FECMethod.MethodNotSet);
                    locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet);
                    locator.put_Modulation(ModulationType.ModNotSet);
                    locator.put_OuterFEC(FECMethod.MethodNotSet);
                    locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet);
                    locator.put_SymbolRate(-1);
                    tuningSpace.put_DefaultLocator(locator);
                    ((ITuner)networkDVBS).put_TuningSpace(tuningSpace);

                    //ATSC
                    networkProviderClsId = typeof(ATSCNetworkProvider).GUID;
                    IBaseFilter networkATSC = FilterGraphTools.AddFilterFromClsid(graphBuilder, networkProviderClsId,
                                                                                  "ATSC Network Provider");
                    tuningSpace = (ITuningSpace) new ATSCTuningSpace();
                    tuningSpace.put_UniqueName("ATSC TuningSpace");
                    tuningSpace.put_FriendlyName("ATSC TuningSpace");
                    ((IATSCTuningSpace)tuningSpace).put_MaxChannel(10000);
                    ((IATSCTuningSpace)tuningSpace).put_MaxMinorChannel(10000);
                    ((IATSCTuningSpace)tuningSpace).put_MinChannel(0);
                    ((IATSCTuningSpace)tuningSpace).put_MinMinorChannel(0);
                    ((IATSCTuningSpace)tuningSpace).put_MinPhysicalChannel(0);
                    ((IATSCTuningSpace)tuningSpace).put_InputType(TunerInputType.Antenna);
                    locator = (IATSCLocator) new ATSCLocator();
                    locator.put_CarrierFrequency(-1);
                    locator.put_InnerFEC(FECMethod.MethodNotSet);
                    locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet);
                    locator.put_Modulation(ModulationType.ModNotSet);
                    locator.put_OuterFEC(FECMethod.MethodNotSet);
                    locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet);
                    locator.put_SymbolRate(-1);
                    locator.put_CarrierFrequency(-1);
                    ((IATSCLocator)locator).put_PhysicalChannel(-1);
                    ((IATSCLocator)locator).put_TSID(-1);
                    tuningSpace.put_DefaultLocator(locator);
                    ((ITuner)networkATSC).put_TuningSpace(tuningSpace);

                    //DVBC
                    networkProviderClsId = typeof(DVBCNetworkProvider).GUID;
                    IBaseFilter networkDVBC = FilterGraphTools.AddFilterFromClsid(graphBuilder, networkProviderClsId,
                                                                                  "DVBC Network Provider");
                    tuningSpace = (ITuningSpace) new DVBTuningSpace();
                    tuningSpace.put_UniqueName("DVBC TuningSpace");
                    tuningSpace.put_FriendlyName("DVBC TuningSpace");
                    tuningSpace.put__NetworkType(typeof(DVBCNetworkProvider).GUID);
                    ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Cable);
                    locator = (ILocator) new DVBCLocator();
                    locator.put_CarrierFrequency(-1);
                    locator.put_InnerFEC(FECMethod.MethodNotSet);
                    locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet);
                    locator.put_Modulation(ModulationType.ModNotSet);
                    locator.put_OuterFEC(FECMethod.MethodNotSet);
                    locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet);
                    locator.put_SymbolRate(-1);
                    tuningSpace.put_DefaultLocator(locator);
                    ((ITuner)networkDVBC).put_TuningSpace(tuningSpace);

                    //MS Network Provider - MCE Roll-up 2 or better
                    networkProviderClsId = typeof(NetworkProvider).GUID;
                    // First test if the Generic Network Provider is available (only on MCE 2005 + Update Rollup 2)
                    if (FilterGraphTools.IsThisComObjectInstalled(networkProviderClsId))
                    {
                        genericNP = true;
                    }
                    for (int i = 0; i < devices.Length; i++)
                    {
                        bool   connected        = false;
                        bool   isCablePreferred = false;
                        string name             = devices[i].Name ?? "unknown";
                        name = name.ToLowerInvariant();
                        Log.Log.WriteFile("Found card:{0}", name);
                        //silicondust work-around for dvb type detection issue. generic provider would always use dvb-t
                        if (name.Contains("silicondust hdhomerun tuner"))
                        {
                            isCablePreferred = CheckHDHomerunCablePrefered(name);
                            Log.Log.WriteFile("silicondust hdhomerun detected - prefer cable mode: {0}", isCablePreferred);
                        }
                        IBaseFilter tmp;
                        try
                        {
                            graphBuilder.AddSourceFilterForMoniker(devices[i].Mon, null, name, out tmp);
                        }
                        catch (InvalidComObjectException)
                        {
                            //ignore bad card
                            Log.Log.WriteFile("cannot add filter {0} to graph", devices[i].Name);
                            continue;
                        }
                        //Use the Microsoft Network Provider method first but only if available
                        if (genericNP)
                        {
                            IBaseFilter networkDVB = FilterGraphTools.AddFilterFromClsid(graphBuilder, networkProviderClsId,
                                                                                         "Microsoft Network Provider");
                            if (ConnectFilter(graphBuilder, networkDVB, tmp))
                            {
                                Log.Log.WriteFile("Detected DVB card:{0}", name);
                                // determine the DVB card supported GUIDs here!
                                _providerType = networkDVB as ITunerCap;
                                int    ulcNetworkTypesMax = 5;
                                int    pulcNetworkTypes;
                                Guid[] pguidNetworkTypes = new Guid[ulcNetworkTypesMax];
                                int    hr = _providerType.get_SupportedNetworkTypes(ulcNetworkTypesMax, out pulcNetworkTypes,
                                                                                    pguidNetworkTypes);
                                for (int n = 0; n < pulcNetworkTypes; n++)
                                {
                                    Log.Log.Debug("Detecting type by MSNP {0}: {1}", n, pguidNetworkTypes[n]);
                                    //test the first found guid to determine the DVB card type
                                    if (pguidNetworkTypes[n] == (typeof(DVBTNetworkProvider).GUID) && !isCablePreferred)
                                    {
                                        Log.Log.WriteFile("Detected DVB-T* card:{0}", name);
                                        TvCardDVBT dvbtCard = new TvCardDVBT(_epgEvents, devices[i]);
                                        _cards.Add(dvbtCard);
                                        connected = true;
                                    }
                                    else if (pguidNetworkTypes[n] == (typeof(DVBSNetworkProvider).GUID) && !isCablePreferred)
                                    {
                                        Log.Log.WriteFile("Detected DVB-S* card:{0}", name);
                                        TvCardDVBS dvbsCard = new TvCardDVBS(_epgEvents, devices[i]);
                                        _cards.Add(dvbsCard);
                                        connected = true;
                                    }
                                    else if (pguidNetworkTypes[n] == (typeof(DVBCNetworkProvider).GUID))
                                    {
                                        Log.Log.WriteFile("Detected DVB-C* card:{0}", name);
                                        TvCardDVBC dvbcCard = new TvCardDVBC(_epgEvents, devices[i]);
                                        _cards.Add(dvbcCard);
                                        connected = true;
                                    }
                                    else if (pguidNetworkTypes[n] == (typeof(ATSCNetworkProvider).GUID))
                                    {
                                        Log.Log.WriteFile("Detected ATSC* card:{0}", name);
                                        TvCardATSC dvbsCard = new TvCardATSC(_epgEvents, devices[i]);
                                        _cards.Add(dvbsCard);
                                        connected = true;
                                    }
                                    if (connected)
                                    {
                                        graphBuilder.RemoveFilter(tmp);
                                        Release.ComObject("tmp filter", tmp);
                                        break; // already found one, no need to continue
                                    }
                                    else if (n == (pulcNetworkTypes - 1))
                                    {
                                        Log.Log.WriteFile("Connected with generic MS Network Provider however network types don't match, using the original method");
                                    }
                                }
                            }
                            else
                            {
                                Log.Log.WriteFile("Not connected with generic MS Network Provider, using the original method");
                                connected = false;
                            }
                            graphBuilder.RemoveFilter(networkDVB);
                            Release.ComObject("ms provider", networkDVB);
                        }
                        if (!genericNP || !connected)
                        {
                            if (ConnectFilter(graphBuilder, networkDVBT, tmp))
                            {
                                Log.Log.WriteFile("Detected DVB-T card:{0}", name);
                                TvCardDVBT dvbtCard = new TvCardDVBT(_epgEvents, devices[i]);
                                _cards.Add(dvbtCard);
                            }
                            else if (ConnectFilter(graphBuilder, networkDVBC, tmp))
                            {
                                Log.Log.WriteFile("Detected DVB-C card:{0}", name);
                                TvCardDVBC dvbcCard = new TvCardDVBC(_epgEvents, devices[i]);
                                _cards.Add(dvbcCard);
                            }
                            else if (ConnectFilter(graphBuilder, networkDVBS, tmp))
                            {
                                Log.Log.WriteFile("Detected DVB-S card:{0}", name);
                                TvCardDVBS dvbsCard = new TvCardDVBS(_epgEvents, devices[i]);
                                _cards.Add(dvbsCard);
                            }
                            else if (ConnectFilter(graphBuilder, networkATSC, tmp))
                            {
                                Log.Log.WriteFile("Detected ATSC card:{0}", name);
                                TvCardATSC dvbsCard = new TvCardATSC(_epgEvents, devices[i]);
                                _cards.Add(dvbsCard);
                            }
                            graphBuilder.RemoveFilter(tmp);
                            Release.ComObject("tmp filter", tmp);
                        }
                    }
                    FilterGraphTools.RemoveAllFilters(graphBuilder);
                    Release.ComObject("dvbc provider", networkDVBC);
                    Release.ComObject("atsc provider", networkATSC);
                    Release.ComObject("dvbs provider", networkDVBS);
                    Release.ComObject("dvbt provider", networkDVBT);
                    rotEntry.Dispose();
                    Release.ComObject("graph builder", graphBuilder);
                }
            }
            //Analogue TV devices
            devices = DsDevice.GetDevicesOfCat(FilterCategory.AMKSTVTuner);
            for (int i = 0; i < devices.Length; i++)
            {
                string name = devices[i].Name ?? "unknown";
                name = name.ToLowerInvariant();
                Log.Log.WriteFile("Detected analog card:{0}", name);
                TvCardAnalog analogCard = new TvCardAnalog(devices[i]);
                _cards.Add(analogCard);
            }
            _cards.Add(new RadioWebStreamCard());
        }
Beispiel #3
0
        private void InitBdaDetectionGraph()
        {
            Log.Log.Debug("Initialise BDA device detection graph");
            _graphBuilder = (IFilterGraph2) new FilterGraph();
            _rotEntry     = new DsROTEntry(_graphBuilder);

            Guid mpNetworkProviderClsId = new Guid("{D7D42E5C-EB36-4aad-933B-B4C419429C98}");

            if (FilterGraphTools.IsThisComObjectInstalled(mpNetworkProviderClsId))
            {
                _mpNp = FilterGraphTools.AddFilterFromClsid(_graphBuilder, mpNetworkProviderClsId, "MediaPortal Network Provider");
                return;
            }

            ITuningSpace tuningSpace = null;
            ILocator     locator     = null;

            // ATSC
            _atscNp     = FilterGraphTools.AddFilterFromClsid(_graphBuilder, typeof(ATSCNetworkProvider).GUID, "ATSC Network Provider");
            tuningSpace = (ITuningSpace) new ATSCTuningSpace();
            tuningSpace.put_UniqueName("ATSC TuningSpace");
            tuningSpace.put_FriendlyName("ATSC TuningSpace");
            ((IATSCTuningSpace)tuningSpace).put_MaxChannel(10000);
            ((IATSCTuningSpace)tuningSpace).put_MaxMinorChannel(10000);
            ((IATSCTuningSpace)tuningSpace).put_MinChannel(0);
            ((IATSCTuningSpace)tuningSpace).put_MinMinorChannel(0);
            ((IATSCTuningSpace)tuningSpace).put_MinPhysicalChannel(0);
            ((IATSCTuningSpace)tuningSpace).put_InputType(TunerInputType.Antenna);
            locator = (IATSCLocator) new ATSCLocator();
            locator.put_CarrierFrequency(-1);
            locator.put_InnerFEC(FECMethod.MethodNotSet);
            locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet);
            locator.put_Modulation(ModulationType.ModNotSet);
            locator.put_OuterFEC(FECMethod.MethodNotSet);
            locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet);
            locator.put_SymbolRate(-1);
            locator.put_CarrierFrequency(-1);
            ((IATSCLocator)locator).put_PhysicalChannel(-1);
            ((IATSCLocator)locator).put_TSID(-1);
            tuningSpace.put_DefaultLocator(locator);
            ((ITuner)_atscNp).put_TuningSpace(tuningSpace);

            // DVB-C
            _dvbcNp     = FilterGraphTools.AddFilterFromClsid(_graphBuilder, typeof(DVBCNetworkProvider).GUID, "DVB-C Network Provider");
            tuningSpace = (ITuningSpace) new DVBTuningSpace();
            tuningSpace.put_UniqueName("DVB-C TuningSpace");
            tuningSpace.put_FriendlyName("DVB-C TuningSpace");
            tuningSpace.put__NetworkType(typeof(DVBCNetworkProvider).GUID);
            ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Cable);
            locator = (ILocator) new DVBCLocator();
            locator.put_CarrierFrequency(-1);
            locator.put_InnerFEC(FECMethod.MethodNotSet);
            locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet);
            locator.put_Modulation(ModulationType.ModNotSet);
            locator.put_OuterFEC(FECMethod.MethodNotSet);
            locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet);
            locator.put_SymbolRate(-1);
            tuningSpace.put_DefaultLocator(locator);
            ((ITuner)_dvbcNp).put_TuningSpace(tuningSpace);

            // DVB-S
            _dvbsNp     = FilterGraphTools.AddFilterFromClsid(_graphBuilder, typeof(DVBSNetworkProvider).GUID, "DVB-S Network Provider");
            tuningSpace = (ITuningSpace) new DVBSTuningSpace();
            tuningSpace.put_UniqueName("DVB-S TuningSpace");
            tuningSpace.put_FriendlyName("DVB-S TuningSpace");
            tuningSpace.put__NetworkType(typeof(DVBSNetworkProvider).GUID);
            ((IDVBSTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Satellite);
            locator = (ILocator) new DVBTLocator();
            locator.put_CarrierFrequency(-1);
            locator.put_InnerFEC(FECMethod.MethodNotSet);
            locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet);
            locator.put_Modulation(ModulationType.ModNotSet);
            locator.put_OuterFEC(FECMethod.MethodNotSet);
            locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet);
            locator.put_SymbolRate(-1);
            tuningSpace.put_DefaultLocator(locator);
            ((ITuner)_dvbsNp).put_TuningSpace(tuningSpace);

            // DVB-T
            _dvbtNp     = FilterGraphTools.AddFilterFromClsid(_graphBuilder, typeof(DVBTNetworkProvider).GUID, "DVB-T Network Provider");
            tuningSpace = (ITuningSpace) new DVBTuningSpace();
            tuningSpace.put_UniqueName("DVB-T TuningSpace");
            tuningSpace.put_FriendlyName("DVB-T TuningSpace");
            tuningSpace.put__NetworkType(typeof(DVBTNetworkProvider).GUID);
            ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Terrestrial);
            locator = (ILocator) new DVBTLocator();
            locator.put_CarrierFrequency(-1);
            locator.put_InnerFEC(FECMethod.MethodNotSet);
            locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet);
            locator.put_Modulation(ModulationType.ModNotSet);
            locator.put_OuterFEC(FECMethod.MethodNotSet);
            locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet);
            locator.put_SymbolRate(-1);
            tuningSpace.put_DefaultLocator(locator);
            ((ITuner)_dvbtNp).put_TuningSpace(tuningSpace);
        }
Beispiel #4
0
        private void createTuningSpace(TuningSpec tuningSpec)
        {
            switch (tuningSpec.Frequency.TunerType)
            {
                case TunerType.Satellite:
                {
                    LogMessage("Creating DVB Satellite tuning space");

                    tuningSpace = (ITuningSpace)new DVBSTuningSpace();

                    reply = tuningSpace.put_UniqueName("EPG Collector DVB-S Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_FriendlyName("EPG Collector DVB-S Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBSTuningSpace)tuningSpace).put_HighOscillator(((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBHighBandFrequency);
                    DsError.ThrowExceptionForHR(reply);

                    if (((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBSwitchFrequency != 0)
                        reply = ((IDVBSTuningSpace)tuningSpace).put_LNBSwitch(((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBSwitchFrequency);
                    else
                        reply = ((IDVBSTuningSpace)tuningSpace).put_LNBSwitch(20000000);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBSTuningSpace)tuningSpace).put_LowOscillator(((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBLowBandFrequency);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBSTuningSpace)tuningSpace).put_NetworkID(-1);
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put__NetworkType(new Guid("fa4b375a-45b4-4d45-8440-263957b11623"));
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBSTuningSpace)tuningSpace).put_SpectralInversion(SpectralInversion.NotSet);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Satellite);
                    DsError.ThrowExceptionForHR(reply);

                    LogMessage("Tuning Space LNB Low: " + ((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBLowBandFrequency.ToString());
                    LogMessage("Tuning Space LNB High: " + ((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBHighBandFrequency.ToString());
                    LogMessage("Tuning Space LNB Switch: " + ((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBSwitchFrequency.ToString());

                    reply = ((IDVBSTuningSpace)tuningSpace).put_DefaultLocator(getLocator(tuningSpec));
                    DsError.ThrowExceptionForHR(reply);

                    break;
                }
                case TunerType.Terrestrial:
                {
                    LogMessage("Creating DVB Terrestrial tuning space");

                    tuningSpace = (IDVBTuningSpace)new DVBTuningSpace();

                    reply = tuningSpace.put_UniqueName("EPG Collector DVB-T Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_FriendlyName("EPG Collector DVB-T Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put__NetworkType(new Guid("216c62df-6d7f-4e9a-8571-05f14edb766a"));
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Terrestrial);
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_DefaultLocator(getLocator(tuningSpec));
                    DsError.ThrowExceptionForHR(reply);

                    break;
                }
                case TunerType.Cable:
                {
                    LogMessage("Creating DVB Cable tuning space");

                    tuningSpace = (IDVBTuningSpace)new DVBTuningSpace();

                    reply = tuningSpace.put_UniqueName("EPG Collector DVB-C Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_FriendlyName("EPG Collector DVB-C Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put__NetworkType(typeof(DVBCNetworkProvider).GUID);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Cable);
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_DefaultLocator(getLocator(tuningSpec));
                    DsError.ThrowExceptionForHR(reply);

                    break;
                }
                case TunerType.ATSC:
                {
                    LogMessage("Creating ATSC Terrestrial tuning space");

                    tuningSpace = (IATSCTuningSpace)new ATSCTuningSpace();

                    reply = tuningSpace.put_UniqueName("EPG Collector ATSC Terrestrial Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_FriendlyName("EPG Collector ATSC Terrestrial Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put__NetworkType(typeof(ATSCNetworkProvider).GUID);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_InputType(TunerInputType.Antenna);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MaxMinorChannel(999);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MaxPhysicalChannel(69);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MaxChannel(99);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MinMinorChannel(-1);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MinPhysicalChannel(-1);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MinChannel(-1);
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_DefaultLocator(getLocator(tuningSpec));
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MaxPhysicalChannel(999);
                    DsError.ThrowExceptionForHR(reply);

                    LogMessage("Tuning Space Max Physical Channel: 69");

                    break;
                }
                case TunerType.ATSCCable:
                {
                    LogMessage("Creating ATSC Cable tuning space");

                    tuningSpace = (IATSCTuningSpace)new ATSCTuningSpace();

                    reply = tuningSpace.put_UniqueName("EPG Collector ATSC Cable Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_FriendlyName("EPG Collector ATSC Cable Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_InputType(TunerInputType.Cable);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MaxMinorChannel(999);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MaxPhysicalChannel(158);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MaxChannel(9999);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MinMinorChannel(-1);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MinPhysicalChannel(-1);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IATSCTuningSpace)tuningSpace).put_MinChannel(-1);
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put__NetworkType(typeof(ATSCNetworkProvider).GUID);
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_DefaultLocator(getLocator(tuningSpec));
                    DsError.ThrowExceptionForHR(reply);

                    LogMessage("Tuning Space Max Physical Channel: 158");

                    break;
                }
                case TunerType.ClearQAM:
                {
                    LogMessage("Creating Clear QAM tuning space");

                    tuningSpace = (IDigitalCableTuningSpace)new DigitalCableTuningSpace();

                    reply = tuningSpace.put_UniqueName("EPG Collector Clear QAM Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_FriendlyName("EPG Collector Clear QAM Tuning Space");
                        DsError.ThrowExceptionForHR(reply);

                    reply = ((IDigitalCableTuningSpace)tuningSpace).put_InputType(TunerInputType.Cable);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDigitalCableTuningSpace)tuningSpace).put_MaxChannel(9999);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDigitalCableTuningSpace)tuningSpace).put_MaxMajorChannel(99);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDigitalCableTuningSpace)tuningSpace).put_MaxMinorChannel(999);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDigitalCableTuningSpace)tuningSpace).put_MaxPhysicalChannel(158);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDigitalCableTuningSpace)tuningSpace).put_MaxSourceID(0x7fffffff);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDigitalCableTuningSpace)tuningSpace).put_MinChannel(-1);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDigitalCableTuningSpace)tuningSpace).put_MinMajorChannel(-1);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDigitalCableTuningSpace)tuningSpace).put_MinMinorChannel(-1);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDigitalCableTuningSpace)tuningSpace).put_MinPhysicalChannel(2);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDigitalCableTuningSpace)tuningSpace).put_MinSourceID(0);
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put__NetworkType(new Guid("143827ab-f77b-498d-81ca-5a007aec28bf"));
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_DefaultLocator(getLocator(tuningSpec));
                    DsError.ThrowExceptionForHR(reply);

                    LogMessage("Tuning Space Max Physical Channel: 158");

                    break;
                }
                case TunerType.ISDBS:
                {
                    LogMessage("Creating ISDB Satellite tuning space");

                    tuningSpace = (ITuningSpace)new DVBSTuningSpace();

                    reply = tuningSpace.put_UniqueName("EPG Collector ISDB-S Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_FriendlyName("EPG Collector ISDB-S Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBSTuningSpace)tuningSpace).put_HighOscillator(((ISDBSatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBHighBandFrequency);
                    DsError.ThrowExceptionForHR(reply);

                    if (((ISDBSatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBSwitchFrequency != 0)
                        reply = ((IDVBSTuningSpace)tuningSpace).put_LNBSwitch(((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBSwitchFrequency);
                    else
                        reply = ((IDVBSTuningSpace)tuningSpace).put_LNBSwitch(20000000);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBSTuningSpace)tuningSpace).put_LowOscillator(((ISDBSatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBLowBandFrequency);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBSTuningSpace)tuningSpace).put_NetworkID(-1);
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put__NetworkType(new Guid("b0a4e6a0-6a1a-4b83-bb5b-903e1d90e6b6"));
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBSTuningSpace)tuningSpace).put_SpectralInversion(SpectralInversion.NotSet);
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.ISDBS);
                    DsError.ThrowExceptionForHR(reply);

                    LogMessage("Tuning Space LNB Low: " + ((ISDBSatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBLowBandFrequency.ToString());
                    LogMessage("Tuning Space LNB High: " + ((ISDBSatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBHighBandFrequency.ToString());
                    LogMessage("Tuning Space LNB Switch: " + ((ISDBSatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBSwitchFrequency.ToString());

                    reply = ((IDVBSTuningSpace)tuningSpace).put_DefaultLocator(getLocator(tuningSpec));
                    DsError.ThrowExceptionForHR(reply);

                    break;
                }
                case TunerType.ISDBT:
                {
                    LogMessage("Creating ISDB Terrestrial tuning space");

                    tuningSpace = (IDVBTuningSpace)new DVBTuningSpace();

                    reply = tuningSpace.put_UniqueName("EPG Collector ISDB-T Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_FriendlyName("EPG Collector ISDB-T Tuning Space");
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put__NetworkType(new Guid("95037f6f-3ac7-4452-b6c4-45a9ce9292a2"));
                    DsError.ThrowExceptionForHR(reply);

                    reply = ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.ISDBT);
                    DsError.ThrowExceptionForHR(reply);

                    reply = tuningSpace.put_DefaultLocator(getLocator(tuningSpec));
                    DsError.ThrowExceptionForHR(reply);

                    break;
                }
            }
        }