示例#1
0
        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();
                }
            }));
        }
示例#2
0
        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();
        }