mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-03 09:44:01 -05:00
FreeDV modulator: implemented set FreeDV mode setting
This commit is contained in:
parent
97d12182c2
commit
8ec923c746
@ -57,6 +57,8 @@ FreeDVMod::FreeDVMod(DeviceSinkAPI *deviceAPI) :
|
||||
m_basebandSampleRate(48000),
|
||||
m_outputSampleRate(48000),
|
||||
m_inputFrequencyOffset(0),
|
||||
m_lowCutoff(0.0),
|
||||
m_hiCutoff(6000.0),
|
||||
m_SSBFilter(0),
|
||||
m_SSBFilterBuffer(0),
|
||||
m_SSBFilterBufferIndex(0),
|
||||
@ -75,7 +77,7 @@ FreeDVMod::FreeDVMod(DeviceSinkAPI *deviceAPI) :
|
||||
DSPEngine::instance()->getAudioDeviceManager()->addAudioSource(&m_audioFifo, getInputMessageQueue());
|
||||
m_audioSampleRate = DSPEngine::instance()->getAudioDeviceManager()->getInputSampleRate();
|
||||
|
||||
m_SSBFilter = new fftfilt(m_settings.m_lowCutoff / m_audioSampleRate, m_settings.m_bandwidth / m_audioSampleRate, m_ssbFftLen);
|
||||
m_SSBFilter = new fftfilt(m_lowCutoff / m_audioSampleRate, m_hiCutoff / m_audioSampleRate, m_ssbFftLen);
|
||||
m_SSBFilterBuffer = new Complex[m_ssbFftLen>>1]; // filter returns data exactly half of its size
|
||||
std::fill(m_SSBFilterBuffer, m_SSBFilterBuffer+(m_ssbFftLen>>1), Complex{0,0});
|
||||
|
||||
@ -526,25 +528,9 @@ void FreeDVMod::applyAudioSampleRate(int sampleRate)
|
||||
m_interpolatorDistanceRemain = 0;
|
||||
m_interpolatorConsumed = false;
|
||||
m_interpolatorDistance = (Real) sampleRate / (Real) m_outputSampleRate;
|
||||
m_interpolator.create(48, sampleRate, m_settings.m_bandwidth, 3.0);
|
||||
m_interpolator.create(48, sampleRate, m_hiCutoff, 3.0);
|
||||
|
||||
float band = m_settings.m_bandwidth;
|
||||
float lowCutoff = m_settings.m_lowCutoff;
|
||||
|
||||
if (band < 100.0f) // at least 100 Hz
|
||||
{
|
||||
band = 100.0f;
|
||||
lowCutoff = 0;
|
||||
}
|
||||
|
||||
if (band - lowCutoff < 100.0f) {
|
||||
lowCutoff = band - 100.0f;
|
||||
}
|
||||
|
||||
m_SSBFilter->create_filter(lowCutoff / sampleRate, band / sampleRate);
|
||||
|
||||
m_settings.m_bandwidth = band;
|
||||
m_settings.m_lowCutoff = lowCutoff;
|
||||
m_SSBFilter->create_filter(m_lowCutoff / sampleRate, m_hiCutoff / sampleRate);
|
||||
|
||||
m_toneNco.setFreq(m_settings.m_toneFrequency, sampleRate);
|
||||
m_cwKeyer.setSampleRate(sampleRate);
|
||||
@ -581,7 +567,7 @@ void FreeDVMod::applyChannelSettings(int basebandSampleRate, int outputSampleRat
|
||||
m_interpolatorDistanceRemain = 0;
|
||||
m_interpolatorConsumed = false;
|
||||
m_interpolatorDistance = (Real) m_audioSampleRate / (Real) outputSampleRate;
|
||||
m_interpolator.create(48, m_audioSampleRate, m_settings.m_bandwidth, 3.0);
|
||||
m_interpolator.create(48, m_audioSampleRate, m_hiCutoff, 3.0);
|
||||
m_settingsMutex.unlock();
|
||||
}
|
||||
|
||||
@ -590,21 +576,27 @@ void FreeDVMod::applyChannelSettings(int basebandSampleRate, int outputSampleRat
|
||||
m_inputFrequencyOffset = inputFrequencyOffset;
|
||||
}
|
||||
|
||||
void FreeDVMod::applyFreeDVMode(FreeDVModSettings::FreeDVMode mode)
|
||||
{
|
||||
m_hiCutoff = FreeDVModSettings::getHiCutoff(mode);
|
||||
m_lowCutoff = FreeDVModSettings::getLowCutoff(mode);
|
||||
|
||||
m_settingsMutex.lock();
|
||||
m_interpolatorDistanceRemain = 0;
|
||||
m_interpolatorConsumed = false;
|
||||
m_interpolatorDistance = (Real) m_audioSampleRate / (Real) m_outputSampleRate;
|
||||
m_interpolator.create(48, m_audioSampleRate, m_hiCutoff, 3.0);
|
||||
m_SSBFilter->create_filter(m_lowCutoff / m_audioSampleRate, m_hiCutoff / m_audioSampleRate);
|
||||
m_settingsMutex.unlock();
|
||||
}
|
||||
|
||||
void FreeDVMod::applySettings(const FreeDVModSettings& settings, bool force)
|
||||
{
|
||||
float band = settings.m_bandwidth;
|
||||
float lowCutoff = settings.m_lowCutoff;
|
||||
QList<QString> reverseAPIKeys;
|
||||
|
||||
if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) {
|
||||
reverseAPIKeys.append("inputFrequencyOffset");
|
||||
}
|
||||
if ((settings.m_bandwidth != m_settings.m_bandwidth) || force) {
|
||||
reverseAPIKeys.append("bandwidth");
|
||||
}
|
||||
if ((settings.m_lowCutoff != m_settings.m_lowCutoff) || force) {
|
||||
reverseAPIKeys.append("lowCutoff");
|
||||
}
|
||||
if ((settings.m_toneFrequency != m_settings.m_toneFrequency) || force) {
|
||||
reverseAPIKeys.append("toneFrequency");
|
||||
}
|
||||
@ -626,6 +618,9 @@ void FreeDVMod::applySettings(const FreeDVModSettings& settings, bool force)
|
||||
if ((settings.m_title != m_settings.m_title) || force) {
|
||||
reverseAPIKeys.append("title");
|
||||
}
|
||||
if ((settings.m_freeDVMode != m_settings.m_freeDVMode) || force) {
|
||||
reverseAPIKeys.append("freeDVMode");
|
||||
}
|
||||
if ((settings.m_modAFInput != m_settings.m_modAFInput) || force) {
|
||||
reverseAPIKeys.append("modAFInput");
|
||||
}
|
||||
@ -633,28 +628,6 @@ void FreeDVMod::applySettings(const FreeDVModSettings& settings, bool force)
|
||||
reverseAPIKeys.append("audioDeviceName");
|
||||
}
|
||||
|
||||
if ((settings.m_bandwidth != m_settings.m_bandwidth) ||
|
||||
(settings.m_lowCutoff != m_settings.m_lowCutoff) || force)
|
||||
{
|
||||
if (band < 100.0f) // at least 100 Hz
|
||||
{
|
||||
band = 100.0f;
|
||||
lowCutoff = 0;
|
||||
}
|
||||
|
||||
if (band - lowCutoff < 100.0f) {
|
||||
lowCutoff = band - 100.0f;
|
||||
}
|
||||
|
||||
m_settingsMutex.lock();
|
||||
m_interpolatorDistanceRemain = 0;
|
||||
m_interpolatorConsumed = false;
|
||||
m_interpolatorDistance = (Real) m_audioSampleRate / (Real) m_outputSampleRate;
|
||||
m_interpolator.create(48, m_audioSampleRate, band, 3.0);
|
||||
m_SSBFilter->create_filter(lowCutoff / m_audioSampleRate, band / m_audioSampleRate);
|
||||
m_settingsMutex.unlock();
|
||||
}
|
||||
|
||||
if ((settings.m_toneFrequency != m_settings.m_toneFrequency) || force)
|
||||
{
|
||||
m_settingsMutex.lock();
|
||||
@ -674,6 +647,10 @@ void FreeDVMod::applySettings(const FreeDVModSettings& settings, bool force)
|
||||
}
|
||||
}
|
||||
|
||||
if ((m_settings.m_freeDVMode != settings.m_freeDVMode) || force) {
|
||||
applyFreeDVMode(settings.m_freeDVMode);
|
||||
}
|
||||
|
||||
if (settings.m_useReverseAPI)
|
||||
{
|
||||
bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) ||
|
||||
@ -685,8 +662,6 @@ void FreeDVMod::applySettings(const FreeDVModSettings& settings, bool force)
|
||||
}
|
||||
|
||||
m_settings = settings;
|
||||
m_settings.m_bandwidth = band;
|
||||
m_settings.m_lowCutoff = lowCutoff;
|
||||
}
|
||||
|
||||
QByteArray FreeDVMod::serialize() const
|
||||
@ -737,12 +712,6 @@ int FreeDVMod::webapiSettingsPutPatch(
|
||||
settings.m_inputFrequencyOffset = response.getFreeDvModSettings()->getInputFrequencyOffset();
|
||||
frequencyOffsetChanged = true;
|
||||
}
|
||||
if (channelSettingsKeys.contains("bandwidth")) {
|
||||
settings.m_bandwidth = response.getFreeDvModSettings()->getBandwidth();
|
||||
}
|
||||
if (channelSettingsKeys.contains("lowCutoff")) {
|
||||
settings.m_lowCutoff = response.getFreeDvModSettings()->getLowCutoff();
|
||||
}
|
||||
if (channelSettingsKeys.contains("toneFrequency")) {
|
||||
settings.m_toneFrequency = response.getFreeDvModSettings()->getToneFrequency();
|
||||
}
|
||||
@ -764,6 +733,9 @@ int FreeDVMod::webapiSettingsPutPatch(
|
||||
if (channelSettingsKeys.contains("title")) {
|
||||
settings.m_title = *response.getFreeDvModSettings()->getTitle();
|
||||
}
|
||||
if (channelSettingsKeys.contains("freeDVMode")) {
|
||||
settings.m_freeDVMode = (FreeDVModSettings::FreeDVMode) response.getFreeDvModSettings()->getFreeDvMode();
|
||||
}
|
||||
if (channelSettingsKeys.contains("modAFInput")) {
|
||||
settings.m_modAFInput = (FreeDVModSettings::FreeDVModInputAF) response.getFreeDvModSettings()->getModAfInput();
|
||||
}
|
||||
@ -855,8 +827,6 @@ int FreeDVMod::webapiReportGet(
|
||||
void FreeDVMod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const FreeDVModSettings& settings)
|
||||
{
|
||||
response.getFreeDvModSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset);
|
||||
response.getFreeDvModSettings()->setBandwidth(settings.m_bandwidth);
|
||||
response.getFreeDvModSettings()->setLowCutoff(settings.m_lowCutoff);
|
||||
response.getFreeDvModSettings()->setToneFrequency(settings.m_toneFrequency);
|
||||
response.getFreeDvModSettings()->setVolumeFactor(settings.m_volumeFactor);
|
||||
response.getFreeDvModSettings()->setSpanLog2(settings.m_spanLog2);
|
||||
@ -929,12 +899,6 @@ void FreeDVMod::webapiReverseSendSettings(QList<QString>& channelSettingsKeys, c
|
||||
if (channelSettingsKeys.contains("inputFrequencyOffset") || force) {
|
||||
swgFreeDVModSettings->setInputFrequencyOffset(settings.m_inputFrequencyOffset);
|
||||
}
|
||||
if (channelSettingsKeys.contains("bandwidth") || force) {
|
||||
swgFreeDVModSettings->setBandwidth(settings.m_bandwidth);
|
||||
}
|
||||
if (channelSettingsKeys.contains("lowCutoff") || force) {
|
||||
swgFreeDVModSettings->setLowCutoff(settings.m_lowCutoff);
|
||||
}
|
||||
if (channelSettingsKeys.contains("toneFrequency") || force) {
|
||||
swgFreeDVModSettings->setToneFrequency(settings.m_toneFrequency);
|
||||
}
|
||||
@ -956,6 +920,9 @@ void FreeDVMod::webapiReverseSendSettings(QList<QString>& channelSettingsKeys, c
|
||||
if (channelSettingsKeys.contains("title") || force) {
|
||||
swgFreeDVModSettings->setTitle(new QString(settings.m_title));
|
||||
}
|
||||
if (channelSettingsKeys.contains("freeDVMode") || force) {
|
||||
swgFreeDVModSettings->setFreeDvMode((int) settings.m_freeDVMode);
|
||||
}
|
||||
if (channelSettingsKeys.contains("modAFInput") || force) {
|
||||
swgFreeDVModSettings->setModAfInput((int) settings.m_modAFInput);
|
||||
}
|
||||
|
@ -236,6 +236,8 @@ public:
|
||||
|
||||
uint32_t getAudioSampleRate() const { return m_audioSampleRate; }
|
||||
double getMagSq() const { return m_magsq; }
|
||||
Real getLowCutoff() const { return m_lowCutoff; }
|
||||
Real getHiCutoff() const { return m_hiCutoff; }
|
||||
|
||||
CWKeyer *getCWKeyer() { return &m_cwKeyer; }
|
||||
|
||||
@ -265,6 +267,8 @@ private:
|
||||
int m_basebandSampleRate;
|
||||
int m_outputSampleRate;
|
||||
int m_inputFrequencyOffset;
|
||||
Real m_lowCutoff;
|
||||
Real m_hiCutoff;
|
||||
FreeDVModSettings m_settings;
|
||||
quint32 m_audioSampleRate;
|
||||
|
||||
@ -315,6 +319,7 @@ private:
|
||||
void applyAudioSampleRate(int sampleRate);
|
||||
void applyChannelSettings(int basebandSampleRate, int outputSampleRate, int inputFrequencyOffset, bool force = false);
|
||||
void applySettings(const FreeDVModSettings& settings, bool force = false);
|
||||
void applyFreeDVMode(FreeDVModSettings::FreeDVMode mode);
|
||||
void pullAF(Complex& sample);
|
||||
void calculateLevel(Complex& sample);
|
||||
void modulateSample();
|
||||
|
@ -182,18 +182,6 @@ void FreeDVModGUI::on_spanLog2_valueChanged(int value)
|
||||
applyBandwidths(5 - value);
|
||||
}
|
||||
|
||||
void FreeDVModGUI::on_BW_valueChanged(int value)
|
||||
{
|
||||
(void) value;
|
||||
applyBandwidths(5 - ui->spanLog2->value());
|
||||
}
|
||||
|
||||
void FreeDVModGUI::on_lowCut_valueChanged(int value)
|
||||
{
|
||||
(void) value;
|
||||
applyBandwidths(5 - ui->spanLog2->value());
|
||||
}
|
||||
|
||||
void FreeDVModGUI::on_toneFrequency_valueChanged(int value)
|
||||
{
|
||||
ui->toneFrequencyText->setText(QString("%1k").arg(value / 100.0, 0, 'f', 2));
|
||||
@ -214,6 +202,14 @@ void FreeDVModGUI::on_audioMute_toggled(bool checked)
|
||||
applySettings();
|
||||
}
|
||||
|
||||
void FreeDVModGUI::on_freeDVMode_currentIndexChanged(int index)
|
||||
{
|
||||
m_settings.m_freeDVMode = (FreeDVModSettings::FreeDVMode) index;
|
||||
m_channelMarker.setBandwidth(FreeDVModSettings::getHiCutoff(m_settings.m_freeDVMode) * 2);
|
||||
m_channelMarker.setLowCutoff(FreeDVModSettings::getLowCutoff(m_settings.m_freeDVMode));
|
||||
applySettings();
|
||||
}
|
||||
|
||||
void FreeDVModGUI::on_playLoop_toggled(bool checked)
|
||||
{
|
||||
m_settings.m_playLoop = checked;
|
||||
@ -368,17 +364,8 @@ FreeDVModGUI::FreeDVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
|
||||
ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
|
||||
ui->deltaFrequency->setValueRange(false, 7, -9999999, 9999999);
|
||||
|
||||
m_channelMarker.blockSignals(true);
|
||||
m_channelMarker.setColor(QColor(0, 255, 204));
|
||||
m_channelMarker.setBandwidth(m_spectrumRate);
|
||||
m_channelMarker.setSidebands(ChannelMarker::usb);
|
||||
m_channelMarker.setCenterFrequency(0);
|
||||
m_channelMarker.setTitle("FreeDV Modulator");
|
||||
m_channelMarker.blockSignals(false);
|
||||
m_channelMarker.setVisible(true);
|
||||
|
||||
setTitleColor(m_channelMarker.getColor());
|
||||
|
||||
m_deviceUISet->registerTxChannelInstance(FreeDVMod::m_channelIdURI, this);
|
||||
m_deviceUISet->addChannelMarker(&m_channelMarker);
|
||||
m_deviceUISet->addRollupWidget(this);
|
||||
@ -395,11 +382,6 @@ FreeDVModGUI::FreeDVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
|
||||
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages()));
|
||||
connect(m_freeDVMod, SIGNAL(levelChanged(qreal, qreal, int)), ui->volumeMeter, SLOT(levelChanged(qreal, qreal, int)));
|
||||
|
||||
m_iconDSBUSB.addPixmap(QPixmap("://dsb.png"), QIcon::Normal, QIcon::On);
|
||||
m_iconDSBUSB.addPixmap(QPixmap("://usb.png"), QIcon::Normal, QIcon::Off);
|
||||
m_iconDSBLSB.addPixmap(QPixmap("://dsb.png"), QIcon::Normal, QIcon::On);
|
||||
m_iconDSBLSB.addPixmap(QPixmap("://lsb.png"), QIcon::Normal, QIcon::Off);
|
||||
|
||||
displaySettings();
|
||||
applyBandwidths(5 - ui->spanLog2->value(), true); // does applySettings(true)
|
||||
}
|
||||
@ -435,8 +417,6 @@ void FreeDVModGUI::applySettings(bool force)
|
||||
void FreeDVModGUI::applyBandwidths(int spanLog2, bool force)
|
||||
{
|
||||
m_spectrumRate = m_freeDVMod->getAudioSampleRate() / (1<<spanLog2);
|
||||
int bw = ui->BW->value();
|
||||
int lw = ui->lowCut->value();
|
||||
int bwMax = m_freeDVMod->getAudioSampleRate() / (100*(1<<spanLog2));
|
||||
int tickInterval = m_spectrumRate / 1200;
|
||||
tickInterval = tickInterval == 0 ? 1 : tickInterval;
|
||||
@ -444,60 +424,20 @@ void FreeDVModGUI::applyBandwidths(int spanLog2, bool force)
|
||||
qDebug() << "FreeDVModGUI::applyBandwidths:"
|
||||
<< " spanLog2: " << spanLog2
|
||||
<< " m_spectrumRate: " << m_spectrumRate
|
||||
<< " bw: " << bw
|
||||
<< " lw: " << lw
|
||||
<< " bwMax: " << bwMax
|
||||
<< " tickInterval: " << tickInterval;
|
||||
|
||||
ui->BW->setTickInterval(tickInterval);
|
||||
ui->lowCut->setTickInterval(tickInterval);
|
||||
|
||||
bw = bw < -bwMax ? -bwMax : bw > bwMax ? bwMax : bw;
|
||||
|
||||
if (bw < 0) {
|
||||
lw = lw < bw+1 ? bw+1 : lw < 0 ? lw : 0;
|
||||
} else if (bw > 0) {
|
||||
lw = lw > bw-1 ? bw-1 : lw < 0 ? 0 : lw;
|
||||
} else {
|
||||
lw = 0;
|
||||
}
|
||||
|
||||
QString spanStr = QString::number(bwMax/10.0, 'f', 1);
|
||||
QString bwStr = QString::number(bw/10.0, 'f', 1);
|
||||
QString lwStr = QString::number(lw/10.0, 'f', 1);
|
||||
|
||||
ui->BWText->setText(tr("%1k").arg(bwStr));
|
||||
ui->spanText->setText(tr("%1k").arg(spanStr));
|
||||
ui->scaleMinus->setText("-");
|
||||
ui->scaleCenter->setText("0");
|
||||
ui->scalePlus->setText("+");
|
||||
ui->lsbLabel->setText("LSB");
|
||||
ui->usbLabel->setText("USB");
|
||||
ui->glSpectrum->setCenterFrequency(m_spectrumRate/2);
|
||||
ui->glSpectrum->setSampleRate(m_spectrumRate);
|
||||
ui->glSpectrum->setSsbSpectrum(true);
|
||||
ui->glSpectrum->setLsbDisplay(bw < 0);
|
||||
ui->lowCutText->setText(tr("%1k").arg(lwStr));
|
||||
|
||||
ui->BW->blockSignals(true);
|
||||
ui->lowCut->blockSignals(true);
|
||||
|
||||
ui->BW->setMaximum(bwMax);
|
||||
ui->BW->setValue(bw);
|
||||
ui->lowCut->setValue(lw);
|
||||
|
||||
ui->lowCut->blockSignals(false);
|
||||
ui->BW->blockSignals(false);
|
||||
ui->glSpectrum->setLsbDisplay(false);
|
||||
|
||||
m_settings.m_spanLog2 = spanLog2;
|
||||
m_settings.m_bandwidth = bw * 100;
|
||||
m_settings.m_lowCutoff = lw * 100;
|
||||
|
||||
applySettings(force);
|
||||
|
||||
bool applySettingsWereBlocked = blockApplySettings(true);
|
||||
m_channelMarker.setBandwidth(bw * 200);
|
||||
blockApplySettings(applySettingsWereBlocked);
|
||||
}
|
||||
|
||||
void FreeDVModGUI::displaySettings()
|
||||
@ -505,15 +445,9 @@ void FreeDVModGUI::displaySettings()
|
||||
m_channelMarker.blockSignals(true);
|
||||
m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset);
|
||||
m_channelMarker.setTitle(m_settings.m_title);
|
||||
m_channelMarker.setBandwidth(m_settings.m_bandwidth * 2);
|
||||
m_channelMarker.setLowCutoff(m_settings.m_lowCutoff);
|
||||
|
||||
if (m_settings.m_bandwidth < 0) {
|
||||
m_channelMarker.setSidebands(ChannelMarker::lsb);
|
||||
} else {
|
||||
m_channelMarker.setSidebands(ChannelMarker::usb);
|
||||
}
|
||||
|
||||
m_channelMarker.setBandwidth(FreeDVModSettings::getHiCutoff(m_settings.m_freeDVMode) * 2);
|
||||
m_channelMarker.setLowCutoff(FreeDVModSettings::getLowCutoff(m_settings.m_freeDVMode));
|
||||
m_channelMarker.setSidebands(ChannelMarker::usb);
|
||||
m_channelMarker.blockSignals(false);
|
||||
m_channelMarker.setColor(m_settings.m_rgbColor);
|
||||
|
||||
@ -527,22 +461,15 @@ void FreeDVModGUI::displaySettings()
|
||||
|
||||
// Prevent uncontrolled triggering of applyBandwidths
|
||||
ui->spanLog2->blockSignals(true);
|
||||
ui->BW->blockSignals(true);
|
||||
|
||||
ui->spanLog2->setValue(5 - m_settings.m_spanLog2);
|
||||
|
||||
ui->BW->setValue(roundf(m_settings.m_bandwidth/100.0));
|
||||
QString s = QString::number(m_settings.m_bandwidth/1000.0, 'f', 1);
|
||||
|
||||
ui->BWText->setText(tr("%1k").arg(s));
|
||||
QString s = QString::number(m_freeDVMod->getHiCutoff()/1000.0, 'f', 1);
|
||||
|
||||
ui->spanLog2->blockSignals(false);
|
||||
ui->BW->blockSignals(false);
|
||||
|
||||
// The only one of the four signals triggering applyBandwidths will trigger it once only with all other values
|
||||
// set correctly and therefore validate the settings and apply them to dependent widgets
|
||||
ui->lowCut->setValue(m_settings.m_lowCutoff / 100.0);
|
||||
ui->lowCutText->setText(tr("%1k").arg(m_settings.m_lowCutoff / 1000.0));
|
||||
|
||||
ui->deltaFrequency->setValue(m_settings.m_inputFrequencyOffset);
|
||||
|
||||
|
@ -79,9 +79,6 @@ private:
|
||||
bool m_enableNavTime;
|
||||
MessageQueue m_inputMessageQueue;
|
||||
|
||||
QIcon m_iconDSBUSB;
|
||||
QIcon m_iconDSBLSB;
|
||||
|
||||
explicit FreeDVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx, QWidget* parent = 0);
|
||||
virtual ~FreeDVModGUI();
|
||||
|
||||
@ -100,10 +97,9 @@ private slots:
|
||||
void handleSourceMessages();
|
||||
void on_deltaFrequency_changed(qint64 value);
|
||||
void on_spanLog2_valueChanged(int value);
|
||||
void on_BW_valueChanged(int value);
|
||||
void on_lowCut_valueChanged(int value);
|
||||
void on_volume_valueChanged(int value);
|
||||
void on_audioMute_toggled(bool checked);
|
||||
void on_freeDVMode_currentIndexChanged(int index);
|
||||
void on_tone_toggled(bool checked);
|
||||
void on_toneFrequency_valueChanged(int value);
|
||||
void on_mic_toggled(bool checked);
|
||||
|
@ -165,383 +165,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="spanLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="spanLabel">
|
||||
<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>Span</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="spanLog2">
|
||||
<property name="toolTip">
|
||||
<string>Spectrum display frequency span</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="sliderPosition">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="invertedAppearance">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="invertedControls">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="spanText">
|
||||
<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>6.0k</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="lowCutLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="lowCutLabel">
|
||||
<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>Low cut</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="TickedSlider" name="lowCut">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Highpass filter cutoff frequency (SSB)</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>-60</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>60</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="tickPosition">
|
||||
<enum>QSlider::NoTicks</enum>
|
||||
</property>
|
||||
<property name="tickInterval">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="lowCutText">
|
||||
<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="bqndwidthLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="BWLabel">
|
||||
<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>Hi cut</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="TickedSlider" name="BW">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Lowpass filter cutoff frequency</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>-60</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>60</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="BWText">
|
||||
<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="scaleLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="scalePadLeft">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>10</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>f </string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="scaleMinus">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>10</width>
|
||||
<height>10</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>-</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="lsbLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>LSB</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="scaleCenter">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>12</width>
|
||||
<height>10</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="usbLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>USB</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="scalePlus">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>10</width>
|
||||
<height>10</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>8</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>+</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="scalePadRight">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>10</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="volumeLayout">
|
||||
<item>
|
||||
@ -752,6 +375,33 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="freeDVMode">
|
||||
<property name="toolTip">
|
||||
<string>FreeDV mode</string>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>2400A</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>1600</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>800XA</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>700D</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
@ -927,6 +577,82 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="spanLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="spanLabel">
|
||||
<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>Span</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="spanLog2">
|
||||
<property name="toolTip">
|
||||
<string>Spectrum display frequency span</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="sliderPosition">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="invertedAppearance">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="invertedControls">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="spanText">
|
||||
<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>6.0k</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="spectrumContainer" native="true">
|
||||
@ -1021,11 +747,6 @@
|
||||
<header>gui/valuedialz.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>TickedSlider</class>
|
||||
<extends>QSlider</extends>
|
||||
<header>gui/tickedslider.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="../../../sdrgui/resources/res.qrc"/>
|
||||
|
@ -32,8 +32,6 @@ FreeDVModSettings::FreeDVModSettings() :
|
||||
void FreeDVModSettings::resetToDefaults()
|
||||
{
|
||||
m_inputFrequencyOffset = 0;
|
||||
m_bandwidth = 3000.0;
|
||||
m_lowCutoff = 300.0;
|
||||
m_toneFrequency = 1000.0;
|
||||
m_volumeFactor = 1.0;
|
||||
m_spanLog2 = 3;
|
||||
@ -43,6 +41,7 @@ void FreeDVModSettings::resetToDefaults()
|
||||
m_title = "FreeDV Modulator";
|
||||
m_modAFInput = FreeDVModInputAF::FreeDVModInputNone;
|
||||
m_audioDeviceName = AudioDeviceManager::m_defaultDeviceName;
|
||||
m_freeDVMode = FreeDVMode::FreeDVMode2400A;
|
||||
m_useReverseAPI = false;
|
||||
m_reverseAPIAddress = "127.0.0.1";
|
||||
m_reverseAPIPort = 8888;
|
||||
@ -55,7 +54,6 @@ QByteArray FreeDVModSettings::serialize() const
|
||||
SimpleSerializer s(1);
|
||||
|
||||
s.writeS32(1, m_inputFrequencyOffset);
|
||||
s.writeS32(2, roundf(m_bandwidth / 100.0));
|
||||
s.writeS32(3, roundf(m_toneFrequency / 10.0));
|
||||
|
||||
if (m_spectrumGUI) {
|
||||
@ -68,8 +66,8 @@ QByteArray FreeDVModSettings::serialize() const
|
||||
s.writeBlob(6, m_cwKeyerGUI->serialize());
|
||||
}
|
||||
|
||||
s.writeS32(7, roundf(m_lowCutoff / 100.0));
|
||||
s.writeS32(8, m_spanLog2);
|
||||
s.writeS32(10, (int) m_freeDVMode);
|
||||
|
||||
if (m_channelMarker) {
|
||||
s.writeBlob(18, m_channelMarker->serialize());
|
||||
@ -106,9 +104,6 @@ bool FreeDVModSettings::deserialize(const QByteArray& data)
|
||||
d.readS32(1, &tmp, 0);
|
||||
m_inputFrequencyOffset = tmp;
|
||||
|
||||
d.readS32(2, &tmp, 30);
|
||||
m_bandwidth = tmp * 100.0;
|
||||
|
||||
d.readS32(3, &tmp, 100);
|
||||
m_toneFrequency = tmp * 10.0;
|
||||
|
||||
@ -125,11 +120,15 @@ bool FreeDVModSettings::deserialize(const QByteArray& data)
|
||||
m_cwKeyerGUI->deserialize(bytetmp);
|
||||
}
|
||||
|
||||
d.readS32(7, &tmp, 3);
|
||||
m_lowCutoff = tmp * 100.0;
|
||||
|
||||
d.readS32(8, &m_spanLog2, 3);
|
||||
|
||||
d.readS32(10, &tmp, 0);
|
||||
if ((tmp < 0) || (tmp > (int) FreeDVMode::FreeDVMode700D)) {
|
||||
m_freeDVMode = FreeDVMode::FreeDVMode2400A;
|
||||
} else {
|
||||
m_freeDVMode = (FreeDVMode) tmp;
|
||||
}
|
||||
|
||||
if (m_channelMarker) {
|
||||
d.readBlob(18, &bytetmp);
|
||||
m_channelMarker->deserialize(bytetmp);
|
||||
@ -168,3 +167,39 @@ bool FreeDVModSettings::deserialize(const QByteArray& data)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int FreeDVModSettings::getHiCutoff(FreeDVMode freeDVMode)
|
||||
{
|
||||
switch(freeDVMode)
|
||||
{
|
||||
case FreeDVModSettings::FreeDVMode800XA: // C4FM NB
|
||||
return 2400;
|
||||
break;
|
||||
case FreeDVModSettings::FreeDVMode700D: // OFDM
|
||||
case FreeDVModSettings::FreeDVMode1600: // OFDM
|
||||
return 2200.0;
|
||||
break;
|
||||
case FreeDVModSettings::FreeDVMode2400A: // C4FM WB
|
||||
default:
|
||||
return 6000.0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int FreeDVModSettings::getLowCutoff(FreeDVMode freeDVMode)
|
||||
{
|
||||
switch(freeDVMode)
|
||||
{
|
||||
case FreeDVModSettings::FreeDVMode800XA: // C4FM NB
|
||||
return 400.0;
|
||||
break;
|
||||
case FreeDVModSettings::FreeDVMode700D: // OFDM
|
||||
case FreeDVModSettings::FreeDVMode1600: // OFDM
|
||||
return 800.0;
|
||||
break;
|
||||
case FreeDVModSettings::FreeDVMode2400A: // C4FM WB
|
||||
default:
|
||||
return 0.0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -34,9 +34,15 @@ struct FreeDVModSettings
|
||||
FreeDVModInputCWTone
|
||||
} FreeDVModInputAF;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FreeDVMode2400A,
|
||||
FreeDVMode1600,
|
||||
FreeDVMode800XA,
|
||||
FreeDVMode700D
|
||||
} FreeDVMode;
|
||||
|
||||
qint64 m_inputFrequencyOffset;
|
||||
Real m_bandwidth;
|
||||
Real m_lowCutoff;
|
||||
float m_toneFrequency;
|
||||
float m_volumeFactor;
|
||||
int m_spanLog2;
|
||||
@ -47,6 +53,7 @@ struct FreeDVModSettings
|
||||
QString m_title;
|
||||
FreeDVModInputAF m_modAFInput;
|
||||
QString m_audioDeviceName;
|
||||
FreeDVMode m_freeDVMode;
|
||||
|
||||
bool m_useReverseAPI;
|
||||
QString m_reverseAPIAddress;
|
||||
@ -65,6 +72,9 @@ struct FreeDVModSettings
|
||||
void setCWKeyerGUI(Serializable *cwKeyerGUI) { m_cwKeyerGUI = cwKeyerGUI; }
|
||||
QByteArray serialize() const;
|
||||
bool deserialize(const QByteArray& data);
|
||||
|
||||
static int getHiCutoff(FreeDVMode freeDVMode);
|
||||
static int getLowCutoff(FreeDVMode freeDVMode);
|
||||
};
|
||||
|
||||
|
||||
|
@ -2602,6 +2602,9 @@ margin-bottom: 20px;
|
||||
"audioDeviceName" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"freeDVMode" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"modAFInput" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
@ -24468,7 +24471,7 @@ except ApiException as e:
|
||||
</div>
|
||||
<div id="generator">
|
||||
<div class="content">
|
||||
Generated 2019-02-22T10:50:46.075+01:00
|
||||
Generated 2019-02-22T15:22:55.188+01:00
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -28,6 +28,8 @@ FreeDVModSettings:
|
||||
type: string
|
||||
audioDeviceName:
|
||||
type: string
|
||||
freeDVMode:
|
||||
type: integer
|
||||
modAFInput:
|
||||
type: integer
|
||||
useReverseAPI:
|
||||
|
@ -28,6 +28,8 @@ FreeDVModSettings:
|
||||
type: string
|
||||
audioDeviceName:
|
||||
type: string
|
||||
freeDVMode:
|
||||
type: integer
|
||||
modAFInput:
|
||||
type: integer
|
||||
useReverseAPI:
|
||||
|
@ -2602,6 +2602,9 @@ margin-bottom: 20px;
|
||||
"audioDeviceName" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"freeDVMode" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"modAFInput" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
@ -24468,7 +24471,7 @@ except ApiException as e:
|
||||
</div>
|
||||
<div id="generator">
|
||||
<div class="content">
|
||||
Generated 2019-02-22T10:50:46.075+01:00
|
||||
Generated 2019-02-22T15:22:55.188+01:00
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -50,6 +50,8 @@ SWGFreeDVModSettings::SWGFreeDVModSettings() {
|
||||
m_title_isSet = false;
|
||||
audio_device_name = nullptr;
|
||||
m_audio_device_name_isSet = false;
|
||||
free_dv_mode = 0;
|
||||
m_free_dv_mode_isSet = false;
|
||||
mod_af_input = 0;
|
||||
m_mod_af_input_isSet = false;
|
||||
use_reverse_api = 0;
|
||||
@ -94,6 +96,8 @@ SWGFreeDVModSettings::init() {
|
||||
m_title_isSet = false;
|
||||
audio_device_name = new QString("");
|
||||
m_audio_device_name_isSet = false;
|
||||
free_dv_mode = 0;
|
||||
m_free_dv_mode_isSet = false;
|
||||
mod_af_input = 0;
|
||||
m_mod_af_input_isSet = false;
|
||||
use_reverse_api = 0;
|
||||
@ -129,6 +133,7 @@ SWGFreeDVModSettings::cleanup() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(reverse_api_address != nullptr) {
|
||||
delete reverse_api_address;
|
||||
}
|
||||
@ -173,6 +178,8 @@ SWGFreeDVModSettings::fromJsonObject(QJsonObject &pJson) {
|
||||
|
||||
::SWGSDRangel::setValue(&audio_device_name, pJson["audioDeviceName"], "QString", "QString");
|
||||
|
||||
::SWGSDRangel::setValue(&free_dv_mode, pJson["freeDVMode"], "qint32", "");
|
||||
|
||||
::SWGSDRangel::setValue(&mod_af_input, pJson["modAFInput"], "qint32", "");
|
||||
|
||||
::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", "");
|
||||
@ -236,6 +243,9 @@ SWGFreeDVModSettings::asJsonObject() {
|
||||
if(audio_device_name != nullptr && *audio_device_name != QString("")){
|
||||
toJsonValue(QString("audioDeviceName"), audio_device_name, obj, QString("QString"));
|
||||
}
|
||||
if(m_free_dv_mode_isSet){
|
||||
obj->insert("freeDVMode", QJsonValue(free_dv_mode));
|
||||
}
|
||||
if(m_mod_af_input_isSet){
|
||||
obj->insert("modAFInput", QJsonValue(mod_af_input));
|
||||
}
|
||||
@ -371,6 +381,16 @@ SWGFreeDVModSettings::setAudioDeviceName(QString* audio_device_name) {
|
||||
this->m_audio_device_name_isSet = true;
|
||||
}
|
||||
|
||||
qint32
|
||||
SWGFreeDVModSettings::getFreeDvMode() {
|
||||
return free_dv_mode;
|
||||
}
|
||||
void
|
||||
SWGFreeDVModSettings::setFreeDvMode(qint32 free_dv_mode) {
|
||||
this->free_dv_mode = free_dv_mode;
|
||||
this->m_free_dv_mode_isSet = true;
|
||||
}
|
||||
|
||||
qint32
|
||||
SWGFreeDVModSettings::getModAfInput() {
|
||||
return mod_af_input;
|
||||
@ -457,6 +477,7 @@ SWGFreeDVModSettings::isSet(){
|
||||
if(m_rgb_color_isSet){ isObjectUpdated = true; break;}
|
||||
if(title != nullptr && *title != QString("")){ isObjectUpdated = true; break;}
|
||||
if(audio_device_name != nullptr && *audio_device_name != QString("")){ isObjectUpdated = true; break;}
|
||||
if(m_free_dv_mode_isSet){ isObjectUpdated = true; break;}
|
||||
if(m_mod_af_input_isSet){ isObjectUpdated = true; break;}
|
||||
if(m_use_reverse_api_isSet){ isObjectUpdated = true; break;}
|
||||
if(reverse_api_address != nullptr && *reverse_api_address != QString("")){ isObjectUpdated = true; break;}
|
||||
|
@ -76,6 +76,9 @@ public:
|
||||
QString* getAudioDeviceName();
|
||||
void setAudioDeviceName(QString* audio_device_name);
|
||||
|
||||
qint32 getFreeDvMode();
|
||||
void setFreeDvMode(qint32 free_dv_mode);
|
||||
|
||||
qint32 getModAfInput();
|
||||
void setModAfInput(qint32 mod_af_input);
|
||||
|
||||
@ -134,6 +137,9 @@ private:
|
||||
QString* audio_device_name;
|
||||
bool m_audio_device_name_isSet;
|
||||
|
||||
qint32 free_dv_mode;
|
||||
bool m_free_dv_mode_isSet;
|
||||
|
||||
qint32 mod_af_input;
|
||||
bool m_mod_af_input_isSet;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user