diff --git a/sdrbase/dsp/glspectrumsettings.cpp b/sdrbase/dsp/glspectrumsettings.cpp
index 83c001f58..3bd2c742c 100644
--- a/sdrbase/dsp/glspectrumsettings.cpp
+++ b/sdrbase/dsp/glspectrumsettings.cpp
@@ -47,6 +47,8 @@ void GLSpectrumSettings::resetToDefaults()
m_averagingMode = AvgModeNone;
m_averagingIndex = 0;
m_linear = false;
+ m_wsSpectrumAddress = "127.0.0.1";
+ m_wsSpectrumPort = 8887;
}
QByteArray GLSpectrumSettings::serialize() const
@@ -74,6 +76,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);
return s.final();
}
@@ -88,6 +92,7 @@ bool GLSpectrumSettings::deserialize(const QByteArray& data)
}
int tmp;
+ uint32_t utmp;
if (d.getVersion() == 1)
{
@@ -116,6 +121,9 @@ bool GLSpectrumSettings::deserialize(const QByteArray& data)
m_averagingIndex = getAveragingIndex(tmp, m_averagingMode);
m_averagingNb = 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;
return true;
}
diff --git a/sdrbase/dsp/glspectrumsettings.h b/sdrbase/dsp/glspectrumsettings.h
index a269ca75e..4e5c9cb32 100644
--- a/sdrbase/dsp/glspectrumsettings.h
+++ b/sdrbase/dsp/glspectrumsettings.h
@@ -58,6 +58,8 @@ public:
int m_averagingIndex;
unsigned int m_averagingNb;
bool m_linear; //!< linear else logarithmic scale
+ QString m_wsSpectrumAddress;
+ uint16_t m_wsSpectrumPort;
GLSpectrumSettings();
virtual ~GLSpectrumSettings();
diff --git a/sdrbase/dsp/spectrumvis.cpp b/sdrbase/dsp/spectrumvis.cpp
index 5f0778d7e..f587aa518 100644
--- a/sdrbase/dsp/spectrumvis.cpp
+++ b/sdrbase/dsp/spectrumvis.cpp
@@ -694,6 +694,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)
@@ -734,6 +736,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;
@@ -765,19 +772,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 bb1ad4366..66e1ce372 100644
--- a/sdrgui/CMakeLists.txt
+++ b/sdrgui/CMakeLists.txt
@@ -54,6 +54,7 @@ set(sdrgui_SOURCES
gui/tvscreen.cpp
gui/valuedial.cpp
gui/valuedialz.cpp
+ gui/wsspectrumsettingsdialog.cpp
dsp/scopevis.cpp
dsp/scopevisxy.cpp
@@ -127,6 +128,7 @@ set(sdrgui_HEADERS
gui/tvscreen.h
gui/valuedial.h
gui/valuedialz.h
+ gui/wsspectrumsettingsdialog.h
dsp/scopevis.h
dsp/scopevisxy.h
@@ -148,34 +150,35 @@ set(sdrgui_HEADERS
)
set(sdrgui_FORMS
- mainwindow.ui
- gui/aboutdialog.ui
- gui/addpresetdialog.ui
- gui/ambedevicesdialog.ui
- gui/basicchannelsettingsdialog.ui
- gui/basicdevicesettingsdialog.ui
- gui/commandoutputdialog.ui
- gui/cwkeyergui.ui
- gui/devicestreamselectiondialog.ui
- gui/deviceuserargsdialog.ui
- gui/editcommanddialog.ui
- gui/externalclockdialog.ui
- gui/glscopegui.ui
- gui/glspectrumgui.ui
- gui/pluginsdialog.ui
- gui/audiodialog.ui
- gui/audioselectdialog.ui
- gui/samplingdevicecontrol.ui
- gui/samplingdevicedialog.ui
- gui/myposdialog.ui
- gui/transverterdialog.ui
- gui/loggingdialog.ui
- soapygui/discreterangegui.ui
- soapygui/intervalrangegui.ui
- soapygui/intervalslidergui.ui
- soapygui/complexfactorgui.ui
- soapygui/arginfogui.ui
- )
+ mainwindow.ui
+ gui/aboutdialog.ui
+ gui/addpresetdialog.ui
+ gui/ambedevicesdialog.ui
+ gui/basicchannelsettingsdialog.ui
+ gui/basicdevicesettingsdialog.ui
+ gui/commandoutputdialog.ui
+ gui/cwkeyergui.ui
+ gui/devicestreamselectiondialog.ui
+ gui/deviceuserargsdialog.ui
+ gui/editcommanddialog.ui
+ gui/externalclockdialog.ui
+ gui/glscopegui.ui
+ gui/glspectrumgui.ui
+ 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
+ soapygui/complexfactorgui.ui
+ soapygui/arginfogui.ui
+)
if (LIMESUITE_FOUND)
set(sdrgui_SOURCES
diff --git a/sdrgui/gui/glspectrumgui.cpp b/sdrgui/gui/glspectrumgui.cpp
index 0d4e49551..4ffa6a4cd 100644
--- a/sdrgui/gui/glspectrumgui.cpp
+++ b/sdrgui/gui/glspectrumgui.cpp
@@ -23,6 +23,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"
@@ -47,6 +49,10 @@ GLSpectrumGUI::GLSpectrumGUI(QWidget* parent) :
}
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();
@@ -186,16 +192,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
+ // );
}
}
@@ -503,3 +511,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 40474b2ce..ae8acfe12 100644
--- a/sdrgui/gui/glspectrumgui.h
+++ b/sdrgui/gui/glspectrumgui.h
@@ -103,6 +103,7 @@ private slots:
void on_clearSpectrum_clicked(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 7fd12f85c..e468dcd11 100644
--- a/sdrgui/gui/glspectrumgui.ui
+++ b/sdrgui/gui/glspectrumgui.ui
@@ -6,7 +6,7 @@
0
0
- 378
+ 357
59
@@ -709,6 +709,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
+
+
+
+
+