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()); }
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(); }