public BlockScanViewModel(RadioModel model, RadioViewModel view) { _model = model; _mainView = view; _model.Radio.BlockScanner().FrequencyScanned += BlockScanViewModel_FrequencyScanned; _model.Radio.BlockScanner().ScanFinished += BlockScanViewModel_ScanFinished; FromValue = (uint)_model.Radio.CachedInfo.MinFrequency; ToValue = (uint)_model.Radio.CachedInfo.MaxFrequency; SquelchValue = -85; ScanInfo = OFFLINE; CommandScan = new DelegateCommand(() => TaskUtility.Run(() => { if (ScanState) { _model.PauseStreams(); _model.Radio.BlockScanner().Start(FrequncyCollection()); } else { _model.Radio.BlockScanner().Stop(); } })); }
private void StartSweep() { if (_sweeper != null) { _sweeper.Stop(); return; } SweepState = true; _sweeper = _model.Radio.Sweeper( _model.Radio.SweepParametersDefault(FromValue, ToValue) .SetPrecision(PrecisionValue) .SetIfGain(_model.Radio.IfGain())); var samples = _sweeper.SampleCount(); if (samples < 1000) { _sweeper = null; SweepState = false; return; } _mainView.SweeperAnalyzer.Clear(); _mainView.SweeperAnalyzer.ReInitialize(FromValue / 1000000.0, ToValue / 1000000.0, samples); //_mainView.SweeperAnalyzer.SelectedValueChanged += SweeperAnalyzer_SelectedValueChanged; _sweeper.FrequencySweeped += (s, e) => { _mainView.SpectrumAnalyzer.Clear(); _mainView.SweeperAnalyzer.Update(e); }; _sweeper.SweepFinished += (s, e) => { SweepState = false; TaskUtility.Run(() => { _model.FftAnalyzer.Stop(); //free buffer _model.FftAnalyzer.Start(); if (_mainView.MuteState) { return; } _model.LiveAudio.Stop(); //free buffer _model.LiveAudio.Play(); }); _sweeper = null; GC.Collect(); }; _model.PauseStreams(); _mainView.SpectrumAnalyzer.Clear(); _sweeper.LoopAsync(); }