示例#1
0
        public List <IChannel> Scan(IChannel channel, ScanParameters settings)
        {
            try
            {
                _channels.Clear();
                _sourcesWithoutNames.Clear();

                _tuner.IsScanning = true;
                _tuner.Scan(0, channel);
                _fdcService.SubscribeStateVariables(OnTableSection);
                Thread.Sleep(1000);

                _scanStage = ScanStage.Mgt;
                _mgtParser.OnTableDetail   += OnMgtTableDetail;
                _mgtParser.OnTableComplete += OnTableComplete;
                _fdcService.RequestTables(new List <byte> {
                    0xc7
                });
                _scanEvent.Reset();
                _scanEvent.WaitOne(1000);

                _scanStage = ScanStage.Nit;
                _nitParser.Reset();
                _nitParser.OnCarrierDefinition += OnCarrierDefinition;
                _nitParser.OnModulationMode    += OnModulationMode;
                _nitParser.OnTableComplete     += OnTableComplete;
                _fdcService.RequestTables(new List <byte> {
                    0xc2
                });
                _scanEvent.Reset();
                _scanEvent.WaitOne(_tuner.Parameters.TimeOutSDT * 1000);

                _scanStage = ScanStage.Vct;
                _svctParser.Reset();
                _svctParser.OnChannelDetail += OnSvctChannelDetail;
                _svctParser.OnTableComplete += OnTableComplete;
                _lvctParser.Reset();
                _lvctParser.OnChannelDetail += OnLvctChannelDetail;
                _lvctParser.OnTableComplete += OnTableComplete;
                _fdcService.RequestTables(new List <byte> {
                    0xc4, 0xc8, 0xc9
                });
                _scanEvent.Reset();
                _scanEvent.WaitOne(_tuner.Parameters.TimeOutSDT * 1000);

                _scanStage = ScanStage.Ntt;
                _nttParser.Reset();
                _nttParser.OnSourceName    += OnSourceName;
                _nttParser.OnTableComplete += OnTableComplete;
                _fdcService.RequestTables(new List <byte> {
                    0xc3
                });
                _scanEvent.Reset();
                _scanEvent.WaitOne(_tuner.Parameters.TimeOutSDT * 1000);

                foreach (int sourceId in _sourcesWithoutNames)
                {
                    Log.Log.Info("DRI CC: missing name for source 0x{0:x}", sourceId);
                    ATSCChannel atscChannel = _channels[sourceId];
                    if (atscChannel.MinorChannel != 0)
                    {
                        atscChannel.Name = string.Format("Unknown {0}-{1}", atscChannel.MajorChannel, atscChannel.MinorChannel);
                    }
                    else
                    {
                        atscChannel.Name = string.Format("Unknown {0} ({1}-{2})", atscChannel.LogicalChannelNumber, atscChannel.PhysicalChannel, atscChannel.ServiceId);
                    }
                }
            }
            finally
            {
                _tuner.IsScanning = false;
                _fdcService.UnsubscribeStateVariables();
            }
            return(_channels.Values.Select(x => (IChannel)x).ToList());
        }
示例#2
0
    public List<IChannel> Scan(IChannel channel, ScanParameters settings)
    {
      try
      {
        _channels.Clear();
        _sourcesWithoutNames.Clear();

        _tuner.IsScanning = true;
        _tuner.Scan(0, channel);
        _fdcService.SubscribeStateVariables(OnTableSection);
        Thread.Sleep(1000);

        _scanStage = ScanStage.Mgt;
        _mgtParser.OnTableDetail += OnMgtTableDetail;
        _mgtParser.OnTableComplete += OnTableComplete;
        _fdcService.RequestTables(new List<byte> { 0xc7 });
        _scanEvent.Reset();
        _scanEvent.WaitOne(1000);

        _scanStage = ScanStage.Nit;
        _nitParser.Reset();
        _nitParser.OnCarrierDefinition += OnCarrierDefinition;
        _nitParser.OnModulationMode += OnModulationMode;
        _nitParser.OnTableComplete += OnTableComplete;
        _fdcService.RequestTables(new List<byte> { 0xc2 });
        _scanEvent.Reset();
        _scanEvent.WaitOne(_tuner.Parameters.TimeOutSDT * 1000);

        _scanStage = ScanStage.Vct;
        _svctParser.Reset();
        _svctParser.OnChannelDetail += OnSvctChannelDetail;
        _svctParser.OnTableComplete += OnTableComplete;
        _lvctParser.Reset();
        _lvctParser.OnChannelDetail += OnLvctChannelDetail;
        _lvctParser.OnTableComplete += OnTableComplete;
        _fdcService.RequestTables(new List<byte> { 0xc4, 0xc8, 0xc9 });
        _scanEvent.Reset();
        _scanEvent.WaitOne(_tuner.Parameters.TimeOutSDT * 1000);

        _scanStage = ScanStage.Ntt;
        _nttParser.Reset();
        _nttParser.OnSourceName += OnSourceName;
        _nttParser.OnTableComplete += OnTableComplete;
        _fdcService.RequestTables(new List<byte> { 0xc3 });
        _scanEvent.Reset();
        _scanEvent.WaitOne(_tuner.Parameters.TimeOutSDT * 1000);

        foreach (int sourceId in _sourcesWithoutNames)
        {
          Log.Log.Info("DRI CC: missing name for source 0x{0:x}", sourceId);
          ATSCChannel atscChannel = _channels[sourceId];
          if (atscChannel.MinorChannel != 0)
          {
            atscChannel.Name = string.Format("Unknown {0}-{1}", atscChannel.MajorChannel, atscChannel.MinorChannel);
          }
          else
          {
            atscChannel.Name = string.Format("Unknown {0} ({1}-{2})", atscChannel.LogicalChannelNumber, atscChannel.PhysicalChannel, atscChannel.ServiceId);
          }
        }
      }
      finally
      {
        _tuner.IsScanning = false;
        _fdcService.UnsubscribeStateVariables();
      }
      return _channels.Values.Select(x => (IChannel)x).ToList();
    }