From 3730cbf865db4e03f0c3ca05bfe655760f6df25f Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 1 May 2020 11:06:56 +0200 Subject: [PATCH] Websocket spectrum: Websocket spectrum settings dialog implementation taking settings into account --- sdrbase/dsp/glspectrumsettings.cpp | 8 ++ sdrbase/dsp/glspectrumsettings.h | 2 + sdrbase/dsp/spectrumvis.cpp | 19 ++-- sdrgui/CMakeLists.txt | 4 + sdrgui/gui/glspectrumgui.cpp | 46 ++++++-- sdrgui/gui/glspectrumgui.h | 1 + sdrgui/gui/glspectrumgui.ui | 12 ++ sdrgui/gui/wsspectrumsettingsdialog.cpp | 74 ++++++++++++ sdrgui/gui/wsspectrumsettingsdialog.h | 54 +++++++++ sdrgui/gui/wsspectrumsettingsdialog.ui | 145 ++++++++++++++++++++++++ 10 files changed, 345 insertions(+), 20 deletions(-) create mode 100644 sdrgui/gui/wsspectrumsettingsdialog.cpp create mode 100644 sdrgui/gui/wsspectrumsettingsdialog.h create mode 100644 sdrgui/gui/wsspectrumsettingsdialog.ui diff --git a/sdrbase/dsp/glspectrumsettings.cpp b/sdrbase/dsp/glspectrumsettings.cpp index efd6c66fa..454585a03 100644 --- a/sdrbase/dsp/glspectrumsettings.cpp +++ b/sdrbase/dsp/glspectrumsettings.cpp @@ -52,6 +52,8 @@ void GLSpectrumSettings::resetToDefaults() m_linear = false; m_ssb = false; m_usb = true; + m_wsSpectrumAddress = "127.0.0.1"; + m_wsSpectrumPort = 8887; } QByteArray GLSpectrumSettings::serialize() const @@ -78,6 +80,8 @@ QByteArray GLSpectrumSettings::serialize() const s.writeS32(19, (int) m_averagingMode); s.writeS32(20, (qint32) getAveragingValue(m_averagingIndex, m_averagingMode)); s.writeBool(21, m_linear); + s.writeString(22, m_wsSpectrumAddress); + s.writeU32(23, m_wsSpectrumPort); s.writeBool(24, m_ssb); s.writeBool(25, m_usb); @@ -94,6 +98,7 @@ bool GLSpectrumSettings::deserialize(const QByteArray& data) } int tmp; + uint32_t utmp; if (d.getVersion() == 1) { @@ -121,6 +126,9 @@ bool GLSpectrumSettings::deserialize(const QByteArray& data) m_averagingIndex = getAveragingIndex(tmp, m_averagingMode); m_averagingValue = getAveragingValue(m_averagingIndex, m_averagingMode); d.readBool(21, &m_linear, false); + d.readString(22, &m_wsSpectrumAddress, "127.0.0.1"); + d.readU32(23, &utmp, 8887); + m_wsSpectrumPort = utmp < 1024 ? 1024 : utmp > 65535 ? 65535 : utmp; d.readBool(24, &m_ssb, false); d.readBool(25, &m_usb, true); diff --git a/sdrbase/dsp/glspectrumsettings.h b/sdrbase/dsp/glspectrumsettings.h index 1caf5df70..a3a734c7a 100644 --- a/sdrbase/dsp/glspectrumsettings.h +++ b/sdrbase/dsp/glspectrumsettings.h @@ -59,6 +59,8 @@ public: bool m_linear; //!< linear else logarithmic scale bool m_ssb; //!< SSB display with spectrum center at start of array or display - else spectrum center is on center bool m_usb; //!< USB display with increasing frequencies towads the right - else decreasing frequencies + QString m_wsSpectrumAddress; + uint16_t m_wsSpectrumPort; GLSpectrumSettings(); virtual ~GLSpectrumSettings(); diff --git a/sdrbase/dsp/spectrumvis.cpp b/sdrbase/dsp/spectrumvis.cpp index c31bc6ffd..3ca53414f 100644 --- a/sdrbase/dsp/spectrumvis.cpp +++ b/sdrbase/dsp/spectrumvis.cpp @@ -745,6 +745,8 @@ void SpectrumVis::applySettings(const GLSpectrumSettings& settings, bool force) << " m_refLevel: " << settings.m_refLevel << " m_powerRange: " << settings.m_powerRange << " m_linear: " << settings.m_linear + << " m_wsSpectrumAddress: " << settings.m_wsSpectrumAddress + << " m_wsSpectrumPort: " << settings.m_wsSpectrumPort << " force: " << force; if ((fftSize != m_settings.m_fftSize) || force) @@ -785,6 +787,11 @@ void SpectrumVis::applySettings(const GLSpectrumSettings& settings, bool force) m_max.resize(fftSize, averagingValue); } + if ((settings.m_wsSpectrumAddress != m_settings.m_wsSpectrumAddress) + || (settings.m_wsSpectrumPort != m_settings.m_wsSpectrumPort) || force) { + handleConfigureWSSpectrum(settings.m_wsSpectrumAddress, settings.m_wsSpectrumPort); + } + m_settings = settings; m_settings.m_fftSize = fftSize; m_settings.m_fftOverlap = overlapPercent; @@ -816,19 +823,11 @@ void SpectrumVis::handleWSOpenClose(bool openClose) void SpectrumVis::handleConfigureWSSpectrum(const QString& address, uint16_t port) { - QMutexLocker mutexLocker(&m_mutex); - bool wsSpectrumWasOpen = false; - if (m_wsSpectrum.socketOpened()) { m_wsSpectrum.closeSocket(); - wsSpectrumWasOpen = true; - } - - m_wsSpectrum.setListeningAddress(address); - m_wsSpectrum.setPort(port); - - if (wsSpectrumWasOpen) { + m_wsSpectrum.setListeningAddress(address); + m_wsSpectrum.setPort(port); m_wsSpectrum.openSocket(); } } \ No newline at end of file diff --git a/sdrgui/CMakeLists.txt b/sdrgui/CMakeLists.txt index 81fb4441b..1a66d67b4 100644 --- a/sdrgui/CMakeLists.txt +++ b/sdrgui/CMakeLists.txt @@ -63,6 +63,7 @@ set(sdrgui_SOURCES gui/tvscreenanalog.cpp gui/valuedial.cpp gui/valuedialz.cpp + gui/wsspectrumsettingsdialog.cpp dsp/scopevis.cpp dsp/scopevisxy.cpp @@ -148,6 +149,7 @@ set(sdrgui_HEADERS gui/tvscreenanalog.h gui/valuedial.h gui/valuedialz.h + gui/wsspectrumsettingsdialog.h dsp/scopevis.h dsp/scopevisxy.h @@ -196,10 +198,12 @@ set(sdrgui_FORMS gui/pluginsdialog.ui gui/audiodialog.ui gui/audioselectdialog.ui + gui/samplingdevicecontrol.ui gui/samplingdevicedialog.ui gui/myposdialog.ui gui/transverterdialog.ui gui/loggingdialog.ui + gui/wsspectrumsettingsdialog.ui soapygui/discreterangegui.ui soapygui/intervalrangegui.ui soapygui/intervalslidergui.ui diff --git a/sdrgui/gui/glspectrumgui.cpp b/sdrgui/gui/glspectrumgui.cpp index 0bf76d72a..1150464c0 100644 --- a/sdrgui/gui/glspectrumgui.cpp +++ b/sdrgui/gui/glspectrumgui.cpp @@ -26,6 +26,8 @@ #include "dsp/fftwindow.h" #include "dsp/spectrumvis.h" #include "gui/glspectrum.h" +#include "gui/crightclickenabler.h" +#include "gui/wsspectrumsettingsdialog.h" #include "util/simpleserializer.h" #include "ui_glspectrumgui.h" @@ -53,6 +55,10 @@ GLSpectrumGUI::GLSpectrumGUI(QWidget* parent) : // ui->levelRange->setStyleSheet("background-color: rgb(79, 79, 79);"); connect(&m_messageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); + + CRightClickEnabler *wsSpectrumRightClickEnabler = new CRightClickEnabler(ui->wsSpectrum); + connect(wsSpectrumRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(openWebsocketSpectrumSettingsDialog(const QPoint &))); + displaySettings(); setAveragingCombo(); applySettings(); @@ -193,16 +199,18 @@ void GLSpectrumGUI::applySettings() if (m_spectrumVis) { - m_spectrumVis->configure( - m_settings.m_fftSize, - m_settings.m_refLevel, - m_settings.m_powerRange, - m_settings.m_fftOverlap, - getAveragingValue(m_settings.m_averagingIndex, m_settings.m_averagingMode), - (SpectrumVis::AvgMode) m_settings.m_averagingMode, - (FFTWindow::Function) m_settings.m_fftWindow, - m_settings.m_linear - ); + SpectrumVis::MsgConfigureSpectrumVis *msg = SpectrumVis::MsgConfigureSpectrumVis::create(m_settings, false); + m_spectrumVis->getInputMessageQueue()->push(msg); + // m_spectrumVis->configure( + // m_settings.m_fftSize, + // m_settings.m_refLevel, + // m_settings.m_powerRange, + // m_settings.m_fftOverlap, + // getAveragingValue(m_settings.m_averagingIndex, m_settings.m_averagingMode), + // (SpectrumVis::AvgMode) m_settings.m_averagingMode, + // (FFTWindow::Function) m_settings.m_fftWindow, + // m_settings.m_linear + // ); } } @@ -529,3 +537,21 @@ void GLSpectrumGUI::handleInputMessages() } } } + +void GLSpectrumGUI::openWebsocketSpectrumSettingsDialog(const QPoint& p) +{ + WebsocketSpectrumSettingsDialog dialog(this); + dialog.setAddress(m_settings.m_wsSpectrumAddress); + dialog.setPort(m_settings.m_wsSpectrumPort); + + dialog.move(p); + dialog.exec(); + + if (dialog.hasChanged()) + { + m_settings.m_wsSpectrumAddress = dialog.getAddress(); + m_settings.m_wsSpectrumPort = dialog.getPort(); + + applySettings(); + } +} diff --git a/sdrgui/gui/glspectrumgui.h b/sdrgui/gui/glspectrumgui.h index 263e6a5b7..f2f3351c9 100644 --- a/sdrgui/gui/glspectrumgui.h +++ b/sdrgui/gui/glspectrumgui.h @@ -104,6 +104,7 @@ private slots: void on_freeze_toggled(bool checked); void handleInputMessages(); + void openWebsocketSpectrumSettingsDialog(const QPoint& p); }; #endif // INCLUDE_GLSPECTRUMGUI_H diff --git a/sdrgui/gui/glspectrumgui.ui b/sdrgui/gui/glspectrumgui.ui index 56c82f937..bd12bb3ba 100644 --- a/sdrgui/gui/glspectrumgui.ui +++ b/sdrgui/gui/glspectrumgui.ui @@ -694,6 +694,18 @@ + + + + Left: toggle websocket spectrum - Right: websocket spectrum parameters + + + + :/stream.png + + + + diff --git a/sdrgui/gui/wsspectrumsettingsdialog.cpp b/sdrgui/gui/wsspectrumsettingsdialog.cpp new file mode 100644 index 000000000..0267216af --- /dev/null +++ b/sdrgui/gui/wsspectrumsettingsdialog.cpp @@ -0,0 +1,74 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2015 Edouard Griffiths, F4EXB // +// // +// 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 . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "wsspectrumsettingsdialog.h" +#include "ui_wsspectrumsettingsdialog.h" + +WebsocketSpectrumSettingsDialog::WebsocketSpectrumSettingsDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::WebsocketSpectrumSettingsDialog), + m_hasChanged(false) +{ + ui->setupUi(this); + setAddress("127.0.0.1"); + setPort(8887); +} + +WebsocketSpectrumSettingsDialog::~WebsocketSpectrumSettingsDialog() +{ + delete ui; +} + +void WebsocketSpectrumSettingsDialog::setAddress(const QString& address) +{ + m_address = address; + ui->address->setText(m_address); +} + +void WebsocketSpectrumSettingsDialog::setPort(uint16_t port) +{ + if (port < 1024) { + return; + } else { + m_port = port; + } + + ui->port->setText(tr("%1").arg(m_port)); +} + +void WebsocketSpectrumSettingsDialog::on_address_editingFinished() +{ + m_address = ui->address->text(); +} + +void WebsocketSpectrumSettingsDialog::on_port_editingFinished() +{ + bool dataOk; + int port = ui->port->text().toInt(&dataOk); + + if ((!dataOk) || (port < 1024) || (port > 65535)) { + return; + } else { + m_port = port; + } +} + +void WebsocketSpectrumSettingsDialog::accept() +{ + m_hasChanged = true; + QDialog::accept(); +} diff --git a/sdrgui/gui/wsspectrumsettingsdialog.h b/sdrgui/gui/wsspectrumsettingsdialog.h new file mode 100644 index 000000000..19210eabc --- /dev/null +++ b/sdrgui/gui/wsspectrumsettingsdialog.h @@ -0,0 +1,54 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2015 Edouard Griffiths, F4EXB // +// // +// 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 . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef WSSPECTRUMSETTINGSDIALOG_H +#define WSSPECTRUMSETTINGSDIALOG_H + +#include + +#include "../../exports/export.h" + +namespace Ui { + class WebsocketSpectrumSettingsDialog; +} + +class SDRGUI_API WebsocketSpectrumSettingsDialog : public QDialog +{ + Q_OBJECT + +public: + explicit WebsocketSpectrumSettingsDialog(QWidget *parent = nullptr); + ~WebsocketSpectrumSettingsDialog(); + bool hasChanged() const { return m_hasChanged; } + const QString& getAddress() const { return m_address; } + uint16_t getPort() const { return m_port; } + void setAddress(const QString& address); + void setPort(uint16_t port); + +private slots: + void on_address_editingFinished(); + void on_port_editingFinished(); + void accept(); + +private: + Ui::WebsocketSpectrumSettingsDialog *ui; + QString m_address; + uint16_t m_port; + bool m_hasChanged; +}; + +#endif // BASICDEVICESETTINGSDIALOG_H diff --git a/sdrgui/gui/wsspectrumsettingsdialog.ui b/sdrgui/gui/wsspectrumsettingsdialog.ui new file mode 100644 index 000000000..94a9500c5 --- /dev/null +++ b/sdrgui/gui/wsspectrumsettingsdialog.ui @@ -0,0 +1,145 @@ + + + WebsocketSpectrumSettingsDialog + + + + 0 + 0 + 394 + 77 + + + + + Liberation Sans + 9 + + + + Websocket spectrum settings + + + + + + + + Addr + + + + + + + + 120 + 0 + + + + Reverse API address + + + 000.000.000.000 + + + 127.0.0.1 + + + + + + + Port + + + + + + + + 45 + 0 + + + + + 45 + 16777215 + + + + Reverse API port + + + 00000 + + + 8887 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + WebsocketSpectrumSettingsDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + WebsocketSpectrumSettingsDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +