1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-03-11 18:49:35 -04:00

REST API: implemented GUI code for /sdrangel/deviceset/{deviceSetIndex}/spectrum/settings (PUT,PATCH) and /sdrangel/deviceset/{deviceSetIndex}/spectrum/server (POST,DELETE)

This commit is contained in:
f4exb 2020-05-06 01:38:23 +02:00
parent 946e45a6a3
commit 37de6d4bb7
9 changed files with 315 additions and 30 deletions

View File

@ -756,8 +756,32 @@ int SpectrumVis::webapiSpectrumSettingsGet(SWGSDRangel::SWGGLSpectrum& response,
return 200;
}
int SpectrumVis::webapiSpectrumSettingsPutPatch(
bool force,
const QStringList& spectrumSettingsKeys,
SWGSDRangel::SWGGLSpectrum& response, // query + response
QString& errorMessage)
{
(void) errorMessage;
GLSpectrumSettings settings = m_settings;
webapiUpdateSpectrumSettings(settings, spectrumSettingsKeys, response);
MsgConfigureSpectrumVis *msg = MsgConfigureSpectrumVis::create(settings, force);
m_inputMessageQueue.push(msg);
if (getMessageQueueToGUI()) // forward to GUI if any
{
MsgConfigureSpectrumVis *msgToGUI = MsgConfigureSpectrumVis::create(settings, force);
getMessageQueueToGUI()->push(msgToGUI);
}
webapiFormatSpectrumSettings(response, settings);
return 200;
}
int SpectrumVis::webapiSpectrumServerGet(SWGSDRangel::SWGSpectrumServer& response, QString& errorMessage) const
{
(void) errorMessage;
bool serverRunning = m_wsSpectrum.socketOpened();
QList<QHostAddress> peerHosts;
QList<quint16> peerPorts;
@ -776,6 +800,38 @@ int SpectrumVis::webapiSpectrumServerGet(SWGSDRangel::SWGSpectrumServer& respons
response.getClients()->back()->setPort(peerPorts.at(i));
}
}
return 200;
}
int SpectrumVis::webapiSpectrumServerPost(SWGSDRangel::SWGSuccessResponse& response, QString& errorMessage)
{
(void) errorMessage;
MsgConfigureWSpectrumOpenClose *msg = MsgConfigureWSpectrumOpenClose::create(true);
m_inputMessageQueue.push(msg);
if (getMessageQueueToGUI()) // forward to GUI if any
{
MsgConfigureWSpectrumOpenClose *msgToGui = MsgConfigureWSpectrumOpenClose::create(true);
getMessageQueueToGUI()->push(msgToGui);
}
return 200;
}
int SpectrumVis::webapiSpectrumServerDelete(SWGSDRangel::SWGSuccessResponse& response, QString& errorMessage)
{
(void) errorMessage;
MsgConfigureWSpectrumOpenClose *msg = MsgConfigureWSpectrumOpenClose::create(false);
m_inputMessageQueue.push(msg);
if (getMessageQueueToGUI()) // forward to GUI if any
{
MsgConfigureWSpectrumOpenClose *msgToGui = MsgConfigureWSpectrumOpenClose::create(false);
getMessageQueueToGUI()->push(msgToGui);
}
return 200;
}
void SpectrumVis::webapiFormatSpectrumSettings(SWGSDRangel::SWGGLSpectrum& response, const GLSpectrumSettings& settings)
@ -798,7 +854,7 @@ void SpectrumVis::webapiFormatSpectrumSettings(SWGSDRangel::SWGGLSpectrum& respo
response.setDisplayHistogram(settings.m_displayHistogram ? 1 : 0);
response.setDisplayGrid(settings.m_displayGrid ? 1 : 0);
response.setAveragingMode((int) settings.m_averagingMode);
response.setAveragingValue(settings.m_averagingNb);
response.setAveragingValue(GLSpectrumSettings::getAveragingValue(settings.m_averagingIndex, settings.m_averagingMode));
response.setLinear(settings.m_linear ? 1 : 0);
response.setSsb(settings.m_ssb ? 1 : 0);
response.setUsb(settings.m_usb ? 1 : 0);
@ -810,3 +866,85 @@ void SpectrumVis::webapiFormatSpectrumSettings(SWGSDRangel::SWGGLSpectrum& respo
response.setWsSpectrumAddress(new QString(settings.m_wsSpectrumAddress));
}
}
void SpectrumVis::webapiUpdateSpectrumSettings(
GLSpectrumSettings& settings,
const QStringList& spectrumSettingsKeys,
SWGSDRangel::SWGGLSpectrum& response)
{
if (spectrumSettingsKeys.contains("fftSize")) {
settings.m_fftSize = response.getFftSize();
}
if (spectrumSettingsKeys.contains("fftOverlap")) {
settings.m_fftOverlap = response.getFftOverlap();
}
if (spectrumSettingsKeys.contains("fftWindow")) {
settings.m_fftWindow = (FFTWindow::Function) response.getFftWindow();
}
if (spectrumSettingsKeys.contains("refLevel")) {
settings.m_refLevel = response.getRefLevel();
}
if (spectrumSettingsKeys.contains("powerRange")) {
settings.m_powerRange = response.getPowerRange();
}
if (spectrumSettingsKeys.contains("decay")) {
settings.m_decay = response.getDecay();
}
if (spectrumSettingsKeys.contains("decayDivisor")) {
settings.m_decayDivisor = response.getDecayDivisor();
}
if (spectrumSettingsKeys.contains("histogramStroke")) {
settings.m_histogramStroke = response.getHistogramStroke();
}
if (spectrumSettingsKeys.contains("displayGridIntensity")) {
settings.m_displayGridIntensity = response.getDisplayGridIntensity();
}
if (spectrumSettingsKeys.contains("displayTraceIntensity")) {
settings.m_displayTraceIntensity = response.getDisplayTraceIntensity();
}
if (spectrumSettingsKeys.contains("displayWaterfall")) {
settings.m_displayWaterfall = response.getDisplayWaterfall() != 0;
}
if (spectrumSettingsKeys.contains("invertedWaterfall")) {
settings.m_invertedWaterfall = response.getInvertedWaterfall() != 0;
}
if (spectrumSettingsKeys.contains("waterfallShare")) {
settings.m_waterfallShare = response.getWaterfallShare();
}
if (spectrumSettingsKeys.contains("displayMaxHold")) {
settings.m_displayMaxHold = response.getDisplayMaxHold() != 0;
}
if (spectrumSettingsKeys.contains("displayCurrent")) {
settings.m_displayCurrent = response.getDisplayCurrent() != 0;
}
if (spectrumSettingsKeys.contains("displayHistogram")) {
settings.m_displayHistogram = response.getDisplayHistogram() != 0;
}
if (spectrumSettingsKeys.contains("displayGrid")) {
settings.m_displayGrid = response.getDisplayGrid() != 0;
}
if (spectrumSettingsKeys.contains("averagingMode")) {
settings.m_averagingMode = (GLSpectrumSettings::AveragingMode) response.getAveragingMode();
}
if (spectrumSettingsKeys.contains("averagingValue"))
{
qint32 tmp = response.getAveragingValue();
settings.m_averagingIndex = GLSpectrumSettings::getAveragingIndex(tmp, settings.m_averagingMode);
settings.m_averagingValue = GLSpectrumSettings::getAveragingValue(settings.m_averagingIndex, settings.m_averagingMode);
}
if (spectrumSettingsKeys.contains("linear")) {
settings.m_linear = response.getLinear() != 0;
}
if (spectrumSettingsKeys.contains("ssb")) {
settings.m_ssb = response.getSsb() != 0;
}
if (spectrumSettingsKeys.contains("usb")) {
settings.m_usb = response.getUsb() != 0;
}
if (spectrumSettingsKeys.contains("wsSpectrumAddress")) {
settings.m_wsSpectrumAddress = *response.getWsSpectrumAddress();
}
if (spectrumSettingsKeys.contains("wsSpectrumPort")) {
settings.m_wsSpectrumPort = response.getWsSpectrumPort();
}
}

View File

@ -40,6 +40,7 @@ class MessageQueue;
namespace SWGSDRangel {
class SWGGLSpectrum;
class SWGSpectrumServer;
class SWGSuccessResponse;
};
class SDRGUI_API SpectrumVis : public BasebandSampleSink {
@ -111,7 +112,14 @@ public:
virtual bool handleMessage(const Message& message);
int webapiSpectrumSettingsGet(SWGSDRangel::SWGGLSpectrum& response, QString& errorMessage) const;
int webapiSpectrumSettingsPutPatch(
bool force,
const QStringList& spectrumSettingsKeys,
SWGSDRangel::SWGGLSpectrum& response, // query + response
QString& errorMessage);
int webapiSpectrumServerGet(SWGSDRangel::SWGSpectrumServer& response, QString& errorMessage) const;
int webapiSpectrumServerPost(SWGSDRangel::SWGSuccessResponse& response, QString& errorMessage);
int webapiSpectrumServerDelete(SWGSDRangel::SWGSuccessResponse& response, QString& errorMessage);
private:
class MsgConfigureScalingFactor : public Message
@ -185,6 +193,10 @@ private:
void handleConfigureWSSpectrum(const QString& address, uint16_t port);
static void webapiFormatSpectrumSettings(SWGSDRangel::SWGGLSpectrum& response, const GLSpectrumSettings& settings);
static void webapiUpdateSpectrumSettings(
GLSpectrumSettings& settings,
const QStringList& spectrumSettingsKeys,
SWGSDRangel::SWGGLSpectrum& response);
};
#endif // INCLUDE_SPECTRUMVIS_H

View File

@ -441,7 +441,26 @@ int DeviceUISet::webapiSpectrumSettingsGet(SWGSDRangel::SWGGLSpectrum& response,
return m_spectrumVis->webapiSpectrumSettingsGet(response, errorMessage);
}
int DeviceUISet::webapiSpectrumSettingsPutPatch(
bool force,
const QStringList& spectrumSettingsKeys,
SWGSDRangel::SWGGLSpectrum& response, // query + response
QString& errorMessage)
{
return m_spectrumVis->webapiSpectrumSettingsPutPatch(force, spectrumSettingsKeys, response, errorMessage);
}
int DeviceUISet::webapiSpectrumServerGet(SWGSDRangel::SWGSpectrumServer& response, QString& errorMessage) const
{
return m_spectrumVis->webapiSpectrumServerGet(response, errorMessage);
}
}
int DeviceUISet::webapiSpectrumServerPost(SWGSDRangel::SWGSuccessResponse& response, QString& errorMessage)
{
return m_spectrumVis->webapiSpectrumServerPost(response, errorMessage);
}
int DeviceUISet::webapiSpectrumServerDelete(SWGSDRangel::SWGSuccessResponse& response, QString& errorMessage)
{
return m_spectrumVis->webapiSpectrumServerDelete(response, errorMessage);
}

View File

@ -40,6 +40,7 @@ class Preset;
namespace SWGSDRangel {
class SWGGLSpectrum;
class SWGSpectrumServer;
class SWGSuccessResponse;
};
class SDRGUI_API DeviceUISet
@ -90,7 +91,14 @@ public:
// REST API
int webapiSpectrumSettingsGet(SWGSDRangel::SWGGLSpectrum& response, QString& errorMessage) const;
int webapiSpectrumSettingsPutPatch(
bool force,
const QStringList& spectrumSettingsKeys,
SWGSDRangel::SWGGLSpectrum& response, // query + response
QString& errorMessage);
int webapiSpectrumServerGet(SWGSDRangel::SWGSpectrumServer& response, QString& errorMessage) const;
int webapiSpectrumServerPost(SWGSDRangel::SWGSuccessResponse& response, QString& errorMessage);
int webapiSpectrumServerDelete(SWGSDRangel::SWGSuccessResponse& response, QString& errorMessage);
private:
struct ChannelInstanceRegistration

View File

@ -159,34 +159,8 @@ void GLSpectrumGUI::applySettings()
return;
}
if (m_glSpectrum)
{
m_glSpectrum->setDisplayWaterfall(m_settings.m_displayWaterfall);
m_glSpectrum->setInvertedWaterfall(m_settings.m_invertedWaterfall);
m_glSpectrum->setDisplayMaxHold(m_settings.m_displayMaxHold);
m_glSpectrum->setDisplayCurrent(m_settings.m_displayCurrent);
m_glSpectrum->setDisplayHistogram(m_settings.m_displayHistogram);
m_glSpectrum->setDecay(m_settings.m_decay);
m_glSpectrum->setDecayDivisor(m_settings.m_decayDivisor);
m_glSpectrum->setHistoStroke(m_settings.m_histogramStroke);
m_glSpectrum->setDisplayGrid(m_settings.m_displayGrid);
m_glSpectrum->setDisplayGridIntensity(m_settings.m_displayGridIntensity);
m_glSpectrum->setDisplayTraceIntensity(m_settings.m_displayTraceIntensity);
if ((m_settings.m_averagingMode == GLSpectrumSettings::AvgModeFixed) || (m_settings.m_averagingMode == GLSpectrumSettings::AvgModeMax)) {
m_glSpectrum->setTimingRate(getAveragingValue(m_settings.m_averagingIndex, m_settings.m_averagingMode) == 0 ?
1 :
getAveragingValue(m_settings.m_averagingIndex, m_settings.m_averagingMode));
} else {
m_glSpectrum->setTimingRate(1);
}
Real refLevel = m_settings.m_linear ? pow(10.0, m_settings.m_refLevel/10.0) : m_settings.m_refLevel;
Real powerRange = m_settings.m_linear ? pow(10.0, m_settings.m_refLevel/10.0) : m_settings.m_powerRange;
qDebug("GLSpectrumGUI::applySettings: refLevel: %e powerRange: %e", refLevel, powerRange);
m_glSpectrum->setReferenceLevel(refLevel);
m_glSpectrum->setPowerRange(powerRange);
m_glSpectrum->setLinear(m_settings.m_linear);
if (m_glSpectrum) {
applyGLSpectrumSettings();
}
if (m_spectrumVis)
@ -196,6 +170,36 @@ void GLSpectrumGUI::applySettings()
}
}
void GLSpectrumGUI::applyGLSpectrumSettings()
{
m_glSpectrum->setDisplayWaterfall(m_settings.m_displayWaterfall);
m_glSpectrum->setInvertedWaterfall(m_settings.m_invertedWaterfall);
m_glSpectrum->setDisplayMaxHold(m_settings.m_displayMaxHold);
m_glSpectrum->setDisplayCurrent(m_settings.m_displayCurrent);
m_glSpectrum->setDisplayHistogram(m_settings.m_displayHistogram);
m_glSpectrum->setDecay(m_settings.m_decay);
m_glSpectrum->setDecayDivisor(m_settings.m_decayDivisor);
m_glSpectrum->setHistoStroke(m_settings.m_histogramStroke);
m_glSpectrum->setDisplayGrid(m_settings.m_displayGrid);
m_glSpectrum->setDisplayGridIntensity(m_settings.m_displayGridIntensity);
m_glSpectrum->setDisplayTraceIntensity(m_settings.m_displayTraceIntensity);
if ((m_settings.m_averagingMode == GLSpectrumSettings::AvgModeFixed) || (m_settings.m_averagingMode == GLSpectrumSettings::AvgModeMax)) {
m_glSpectrum->setTimingRate(getAveragingValue(m_settings.m_averagingIndex, m_settings.m_averagingMode) == 0 ?
1 :
getAveragingValue(m_settings.m_averagingIndex, m_settings.m_averagingMode));
} else {
m_glSpectrum->setTimingRate(1);
}
Real refLevel = m_settings.m_linear ? pow(10.0, m_settings.m_refLevel/10.0) : m_settings.m_refLevel;
Real powerRange = m_settings.m_linear ? pow(10.0, m_settings.m_refLevel/10.0) : m_settings.m_powerRange;
qDebug("GLSpectrumGUI::applySettings: refLevel: %e powerRange: %e", refLevel, powerRange);
m_glSpectrum->setReferenceLevel(refLevel);
m_glSpectrum->setPowerRange(powerRange);
m_glSpectrum->setLinear(m_settings.m_linear);
}
void GLSpectrumGUI::on_fftWindow_currentIndexChanged(int index)
{
qDebug("GLSpectrumGUI::on_fftWindow_currentIndexChanged: %d", index);
@ -491,6 +495,26 @@ bool GLSpectrumGUI::handleMessage(const Message& message)
setAveragingToolitp();
return true;
}
else if (SpectrumVis::MsgConfigureSpectrumVis::match(message))
{
SpectrumVis::MsgConfigureSpectrumVis& cfg = (SpectrumVis::MsgConfigureSpectrumVis&) message;
m_settings = cfg.getSettings();
displaySettings();
if (m_glSpectrum) {
applyGLSpectrumSettings();
}
return true;
}
else if (SpectrumVis::MsgConfigureWSpectrumOpenClose::match(message))
{
SpectrumVis::MsgConfigureWSpectrumOpenClose& notif = (SpectrumVis::MsgConfigureWSpectrumOpenClose&) message;
ui->wsSpectrum->blockSignals(true);
ui->wsSpectrum->doToggle(notif.getOpenClose());
ui->wsSpectrum->blockSignals(false);
return true;
}
return false;
}

View File

@ -70,6 +70,7 @@ private:
void blockApplySettings(bool block);
void applySettings();
void applyGLSpectrumSettings();
void displaySettings();
static int getAveragingMaxScale(GLSpectrumSettings::AveragingMode averagingMode); //!< Max power of 10 multiplier to 2,5,10 base ex: 2 -> 2,5,10,20,50,100,200,500,1000
static int getAveragingIndex(int averaging, GLSpectrumSettings::AveragingMode averagingMode);

View File

@ -719,6 +719,9 @@
<normalon>:/stream.png</normalon>
</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>

View File

@ -1434,6 +1434,27 @@ int WebAPIAdapterGUI::devicesetSpectrumSettingsGet(
}
}
int WebAPIAdapterGUI::devicesetSpectrumSettingsPutPatch(
int deviceSetIndex,
bool force, //!< true to force settings = put else patch
const QStringList& spectrumSettingsKeys,
SWGSDRangel::SWGGLSpectrum& response,
SWGSDRangel::SWGErrorResponse& error)
{
if ((deviceSetIndex >= 0) && (deviceSetIndex < (int) m_mainWindow.m_deviceUIs.size()))
{
DeviceUISet *deviceSet = m_mainWindow.m_deviceUIs[deviceSetIndex];
return deviceSet->webapiSpectrumSettingsPutPatch(force, spectrumSettingsKeys, response, *error.getMessage());
}
else
{
error.init();
*error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex);
return 404;
}
}
int WebAPIAdapterGUI::devicesetSpectrumServerGet(
int deviceSetIndex,
SWGSDRangel::SWGSpectrumServer& response,
@ -1455,6 +1476,48 @@ int WebAPIAdapterGUI::devicesetSpectrumServerGet(
}
}
int WebAPIAdapterGUI::devicesetSpectrumServerPost(
int deviceSetIndex,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error)
{
if ((deviceSetIndex >= 0) && (deviceSetIndex < (int) m_mainWindow.m_deviceUIs.size()))
{
DeviceUISet *deviceSet = m_mainWindow.m_deviceUIs[deviceSetIndex];
deviceSet->webapiSpectrumServerPost(response, *error.getMessage());
return 200;
}
else
{
error.init();
*error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex);
return 404;
}
}
int WebAPIAdapterGUI::devicesetSpectrumServerDelete(
int deviceSetIndex,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error)
{
if ((deviceSetIndex >= 0) && (deviceSetIndex < (int) m_mainWindow.m_deviceUIs.size()))
{
DeviceUISet *deviceSet = m_mainWindow.m_deviceUIs[deviceSetIndex];
deviceSet->webapiSpectrumServerDelete(response, *error.getMessage());
return 200;
}
else
{
error.init();
*error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex);
return 404;
}
}
int WebAPIAdapterGUI::devicesetDevicePut(
int deviceSetIndex,
SWGSDRangel::SWGDeviceListItem& query,

View File

@ -217,11 +217,28 @@ public:
SWGSDRangel::SWGGLSpectrum& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int devicesetSpectrumSettingsPutPatch(
int deviceSetIndex,
bool force, //!< true to force settings = put else patch
const QStringList& spectrumSettingsKeys,
SWGSDRangel::SWGGLSpectrum& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int devicesetSpectrumServerGet(
int deviceSetIndex,
SWGSDRangel::SWGSpectrumServer& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int devicesetSpectrumServerPost(
int deviceSetIndex,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int devicesetSpectrumServerDelete(
int deviceSetIndex,
SWGSDRangel::SWGSuccessResponse& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int devicesetDevicePut(
int deviceSetIndex,
SWGSDRangel::SWGDeviceListItem& query,