From 500f5bc82cf92cd8f8c52f2036798ba22e1c46ab Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 13 Sep 2019 13:40:31 +0200 Subject: [PATCH] Presets for MIMO --- plugins/samplemimo/testmi/testmi.h | 2 + sdrbase/device/deviceapi.cpp | 78 ++- sdrbase/dsp/devicesamplemimo.h | 2 + sdrbase/resources/webapi/doc/html2/index.html | 522 +++++++++--------- .../webapi/doc/swagger/include/Preset.yaml | 4 +- sdrbase/settings/mainsettings.cpp | 4 +- sdrbase/settings/preset.cpp | 28 +- sdrbase/settings/preset.h | 19 +- sdrbase/webapi/webapiadapterbase.cpp | 6 +- sdrbase/webapi/webapirequestmapper.cpp | 4 +- sdrgui/device/deviceuiset.cpp | 103 +++- sdrgui/device/deviceuiset.h | 3 +- sdrgui/mainwindow.cpp | 17 +- sdrgui/webapi/webapiadaptergui.cpp | 36 +- sdrsrv/device/deviceset.cpp | 133 ++++- sdrsrv/device/deviceset.h | 2 + sdrsrv/maincore.cpp | 22 +- sdrsrv/webapi/webapiadaptersrv.cpp | 51 +- .../sdrangel/api/swagger/include/Preset.yaml | 4 +- swagger/sdrangel/code/html2/index.html | 522 +++++++++--------- .../sdrangel/code/qt5/client/SWGPreset.cpp | 26 +- swagger/sdrangel/code/qt5/client/SWGPreset.h | 8 +- 22 files changed, 954 insertions(+), 642 deletions(-) diff --git a/plugins/samplemimo/testmi/testmi.h b/plugins/samplemimo/testmi/testmi.h index 0172ff65a..2247c3146 100644 --- a/plugins/samplemimo/testmi/testmi.h +++ b/plugins/samplemimo/testmi/testmi.h @@ -123,6 +123,8 @@ public: virtual quint64 getSinkCenterFrequency(int index) const { return 0; (void) index; } virtual void setSinkCenterFrequency(qint64 centerFrequency, int index) { (void) centerFrequency; (void) index; } + virtual quint64 getMIMOCenterFrequency() const { return getSourceCenterFrequency(0); } + virtual bool handleMessage(const Message& message); virtual int webapiSettingsGet( diff --git a/sdrbase/device/deviceapi.cpp b/sdrbase/device/deviceapi.cpp index 5168af5ac..afcb178c7 100644 --- a/sdrbase/device/deviceapi.cpp +++ b/sdrbase/device/deviceapi.cpp @@ -512,13 +512,13 @@ void DeviceAPI::loadSamplingDeviceSettings(const Preset* preset) { if (m_deviceSourceEngine && (preset->isSourcePreset())) { - qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription())); + qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading Rx preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription())); const QByteArray* sourceConfig = preset->findBestDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence); qint64 centerFrequency = preset->getCenterFrequency(); - qDebug("DeviceAPI::loadSamplingDeviceSettings: center frequency: %llu Hz", centerFrequency); + qDebug("DeviceAPI::loadSamplingDeviceSettings: source center frequency: %llu Hz", centerFrequency); - if (sourceConfig != 0) + if (sourceConfig) { qDebug("DeviceAPI::loadSamplingDeviceSettings: deserializing source %s[%d]: %s", qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial)); @@ -556,15 +556,15 @@ void DeviceAPI::loadSamplingDeviceSettings(const Preset* preset) qDebug("DeviceAPI::loadSamplingDeviceSettings: no source"); } } - else if (m_deviceSinkEngine && (!preset->isSourcePreset())) // TODO: refine preset stream type + else if (m_deviceSinkEngine && preset->isSinkPreset()) { - qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription())); + qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading Tx preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription())); const QByteArray* sinkConfig = preset->findBestDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence); qint64 centerFrequency = preset->getCenterFrequency(); - qDebug("DeviceAPI::loadSamplingDeviceSettings: center frequency: %llu Hz", centerFrequency); + qDebug("DeviceAPI::loadSamplingDeviceSettings: sink center frequency: %llu Hz", centerFrequency); - if (sinkConfig != 0) + if (sinkConfig) { qDebug("DeviceAPI::loadSamplingDeviceSettings: deserializing sink %s[%d]: %s", qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial)); @@ -590,6 +590,40 @@ void DeviceAPI::loadSamplingDeviceSettings(const Preset* preset) qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial)); } } + else if (m_deviceMIMOEngine && preset->isMIMOPreset()) + { + qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading MIMO preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription())); + + const QByteArray* mimoConfig = preset->findBestDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence); + qint64 centerFrequency = preset->getCenterFrequency(); + qDebug("DeviceAPI::loadSamplingDeviceSettings: MIMO center frequency: %llu Hz", centerFrequency); + + if (mimoConfig) + { + qDebug("DeviceAPI::loadSamplingDeviceSettings: deserializing MIMO %s[%d]: %s", + qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial)); + + if (m_samplingDevicePluginInstanceUI != 0) // GUI flavor + { + m_samplingDevicePluginInstanceUI->deserialize(*mimoConfig); + m_samplingDevicePluginInstanceUI->setCenterFrequency(centerFrequency); + } + else if (m_deviceSinkEngine->getSink() != 0) // Server flavor + { + m_deviceSinkEngine->getSink()->deserialize(*mimoConfig); + m_deviceSinkEngine->getSink()->setCenterFrequency(centerFrequency); + } + else + { + qDebug("DeviceAPI::loadSamplingDeviceSettings: no MIMO"); + } + } + else + { + qDebug("DeviceAPI::loadSamplingDeviceSettings: MIMO %s[%d]: %s not found", + qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial)); + } + } else { qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading preset [%s | %s] is not a suitable preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription())); @@ -603,12 +637,12 @@ void DeviceAPI::saveSamplingDeviceSettings(Preset* preset) qDebug("DeviceAPI::saveSamplingDeviceSettings: serializing source %s[%d]: %s", qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial)); - if (m_samplingDevicePluginInstanceUI != 0) + if (m_samplingDevicePluginInstanceUI) // GUI flavor { preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_samplingDevicePluginInstanceUI->serialize()); preset->setCenterFrequency(m_samplingDevicePluginInstanceUI->getCenterFrequency()); } - else if (m_deviceSourceEngine->getSource() != 0) + else if (m_deviceSourceEngine->getSource()) // Server flavor { preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceSourceEngine->getSource()->serialize()); preset->setCenterFrequency(m_deviceSourceEngine->getSource()->getCenterFrequency()); @@ -618,17 +652,17 @@ void DeviceAPI::saveSamplingDeviceSettings(Preset* preset) qDebug("DeviceAPI::saveSamplingDeviceSettings: no source"); } } - else if (m_deviceSinkEngine && (!preset->isSourcePreset())) // TODO: refine preset stream type + else if (m_deviceSinkEngine && preset->isSinkPreset()) { qDebug("DeviceAPI::saveSamplingDeviceSettings: serializing sink %s[%d]: %s", qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial)); - if (m_samplingDevicePluginInstanceUI != 0) // GUI flavor + if (m_samplingDevicePluginInstanceUI) // GUI flavor { preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceSinkEngine->getSink()->serialize()); preset->setCenterFrequency(m_deviceSinkEngine->getSink()->getCenterFrequency()); } - else if (m_deviceSinkEngine->getSink() != 0) // Server flavor + else if (m_deviceSinkEngine->getSink()) // Server flavor { preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceSinkEngine->getSink()->serialize()); preset->setCenterFrequency(m_deviceSinkEngine->getSink()->getCenterFrequency()); @@ -638,6 +672,26 @@ void DeviceAPI::saveSamplingDeviceSettings(Preset* preset) qDebug("DeviceAPI::saveSamplingDeviceSettings: no sink"); } } + else if (m_deviceMIMOEngine && preset->isMIMOPreset()) + { + qDebug("DeviceAPI::saveSamplingDeviceSettings: serializing MIMO %s[%d]: %s", + qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial)); + + if (m_samplingDevicePluginInstanceUI) // GUI flavor + { + preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceMIMOEngine->getMIMO()->serialize()); + preset->setCenterFrequency(m_deviceMIMOEngine->getMIMO()->getMIMOCenterFrequency()); + } + else if (m_deviceMIMOEngine->getMIMO()) // Server flavor + { + preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceMIMOEngine->getMIMO()->serialize()); + preset->setCenterFrequency(m_deviceMIMOEngine->getMIMO()->getMIMOCenterFrequency()); + } + else + { + qDebug("DeviceAPI::saveSamplingDeviceSettings: no MIMO"); + } + } else { qDebug("DeviceAPI::saveSamplingDeviceSettings: not a suitable preset"); diff --git a/sdrbase/dsp/devicesamplemimo.h b/sdrbase/dsp/devicesamplemimo.h index 248004ad9..471fb7c8c 100644 --- a/sdrbase/dsp/devicesamplemimo.h +++ b/sdrbase/dsp/devicesamplemimo.h @@ -74,6 +74,8 @@ public: virtual quint64 getSourceCenterFrequency(int index) const = 0; //!< Center frequency exposed by the source at index virtual void setSourceCenterFrequency(qint64 centerFrequency, int index) = 0; + virtual quint64 getMIMOCenterFrequency() const = 0; //!< Unique center frequency for preset identification or any unique reference + virtual bool handleMessage(const Message& message) = 0; virtual int webapiSettingsGet( diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html index 8bba9e91c..467bae291 100644 --- a/sdrbase/resources/webapi/doc/html2/index.html +++ b/sdrbase/resources/webapi/doc/html2/index.html @@ -157,7 +157,7 @@ h={};g()}};typeof define==="function"&&define.amd&&define("google-code-prettify" });