コード例 #1
0
    private void DetectSupportedLegacyAmFilterDevices(ref HashSet<string> previouslyKnownDevices, ref HashSet<string> knownDevices)
    {
      Log.Log.Debug("Detect legacy AM filter devices");
      TvBusinessLayer layer = new TvBusinessLayer();
      Setting setting = layer.GetSetting("iptvCardCount", "1");
      int iptvTunerCount = Convert.ToInt32(setting.Value);

      DsDevice[] connectedDevices = DsDevice.GetDevicesOfCat(FilterCategory.LegacyAmFilterCategory);
      foreach (DsDevice connectedDevice in connectedDevices)
      {
        string name = connectedDevice.Name;
        string devicePath = connectedDevice.DevicePath;
        if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(devicePath))
        {
          continue;
        }

        if (name.Equals("B2C2 MPEG-2 Source"))
        {
          knownDevices.Add(devicePath);
          if (!previouslyKnownDevices.Contains(devicePath))
          {
            uint numberOfTuners;
            List<DeviceInfo> deviceInfos;
            TvCardDvbB2C2.GetTunerInformation(out numberOfTuners, out deviceInfos);
            if (numberOfTuners > 0)
            {
              foreach (DeviceInfo singleDevice in deviceInfos)
              {
                TvCardDvbB2C2 tuner = new TvCardDvbB2C2(connectedDevice, singleDevice);
                _deviceEventListener.OnDeviceAdded(tuner);
              }
              Log.Log.Info("Detected new TechniSat *Star 2 tuner root device");
            }
          }
        }
        else if (name.Equals("Elecard NWSource-Plus"))
        {
          for (int i = 0; i < iptvTunerCount; i++)
          {
            TvCardDVBIP iptvTuner = new TvCardDVBIPElecard(connectedDevice, i);
            knownDevices.Add(iptvTuner.DevicePath);
            if (!previouslyKnownDevices.Contains(iptvTuner.DevicePath))
            {
              Log.Log.Info("Detected new Elecard IPTV tuner {0} {1}", iptvTuner.Name, iptvTuner.DevicePath);
              _deviceEventListener.OnDeviceAdded(iptvTuner);
            }
            else
            {
              iptvTuner.Dispose();
            }
          }
        }
        else if (name.Equals("MediaPortal IPTV Source Filter"))
        {
          for (int i = 0; i < iptvTunerCount; i++)
          {
            TvCardDVBIP iptvTuner = new TvCardDVBIPBuiltIn(connectedDevice, i);
            knownDevices.Add(iptvTuner.DevicePath);
            if (!previouslyKnownDevices.Contains(iptvTuner.DevicePath))
            {
              Log.Log.Info("Detected new MediaPortal IPTV tuner {0} {1}", iptvTuner.Name, iptvTuner.DevicePath);
              _deviceEventListener.OnDeviceAdded(iptvTuner);
            }
            else
            {
              iptvTuner.Dispose();
            }
          }
        }
      }
    }
コード例 #2
0
        //anysee _anysee = null;

        #endregion

        //ctor
        /// <summary>
        /// Initializes a new instance of the <see cref="ConditionalAccess"/> class.
        /// </summary>
        /// <param name="tunerFilter">The tuner filter.</param>
        /// <param name="analyzerFilter">The capture filter.</param>
        /// <param name="winTvUsbCiFilter">The WinTV CI filter.</param>
        /// <param name="card">Determines the type of TV card</param>
        public ConditionalAccess(IBaseFilter tunerFilter, IBaseFilter analyzerFilter, IBaseFilter winTvUsbCiFilter,
                                 TvCardBase card)
        {
            try
            {
                //System.Diagnostics.Debugger.Launch();
                if (card != null && card.DevicePath != null)
                {
                    //fetch decrypt limit from DB and apply it.
                    TvBusinessLayer layer = new TvBusinessLayer();
                    Card            c     = layer.GetCardByDevicePath(card.DevicePath);
                    _decryptLimit = c.DecryptLimit;
                    _useCam       = c.CAM;
                    _CamType      = (CamType)c.CamType;
                    Log.Log.WriteFile("CAM is {0} model", _CamType);
                }
                if (card is TvCardDvbB2C2)
                {
                    Log.Log.WriteFile("B2C2 card detected in ConditionalAccess");
                    _b2c2Card = card as TvCardDvbB2C2;
                }

                _mapSubChannels = new Dictionary <int, ConditionalAccessContext>();
                TunerDri driTuner = card as TunerDri;
                if (driTuner != null)
                {
                    _tunerDri = driTuner;
                    _ciMenu   = driTuner;
                }
                if (tunerFilter == null && analyzerFilter == null)
                {
                    return;
                }
                //DVB checks. Conditional Access & DiSEqC etc.
                bool isDVBS = (card is TvCardDVBS);
                bool isDVBT = (card is TvCardDVBT);
                bool isDVBC = (card is TvCardDVBC);

                if (isDVBC || isDVBS || isDVBT)
                {
                    Log.Log.WriteFile("Check for KNC");
                    // Lookup device index of current card. only counting KNC cards by device path
                    int DeviceIndex = KNCDeviceLookup.GetDeviceIndex(card);
                    _knc = new KNCAPI(tunerFilter, (uint)DeviceIndex);
                    if (_knc.IsKNC)
                    {
                        //if (_knc.IsCamReady())
                        _ciMenu = _knc; // Register KNC CI Menu capabilities when CAM detected and ready
                        Log.Log.WriteFile("KNC card detected");
                        return;
                    }
                    Release.DisposeToNull(ref _knc);

                    Log.Log.WriteFile("Check for Digital Everywhere");
                    _digitalEveryWhere = new DigitalEverywhere(tunerFilter);
                    if (_digitalEveryWhere.IsDigitalEverywhere)
                    {
                        Log.Log.WriteFile("Digital Everywhere card detected");
                        _diSEqCMotor = new DiSEqCMotor(_digitalEveryWhere);

                        if (_digitalEveryWhere.IsCamReady())
                        {
                            Log.Log.WriteFile("Digital Everywhere registering CI menu capabilities");
                            _ciMenu = _digitalEveryWhere; // Register FireDTV CI Menu capabilities when CAM detected and ready
                        }
                        //_digitalEveryWhere.ResetCAM();
                        return;
                    }
                    Release.DisposeToNull(ref _digitalEveryWhere);

                    Log.Log.WriteFile("Check for Twinhan");
                    _twinhan = new Twinhan(tunerFilter);
                    if (_twinhan.IsTwinhan)
                    {
                        Log.Log.WriteFile("Twinhan card detected");
                        _diSEqCMotor = new DiSEqCMotor(_twinhan);
                        Log.Log.WriteFile("Twinhan registering CI menu capabilities");
                        _ciMenu = _twinhan; // Register Twinhan CI Menu capabilities when CAM detected and ready
                        return;
                    }
                    Release.DisposeToNull(ref _twinhan);

                    Log.Log.WriteFile("Check for TechnoTrend");
                    _technoTrend = new TechnoTrendAPI(tunerFilter);
                    if (_technoTrend.IsTechnoTrend)
                    {
                        ////if (_technoTrend.IsCamPresent())
                        _ciMenu = _technoTrend; // Register Technotrend CI Menu capabilities
                        Log.Log.WriteFile("TechnoTrend card detected");
                        return;
                    }
                    Release.DisposeToNull(ref _technoTrend);

                    Log.Log.WriteFile("Check for Hauppauge");
                    _hauppauge = new Hauppauge(tunerFilter);
                    if (_hauppauge.IsHauppauge)
                    {
                        Log.Log.WriteFile("Hauppauge card detected");
                        Log.Log.WriteFile("Check for Hauppauge WinTV CI");
                        if (winTvUsbCiFilter != null)
                        {
                            Log.Log.WriteFile("WinTV CI detected in graph - using capabilities...");
                            _winTvCiModule = new WinTvCiModule(winTvUsbCiFilter);

                            Log.Log.WriteFile("WinTV CI registering CI menu capabilities");
                            _ciMenu = _winTvCiModule; // WinTv CI Menu capabilities
                        }
                        _diSEqCMotor = new DiSEqCMotor(_hauppauge);
                        return;
                    }
                    Release.DisposeToNull(ref _hauppauge);
                    Release.DisposeToNull(ref _winTvCiModule);

                    /*Log.Log.Info("Check for anysee");
                     * _anysee = new anysee(tunerFilter, analyzerFilter);
                     * if (_anysee.Isanysee)
                     * {
                     * Log.Log.Info("anysee device detected");
                     * return;
                     * }*/

                    Log.Log.WriteFile("Check for ProfRed");
                    _profred = new ProfRed(tunerFilter);
                    if (_profred.IsProfRed)
                    {
                        Log.Log.WriteFile("ProfRed card detected");
                        _diSEqCMotor = new DiSEqCMotor(_profred);
                        return;
                    }
                    Release.DisposeToNull(ref _profred);

                    // TeVii support
                    _TeVii = new TeVii();
                    _TeVii.Init(tunerFilter);
                    _TeVii.DevicePath = card.DevicePath;
                    Log.Log.WriteFile("Check for {0}", _TeVii.Provider);
                    _TeVii.CheckAndOpen();
                    if (_TeVii.IsSupported)
                    {
                        _diSEqCMotor = new DiSEqCMotor(_TeVii);
                        _HWProvider  = _TeVii;
                        Log.Log.WriteFile("Check for Hauppauge WinTV CI");
                        if (winTvUsbCiFilter != null)
                        {
                            Log.Log.WriteFile("WinTV CI detected in graph - using capabilities...");
                            _winTvCiModule = new WinTvCiModule(winTvUsbCiFilter);
                        }
                        return;
                    }
                    Release.DisposeToNull(ref _TeVii);

                    // DigitalDevices support
                    _DigitalDevices = new DigitalDevices(tunerFilter);
                    if (_DigitalDevices.IsGenericBDAS)
                    {
                        _genericbdas = _DigitalDevices;
                        if (_DigitalDevices.IsSupported)
                        {
                            _ciMenu = _DigitalDevices;
                        }
                        return; // detected
                    }
                    Release.DisposeToNull(ref _DigitalDevices);

                    Log.Log.WriteFile("Check for Conexant based card");
                    _conexant = new ConexantBDA(tunerFilter);
                    if (_conexant.IsConexant)
                    {
                        Log.Log.WriteFile("Conexant BDA card detected");
                        Log.Log.WriteFile("Check for Hauppauge WinTV CI");
                        if (winTvUsbCiFilter != null)
                        {
                            Log.Log.WriteFile("WinTV CI detected in graph - using capabilities...");
                            _winTvCiModule = new WinTvCiModule(winTvUsbCiFilter);
                        }
                        return;
                    }
                    Release.DisposeToNull(ref _conexant);
                    Release.DisposeToNull(ref _winTvCiModule);

                    Log.Log.WriteFile("Check for GenPix BDA based card");
                    _genpix = new GenPixBDA(tunerFilter);
                    if (_genpix.IsGenPix)
                    {
                        Log.Log.WriteFile("GenPix BDA card detected");
                        Log.Log.WriteFile("Check for Hauppauge WinTV CI");
                        if (winTvUsbCiFilter != null)
                        {
                            Log.Log.WriteFile("WinTV CI detected in graph - using capabilities...");
                            _winTvCiModule = new WinTvCiModule(winTvUsbCiFilter);
                        }
                        return;
                    }
                    Release.DisposeToNull(ref _genpix);
                    Release.DisposeToNull(ref _winTvCiModule);

                    Log.Log.WriteFile("Check for Generic DVB-S card");
                    _genericbdas = new GenericBDAS(tunerFilter);
                    if (_genericbdas.IsGenericBDAS)
                    {
                        Log.Log.WriteFile("Generic BDA card detected");
                        Log.Log.WriteFile("Check for Hauppauge WinTV CI");
                        if (winTvUsbCiFilter != null)
                        {
                            Log.Log.WriteFile("WinTV CI detected in graph - using capabilities...");
                            _winTvCiModule = new WinTvCiModule(winTvUsbCiFilter);
                        }
                        return;
                    }
                    Release.DisposeToNull(ref _genericbdas);

                    //Final WinTV-CI check for DVB-T hybrid cards
                    Log.Log.WriteFile("Check for Hauppauge WinTV CI");
                    if (winTvUsbCiFilter != null)
                    {
                        Log.Log.WriteFile("WinTV CI detected in graph - using capabilities...");
                        _winTvCiModule = new WinTvCiModule(winTvUsbCiFilter);
                        return;
                    }
                    Release.DisposeToNull(ref _winTvCiModule);
                }

                //ATSC checks
                bool isATSC = (card is TvCardATSC);
                if (isATSC)
                {
                    Log.Log.WriteFile("Check for ViXS ATSC QAM card");
                    _isvixsatsc = new ViXSATSC(tunerFilter);
                    if (_isvixsatsc.IsViXSATSC)
                    {
                        Log.Log.WriteFile("ViXS ATSC QAM card detected");
                        return;
                    }
                    Release.DisposeToNull(ref _isvixsatsc);

                    Log.Log.WriteFile("Check for Generic ATSC QAM card");
                    _isgenericatsc = new GenericATSC(tunerFilter);
                    if (_isgenericatsc.IsGenericATSC)
                    {
                        Log.Log.WriteFile("Generic ATSC QAM card detected");
                        return;
                    }
                    Release.DisposeToNull(ref _isgenericatsc);
                }
            }
            catch (Exception ex)
            {
                Log.Log.Write(ex);
            }
        }