From 89196c40b28f7852fabb7a07b8db317b79c79add Mon Sep 17 00:00:00 2001 From: f4exb <f4exb06@gmail.com> Date: Sat, 30 Apr 2022 12:52:25 +0200 Subject: [PATCH] Massive UI revamping (v7): Make soapy SDR support optional. Fixes #718 --- sdrbase/mainparser.cpp | 10 +++++++--- sdrbase/mainparser.h | 3 +++ sdrbase/plugin/pluginmanager.cpp | 9 ++++++++- sdrbase/plugin/pluginmanager.h | 2 ++ sdrgui/mainwindow.cpp | 1 + sdrsrv/mainserver.cpp | 1 + 6 files changed, 22 insertions(+), 4 deletions(-) diff --git a/sdrbase/mainparser.cpp b/sdrbase/mainparser.cpp index 4f1a4bab6..fa96f6033 100644 --- a/sdrbase/mainparser.cpp +++ b/sdrbase/mainparser.cpp @@ -35,12 +35,14 @@ MainParser::MainParser() : "FFTW Wisdom file.", "file", ""), - m_scratchOption("scratch", "Start from scratch (no current config).") + m_scratchOption("scratch", "Start from scratch (no current config)."), + m_soapyOption("soapy", "Activate Soapy SDR support.") { m_serverAddress = ""; // Bind to any address m_serverPort = 8091; m_scratch = false; + m_soapy = false; m_fftwfWindowFileName = ""; m_parser.setApplicationDescription("Software Defined Radio application"); @@ -51,6 +53,7 @@ MainParser::MainParser() : m_parser.addOption(m_serverPortOption); m_parser.addOption(m_fftwfWisdomOption); m_parser.addOption(m_scratchOption); + m_parser.addOption(m_soapyOption); } MainParser::~MainParser() @@ -94,10 +97,11 @@ void MainParser::parse(const QCoreApplication& app) } // FFTWF wisdom file - m_fftwfWindowFileName = m_parser.value(m_fftwfWisdomOption); // Scratch mode - m_scratch = m_parser.isSet(m_scratchOption); + + // Soapy SDR support + m_soapy = m_parser.isSet(m_soapyOption); } diff --git a/sdrbase/mainparser.h b/sdrbase/mainparser.h index a04541909..f472d2733 100644 --- a/sdrbase/mainparser.h +++ b/sdrbase/mainparser.h @@ -35,6 +35,7 @@ public: const QString& getServerAddress() const { return m_serverAddress; } uint16_t getServerPort() const { return m_serverPort; } bool getScratch() const { return m_scratch; } + bool getSoapy() const { return m_soapy; } const QString& getFFTWFWisdomFileName() const { return m_fftwfWindowFileName; } private: @@ -42,12 +43,14 @@ private: uint16_t m_serverPort; QString m_fftwfWindowFileName; bool m_scratch; + bool m_soapy; QCommandLineParser m_parser; QCommandLineOption m_serverAddressOption; QCommandLineOption m_serverPortOption; QCommandLineOption m_fftwfWisdomOption; QCommandLineOption m_scratchOption; + QCommandLineOption m_soapyOption; }; diff --git a/sdrbase/plugin/pluginmanager.cpp b/sdrbase/plugin/pluginmanager.cpp index 79073b952..64229029f 100644 --- a/sdrbase/plugin/pluginmanager.cpp +++ b/sdrbase/plugin/pluginmanager.cpp @@ -53,7 +53,8 @@ const QString PluginManager::m_testMIMODeviceTypeID = "sdrangel.samplemimo.testm PluginManager::PluginManager(QObject* parent) : QObject(parent), - m_pluginAPI(this) + m_pluginAPI(this), + m_enableSoapy(false) { } @@ -216,6 +217,12 @@ void PluginManager::loadPluginsDir(const QDir& dir) { if (QLibrary::isLibrary(fileName)) { + if (!m_enableSoapy && (fileName.contains("libinputsoapysdr") || (fileName.contains("liboutputsoapysdr")))) + { + qInfo("PluginManager::loadPluginsDir: Soapy SDR disabled skipping %s", qPrintable(fileName)); + continue; + } + qDebug("PluginManager::loadPluginsDir: fileName: %s", qPrintable(fileName)); QPluginLoader* pluginLoader = new QPluginLoader(pluginsDir.absoluteFilePath(fileName)); diff --git a/sdrbase/plugin/pluginmanager.h b/sdrbase/plugin/pluginmanager.h index 71713810c..763af09e9 100644 --- a/sdrbase/plugin/pluginmanager.h +++ b/sdrbase/plugin/pluginmanager.h @@ -57,6 +57,7 @@ public: ~PluginManager(); PluginAPI *getPluginAPI() { return &m_pluginAPI; } + void setEnableSoapy(bool enableSoapy) { m_enableSoapy = enableSoapy; } void loadPlugins(const QString& pluginsSubDir); void loadPluginsPart(const QString& pluginsSubDir); void loadPluginsFinal(); @@ -124,6 +125,7 @@ private: PluginAPI m_pluginAPI; Plugins m_plugins; + bool m_enableSoapy; PluginAPI::ChannelRegistrations m_rxChannelRegistrations; //!< Channel plugins register here PluginAPI::ChannelRegistrations m_txChannelRegistrations; //!< Channel plugins register here diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 08dfa2faa..14e535310 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -185,6 +185,7 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parse m_pluginManager = new PluginManager(this); m_mainCore->m_pluginManager = m_pluginManager; + m_pluginManager->setEnableSoapy(parser.getSoapy()); m_pluginManager->loadPlugins(QString("plugins")); m_pluginManager->loadPluginsNonDiscoverable(m_mainCore->m_settings.getDeviceUserArgs()); diff --git a/sdrsrv/mainserver.cpp b/sdrsrv/mainserver.cpp index 5380041f0..a02632844 100644 --- a/sdrsrv/mainserver.cpp +++ b/sdrsrv/mainserver.cpp @@ -59,6 +59,7 @@ MainServer::MainServer(qtwebapp::LoggerWithFile *logger, const MainParser& parse qDebug() << "MainServer::MainServer: load plugins..."; m_mainCore->m_pluginManager = new PluginManager(this); + m_mainCore->m_pluginManager->setEnableSoapy(parser.getSoapy()); m_mainCore->m_pluginManager->loadPlugins(QString("pluginssrv")); connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleMessages()), Qt::QueuedConnection);