private void getData(BDAGraph graph, DumpParameters dumpParameters, BackgroundWorker worker) { Logger.Instance.Write(string.Format("Starting dump to {0}", dumpParameters.FileName)); int[] newPids; if (dumpParameters.PidList != null && dumpParameters.PidList.Count != 0) { newPids = new int[dumpParameters.PidList.Count]; for (int index = 0; index < dumpParameters.PidList.Count; index++) { newPids[index] = dumpParameters.PidList[index]; } } else { newPids = new int[1]; newPids[0] = -1; } graph.ChangePidMapping(newPids); DateTime startTime = DateTime.Now; int lastSize = 0; while (!worker.CancellationPending) { Thread.Sleep(100); int increment = 5; if (dumpParameters.PidList != null && dumpParameters.PidList.Count != 0) { increment = 1; } int buffer_space = graph.BufferSpaceUsed / (1024 * 1024); if (buffer_space > 40) { graph.clear_buffer(); } int size = graph.DumpFileSize / (1024 * 1024); if (size >= lastSize + increment) { Logger.Instance.Write("Record/Buffer sizes: (" + size + "/" + buffer_space + ")"); worker.ReportProgress((int)size); lastSize = size; } } finalSize = graph.DumpFileSize; Logger.Instance.Write("Dump completed - file size now " + finalSize + " bytes"); }
private DumpParameters getDumpParameters() { DumpParameters dumpParameters = new DumpParameters(); dumpParameters.Tuners = frequencySelectionControl.Tuners; dumpParameters.ScanningFrequency = frequencySelectionControl.SelectedFrequency; if (dumpParameters.ScanningFrequency as SatelliteFrequency != null) { SatelliteFrequency satelliteFrequency = (SatelliteFrequency)dumpParameters.ScanningFrequency; satelliteFrequency.SatelliteDish = new SatelliteDish(); satelliteFrequency.SatelliteDish.LNBLowBandFrequency = frequencySelectionControl.LNBLowBandFrequency; satelliteFrequency.SatelliteDish.LNBHighBandFrequency = frequencySelectionControl.LNBHighBandFrequency; satelliteFrequency.SatelliteDish.LNBSwitchFrequency = frequencySelectionControl.LNBSwitchFrequency; satelliteFrequency.SatelliteDish.DiseqcSwitch = frequencySelectionControl.DiseqcSwitch; } dumpParameters.UseSignalPresent = frequencySelectionControl.UseSignalPresent; dumpParameters.SwitchAfterPlay = frequencySelectionControl.SwitchAfterPlay; dumpParameters.RepeatDiseqc = frequencySelectionControl.RepeatDiseqc; dumpParameters.SignalLockTimeout = (int)nudSignalLockTimeout.Value; dumpParameters.DataCollectionTimeout = (int)nudDataCollectionTimeout.Value; dumpParameters.PidList = pidList; string newFilePath = string.Format("{0}\\tsdump-{1}.ts", Path.GetPathRoot(txtOutputFile.Text), DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond); try { if (before_recording_complete_script_path.Text != null) { string val = ScriptRunner.run_before_start(newFilePath, get_active_tuner_idx(), before_recording_complete_script_path.Text); //MessageBox.Show(val); if (val != null) { newFilePath = val; } } } catch (Exception e) { MessageBox.Show(e.ToString()); } dumpParameters.FileName = newFilePath; return(dumpParameters); }
private void start_dump() { ChangeControlStatus(false); lblScanning.Text = "File size: 0Mb"; lblScanning.Visible = true; pbarProgress.Visible = true; pbarProgress.Enabled = true; workerDump = new BackgroundWorker(); workerDump.WorkerReportsProgress = true; workerDump.WorkerSupportsCancellation = true; workerDump.DoWork += new DoWorkEventHandler(doDump); workerDump.RunWorkerCompleted += new RunWorkerCompletedEventHandler(runWorkerCompleted); workerDump.ProgressChanged += new ProgressChangedEventHandler(progressChanged); last_dump_parameters = getDumpParameters(); workerDump.RunWorkerAsync(last_dump_parameters); }
private DumpParameters getDumpParameters() { DumpParameters dumpParameters = new DumpParameters(); dumpParameters.Tuners = frequencySelectionControl.Tuners; dumpParameters.ScanningFrequency = frequencySelectionControl.SelectedFrequency; if (dumpParameters.ScanningFrequency as SatelliteFrequency != null) { SatelliteFrequency satelliteFrequency = (SatelliteFrequency)dumpParameters.ScanningFrequency; satelliteFrequency.SatelliteDish = new SatelliteDish(); satelliteFrequency.SatelliteDish.LNBLowBandFrequency = frequencySelectionControl.LNBLowBandFrequency; satelliteFrequency.SatelliteDish.LNBHighBandFrequency = frequencySelectionControl.LNBHighBandFrequency; satelliteFrequency.SatelliteDish.LNBSwitchFrequency = frequencySelectionControl.LNBSwitchFrequency; satelliteFrequency.SatelliteDish.DiseqcSwitch = frequencySelectionControl.DiseqcSwitch; } dumpParameters.UseSignalPresent = frequencySelectionControl.UseSignalPresent; dumpParameters.SwitchAfterPlay = frequencySelectionControl.SwitchAfterPlay; dumpParameters.RepeatDiseqc = frequencySelectionControl.RepeatDiseqc; dumpParameters.SignalLockTimeout = (int)nudSignalLockTimeout.Value; dumpParameters.DataCollectionTimeout = (int)nudDataCollectionTimeout.Value; dumpParameters.PidList = pidList; string newFilePath = string.Format("{0}\\tsdump-{1}.ts", Path.GetPathRoot(txtOutputFile.Text), DateTime.Now.Ticks/TimeSpan.TicksPerMillisecond); try { if (before_recording_complete_script_path.Text != null) { string val = ScriptRunner.run_before_start(newFilePath, get_active_tuner_idx(), before_recording_complete_script_path.Text); //MessageBox.Show(val); if (val != null) newFilePath = val; } } catch(Exception e) { MessageBox.Show(e.ToString()); } dumpParameters.FileName = newFilePath; return (dumpParameters); }
private void getData(BDAGraph graph, DumpParameters dumpParameters, BackgroundWorker worker) { Logger.Instance.Write(string.Format("Starting dump to {0}",dumpParameters.FileName)); int[] newPids; if (dumpParameters.PidList != null && dumpParameters.PidList.Count != 0) { newPids = new int[dumpParameters.PidList.Count]; for (int index = 0; index < dumpParameters.PidList.Count; index++) newPids[index] = dumpParameters.PidList[index]; } else { newPids = new int[1]; newPids[0] = -1; } graph.ChangePidMapping(newPids); DateTime startTime = DateTime.Now; int lastSize = 0; while (!worker.CancellationPending) { Thread.Sleep(100); int increment = 5; if (dumpParameters.PidList != null && dumpParameters.PidList.Count != 0) increment = 1; int buffer_space = graph.BufferSpaceUsed/(1024*1024); if (buffer_space > 40) { graph.clear_buffer(); } int size = graph.DumpFileSize / (1024 * 1024); if (size >= lastSize + increment) { Logger.Instance.Write("Record/Buffer sizes: (" + size + "/"+buffer_space+")"); worker.ReportProgress((int)size); lastSize = size; } } finalSize = graph.DumpFileSize; Logger.Instance.Write("Dump completed - file size now " + finalSize + " bytes"); }
private string checkTuning(BDAGraph graph, DumpParameters dumpParameters, BackgroundWorker worker) { TimeSpan timeout = new TimeSpan(); bool done = false; bool locked = false; int frequencyRetries = 0; while (!done) { if (worker.CancellationPending) { Logger.Instance.Write("Dump abandoned by user"); return (null); } locked = graph.SignalLocked; if (!locked) { int signalQuality = graph.SignalQuality; if (signalQuality > 0) { Logger.Instance.Write("Signal not locked but signal quality > 0"); locked = true; done = true; } else { if (!dumpParameters.UseSignalPresent) { Logger.Instance.Write("Signal not locked and signal quality not > 0"); Thread.Sleep(1000); timeout = timeout.Add(new TimeSpan(0, 0, 1)); done = (timeout.TotalSeconds == dumpParameters.SignalLockTimeout); } else { bool signalPresent = graph.SignalPresent; if (signalPresent) { Logger.Instance.Write("Signal present"); locked = true; done = true; } else { Logger.Instance.Write("Signal not present"); Thread.Sleep(1000); timeout = timeout.Add(new TimeSpan(0, 0, 1)); done = (timeout.TotalSeconds == dumpParameters.SignalLockTimeout); } } if (done) { done = (frequencyRetries == 2); if (done) Logger.Instance.Write("<e> Failed to acquire signal"); else { Logger.Instance.Write("Retrying frequency"); timeout = new TimeSpan(); frequencyRetries++; } } } } else { Logger.Instance.Write("Signal acquired: lock is " + graph.SignalLocked + " quality is " + graph.SignalQuality + " strength is " + graph.SignalStrength); done = true; } } if (locked) return (null); else return ("<e> The tuner failed to acquire a signal for frequency " + dumpParameters.ScanningFrequency.ToString()); }
private string checkTuning(BDAGraph graph, DumpParameters dumpParameters, BackgroundWorker worker) { TimeSpan timeout = new TimeSpan(); bool done = false; bool locked = false; int frequencyRetries = 0; while (!done) { if (worker.CancellationPending) { Logger.Instance.Write("Dump abandoned by user"); return(null); } locked = graph.SignalLocked; if (!locked) { int signalQuality = graph.SignalQuality; if (signalQuality > 0) { Logger.Instance.Write("Signal not locked but signal quality > 0"); locked = true; done = true; } else { if (!dumpParameters.UseSignalPresent) { Logger.Instance.Write("Signal not locked and signal quality not > 0"); Thread.Sleep(1000); timeout = timeout.Add(new TimeSpan(0, 0, 1)); done = (timeout.TotalSeconds == dumpParameters.SignalLockTimeout); } else { bool signalPresent = graph.SignalPresent; if (signalPresent) { Logger.Instance.Write("Signal present"); locked = true; done = true; } else { Logger.Instance.Write("Signal not present"); Thread.Sleep(1000); timeout = timeout.Add(new TimeSpan(0, 0, 1)); done = (timeout.TotalSeconds == dumpParameters.SignalLockTimeout); } } if (done) { done = (frequencyRetries == 2); if (done) { Logger.Instance.Write("<e> Failed to acquire signal"); } else { Logger.Instance.Write("Retrying frequency"); timeout = new TimeSpan(); frequencyRetries++; } } } } else { Logger.Instance.Write("Signal acquired: lock is " + graph.SignalLocked + " quality is " + graph.SignalQuality + " strength is " + graph.SignalStrength); done = true; } } if (locked) { return(null); } else { return("<e> The tuner failed to acquire a signal for frequency " + dumpParameters.ScanningFrequency.ToString()); } }
private void doDump(object sender, DoWorkEventArgs e) { finalSize = -1; DumpParameters dumpParameters = e.Argument as DumpParameters; TunerNodeType tunerNodeType; TuningSpec tuningSpec; SatelliteFrequency satelliteFrequency = dumpParameters.ScanningFrequency as SatelliteFrequency; if (satelliteFrequency != null) { tunerNodeType = TunerNodeType.Satellite; tuningSpec = new TuningSpec((Satellite)satelliteFrequency.Provider, satelliteFrequency); } else { TerrestrialFrequency terrestrialFrequency = dumpParameters.ScanningFrequency as TerrestrialFrequency; if (terrestrialFrequency != null) { tunerNodeType = TunerNodeType.Terrestrial; tuningSpec = new TuningSpec(terrestrialFrequency); } else { CableFrequency cableFrequency = dumpParameters.ScanningFrequency as CableFrequency; if (cableFrequency != null) { tunerNodeType = TunerNodeType.Cable; tuningSpec = new TuningSpec(cableFrequency); } else { AtscFrequency atscFrequency = dumpParameters.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 = dumpParameters.ScanningFrequency as ClearQamFrequency; if (clearQamFrequency != null) { tunerNodeType = TunerNodeType.Cable; tuningSpec = new TuningSpec(clearQamFrequency); } else { ISDBSatelliteFrequency isdbSatelliteFrequency = dumpParameters.ScanningFrequency as ISDBSatelliteFrequency; if (isdbSatelliteFrequency != null) { tunerNodeType = TunerNodeType.ISDBS; tuningSpec = new TuningSpec((Satellite)satelliteFrequency.Provider, isdbSatelliteFrequency); } else { ISDBTerrestrialFrequency isdbTerrestrialFrequency = dumpParameters.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(dumpParameters.Tuners, tunerNodeType, tuningSpec, currentTuner, dumpParameters.RepeatDiseqc, dumpParameters.SwitchAfterPlay, dumpParameters.FileName); if (graph == null) { Logger.Instance.Write("<e> No tuner able to tune frequency " + dumpParameters.ScanningFrequency.ToString()); frequencySelectionControl.Invoke(new ShowMessage(showMessage), "No tuner able to tune frequency " + dumpParameters.ScanningFrequency.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); finished = true; } else { string tuneReply = checkTuning(graph, dumpParameters, 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 { getData(graph, dumpParameters, sender as BackgroundWorker); } catch (IOException ex) { Logger.Instance.Write("<e> Failed to create dump file"); Logger.Instance.Write("<e> " + ex.Message); frequencySelectionControl.Invoke(new ShowMessage(showMessage), "Failed to create dump file." + Environment.NewLine + Environment.NewLine + ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error); } graph.Dispose(); finished = true; } else { Logger.Instance.Write("Failed to tune frequency " + dumpParameters.ScanningFrequency.ToString()); graph.Dispose(); currentTuner = graph.Tuner; } } } e.Cancel = true; resetEvent.Set(); }
private void cmdScan_Click(object sender, EventArgs e) { if (cmdScan.Text == "Stop Dump") { Logger.Instance.Write("Stop dump requested"); workerDump.CancelAsync(); resetEvent.WaitOne(new TimeSpan(0, 0, 45)); cmdScan.Text = "Start Dump"; lblScanning.Visible = false; pbarProgress.Visible = false; pbarProgress.Enabled = false; if (last_dump_parameters != null) { string val = ScriptRunner.run_after_finish(last_dump_parameters.FileName, get_active_tuner_idx(), after_recording_complete_script_path.Text); } ChangeControlStatus(true); return; } if (!checkData()) { return; } DateTime st_time = DateTime.ParseExact(start_hour_textbox.Text, "HH:mm", CultureInfo.InvariantCulture); int hour = st_time.Hour; int minute = st_time.Minute; int second = 0; int current_second = -1; int current_minute = -1; int current_hour = -1; DumpParameters dp = getDumpParameters(); restart_times.Clear(); while (!(current_hour == hour && current_minute == minute && current_second == second)) { st_time = st_time.AddSeconds(dp.DataCollectionTimeout); current_hour = st_time.Hour; current_minute = st_time.Minute; current_second = st_time.Second; restart_times.Add(st_time.ToString("HHmmss")); // Logger.Instance.Write(string.Format("restart time: {0}",calc_time.ToString())); } Logger.Instance.Write("Dump started"); cmdScan.Text = "Stop Dump"; start_dump(); }