mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-06-04 16:02:25 -04:00
WDSP receiver: FM options
This commit is contained in:
parent
8b10dd05ff
commit
ffef9ab48f
@ -36,6 +36,8 @@ if(NOT SERVER_MODE)
|
|||||||
wdsprxdnbdialog.ui
|
wdsprxdnbdialog.ui
|
||||||
wdsprxdnrdialog.cpp
|
wdsprxdnrdialog.cpp
|
||||||
wdsprxdnrdialog.ui
|
wdsprxdnrdialog.ui
|
||||||
|
wdsprxfmdialog.cpp
|
||||||
|
wdsprxfmdialog.ui
|
||||||
wdsprxgui.cpp
|
wdsprxgui.cpp
|
||||||
wdsprxgui.ui
|
wdsprxgui.ui
|
||||||
)
|
)
|
||||||
@ -47,6 +49,7 @@ if(NOT SERVER_MODE)
|
|||||||
wdsprxcwpeakdialog.h
|
wdsprxcwpeakdialog.h
|
||||||
wdsprxdnbdialog.h
|
wdsprxdnbdialog.h
|
||||||
wdsprxdnrdialog.h
|
wdsprxdnrdialog.h
|
||||||
|
wdsprxfmdialog.h
|
||||||
)
|
)
|
||||||
set(TARGET_NAME wdsprx)
|
set(TARGET_NAME wdsprx)
|
||||||
set(TARGET_LIB "Qt::Widgets")
|
set(TARGET_LIB "Qt::Widgets")
|
||||||
|
153
plugins/channelrx/wdsprx/wdsprxfmdialog.cpp
Normal file
153
plugins/channelrx/wdsprx/wdsprxfmdialog.cpp
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Copyright (C) 2024 Edouard Griffiths, F4EXB <f4exb06@gmail.com> //
|
||||||
|
// //
|
||||||
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
// it under the terms of the GNU General Public License as published by //
|
||||||
|
// the Free Software Foundation as version 3 of the License, or //
|
||||||
|
// (at your option) any later version. //
|
||||||
|
// //
|
||||||
|
// This program is distributed in the hope that it will be useful, //
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||||
|
// GNU General Public License V3 for more details. //
|
||||||
|
// //
|
||||||
|
// You should have received a copy of the GNU General Public License //
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
#include "dsp/ctcssfrequencies.h"
|
||||||
|
#include "wdsprxfmdialog.h"
|
||||||
|
#include "ui_wdsprxfmdialog.h"
|
||||||
|
|
||||||
|
WDSPRxFMDialog::WDSPRxFMDialog(QWidget* parent) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::WDSPRxFMDialog)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
for (int i = 0; i < CTCSSFrequencies::m_nbFreqs; i++) {
|
||||||
|
ui->ctcssNotchFrequency->addItem(QString("%1").arg((double) CTCSSFrequencies::m_Freqs[i], 0, 'f', 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WDSPRxFMDialog::~WDSPRxFMDialog()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::setDeviation(double deviation)
|
||||||
|
{
|
||||||
|
ui->deviation->blockSignals(true);
|
||||||
|
ui->deviation->setValue((int) round(deviation/100.0));
|
||||||
|
ui->deviationText->setText(QString("%1").arg(deviation/1000.0, 0, 'f', 1));
|
||||||
|
ui->deviation->blockSignals(false);
|
||||||
|
m_deviation = deviation;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::setAFLow(double afLow)
|
||||||
|
{
|
||||||
|
ui->afLow->blockSignals(true);
|
||||||
|
ui->afLow->setValue((int) round(afLow/100.0));
|
||||||
|
ui->afLowText->setText(QString("%1").arg(afLow/1000.0, 0, 'f', 1));
|
||||||
|
ui->afLow->blockSignals(false);
|
||||||
|
m_afLow = afLow;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::setAFHigh(double afHigh)
|
||||||
|
{
|
||||||
|
ui->afHigh->blockSignals(true);
|
||||||
|
ui->afHigh->setValue((int) round(afHigh/100.0));
|
||||||
|
ui->afHighText->setText(QString("%1").arg(afHigh/1000.0, 0, 'f', 1));
|
||||||
|
ui->afHigh->blockSignals(false);
|
||||||
|
m_afHigh = afHigh;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::setAFLimiter(bool afLimiter)
|
||||||
|
{
|
||||||
|
ui->afLimiter->blockSignals(true);
|
||||||
|
ui->afLimiter->setChecked(afLimiter);
|
||||||
|
ui->afLimiter->blockSignals(false);
|
||||||
|
m_afLimiter = afLimiter;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::setAFLimiterGain(double gain)
|
||||||
|
{
|
||||||
|
ui->afLimiterGain->blockSignals(true);
|
||||||
|
ui->afLimiterGain->setValue((int) gain);
|
||||||
|
ui->afLimiterGainText->setText(QString("%1").arg(gain, 0, 'f', 0));
|
||||||
|
ui->afLimiterGain->blockSignals(false);
|
||||||
|
m_afLimiterGain = gain;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::setCTCSSNotch(bool notch)
|
||||||
|
{
|
||||||
|
ui->ctcssNotch->blockSignals(true);
|
||||||
|
ui->ctcssNotch->setChecked(notch);
|
||||||
|
ui->ctcssNotch->blockSignals(false);
|
||||||
|
m_ctcssNotch = notch;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::setCTCSSNotchFrequency(double frequency)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for (; i < CTCSSFrequencies::m_nbFreqs; i++)
|
||||||
|
{
|
||||||
|
if (frequency <= CTCSSFrequencies::m_Freqs[i]) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->ctcssNotchFrequency->blockSignals(true);
|
||||||
|
ui->ctcssNotchFrequency->setCurrentIndex(i);
|
||||||
|
ui->ctcssNotchFrequency->blockSignals(false);
|
||||||
|
m_ctcssNotchFrequency = CTCSSFrequencies::m_Freqs[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::on_deviation_valueChanged(int value)
|
||||||
|
{
|
||||||
|
m_deviation = value * 100.0;
|
||||||
|
ui->deviationText->setText(QString("%1").arg(value/10.0, 0, 'f', 1));
|
||||||
|
emit valueChanged(ChangedDeviation);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::on_afLow_valueChanged(int value)
|
||||||
|
{
|
||||||
|
m_afLow = value * 100.0;
|
||||||
|
ui->afLowText->setText(QString("%1").arg(value/10.0, 0, 'f', 1));
|
||||||
|
emit valueChanged(ChangedAFLow);
|
||||||
|
}
|
||||||
|
void WDSPRxFMDialog::on_afHigh_valueChanged(int value)
|
||||||
|
{
|
||||||
|
m_afHigh = value * 100.0;
|
||||||
|
ui->afHighText->setText(QString("%1").arg(value/10.0, 0, 'f', 1));
|
||||||
|
emit valueChanged(ChangedAFHigh);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::on_afLimiter_clicked(bool checked)
|
||||||
|
{
|
||||||
|
m_afLimiter = checked;
|
||||||
|
emit valueChanged(ChangedAFLimiter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::on_afLimiterGain_valueChanged(int value)
|
||||||
|
{
|
||||||
|
m_afLimiterGain = (double) value;
|
||||||
|
ui->afLimiterGainText->setText(QString("%1").arg(value));
|
||||||
|
emit valueChanged(ChangedAFLimiterGain);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::on_ctcssNotch_clicked(bool checked)
|
||||||
|
{
|
||||||
|
m_ctcssNotch = checked;
|
||||||
|
emit valueChanged(ChangedCTCSSNotch);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WDSPRxFMDialog::on_ctcssNotchFrequency_valueChanged(int value)
|
||||||
|
{
|
||||||
|
if (value > CTCSSFrequencies::m_nbFreqs) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_ctcssNotchFrequency = CTCSSFrequencies::m_Freqs[value];
|
||||||
|
emit valueChanged(ChangedCTCSSNotchFrequency);
|
||||||
|
}
|
83
plugins/channelrx/wdsprx/wdsprxfmdialog.h
Normal file
83
plugins/channelrx/wdsprx/wdsprxfmdialog.h
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Copyright (C) 2024 Edouard Griffiths, F4EXB <f4exb06@gmail.com> //
|
||||||
|
// //
|
||||||
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
// it under the terms of the GNU General Public License as published by //
|
||||||
|
// the Free Software Foundation as version 3 of the License, or //
|
||||||
|
// (at your option) any later version. //
|
||||||
|
// //
|
||||||
|
// This program is distributed in the hope that it will be useful, //
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||||
|
// GNU General Public License V3 for more details. //
|
||||||
|
// //
|
||||||
|
// You should have received a copy of the GNU General Public License //
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
#ifndef INCLUDE_WDSPRXFMDIALOG_H
|
||||||
|
#define INCLUDE_WDSPRXFMDIALOG_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
|
||||||
|
#include "export.h"
|
||||||
|
#include "wdsprxsettings.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class WDSPRxFMDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
class SDRGUI_API WDSPRxFMDialog : public QDialog {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
enum ValueChanged {
|
||||||
|
ChangedDeviation,
|
||||||
|
ChangedAFLow,
|
||||||
|
ChangedAFHigh,
|
||||||
|
ChangedAFLimiter,
|
||||||
|
ChangedAFLimiterGain,
|
||||||
|
ChangedCTCSSNotch,
|
||||||
|
ChangedCTCSSNotchFrequency,
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit WDSPRxFMDialog(QWidget* parent = nullptr);
|
||||||
|
~WDSPRxFMDialog();
|
||||||
|
|
||||||
|
void setDeviation(double deviation);
|
||||||
|
void setAFLow(double afLow);
|
||||||
|
void setAFHigh(double afHigh);
|
||||||
|
void setAFLimiter(bool afLimiter);
|
||||||
|
void setAFLimiterGain(double gain);
|
||||||
|
void setCTCSSNotch(bool notch);
|
||||||
|
void setCTCSSNotchFrequency(double frequency);
|
||||||
|
|
||||||
|
double getDeviation() const { return m_deviation; }
|
||||||
|
double getAFLow() const { return m_afLow; }
|
||||||
|
double getAFHigh() const { return m_afHigh; }
|
||||||
|
bool getAFLimiter() const { return m_afLimiter; }
|
||||||
|
double getAFLimiterGain() const { return m_afLimiterGain; }
|
||||||
|
bool getCTCSSNotch() const { return m_ctcssNotch; }
|
||||||
|
double getCTCSSNotchFrequency() { return m_ctcssNotchFrequency; }
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void valueChanged(int valueChanged);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::WDSPRxFMDialog *ui;
|
||||||
|
double m_deviation;
|
||||||
|
double m_afLow;
|
||||||
|
double m_afHigh;
|
||||||
|
bool m_afLimiter;
|
||||||
|
double m_afLimiterGain;
|
||||||
|
bool m_ctcssNotch;
|
||||||
|
double m_ctcssNotchFrequency;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_deviation_valueChanged(int value);
|
||||||
|
void on_afLow_valueChanged(int value);
|
||||||
|
void on_afHigh_valueChanged(int value);
|
||||||
|
void on_afLimiter_clicked(bool checked);
|
||||||
|
void on_afLimiterGain_valueChanged(int value);
|
||||||
|
void on_ctcssNotch_clicked(bool checked);
|
||||||
|
void on_ctcssNotchFrequency_valueChanged(int value);
|
||||||
|
};
|
||||||
|
#endif
|
395
plugins/channelrx/wdsprx/wdsprxfmdialog.ui
Normal file
395
plugins/channelrx/wdsprx/wdsprxfmdialog.ui
Normal file
@ -0,0 +1,395 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>WDSPRxFMDialog</class>
|
||||||
|
<widget class="QDialog" name="WDSPRxFMDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>304</width>
|
||||||
|
<height>198</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>FM Options</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="deviaitonLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="deviationLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Dev (kHz)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDial" name="deviation">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>FM deviation (kHz)</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>200</number>
|
||||||
|
</property>
|
||||||
|
<property name="pageStep">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>35</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="deviationText">
|
||||||
|
<property name="text">
|
||||||
|
<string>20.0</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="afLowLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="afLowLabel">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>60</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>AF low</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="TickedSlider" name="afLow">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>16</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>AF low pass filter cutoff frequency (kHz)</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>50</number>
|
||||||
|
</property>
|
||||||
|
<property name="pageStep">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>3</number>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="invertedAppearance">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="tickPosition">
|
||||||
|
<enum>QSlider::NoTicks</enum>
|
||||||
|
</property>
|
||||||
|
<property name="tickInterval">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="afLowText">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>0.3k</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="afHighLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="afHighLabel">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>60</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>80</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>AF High</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="TickedSlider" name="afHigh">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>16</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>AF high pass filter cutoff frequency (kHz)</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>50</number>
|
||||||
|
</property>
|
||||||
|
<property name="pageStep">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="tickPosition">
|
||||||
|
<enum>QSlider::TicksBelow</enum>
|
||||||
|
</property>
|
||||||
|
<property name="tickInterval">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="afHighText">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>3.0k</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="afLimiterLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="afLimiter">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>AF volume limiter</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>AF Limiter</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="afLimiterGainLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string> Gain (dB)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDial" name="afLimiterGain">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>24</width>
|
||||||
|
<height>24</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>AF volume limter gain (dB)</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
|
<property name="pageStep">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="afLimiterGainText">
|
||||||
|
<property name="text">
|
||||||
|
<string>20</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="ctcssNotchLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="ctcssNotch">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>CTCSS Notch filter</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>CTCSS Notch</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="ctcssNotchFrequencyLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Freq (Hz)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="ctcssNotchFrequency">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>CTCSS Notch frequency (Hz)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Close</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>TickedSlider</class>
|
||||||
|
<extends>QSlider</extends>
|
||||||
|
<header>gui/tickedslider.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>WDSPRxFMDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>WDSPRxFMDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
@ -41,6 +41,7 @@
|
|||||||
#include "wdsprxdnbdialog.h"
|
#include "wdsprxdnbdialog.h"
|
||||||
#include "wdsprxdnrdialog.h"
|
#include "wdsprxdnrdialog.h"
|
||||||
#include "wdsprxamdialog.h"
|
#include "wdsprxamdialog.h"
|
||||||
|
#include "wdsprxfmdialog.h"
|
||||||
#include "wdsprxcwpeakdialog.h"
|
#include "wdsprxcwpeakdialog.h"
|
||||||
|
|
||||||
WDSPRxGUI* WDSPRxGUI::create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel)
|
WDSPRxGUI* WDSPRxGUI::create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel)
|
||||||
@ -309,10 +310,18 @@ void WDSPRxGUI::on_profileIndex_valueChanged(int value)
|
|||||||
m_settings.m_nr2ArtifactReduction = m_settings.m_profiles[m_settings.m_profileIndex].m_nr2ArtifactReduction;
|
m_settings.m_nr2ArtifactReduction = m_settings.m_profiles[m_settings.m_profileIndex].m_nr2ArtifactReduction;
|
||||||
// demod
|
// demod
|
||||||
m_settings.m_demod = m_settings.m_profiles[m_settings.m_profileIndex].m_demod;
|
m_settings.m_demod = m_settings.m_profiles[m_settings.m_profileIndex].m_demod;
|
||||||
|
m_settings.m_amFadeLevel = m_settings.m_profiles[m_settings.m_profileIndex].m_amFadeLevel;
|
||||||
m_settings.m_cwPeaking = m_settings.m_profiles[m_settings.m_profileIndex].m_cwPeaking;
|
m_settings.m_cwPeaking = m_settings.m_profiles[m_settings.m_profileIndex].m_cwPeaking;
|
||||||
m_settings.m_cwPeakFrequency = m_settings.m_profiles[m_settings.m_profileIndex].m_cwPeakFrequency;
|
m_settings.m_cwPeakFrequency = m_settings.m_profiles[m_settings.m_profileIndex].m_cwPeakFrequency;
|
||||||
m_settings.m_cwBandwidth = m_settings.m_profiles[m_settings.m_profileIndex].m_cwBandwidth;
|
m_settings.m_cwBandwidth = m_settings.m_profiles[m_settings.m_profileIndex].m_cwBandwidth;
|
||||||
m_settings.m_cwGain = m_settings.m_profiles[m_settings.m_profileIndex].m_cwGain;
|
m_settings.m_cwGain = m_settings.m_profiles[m_settings.m_profileIndex].m_cwGain;
|
||||||
|
m_settings.m_fmDeviation = m_settings.m_profiles[m_settings.m_profileIndex].m_fmDeviation;
|
||||||
|
m_settings.m_fmAFLow = m_settings.m_profiles[m_settings.m_profileIndex].m_fmAFLow;
|
||||||
|
m_settings.m_fmAFHigh = m_settings.m_profiles[m_settings.m_profileIndex].m_fmAFHigh;
|
||||||
|
m_settings.m_fmAFLimiter = m_settings.m_profiles[m_settings.m_profileIndex].m_fmAFLimiter;
|
||||||
|
m_settings.m_fmAFLimiterGain = m_settings.m_profiles[m_settings.m_profileIndex].m_fmAFLimiterGain;
|
||||||
|
m_settings.m_fmCTCSSNotch = m_settings.m_profiles[m_settings.m_profileIndex].m_fmCTCSSNotch;
|
||||||
|
m_settings.m_fmCTCSSNotchFrequency = m_settings.m_profiles[m_settings.m_profileIndex].m_fmCTCSSNotchFrequency;
|
||||||
displaySettings();
|
displaySettings();
|
||||||
applyBandwidths(m_settings.m_profiles[m_settings.m_profileIndex].m_spanLog2, true); // does applySettings(true)
|
applyBandwidths(m_settings.m_profiles[m_settings.m_profileIndex].m_spanLog2, true); // does applySettings(true)
|
||||||
}
|
}
|
||||||
@ -414,6 +423,7 @@ WDSPRxGUI::WDSPRxGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam
|
|||||||
m_dnbDialog(nullptr),
|
m_dnbDialog(nullptr),
|
||||||
m_dnrDialog(nullptr),
|
m_dnrDialog(nullptr),
|
||||||
m_amDialog(nullptr),
|
m_amDialog(nullptr),
|
||||||
|
m_fmDialog(nullptr),
|
||||||
m_cwPeakDialog(nullptr)
|
m_cwPeakDialog(nullptr)
|
||||||
{
|
{
|
||||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||||
@ -1023,6 +1033,23 @@ void WDSPRxGUI::demodSetupDialog(const QPoint& p)
|
|||||||
m_amDialog->deleteLater();
|
m_amDialog->deleteLater();
|
||||||
m_amDialog = nullptr;
|
m_amDialog = nullptr;
|
||||||
}
|
}
|
||||||
|
else if (m_settings.m_demod == WDSPRxProfile::DemodFMN)
|
||||||
|
{
|
||||||
|
m_fmDialog = new WDSPRxFMDialog();
|
||||||
|
m_fmDialog->move(p);
|
||||||
|
m_fmDialog->setDeviation(m_settings.m_fmDeviation);
|
||||||
|
m_fmDialog->setAFLow(m_settings.m_fmAFLow);
|
||||||
|
m_fmDialog->setAFHigh(m_settings.m_fmAFHigh);
|
||||||
|
m_fmDialog->setAFLimiter(m_settings.m_fmAFLimiter);
|
||||||
|
m_fmDialog->setAFLimiterGain(m_settings.m_fmAFLimiterGain);
|
||||||
|
m_fmDialog->setCTCSSNotch(m_settings.m_fmCTCSSNotch);
|
||||||
|
m_fmDialog->setCTCSSNotchFrequency(m_settings.m_fmCTCSSNotchFrequency);
|
||||||
|
QObject::connect(m_fmDialog, &WDSPRxFMDialog::valueChanged, this, &WDSPRxGUI::fmSetup);
|
||||||
|
m_fmDialog->exec();
|
||||||
|
QObject::disconnect(m_fmDialog, &WDSPRxFMDialog::valueChanged, this, &WDSPRxGUI::fmSetup);
|
||||||
|
m_fmDialog->deleteLater();
|
||||||
|
m_fmDialog = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WDSPRxGUI::amSetup(int iValueChanged)
|
void WDSPRxGUI::amSetup(int iValueChanged)
|
||||||
@ -1045,6 +1072,56 @@ void WDSPRxGUI::amSetup(int iValueChanged)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WDSPRxGUI::fmSetup(int iValueChanged)
|
||||||
|
{
|
||||||
|
if (!m_fmDialog) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
WDSPRxFMDialog::ValueChanged valueChanged = (WDSPRxFMDialog::ValueChanged) iValueChanged;
|
||||||
|
|
||||||
|
switch (valueChanged)
|
||||||
|
{
|
||||||
|
case WDSPRxFMDialog::ChangedDeviation:
|
||||||
|
m_settings.m_fmDeviation = m_fmDialog->getDeviation();
|
||||||
|
m_settings.m_profiles[m_settings.m_profileIndex].m_fmDeviation = m_settings.m_fmDeviation;
|
||||||
|
applySettings();
|
||||||
|
break;
|
||||||
|
case WDSPRxFMDialog::ChangedAFLow:
|
||||||
|
m_settings.m_fmAFLow = m_fmDialog->getAFLow();
|
||||||
|
m_settings.m_profiles[m_settings.m_profileIndex].m_fmAFLow = m_settings.m_fmAFLow;
|
||||||
|
applySettings();
|
||||||
|
break;
|
||||||
|
case WDSPRxFMDialog::ChangedAFHigh:
|
||||||
|
m_settings.m_fmAFHigh = m_fmDialog->getAFHigh();
|
||||||
|
m_settings.m_profiles[m_settings.m_profileIndex].m_fmAFHigh = m_settings.m_fmAFHigh;
|
||||||
|
applySettings();
|
||||||
|
break;
|
||||||
|
case WDSPRxFMDialog::ChangedAFLimiter:
|
||||||
|
m_settings.m_fmAFLimiter = m_fmDialog->getAFLimiter();
|
||||||
|
m_settings.m_profiles[m_settings.m_profileIndex].m_fmAFLimiter = m_settings.m_fmAFLimiter;
|
||||||
|
applySettings();
|
||||||
|
break;
|
||||||
|
case WDSPRxFMDialog::ChangedAFLimiterGain:
|
||||||
|
m_settings.m_fmAFLimiterGain = m_fmDialog->getAFLimiterGain();
|
||||||
|
m_settings.m_profiles[m_settings.m_profileIndex].m_fmAFLimiterGain = m_settings.m_fmAFLimiterGain;
|
||||||
|
applySettings();
|
||||||
|
break;
|
||||||
|
case WDSPRxFMDialog::ChangedCTCSSNotch:
|
||||||
|
m_settings.m_fmCTCSSNotch = m_fmDialog->getCTCSSNotch();
|
||||||
|
m_settings.m_profiles[m_settings.m_profileIndex].m_fmCTCSSNotch = m_settings.m_fmCTCSSNotch;
|
||||||
|
applySettings();
|
||||||
|
break;
|
||||||
|
case WDSPRxFMDialog::ChangedCTCSSNotchFrequency:
|
||||||
|
m_settings.m_fmCTCSSNotchFrequency = m_fmDialog->getCTCSSNotchFrequency();
|
||||||
|
m_settings.m_profiles[m_settings.m_profileIndex].m_fmCTCSSNotchFrequency = m_settings.m_fmCTCSSNotchFrequency;
|
||||||
|
applySettings();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void WDSPRxGUI::tick()
|
void WDSPRxGUI::tick()
|
||||||
{
|
{
|
||||||
double powDbAvg, powDbPeak;
|
double powDbAvg, powDbPeak;
|
||||||
|
@ -38,6 +38,7 @@ class WDSPRxAGCDialog;
|
|||||||
class WDSPRxDNBDialog;
|
class WDSPRxDNBDialog;
|
||||||
class WDSPRxDNRDialog;
|
class WDSPRxDNRDialog;
|
||||||
class WDSPRxAMDialog;
|
class WDSPRxAMDialog;
|
||||||
|
class WDSPRxFMDialog;
|
||||||
class WDSPRxCWPeakDialog;
|
class WDSPRxCWPeakDialog;
|
||||||
class SpectrumVis;
|
class SpectrumVis;
|
||||||
class BasebandSampleSink;
|
class BasebandSampleSink;
|
||||||
@ -98,6 +99,7 @@ private:
|
|||||||
WDSPRxDNBDialog* m_dnbDialog;
|
WDSPRxDNBDialog* m_dnbDialog;
|
||||||
WDSPRxDNRDialog* m_dnrDialog;
|
WDSPRxDNRDialog* m_dnrDialog;
|
||||||
WDSPRxAMDialog* m_amDialog;
|
WDSPRxAMDialog* m_amDialog;
|
||||||
|
WDSPRxFMDialog* m_fmDialog;
|
||||||
WDSPRxCWPeakDialog* m_cwPeakDialog;
|
WDSPRxCWPeakDialog* m_cwPeakDialog;
|
||||||
|
|
||||||
QIcon m_iconDSBUSB;
|
QIcon m_iconDSBUSB;
|
||||||
@ -152,6 +154,7 @@ private slots:
|
|||||||
void cwPeakSetup(int valueChanged);
|
void cwPeakSetup(int valueChanged);
|
||||||
void demodSetupDialog(const QPoint& p);
|
void demodSetupDialog(const QPoint& p);
|
||||||
void amSetup(int valueChanged);
|
void amSetup(int valueChanged);
|
||||||
|
void fmSetup(int valueChanged);
|
||||||
void tick();
|
void tick();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>452</width>
|
<width>514</width>
|
||||||
<height>179</height>
|
<height>179</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -36,7 +36,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>450</width>
|
<width>501</width>
|
||||||
<height>181</height>
|
<height>181</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -212,6 +212,39 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="demod">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>60</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Modulation (right click for options)</string>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>SSB</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>AM</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>SAM</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>FM</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="flipSidebands">
|
<widget class="QPushButton" name="flipSidebands">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
@ -752,39 +785,6 @@
|
|||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="volumeLayout">
|
<layout class="QHBoxLayout" name="volumeLayout">
|
||||||
<item>
|
|
||||||
<widget class="QComboBox" name="demod">
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>60</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Modulation (right click for options)</string>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>SSB</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>AM</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>SAM</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>FM</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="volumeLabel">
|
<widget class="QLabel" name="volumeLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -75,6 +75,13 @@ void WDSPRxSettings::resetToDefaults()
|
|||||||
m_cwPeakFrequency = 600.0;
|
m_cwPeakFrequency = 600.0;
|
||||||
m_cwBandwidth = 100.0;
|
m_cwBandwidth = 100.0;
|
||||||
m_cwGain = 2.0;
|
m_cwGain = 2.0;
|
||||||
|
m_fmDeviation = 2500.0;
|
||||||
|
m_fmAFLow = 300.0;
|
||||||
|
m_fmAFHigh = 3000.0;
|
||||||
|
m_fmAFLimiter = false;
|
||||||
|
m_fmAFLimiterGain = 10.0;
|
||||||
|
m_fmCTCSSNotch = false;
|
||||||
|
m_fmCTCSSNotchFrequency = 67.0;
|
||||||
//
|
//
|
||||||
m_volume = 1.0;
|
m_volume = 1.0;
|
||||||
m_inputFrequencyOffset = 0;
|
m_inputFrequencyOffset = 0;
|
||||||
@ -136,6 +143,13 @@ QByteArray WDSPRxSettings::serialize() const
|
|||||||
s.writeDouble(42, m_cwPeakFrequency);
|
s.writeDouble(42, m_cwPeakFrequency);
|
||||||
s.writeDouble(43, m_cwBandwidth);
|
s.writeDouble(43, m_cwBandwidth);
|
||||||
s.writeDouble(44, m_cwGain);
|
s.writeDouble(44, m_cwGain);
|
||||||
|
s.writeDouble(45, m_fmDeviation);
|
||||||
|
s.writeDouble(46, m_fmAFLow);
|
||||||
|
s.writeDouble(47, m_fmAFHigh);
|
||||||
|
s.writeBool( 48, m_fmAFLimiter);
|
||||||
|
s.writeDouble(49, m_fmAFLimiterGain);
|
||||||
|
s.writeBool( 50, m_fmCTCSSNotch);
|
||||||
|
s.writeDouble(51, m_fmCTCSSNotchFrequency);
|
||||||
//
|
//
|
||||||
s.writeString(70, m_title);
|
s.writeString(70, m_title);
|
||||||
s.writeString(71, m_audioDeviceName);
|
s.writeString(71, m_audioDeviceName);
|
||||||
@ -157,41 +171,48 @@ QByteArray WDSPRxSettings::serialize() const
|
|||||||
|
|
||||||
for (unsigned int i = 0; i < 10; i++)
|
for (unsigned int i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
s.writeS32 (104 + 50*i, (int) m_profiles[i].m_demod);
|
s.writeS32 (104 + 100*i, (int) m_profiles[i].m_demod);
|
||||||
// Filter
|
// Filter
|
||||||
s.writeS32 (100 + 50*i, m_profiles[i].m_spanLog2);
|
s.writeS32 (100 + 100*i, m_profiles[i].m_spanLog2);
|
||||||
s.writeS32 (101 + 50*i, m_profiles[i].m_highCutoff / 100.0);
|
s.writeS32 (101 + 100*i, m_profiles[i].m_highCutoff / 100.0);
|
||||||
s.writeS32 (102 + 50*i, m_profiles[i].m_lowCutoff / 100.0);
|
s.writeS32 (102 + 100*i, m_profiles[i].m_lowCutoff / 100.0);
|
||||||
s.writeS32 (103 + 50*i, m_profiles[i].m_fftWindow);
|
s.writeS32 (103 + 100*i, m_profiles[i].m_fftWindow);
|
||||||
// AGC
|
// AGC
|
||||||
s.writeBool (110 + 50*i, m_profiles[i].m_agc);
|
s.writeBool (110 + 100*i, m_profiles[i].m_agc);
|
||||||
s.writeS32 (111 + 50*i, (int) m_profiles[i].m_agcMode);
|
s.writeS32 (111 + 100*i, (int) m_profiles[i].m_agcMode);
|
||||||
s.writeS32 (112 + 50*i, m_profiles[i].m_agcGain);
|
s.writeS32 (112 + 100*i, m_profiles[i].m_agcGain);
|
||||||
s.writeS32 (113 + 50*i, m_profiles[i].m_agcSlope);
|
s.writeS32 (113 + 100*i, m_profiles[i].m_agcSlope);
|
||||||
s.writeS32 (114 + 50*i, m_profiles[i].m_agcHangThreshold);
|
s.writeS32 (114 + 100*i, m_profiles[i].m_agcHangThreshold);
|
||||||
// Noise blanjer
|
// Noise blanjer
|
||||||
s.writeBool (120 + 50*i, m_profiles[i].m_dnb);
|
s.writeBool (120 + 100*i, m_profiles[i].m_dnb);
|
||||||
s.writeS32 (121 + 50*i, (int) m_profiles[i].m_nbScheme);
|
s.writeS32 (121 + 100*i, (int) m_profiles[i].m_nbScheme);
|
||||||
s.writeS32 (122 + 50*i, (int) m_profiles[i].m_nb2Mode);
|
s.writeS32 (122 + 100*i, (int) m_profiles[i].m_nb2Mode);
|
||||||
s.writeDouble(123 + 50*i, m_profiles[i].m_nbSlewTime);
|
s.writeDouble(123 + 100*i, m_profiles[i].m_nbSlewTime);
|
||||||
s.writeDouble(124 + 50*i, m_profiles[i].m_nbLeadTime);
|
s.writeDouble(124 + 100*i, m_profiles[i].m_nbLeadTime);
|
||||||
s.writeDouble(125 + 50*i, m_profiles[i].m_nbLagTime);
|
s.writeDouble(125 + 100*i, m_profiles[i].m_nbLagTime);
|
||||||
s.writeS32 (126 + 50*i, m_profiles[i].m_nbThreshold);
|
s.writeS32 (126 + 100*i, m_profiles[i].m_nbThreshold);
|
||||||
s.writeDouble(127 + 50*i, m_profiles[i].m_nbAvgTime);
|
s.writeDouble(127 + 100*i, m_profiles[i].m_nbAvgTime);
|
||||||
// Noise reduction
|
// Noise reduction
|
||||||
s.writeBool (130 + 50*i, m_profiles[i].m_dnr);
|
s.writeBool (130 + 100*i, m_profiles[i].m_dnr);
|
||||||
s.writeBool (132 + 50*i, m_profiles[i].m_anf);
|
s.writeBool (132 + 100*i, m_profiles[i].m_anf);
|
||||||
s.writeS32 (133 + 50*i, (int) m_profiles[i].m_nrScheme);
|
s.writeS32 (133 + 100*i, (int) m_profiles[i].m_nrScheme);
|
||||||
s.writeS32 (134 + 50*i, (int) m_profiles[i].m_nr2Gain);
|
s.writeS32 (134 + 100*i, (int) m_profiles[i].m_nr2Gain);
|
||||||
s.writeS32 (135 + 50*i, (int) m_profiles[i].m_nr2NPE);
|
s.writeS32 (135 + 100*i, (int) m_profiles[i].m_nr2NPE);
|
||||||
s.writeS32 (136 + 50*i, (int) m_profiles[i].m_nrPosition);
|
s.writeS32 (136 + 100*i, (int) m_profiles[i].m_nrPosition);
|
||||||
s.writeBool (137 + 50*i, m_profiles[i].m_nr2ArtifactReduction);
|
s.writeBool (137 + 100*i, m_profiles[i].m_nr2ArtifactReduction);
|
||||||
// Demods
|
// Demods
|
||||||
s.writeBool (140 + 50*i, m_profiles[i].m_amFadeLevel);
|
s.writeBool (140 + 100*i, m_profiles[i].m_amFadeLevel);
|
||||||
s.writeBool (141 + 50*i, m_profiles[i].m_cwPeaking);
|
s.writeBool (141 + 100*i, m_profiles[i].m_cwPeaking);
|
||||||
s.writeDouble(142 + 50*i, m_profiles[i].m_cwPeakFrequency);
|
s.writeDouble(142 + 100*i, m_profiles[i].m_cwPeakFrequency);
|
||||||
s.writeDouble(143 + 50*i, m_profiles[i].m_cwBandwidth);
|
s.writeDouble(143 + 100*i, m_profiles[i].m_cwBandwidth);
|
||||||
s.writeDouble(144 + 50*i, m_profiles[i].m_cwGain);
|
s.writeDouble(144 + 100*i, m_profiles[i].m_cwGain);
|
||||||
|
s.writeDouble(145 + 100*i, m_profiles[i].m_fmDeviation);
|
||||||
|
s.writeDouble(146 + 100*i, m_profiles[i].m_fmAFLow);
|
||||||
|
s.writeDouble(147 + 100*i, m_profiles[i].m_fmAFHigh);
|
||||||
|
s.writeBool( 148 + 100*i, m_profiles[i].m_fmAFLimiter);
|
||||||
|
s.writeDouble(149 + 100*i, m_profiles[i].m_fmAFLimiterGain);
|
||||||
|
s.writeBool( 150 + 100*i, m_profiles[i].m_fmCTCSSNotch);
|
||||||
|
s.writeDouble(151 + 100*i, m_profiles[i].m_fmCTCSSNotchFrequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
return s.final();
|
return s.final();
|
||||||
@ -264,6 +285,15 @@ bool WDSPRxSettings::deserialize(const QByteArray& data)
|
|||||||
d.readBool( 40, &m_amFadeLevel, false);
|
d.readBool( 40, &m_amFadeLevel, false);
|
||||||
d.readBool( 41, &m_cwPeaking, false);
|
d.readBool( 41, &m_cwPeaking, false);
|
||||||
d.readDouble(42, &m_cwPeakFrequency, 600.0);
|
d.readDouble(42, &m_cwPeakFrequency, 600.0);
|
||||||
|
d.readDouble(43, &m_cwBandwidth, 100.0);
|
||||||
|
d.readDouble(44, &m_cwGain, 2.0);
|
||||||
|
d.readDouble(45, &m_fmDeviation, 2500.0);
|
||||||
|
d.readDouble(46, &m_fmAFLow, 300.0);
|
||||||
|
d.readDouble(47, &m_fmAFHigh, 3000.0);
|
||||||
|
d.readBool( 48, &m_fmAFLimiter, false);
|
||||||
|
d.readDouble(49, &m_fmAFLimiterGain, 10.0);
|
||||||
|
d.readBool( 50, &m_fmCTCSSNotch, false);
|
||||||
|
d.readDouble(51, &m_fmCTCSSNotchFrequency, 67.0);
|
||||||
//
|
//
|
||||||
d.readString(70, &m_title, "WDSP Receiver");
|
d.readString(70, &m_title, "WDSP Receiver");
|
||||||
d.readString(71, &m_audioDeviceName, AudioDeviceManager::m_defaultDeviceName);
|
d.readString(71, &m_audioDeviceName, AudioDeviceManager::m_defaultDeviceName);
|
||||||
|
@ -112,6 +112,13 @@ struct WDSPRxProfile
|
|||||||
double m_cwPeakFrequency;
|
double m_cwPeakFrequency;
|
||||||
double m_cwBandwidth;
|
double m_cwBandwidth;
|
||||||
double m_cwGain;
|
double m_cwGain;
|
||||||
|
double m_fmDeviation;
|
||||||
|
double m_fmAFLow;
|
||||||
|
double m_fmAFHigh;
|
||||||
|
bool m_fmAFLimiter;
|
||||||
|
double m_fmAFLimiterGain;
|
||||||
|
bool m_fmCTCSSNotch;
|
||||||
|
double m_fmCTCSSNotchFrequency;
|
||||||
|
|
||||||
WDSPRxProfile() :
|
WDSPRxProfile() :
|
||||||
m_demod(DemodSSB),
|
m_demod(DemodSSB),
|
||||||
@ -143,7 +150,14 @@ struct WDSPRxProfile
|
|||||||
m_cwPeaking(false),
|
m_cwPeaking(false),
|
||||||
m_cwPeakFrequency(600.0),
|
m_cwPeakFrequency(600.0),
|
||||||
m_cwBandwidth(100.0),
|
m_cwBandwidth(100.0),
|
||||||
m_cwGain(2.0)
|
m_cwGain(2.0),
|
||||||
|
m_fmDeviation(2500.0),
|
||||||
|
m_fmAFLow(300.0),
|
||||||
|
m_fmAFHigh(3000.0),
|
||||||
|
m_fmAFLimiter(false),
|
||||||
|
m_fmAFLimiterGain(10.0),
|
||||||
|
m_fmCTCSSNotch(false),
|
||||||
|
m_fmCTCSSNotchFrequency(67.0)
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -188,6 +202,13 @@ struct WDSPRxSettings
|
|||||||
double m_cwPeakFrequency;
|
double m_cwPeakFrequency;
|
||||||
double m_cwBandwidth;
|
double m_cwBandwidth;
|
||||||
double m_cwGain;
|
double m_cwGain;
|
||||||
|
double m_fmDeviation;
|
||||||
|
double m_fmAFLow;
|
||||||
|
double m_fmAFHigh;
|
||||||
|
bool m_fmAFLimiter;
|
||||||
|
double m_fmAFLimiterGain;
|
||||||
|
bool m_fmCTCSSNotch;
|
||||||
|
double m_fmCTCSSNotchFrequency;
|
||||||
|
|
||||||
quint32 m_rgbColor;
|
quint32 m_rgbColor;
|
||||||
QString m_title;
|
QString m_title;
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
#include "anb.hpp"
|
#include "anb.hpp"
|
||||||
#include "nob.hpp"
|
#include "nob.hpp"
|
||||||
#include "amd.hpp"
|
#include "amd.hpp"
|
||||||
|
#include "fmd.hpp"
|
||||||
#include "iir.cpp"
|
#include "iir.cpp"
|
||||||
|
|
||||||
#include "wdsprxsink.h"
|
#include "wdsprxsink.h"
|
||||||
@ -627,6 +628,34 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force)
|
|||||||
WDSP::AMD::SetAMDFadeLevel(*m_rxa, settings.m_amFadeLevel);
|
WDSP::AMD::SetAMDFadeLevel(*m_rxa, settings.m_amFadeLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FM options
|
||||||
|
|
||||||
|
if ((m_settings.m_fmDeviation != settings.m_fmDeviation) || force) {
|
||||||
|
WDSP::FMD::SetFMDeviation(*m_rxa, settings.m_fmDeviation);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((m_settings.m_fmAFLow != settings.m_fmAFLow)
|
||||||
|
|| (m_settings.m_fmAFHigh != settings.m_fmAFHigh) || force)
|
||||||
|
{
|
||||||
|
WDSP::FMD::SetFMAFFilter(*m_rxa, settings.m_fmAFLow, settings.m_fmAFHigh);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((m_settings.m_fmAFLimiter != settings.m_fmAFLimiter) || force) {
|
||||||
|
WDSP::FMD::SetFMLimRun(*m_rxa, settings.m_fmAFLimiter ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((m_settings.m_fmAFLimiterGain != settings.m_fmAFLimiterGain) || force) {
|
||||||
|
WDSP::FMD::SetFMLimGain(*m_rxa, settings.m_fmAFLimiterGain);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((m_settings.m_fmCTCSSNotch != settings.m_fmCTCSSNotch) || force) {
|
||||||
|
WDSP::FMD::SetCTCSSRun(*m_rxa, settings.m_fmCTCSSNotch ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((m_settings.m_fmCTCSSNotchFrequency != settings.m_fmCTCSSNotchFrequency) || force) {
|
||||||
|
WDSP::FMD::SetCTCSSFreq(*m_rxa, settings.m_fmCTCSSNotchFrequency);
|
||||||
|
}
|
||||||
|
|
||||||
// Audio panel
|
// Audio panel
|
||||||
|
|
||||||
if ((m_settings.m_volume != settings.m_volume) || force) {
|
if ((m_settings.m_volume != settings.m_volume) || force) {
|
||||||
|
@ -932,7 +932,6 @@ void RXA::SetMode (RXA& rxa, int mode)
|
|||||||
break;
|
break;
|
||||||
case RXA_FM:
|
case RXA_FM:
|
||||||
rxa.fmd.p->run = 1;
|
rxa.fmd.p->run = 1;
|
||||||
rxa.agc.p->run = 0;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user