private void doAnalysis(object sender, DoWorkEventArgs e) { AnalysisParameters analysisParameters = e.Argument as AnalysisParameters; pidList = null; TunerNodeType tunerNodeType; TuningSpec tuningSpec; SatelliteFrequency satelliteFrequency = analysisParameters.ScanningFrequency as SatelliteFrequency; if (satelliteFrequency != null) { tunerNodeType = TunerNodeType.Satellite; tuningSpec = new TuningSpec((Satellite)satelliteFrequency.Provider, satelliteFrequency); } else { TerrestrialFrequency terrestrialFrequency = analysisParameters.ScanningFrequency as TerrestrialFrequency; if (terrestrialFrequency != null) { tunerNodeType = TunerNodeType.Terrestrial; tuningSpec = new TuningSpec(terrestrialFrequency); } else { CableFrequency cableFrequency = analysisParameters.ScanningFrequency as CableFrequency; if (cableFrequency != null) { tunerNodeType = TunerNodeType.Cable; tuningSpec = new TuningSpec(cableFrequency); } else { AtscFrequency atscFrequency = analysisParameters.ScanningFrequency as AtscFrequency; if (atscFrequency != null) { if (atscFrequency.TunerType == TunerType.ATSC) { tunerNodeType = TunerNodeType.ATSC; } else { tunerNodeType = TunerNodeType.Cable; } tuningSpec = new TuningSpec(atscFrequency); } else { ClearQamFrequency clearQamFrequency = analysisParameters.ScanningFrequency as ClearQamFrequency; if (clearQamFrequency != null) { tunerNodeType = TunerNodeType.Cable; tuningSpec = new TuningSpec(clearQamFrequency); } else { ISDBSatelliteFrequency isdbSatelliteFrequency = analysisParameters.ScanningFrequency as ISDBSatelliteFrequency; if (isdbSatelliteFrequency != null) { tunerNodeType = TunerNodeType.ISDBS; tuningSpec = new TuningSpec((Satellite)satelliteFrequency.Provider, isdbSatelliteFrequency); } else { ISDBTerrestrialFrequency isdbTerrestrialFrequency = analysisParameters.ScanningFrequency as ISDBTerrestrialFrequency; if (isdbTerrestrialFrequency != null) { tunerNodeType = TunerNodeType.ISDBT; tuningSpec = new TuningSpec(isdbTerrestrialFrequency); } else { throw (new InvalidOperationException("Tuning frequency not recognized")); } } } } } } } Tuner currentTuner = null; bool finished = false; while (!finished) { if ((sender as BackgroundWorker).CancellationPending) { Logger.Instance.Write("Scan abandoned by user"); e.Cancel = true; resetEvent.Set(); return; } BDAGraph graph = BDAGraph.FindTuner(analysisParameters.Tuners, tunerNodeType, tuningSpec, currentTuner, analysisParameters.RepeatDiseqc, analysisParameters.SwitchAfterPlay); if (graph == null) { Logger.Instance.Write("<e> No tuner able to tune frequency " + analysisParameters.ScanningFrequency.ToString()); frequencySelectionControl.Invoke(new ShowMessage(showMessage), "No tuner able to tune frequency " + analysisParameters.ScanningFrequency.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); finished = true; } else { string tuneReply = checkTuning(graph, analysisParameters, sender as BackgroundWorker); if ((sender as BackgroundWorker).CancellationPending) { Logger.Instance.Write("Scan abandoned by user"); graph.Dispose(); e.Cancel = true; resetEvent.Set(); return; } if (tuneReply == null) { try { if (analysisParameters.DumpFileName == null || analysisParameters.DumpFileName == string.Empty) { getData(graph, analysisParameters, sender as BackgroundWorker); } else { SimulationDataProvider dataProvider = new SimulationDataProvider(analysisParameters.DumpFileName, graph.Frequency); string providerReply = dataProvider.Run(); if (providerReply != null) { Logger.Instance.Write("<e> Simulation Data Provider failed"); Logger.Instance.Write("<e> " + providerReply); frequencySelectionControl.Invoke(new ShowMessage(showMessage), "Simulation Data Provider failed." + Environment.NewLine + Environment.NewLine + providerReply, MessageBoxButtons.OK, MessageBoxIcon.Error); } else { getData(dataProvider, analysisParameters, sender as BackgroundWorker); dataProvider.Stop(); } } } catch (IOException ex) { Logger.Instance.Write("<e> Failed to process dump file"); Logger.Instance.Write("<e> " + ex.Message); frequencySelectionControl.Invoke(new ShowMessage(showMessage), "Failed to process dump file." + Environment.NewLine + Environment.NewLine + ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error); } graph.Dispose(); finished = true; } else { Logger.Instance.Write("Failed to tune frequency " + analysisParameters.ScanningFrequency.ToString()); graph.Dispose(); currentTuner = graph.Tuner; } } } e.Cancel = true; resetEvent.Set(); }
/// <summary> /// Initialize a new instance of the TuningSpec class for a ISDB errestrial frequency. /// </summary> /// <param name="frequency">The terrestrial frequency to tune to.</param> public TuningSpec(ISDBTerrestrialFrequency frequency) { this.frequency = frequency; bandwidth = frequency.Bandwidth; }