Пример #1
0
        private void StopThreads()
        {
            if (USBRX != null)
            {
                USBRX.CurrentMode = LibRXFFT.Libraries.eTransferMode.Stopped;
            }

            if (PowerUpdateThread != null)
            {
                PowerUpdateThread.Abort();
                PowerUpdateThread = null;
            }

            if (DemodDlg != null)
            {
                DemodDlg.Close();
                DemodDlg = null;
            }

            if (Demod != null)
            {
                Demod.AudioInSampleSource.Close();
                Demod.AudioOutShmem.Close();
                Demod.Stop();
                Demod = null;
            }

            if (USBRX != null)
            {
                USBRX.Close();
                USBRX = null;
            }
        }
Пример #2
0
        public virtual void CloseTuner()
        {
            DeviceClosed?.Invoke(this, EventArgs.Empty);

            if (Connected)
            {
                USBRX.Tuner.CloseTuner();
                USBRX.CurrentMode = eTransferMode.Stopped;
                USBRX.Close();
                USBRX = null;
                _SampleSource.Close();

                Connected = false;
            }

            Hide();
        }
Пример #3
0
        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (USBRX == null)
            {
                USBRXDevice device = new USBRXDevice();

                device.ShowConsole(false);
                device.TunerCombination = USBRXDevice.eCombinationType.AR5000;

                try
                {
                    if (!device.Init())
                    {
                        ErrorMessage = "There was no USB-RX found on USB bus.";
                        return;
                    }
                }
                catch (BadImageFormatException ex)
                {
                    ErrorMessage = "Unsupported architecture.";
                    return;
                }
                catch (Exception ex)
                {
                    ErrorMessage = "Unhandled exception." + Environment.NewLine + e;
                    return;
                }

                USBRX = device;

                FilterList.NCOFreq = USBRX.Atmel.TCXOFreq;
                FilterList.UpdateFilters("Filter");
                FilterList.AddFilters("..\\..\\..\\Filter");
                FilterList.FilterSelected += new EventHandler(FilterList_FilterSelected);

                frequencySelector1.UpperLimit = USBRX.Tuner.HighestFrequency;
                frequencySelector1.LowerLimit = USBRX.Tuner.LowestFrequency;

                /* bar update thread */
                InSampleSource            = new ShmemSampleSource("RX-Radio Reader", USBRX.ShmemChannel, 1, 0);
                InSampleSource.DataFormat = ByteUtil.eSampleFormat.Direct16BitIQFixedPointLE;
                PowerUpdateThread         = new Thread(() =>
                {
                    InSampleSource.SamplesPerBlock = 1024;
                    while (true)
                    {
                        InSampleSource.Flush();
                        InSampleSource.Read();

                        double maxValue = DBTools.MaximumDb(InSampleSource.SourceSamplesI, InSampleSource.SourceSamplesQ);
                        BeginInvoke(new Action(() =>
                        {
                            powerBar.Amplitude    = (maxValue + 100) / 100;
                            powerBar.LinePosition = (maxValue + 100) / 100;
                            powerBar.Enabled      = true;
                            powerBar.Invalidate();
                        }));

                        Thread.Sleep(250);
                    }
                });
                PowerUpdateThread.Start();

                /* demodulator */
                Demod = new AudioDemodulator();
                Demod.AudioInSampleSource            = new ShmemSampleSource("RX-FFT Audio Decoder", USBRX.ShmemChannel, 1, 0);
                Demod.AudioInSampleSource.DataFormat = ByteUtil.eSampleFormat.Direct16BitIQFixedPointLE;
                Demod.AudioOutShmem = new SharedMem(-2, 1, "RX-Radio Demodulated Audio");

                lock (Demod.DemodOptions)
                {
                    Demod.DemodOptions.SoundDevice = new DXSoundDevice(Handle);
                }
                Demod.Start();

                /* demodulator dialog */
                DemodDlg = new DemodulationDialog(Demod.DemodOptions);
                DemodDlg.Show();


                /* finished */
                USBRX.CurrentMode = LibRXFFT.Libraries.eTransferMode.Stopped;

                btnOpen.Text = "Close";
            }
            else
            {
                StopThreads();
                btnOpen.Text = "Open";
            }
        }
Пример #4
0
        public virtual bool OpenTuner()
        {
            /* display the wait message */
#if false
            WaitDialog waitDlg = new WaitDialog();
            waitDlg.Show();
            waitDlg.Refresh();
#endif

            USBRX = new USBRXDevice();
            //USBRX.ShowConsole(true);
            USBRX.TunerCombination = TunerCombination;

            try
            {
                if (!USBRX.Init())
                {
                    ErrorMessage = "Could not find USB-RX on USB.";
#if false
                    waitDlg.Close();
#endif
                    base.Close();
                    return(false);
                }
            }
            catch (BadImageFormatException e)
            {
                ErrorMessage = "Unsupported architecture.";
#if false
                waitDlg.Close();
#endif
                base.Close();
                return(false);
            }
            catch (Exception e)
            {
                ErrorMessage = "Unhandled exception." + Environment.NewLine + e;
#if false
                waitDlg.Close();
#endif
                base.Close();
                return(false);
            }
            ErrorMessage = "";

            FilterList.NCOFreq = USBRX.Atmel.TCXOFreq;
            FilterList.UpdateFilters("Filter");
            FilterList.AddFilters("..\\..\\..\\Filter");
            FilterList.FilterSelected += new EventHandler(FilterList_FilterSelected);

            USBRX.Tuner.SamplingRateChanged     += new EventHandler(Tuner_FilterRateChanged);
            USBRX.Tuner.FilterWidthChanged      += new EventHandler(Tuner_FilterWidthChanged);
            USBRX.Tuner.InvertedSpectrumChanged += new EventHandler(Tuner_InvertedSpectrumChanged);
            USBRX.Tuner.DeviceDisappeared       += new EventHandler(Tuner_DeviceDisappeared);

            frequencySelector1.UpperLimit = USBRX.Tuner.HighestFrequency;
            frequencySelector1.LowerLimit = USBRX.Tuner.LowestFrequency;
            CurrentFrequency = USBRX.Tuner.GetFrequency();
            SetFreqTextbox(CurrentFrequency);

            _SampleSource = new ShmemSampleSource("USB-RX Device Control", USBRX.ShmemChannel, 1, 0);
            _SampleSource.InvertedSpectrum = InvertedSpectrum;
            _SampleSource.DataFormat       = ByteUtil.eSampleFormat.Direct16BitIQFixedPointLE;

            ToolTip ttFreq = new ToolTip();
            ttFreq.SetToolTip(frequencySelector1, "Min Freq: " + FrequencyFormatter.FreqToStringAccurate(USBRX.Tuner.LowestFrequency) + Environment.NewLine + "Max Freq: " + FrequencyFormatter.FreqToStringAccurate(USBRX.Tuner.HighestFrequency));
            ttFreq.AutomaticDelay = 500;

            UpdateAtmelFilters();
            SelectFiles(true);

            Connected = true;

            /* small hack to select first (widest) filter */
            FilterList.FilterSelect(FilterList.FirstFilter);

            /* close wait dialog and show ours */
#if false
            waitDlg.Close();
#endif

            Show();

            radioAcqOff.Checked   = true;
            radioTunerInt.Checked = true;
            radioAgcOff.Checked   = true;
            chkAtt.Checked        = false;
            chkPreAmp.Checked     = false;

            radioTunerInt_CheckedChanged(null, null);
            chkAtt_CheckedChanged(null, null);
            chkPreAmp_CheckedChanged(null, null);
            radioAgcOff_CheckedChanged(null, null);

            radioAcqBlock.Checked = true;


            DeviceOpened?.Invoke(this, EventArgs.Empty);

            return(true);
        }