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
+
+
+
+
+