Added possibility to specify devices that cannot be discovered automatically. This implements #445

pull/480/head v4.12.3
f4exb 2019-12-16 01:03:47 +01:00
rodzic 8d2f65f967
commit d0858f21fb
81 zmienionych plików z 448 dodań i 102 usunięć

Wyświetl plik

@ -1,3 +1,10 @@
sdrangel (4.12.3-1) unstable; urgency=medium
* Added possibility to specify devices that cannot be discovered automatically
* Server: fixed sink device set creation and added MIMO creation
-- Edouard Griffiths, F4EXB <f4exb06@gmail.com> Sun, 15 Dec 2019 23:14:22 +0100
sdrangel (4.12.2-1) unstable; urgency=medium
* Refactoring of Rx channels code with better separation of concerns

Wyświetl plik

@ -18,7 +18,7 @@ set(CMAKE_CXX_EXTENSIONS OFF)
# configure version
set(sdrangel_VERSION_MAJOR "4")
set(sdrangel_VERSION_MINOR "12")
set(sdrangel_VERSION_PATCH "2")
set(sdrangel_VERSION_PATCH "3")
set(sdrangel_VERSION_SUFFIX "")
# SDRAngel cmake options

9
debian/changelog vendored
Wyświetl plik

@ -1,3 +1,10 @@
sdrangel (4.12.3-1) unstable; urgency=medium
* Added possibility to specify devices that cannot be discovered automatically
* Server: fixed sink device set creation and added MIMO creation
-- Edouard Griffiths, F4EXB <f4exb06@gmail.com> Sun, 15 Dec 2019 23:14:22 +0100
sdrangel (4.12.2-1) unstable; urgency=medium
* Refactoring of Rx channels code with better separation of concerns
@ -6,7 +13,7 @@ sdrangel (4.12.2-1) unstable; urgency=medium
* Remote Sink and Remote Output: refactoring of UDP blocks handling
* NFMDemod: fixed setSelectedCtcssIndex method
-- Edouard Griffiths, F4EXB <f4exb06@gmail.com> Fri, 14 Dec 2019 06:14:22 +0100
-- Edouard Griffiths, F4EXB <f4exb06@gmail.com> Sat, 14 Dec 2019 06:14:22 +0100
sdrangel (4.12.1-1) unstable; urgency=medium

Wyświetl plik

@ -31,11 +31,17 @@ DevicePlutoSDRParams::~DevicePlutoSDRParams()
bool DevicePlutoSDRParams::open(const std::string& serial)
{
m_box = DevicePlutoSDR::instance().getDeviceFromSerial(serial);
return m_box != 0;
return m_box != nullptr;
}
bool DevicePlutoSDRParams::openURI(const std::string& uri)
{
m_box = DevicePlutoSDR::instance().getDeviceFromURI(uri);
return m_box != nullptr;
}
void DevicePlutoSDRParams::close()
{
delete m_box;
m_box = 0;
m_box = nullptr;
}

Wyświetl plik

@ -38,6 +38,7 @@ public:
~DevicePlutoSDRParams();
bool open(const std::string& serial);
bool openURI(const std::string& uri);
void close();
DevicePlutoSDRBox *getBox() { return m_box; }

Wyświetl plik

@ -50,18 +50,6 @@ void DevicePlutoSDRScan::scan()
m_scans.clear();
if (num_contexts == 0)
{
struct iio_context *ctx = iio_create_network_context("pluto.local");
if(!ctx) {
return;
}
m_scans.push_back({std::string("PlutoSDR"), std::string("networked"), std::string("ip:pluto.local")});
m_serialMap[m_scans.back().m_serial] = &m_scans.back();
m_urilMap[m_scans.back().m_uri] = &m_scans.back();
iio_context_destroy(ctx);
}
for (i = 0; i < num_contexts; i++)
{
const char *description = iio_context_info_get_description(info[i]);

Plik binarny nie jest wyświetlany.

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 46 KiB

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 58 KiB

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -35,8 +35,8 @@ const char *fcd_traits<ProPlus>::displayedName = "FunCube Dongle Pro+";
const char *fcd_traits<Pro>::pluginDisplayedName = "FunCube Pro Input";
const char *fcd_traits<ProPlus>::pluginDisplayedName = "FunCube Pro+ Input";
const char *fcd_traits<Pro>::pluginVersion = "4.11.10";
const char *fcd_traits<ProPlus>::pluginVersion = "4.11.10";
const char *fcd_traits<Pro>::pluginVersion = "4.12.3";
const char *fcd_traits<ProPlus>::pluginVersion = "4.12.3";
const int64_t fcd_traits<Pro>::loLowLimitFreq = 64000000L;
const int64_t fcd_traits<ProPlus>::loLowLimitFreq = 150000L;

Wyświetl plik

@ -24,8 +24,9 @@
#include "chanalyzerwebapiadapter.h"
const PluginDescriptor ChannelAnalyzerPlugin::m_pluginDescriptor = {
ChannelAnalyzer::m_channelId,
QString("Channel Analyzer"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -9,8 +9,9 @@
#include "amdemodplugin.h"
const PluginDescriptor AMDemodPlugin::m_pluginDescriptor = {
AMDemod::m_channelId,
QString("AM Demodulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -28,8 +28,9 @@
const PluginDescriptor ATVDemodPlugin::m_ptrPluginDescriptor =
{
ATVDemod::m_channelId,
QString("ATV Demodulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) F4HKW for F4EXB / SDRAngel"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -29,8 +29,9 @@
#include "bfmplugin.h"
const PluginDescriptor BFMPlugin::m_pluginDescriptor = {
BFMDemod::m_channelId,
QString("Broadcast FM Demodulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -28,8 +28,9 @@
const PluginDescriptor DATVDemodPlugin::m_ptrPluginDescriptor =
{
DATVDemod::m_channelId,
QString("DATV Demodulator"),
QString("4.11.6"),
QString("4.12.3"),
QString("(c) F4HKW for SDRAngel using LeanSDR framework (c) F4DAV"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -28,8 +28,9 @@
#include "dsddemodplugin.h"
const PluginDescriptor DSDDemodPlugin::m_pluginDescriptor = {
DSDDemod::m_channelId,
QString("DSD Demodulator"),
QString("4.12.0"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -26,8 +26,9 @@
#include "freedvplugin.h"
const PluginDescriptor FreeDVPlugin::m_pluginDescriptor = {
FreeDVDemod::m_channelId,
QString("FreeDV Demodulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -6,8 +6,9 @@
#include "lorademod.h"
const PluginDescriptor LoRaPlugin::m_pluginDescriptor = {
LoRaDemod::m_channelId,
QString("LoRa Demodulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) 2015 John Greb"),
QString("http://www.maintech.de"),
true,

Wyświetl plik

@ -10,8 +10,9 @@
#include "nfmplugin.h"
const PluginDescriptor NFMPlugin::m_pluginDescriptor = {
NFMDemod::m_channelId,
QString("NFM Demodulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -10,8 +10,9 @@
#include "ssbplugin.h"
const PluginDescriptor SSBPlugin::m_pluginDescriptor = {
SSBDemod::m_channelId,
QString("SSB Demodulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -11,8 +11,9 @@
#include "wfmplugin.h"
const PluginDescriptor WFMPlugin::m_pluginDescriptor = {
WFMDemod::m_channelId,
QString("WFM Demodulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -26,8 +26,9 @@
#include "freqtrackerplugin.h"
const PluginDescriptor FreqTrackerPlugin::m_pluginDescriptor = {
FreqTracker::m_channelId,
QString("Frequency Tracker"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -28,8 +28,9 @@
#include "localsinkplugin.h"
const PluginDescriptor LocalSinkPlugin::m_pluginDescriptor = {
LocalSink::m_channelId,
QString("Local channel sink"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -28,8 +28,9 @@
#include "remotesinkplugin.h"
const PluginDescriptor RemoteSinkPlugin::m_pluginDescriptor = {
RemoteSink::m_channelId,
QString("Remote channel sink"),
QString("4.11.6"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -27,8 +27,9 @@
#include "udpsinkplugin.h"
const PluginDescriptor UDPSinkPlugin::m_pluginDescriptor = {
UDPSink::m_channelId,
QString("UDP Channel Sink"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -26,8 +26,9 @@
#include "filesourceplugin.h"
const PluginDescriptor FileSourcePlugin::m_pluginDescriptor = {
FileSource::m_channelId,
QString("File channel source"),
QString("4.12.1"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -28,8 +28,9 @@
#include "localsourceplugin.h"
const PluginDescriptor LocalSourcePlugin::m_pluginDescriptor = {
LocalSource::m_channelId,
QString("Local channel source"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -26,8 +26,9 @@
#include "ammodplugin.h"
const PluginDescriptor AMModPlugin::m_pluginDescriptor = {
AMMod::m_channelId,
QString("AM Modulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -26,8 +26,9 @@
#include "atvmodplugin.h"
const PluginDescriptor ATVModPlugin::m_pluginDescriptor = {
ATVMod::m_channelId,
QString("ATV Modulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -26,8 +26,9 @@
#include "freedvmodplugin.h"
const PluginDescriptor FreeDVModPlugin::m_pluginDescriptor = {
FreeDVMod::m_channelId,
QString("FreeDV Modulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -26,8 +26,9 @@
#include "nfmmodplugin.h"
const PluginDescriptor NFMModPlugin::m_pluginDescriptor = {
NFMMod::m_channelId,
QString("NFM Modulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -26,8 +26,9 @@
#include "ssbmodplugin.h"
const PluginDescriptor SSBModPlugin::m_pluginDescriptor = {
SSBMod::m_channelId,
QString("SSB Modulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -26,8 +26,9 @@
#include "wfmmodplugin.h"
const PluginDescriptor WFMModPlugin::m_pluginDescriptor = {
WFMMod::m_channelId,
QString("WFM Modulator"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -26,8 +26,9 @@
#include "remotesourceplugin.h"
const PluginDescriptor RemoteSourcePlugin::m_pluginDescriptor = {
RemoteSource::m_channelId,
QString("Remote channel source"),
QString("4.12.1"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -29,8 +29,9 @@
#include "udpsourceplugin.h"
const PluginDescriptor UDPSourcePlugin::m_pluginDescriptor = {
UDPSource::m_channelId,
QString("UDP Channel Source"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -29,8 +29,9 @@
#include "testmiwebapiadapter.h"
const PluginDescriptor TestMIPlugin::m_pluginDescriptor = {
QString("TestMI"),
QString("Test Multiple Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -30,8 +30,9 @@
#endif
const PluginDescriptor Bladerf1OutputPlugin::m_pluginDescriptor = {
QString("BladeRF1"),
QString("BladeRF1 Output"),
QString("4.12.0"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -30,8 +30,9 @@
#endif
const PluginDescriptor BladeRF2OutputPlugin::m_pluginDescriptor = {
QString("BladeRF2"),
QString("BladeRF2 Output"),
QString("4.12.0"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -28,8 +28,9 @@
#include "filesinkplugin.h"
const PluginDescriptor FileSinkPlugin::m_pluginDescriptor = {
QString("FileSink"),
QString("File sink output"),
QString("4.12.0"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -30,8 +30,9 @@
#include "hackrfoutputwebapiadapter.h"
const PluginDescriptor HackRFOutputPlugin::m_pluginDescriptor = {
QString("HackRF"),
QString("HackRF Output"),
QString("4.12.0"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -33,8 +33,9 @@
#include "limesdroutputwebapiadapter.h"
const PluginDescriptor LimeSDROutputPlugin::m_pluginDescriptor = {
QString("LimeSDR"),
QString("LimeSDR Output"),
QString("4.12.0"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -29,8 +29,9 @@
#include "localoutputwebapiadapter.h"
const PluginDescriptor LocalOutputPlugin::m_pluginDescriptor = {
QString("LocalOutput"),
QString("Local device output"),
QString("4.12.0"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -259,11 +259,31 @@ bool PlutoSDROutput::openDevice()
else
{
qDebug("PlutoSDROutput::openDevice: open device here");
m_deviceShared.m_deviceParams = new DevicePlutoSDRParams();
char serial[256];
strcpy(serial, qPrintable(m_deviceAPI->getSamplingDeviceSerial()));
m_deviceShared.m_deviceParams->open(serial);
if (m_deviceAPI->getHardwareUserArguments().size() != 0)
{
QStringList kv = m_deviceAPI->getHardwareUserArguments().split('='); // expecting "uri=xxx"
if (kv.size() > 1)
{
if (kv.at(0) == "uri") {
m_deviceShared.m_deviceParams->openURI(kv.at(1).toStdString());
} else {
return false;
}
}
else
{
return false;
}
}
else
{
char serial[256];
strcpy(serial, qPrintable(m_deviceAPI->getSamplingDeviceSerial()));
m_deviceShared.m_deviceParams->open(serial);
}
}
m_deviceAPI->setBuddySharedPtr(&m_deviceShared); // propagate common parameters to API

Wyświetl plik

@ -29,8 +29,9 @@
#include "plutosdroutputwebapiadapter.h"
const PluginDescriptor PlutoSDROutputPlugin::m_pluginDescriptor = {
QString("PlutoSDR"),
QString("PlutoSDR Output"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -45,6 +45,8 @@ public:
virtual DeviceSampleSink* createSampleSinkPluginInstance(const QString& sinkId, DeviceAPI *deviceAPI);
virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const;
virtual QString getDeviceTypeId() const { return m_deviceTypeID; }
static const QString m_hardwareID;
static const QString m_deviceTypeID;

Wyświetl plik

@ -6,6 +6,8 @@ This output sample sink plugin sends its samples to a [PlutoSDR device](https://
&#9758; PlutoSDR is physically implemented as a 1x1 SISO device although the AD9363 chip does have a second Rx and a second Tx channel. Revision C of the board claims to have pads to allow hackers connecting the second ports externally however for now only the first Tx channel is supported by this plugin.
&#9758; When running the Pluto on Ethernet interface you have to create a non discoverable device reference in the [user arguments dialog](https://github.com/f4exb/sdrangel/blob/master/sdrgui/deviceuserargs.md) from the main window Preferences &gt; Devices menu. You must use the `PlutoSDR` hardware ID then specify the device address with a `uri` parameter in the user arguments for example: `uri=ip:192.168.1.10`. Note that this will become effective once SDRangel is restarted.
<h2>Build</h2>
The plugin will be built only if libiio is installed in your system. To build and install libiio from source do:

Wyświetl plik

@ -29,8 +29,9 @@
#include "remoteoutputwebapiadapter.h"
const PluginDescriptor RemoteOutputPlugin::m_pluginDescriptor = {
QString("RemoteOutput"),
QString("Remote device output"),
QString("4.12.2"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -31,8 +31,9 @@
#endif
const PluginDescriptor SoapySDROutputPlugin::m_pluginDescriptor = {
QString("SoapySDR"),
QString("SoapySDR Output"),
QString("4.12.0"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -28,8 +28,9 @@
#include "testsinkplugin.h"
const PluginDescriptor TestSinkPlugin::m_pluginDescriptor = {
QString("TestSink"),
QString("Test Sink Output"),
QString("4.12.0"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -34,8 +34,9 @@
#include "xtrxoutputwebapiadapter.h"
const PluginDescriptor XTRXOutputPlugin::m_pluginDescriptor = {
QString("XTRX"),
QString("XTRX Output"),
QString("4.12.0"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -32,8 +32,9 @@
const int AirspyPlugin::m_maxDevices = 32;
const PluginDescriptor AirspyPlugin::m_pluginDescriptor = {
QString("Airspy"),
QString("Airspy Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -30,8 +30,9 @@
const PluginDescriptor AirspyHFPlugin::m_pluginDescriptor = {
QString("AirspyHF"),
QString("AirspyHF Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -30,8 +30,9 @@
#endif
const PluginDescriptor Blderf1InputPlugin::m_pluginDescriptor = {
QString("BladeRF1"),
QString("BladeRF1 Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -30,8 +30,9 @@
#endif
const PluginDescriptor Blderf2InputPlugin::m_pluginDescriptor = {
QString("BladeRF2"),
QString("BladeRF2 Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -29,6 +29,7 @@
#include "fcdtraits.h"
const PluginDescriptor FCDProPlugin::m_pluginDescriptor = {
QString("FCDPro"),
QString(fcd_traits<Pro>::pluginDisplayedName),
QString(fcd_traits<Pro>::pluginVersion),
QString("(c) Edouard Griffiths, F4EXB"),

Wyświetl plik

@ -29,6 +29,7 @@
#include "fcdtraits.h"
const PluginDescriptor FCDProPlusPlugin::m_pluginDescriptor = {
QString("FCDProPlus"),
QString(fcd_traits<ProPlus>::pluginDisplayedName),
QString(fcd_traits<ProPlus>::pluginVersion),
QString("(c) Edouard Griffiths, F4EXB"),

Wyświetl plik

@ -29,8 +29,9 @@
#include "fileinputwebapiadapter.h"
const PluginDescriptor FileInputPlugin::m_pluginDescriptor = {
QString("FileInput"),
QString("File device input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -31,8 +31,9 @@
#include "hackrfinputwebapiadapter.h"
const PluginDescriptor HackRFInputPlugin::m_pluginDescriptor = {
QString("HackRF"),
QString("HackRF Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -30,8 +30,9 @@
#include "kiwisdrwebapiadapter.h"
const PluginDescriptor KiwiSDRPlugin::m_pluginDescriptor = {
QString("KiwiSDR"),
QString("KiwiSDR input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Vort (c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -33,8 +33,9 @@
#include "limesdrinputwebapiadapter.h"
const PluginDescriptor LimeSDRInputPlugin::m_pluginDescriptor = {
QString("LimeSDR"),
QString("LimeSDR Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -29,8 +29,9 @@
#include "localinputwebapiadapter.h"
const PluginDescriptor LocalInputPlugin::m_pluginDescriptor = {
QString("LocalInput"),
QString("Local device input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -31,8 +31,9 @@
#endif
const PluginDescriptor PerseusPlugin::m_pluginDescriptor = {
QString("Perseus"),
QString("Perseus Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -295,11 +295,31 @@ bool PlutoSDRInput::openDevice()
else
{
qDebug("PlutoSDRInput::openDevice: open device here");
m_deviceShared.m_deviceParams = new DevicePlutoSDRParams();
char serial[256];
strcpy(serial, qPrintable(m_deviceAPI->getSamplingDeviceSerial()));
m_deviceShared.m_deviceParams->open(serial);
if (m_deviceAPI->getHardwareUserArguments().size() != 0)
{
QStringList kv = m_deviceAPI->getHardwareUserArguments().split('='); // expecting "uri=xxx"
if (kv.size() > 1)
{
if (kv.at(0) == "uri") {
m_deviceShared.m_deviceParams->openURI(kv.at(1).toStdString());
} else {
return false;
}
}
else
{
return false;
}
}
else
{
char serial[256];
strcpy(serial, qPrintable(m_deviceAPI->getSamplingDeviceSerial()));
m_deviceShared.m_deviceParams->open(serial);
}
}
m_deviceAPI->setBuddySharedPtr(&m_deviceShared); // propagate common parameters to API

Wyświetl plik

@ -31,8 +31,9 @@
class DeviceAPI;
const PluginDescriptor PlutoSDRInputPlugin::m_pluginDescriptor = {
QString("PlutoSDR"),
QString("PlutoSDR Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -45,6 +45,8 @@ public:
virtual DeviceSampleSource* createSampleSourcePluginInstance(const QString& sourceId, DeviceAPI *deviceAPI);
virtual DeviceWebAPIAdapter* createDeviceWebAPIAdapter() const;
virtual QString getDeviceTypeId() const { return m_deviceTypeID; }
static const QString m_hardwareID;
static const QString m_deviceTypeID;

Wyświetl plik

@ -6,6 +6,8 @@ This input sample source plugin gets its samples from a [PlutoSDR device](https:
&#9758; PlutoSDR is physically implemented as a 1x1 SISO device although the AD9363 chip does have a second Rx and a second Tx channel. Revision C of the board claims to have pads to allow hackers connecting the second ports externally however for now only the first Rx channel is supported by this plugin.
&#9758; When running the Pluto on Ethernet interface you have to create a non discoverable device reference in the [user arguments dialog](https://github.com/f4exb/sdrangel/blob/master/sdrgui/deviceuserargs.md) from the main window Preferences &gt; Devices menu. You must use the `PlutoSDR` hardware ID then specify the device address with a `uri` parameter in the user arguments for example: `uri=ip:192.168.1.10`. Note that this will become effective once SDRangel is restarted.
<h2>Build</h2>
The plugin will be built only if libiio is installed in your system. To build and install libiio from source do:

Wyświetl plik

@ -29,8 +29,9 @@
#include "remoteinputwebapiadapter.h"
const PluginDescriptor RemoteInputPlugin::m_pluginDescriptor = {
QString("RemoteInput"),
QString("Remote device input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -13,8 +13,9 @@
#include "rtlsdrwebapiadapter.h"
const PluginDescriptor RTLSDRPlugin::m_pluginDescriptor = {
QString("RTLSDR"),
QString("RTL-SDR Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -29,8 +29,9 @@
#include "sdrplaywebapiadapter.h"
const PluginDescriptor SDRPlayPlugin::m_pluginDescriptor = {
QString("SDRPlay"),
QString("SDRPlay RSP1 Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -30,8 +30,9 @@
#endif
const PluginDescriptor SoapySDRInputPlugin::m_pluginDescriptor = {
QString("SoapySDR"),
QString("SoapySDR Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -29,8 +29,9 @@
#include "testsourcewebapiadapter.h"
const PluginDescriptor TestSourcePlugin::m_pluginDescriptor = {
QString("TestSource"),
QString("Test Source input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -36,8 +36,9 @@
#endif
const PluginDescriptor XTRXInputPlugin::m_pluginDescriptor = {
QString("XTRX"),
QString("XTRX Input"),
QString("4.11.10"),
QString("4.12.3"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,

Wyświetl plik

@ -18,6 +18,8 @@
#include <QGlobalStatic>
#include "plugin/pluginmanager.h"
#include "device/deviceuserargs.h"
#include "deviceenumerator.h"
Q_GLOBAL_STATIC(DeviceEnumerator, deviceEnumerator)
@ -32,6 +34,154 @@ DeviceEnumerator::DeviceEnumerator()
DeviceEnumerator::~DeviceEnumerator()
{}
void DeviceEnumerator::addNonDiscoverableDevices(PluginManager *pluginManager, const DeviceUserArgs& deviceUserArgs)
{
qDebug("DeviceEnumerator::addNonDiscoverableDevices: start");
const QList<DeviceUserArgs::Args>& args = deviceUserArgs.getArgsByDevice();
QList<DeviceUserArgs::Args>::const_iterator argsIt = args.begin();
unsigned int rxIndex = m_rxEnumeration.size();
unsigned int txIndex = m_txEnumeration.size();
unsigned int mimoIndex = m_mimoEnumeration.size();
for (; argsIt != args.end(); ++argsIt)
{
if (!argsIt->m_nonDiscoverable) { // this process is for non discoverable devices only
continue;
}
QString serial = QString("%1-%2").arg(argsIt->m_id).arg(argsIt->m_sequence);
PluginInterface *rxPlugin = getRxRegisteredPlugin(pluginManager, argsIt->m_id);
if (rxPlugin && !isRxEnumerated(argsIt->m_id, argsIt->m_sequence))
{
int deviceNbItems = rxPlugin->getDefaultRxNbItems();
QString deviceId = rxPlugin->getDeviceTypeId();
for (int deviceIndex = 0; deviceIndex < deviceNbItems; deviceIndex++)
{
QString description = QString("%1[%2:%3] user defined").arg(argsIt->m_id).arg(argsIt->m_sequence).arg(deviceIndex);
qDebug("DeviceEnumerator::addNonDiscoverableDevices: Rx: %s", qPrintable(description));
PluginInterface::SamplingDevice ndDevice(
description,
argsIt->m_id,
deviceId, // id
serial,
argsIt->m_sequence,
rxPlugin->getSamplingDeviceType(),
PluginInterface::SamplingDevice::StreamSingleRx,
deviceNbItems, // deviceNbItems
deviceIndex // deviceItemIndex
);
m_rxEnumeration.push_back(
DeviceEnumeration(
ndDevice,
rxPlugin,
rxIndex
)
);
rxIndex++;
}
}
PluginInterface *txPlugin = getTxRegisteredPlugin(pluginManager, argsIt->m_id);
if (txPlugin && !isTxEnumerated(argsIt->m_id, argsIt->m_sequence))
{
int deviceNbItems = txPlugin->getDefaultTxNbItems();
QString deviceId = txPlugin->getDeviceTypeId();
for (int deviceIndex = 0; deviceIndex < deviceNbItems; deviceIndex++)
{
QString description = QString("%1[%2:%3] user defined").arg(argsIt->m_id).arg(argsIt->m_sequence).arg(deviceIndex);
qDebug("DeviceEnumerator::addNonDiscoverableDevices: Tx: %s", qPrintable(description));
PluginInterface::SamplingDevice ndDevice(
description,
argsIt->m_id,
deviceId, // id
serial,
argsIt->m_sequence,
rxPlugin->getSamplingDeviceType(),
PluginInterface::SamplingDevice::StreamSingleTx,
deviceNbItems, // deviceNbItems
deviceIndex // deviceItemIndex
);
m_txEnumeration.push_back(
DeviceEnumeration(
ndDevice,
txPlugin,
txIndex
)
);
txIndex++;
}
}
} // loop through user args
}
PluginInterface *DeviceEnumerator::getRxRegisteredPlugin(PluginManager *pluginManager, const QString& deviceHwId)
{
PluginAPI::SamplingDeviceRegistrations& rxDeviceRegistrations = pluginManager->getSourceDeviceRegistrations();
PluginInterface *rxPlugin = nullptr;
for (int i = 0; i < rxDeviceRegistrations.count(); i++)
{
if (deviceHwId == rxDeviceRegistrations[i].m_deviceHardwareId)
{
rxPlugin = rxDeviceRegistrations[i].m_plugin;
break;
}
}
return rxPlugin;
}
bool DeviceEnumerator::isRxEnumerated(const QString& deviceHwId, int deviceSequence)
{
std::vector<DeviceEnumeration>::const_iterator rxIt = m_rxEnumeration.begin();
for (; rxIt != m_rxEnumeration.end(); ++rxIt)
{
if ((rxIt->m_samplingDevice.hardwareId == deviceHwId) && (rxIt->m_samplingDevice.sequence == deviceSequence)) {
return true;
}
}
return false;
}
PluginInterface *DeviceEnumerator::getTxRegisteredPlugin(PluginManager *pluginManager, const QString& deviceHwId)
{
PluginAPI::SamplingDeviceRegistrations& txDeviceRegistrations = pluginManager->getSinkDeviceRegistrations();
PluginInterface *txPlugin = nullptr;
for (int i = 0; i < txDeviceRegistrations.count(); i++)
{
if (deviceHwId == txDeviceRegistrations[i].m_deviceHardwareId)
{
txPlugin = txDeviceRegistrations[i].m_plugin;
break;
}
}
return txPlugin;
}
bool DeviceEnumerator::isTxEnumerated(const QString& deviceHwId, int deviceSequence)
{
std::vector<DeviceEnumeration>::const_iterator txIt = m_txEnumeration.begin();
for (; txIt != m_txEnumeration.end(); ++txIt)
{
if ((txIt->m_samplingDevice.hardwareId == deviceHwId) && (txIt->m_samplingDevice.sequence == deviceSequence)) {
return true;
}
}
return false;
}
void DeviceEnumerator::enumerateRxDevices(PluginManager *pluginManager)
{
m_rxEnumeration.clear();

Wyświetl plik

@ -24,6 +24,7 @@
#include "export.h"
class PluginManager;
class DeviceUserArgs;
class SDRBASE_API DeviceEnumerator
{
@ -36,6 +37,7 @@ public:
void enumerateRxDevices(PluginManager *pluginManager);
void enumerateTxDevices(PluginManager *pluginManager);
void enumerateMIMODevices(PluginManager *pluginManager);
void addNonDiscoverableDevices(PluginManager *pluginManager, const DeviceUserArgs& deviceUserArgs);
void listRxDeviceNames(QList<QString>& list, std::vector<int>& indexes) const;
void listTxDeviceNames(QList<QString>& list, std::vector<int>& indexes) const;
void listMIMODeviceNames(QList<QString>& list, std::vector<int>& indexes) const;
@ -82,6 +84,11 @@ private:
DevicesEnumeration m_mimoEnumeration;
PluginInterface::OriginDevices m_originDevices;
QStringList m_originDevicesHwIds;
PluginInterface *getRxRegisteredPlugin(PluginManager *pluginManager, const QString& deviceHwId);
PluginInterface *getTxRegisteredPlugin(PluginManager *pluginManager, const QString& deviceHwId);
bool isRxEnumerated(const QString& deviceHwId, int deviceSequence);
bool isTxEnumerated(const QString& deviceHwId, int deviceSequence);
};
#endif /* SDRBASE_DEVICE_DEVICEENUMERATOR_H_ */

Wyświetl plik

@ -19,9 +19,11 @@ class SDRBASE_API PluginAPI : public QObject {
public:
struct SamplingDeviceRegistration //!< This is the device registration
{
QString m_deviceHardwareId;
QString m_deviceId;
PluginInterface* m_plugin;
SamplingDeviceRegistration(const QString& deviceId, PluginInterface* plugin) :
SamplingDeviceRegistration(const QString& hardwareId, const QString& deviceId, PluginInterface* plugin) :
m_deviceHardwareId(hardwareId),
m_deviceId(deviceId),
m_plugin(plugin)
{ }

Wyświetl plik

@ -7,6 +7,7 @@
#include "export.h"
struct SDRBASE_API PluginDescriptor {
const QString hardwareId;
// general plugin description
const QString displayedName;
const QString version;
@ -202,6 +203,14 @@ public:
(void) originDevices;
}
virtual SamplingDevice::SamplingDeviceType getSamplingDeviceType() const {
return SamplingDevice::SamplingDeviceType::PhysicalDevice;
}
virtual QString getDeviceTypeId() const {
return QString("");
}
// device source plugins only
virtual SamplingDevices enumSampleSources(const OriginDevices& originDevices)
@ -232,6 +241,10 @@ public:
virtual void deleteSampleSourcePluginInstanceGUI(PluginInstanceGUI *ui);
virtual void deleteSampleSourcePluginInstanceInput(DeviceSampleSource *source);
virtual int getDefaultRxNbItems() const {
return 1;
}
// device sink plugins only
virtual SamplingDevices enumSampleSinks(const OriginDevices& originDevices)
@ -263,6 +276,10 @@ public:
virtual void deleteSampleSinkPluginInstanceGUI(PluginInstanceGUI *ui);
virtual void deleteSampleSinkPluginInstanceOutput(DeviceSampleSink *sink);
virtual int getDefaultTxNbItems() const {
return 1;
}
// device MIMO plugins only
virtual SamplingDevices enumSampleMIMO(const OriginDevices& originDevices)

Wyświetl plik

@ -117,6 +117,11 @@ void PluginManager::loadPluginsFinal()
DeviceEnumerator::instance()->enumerateMIMODevices(this);
}
void PluginManager::loadPluginsNonDiscoverable(const DeviceUserArgs& deviceUserArgs)
{
DeviceEnumerator::instance()->addNonDiscoverableDevices(this, deviceUserArgs);
}
void PluginManager::registerRxChannel(const QString& channelIdURI, const QString& channelId, PluginInterface* plugin)
{
qDebug() << "PluginManager::registerRxChannel "
@ -148,27 +153,42 @@ void PluginManager::registerSampleSource(const QString& sourceName, PluginInterf
{
qDebug() << "PluginManager::registerSampleSource "
<< plugin->getPluginDescriptor().displayedName.toStdString().c_str()
<< " with source name " << sourceName.toStdString().c_str();
<< " with source name " << sourceName.toStdString().c_str()
<< " and hardware id " << plugin->getPluginDescriptor().hardwareId;
m_sampleSourceRegistrations.append(PluginAPI::SamplingDeviceRegistration(sourceName, plugin));
m_sampleSourceRegistrations.append(PluginAPI::SamplingDeviceRegistration(
plugin->getPluginDescriptor().hardwareId,
sourceName,
plugin
));
}
void PluginManager::registerSampleSink(const QString& sinkName, PluginInterface* plugin)
{
qDebug() << "PluginManager::registerSampleSink "
<< plugin->getPluginDescriptor().displayedName.toStdString().c_str()
<< " with sink name " << sinkName.toStdString().c_str();
<< " with sink name " << sinkName.toStdString().c_str()
<< " and hardware id " << plugin->getPluginDescriptor().hardwareId;
m_sampleSinkRegistrations.append(PluginAPI::SamplingDeviceRegistration(sinkName, plugin));
m_sampleSinkRegistrations.append(PluginAPI::SamplingDeviceRegistration(
plugin->getPluginDescriptor().hardwareId,
sinkName,
plugin
));
}
void PluginManager::registerSampleMIMO(const QString& mimoName, PluginInterface* plugin)
{
qDebug() << "PluginManager::registerSampleMIMO "
<< plugin->getPluginDescriptor().displayedName.toStdString().c_str()
<< " with MIMO name " << mimoName.toStdString().c_str();
<< " with MIMO name " << mimoName.toStdString().c_str()
<< " and hardware id " << plugin->getPluginDescriptor().hardwareId;
m_sampleMIMORegistrations.append(PluginAPI::SamplingDeviceRegistration(mimoName, plugin));
m_sampleMIMORegistrations.append(PluginAPI::SamplingDeviceRegistration(
plugin->getPluginDescriptor().hardwareId,
mimoName,
plugin
));
}
void PluginManager::loadPluginsDir(const QDir& dir)

Wyświetl plik

@ -34,6 +34,7 @@ class Preset;
class Message;
class MessageQueue;
class DeviceAPI;
class DeviceUserArgs;
class SDRBASE_API PluginManager : public QObject {
Q_OBJECT
@ -59,6 +60,7 @@ public:
void loadPlugins(const QString& pluginsSubDir);
void loadPluginsPart(const QString& pluginsSubDir);
void loadPluginsFinal();
void loadPluginsNonDiscoverable(const DeviceUserArgs& deviceUserArgs);
const Plugins& getPlugins() const { return m_plugins; }
// Callbacks from the plugins

Wyświetl plik

@ -18,28 +18,43 @@ This is the list of available devices reported by the initial enumeration. There
<h2>2 Import device button</h2>
Use this button to import the selected device in the panel above (1) to the panel below (3) that lists the user arguments by device and sequence. You can only import a device which hardware ID and sequence is not already in the panel below.
Use this button to import the selected device in the panel above (1) to the panel below (6) that lists the user arguments by device and sequence. You can only import a device which hardware ID and sequence is not already in the panel below.
<h2>3 User arguments</h2>
<h2>3 Non discoverable device hardware ID</h2>
This is the list of arguments given by the user and attached to a specific device given its hardware ID and sequence. There are 3 columns:
Some devices cannot be discovered automatically. This is the case for networked devices in particular the PlutoSDR. In conjuctions with (4) and (5) you can define devices that can be added to the list of available devices for selection. Note that you will need to restart SDRangel for this to be effective.
Once the device is defined user arguments like the IP address can be specified for it.
<h2>4 Non discoverable device sequence</h2>
In case more than one device with the same hardware ID is used in the system you can differentiate the, with an arbitrary sequence number.
<h2>5 Add non discoverable device definition</h2>
Once defined with controls (3) and (4) use this button to add the device to the list of available devices. This will make it appear immediately in the
<h2>6 User arguments</h2>
This is the list of arguments given by the user and attached to a specific device given its hardware ID and sequence. There are 4 columns:
- **ND**: This is the non discoverable device indicator. When tagged with "ND" it means that the line refers to a non discoverable device specified by the user
- **HwID**: This is the "hardware ID". It represents a type of device like `HackRF` or `TestSource`
- **Seq**: The device sequence in enumeration starting at 0. You may have more that one device of the same type in the system
- **Arg string**: The user argument string. It can be of any form and not necessarily in the `key1=value1, key2=value2` form. It is up to the corresponding plugin to interpret the string and to make use of its information.
<h2>4 Delete button</h2>
<h2>7 Delete button</h2>
Use this button to delete the arguments currently selected in the above panel (3)
Use this button to delete the arguments currently selected in the above panel (6)
<h2>5 Edit arguments</h2>
<h2>8 Edit arguments</h2>
Use this line editor to change the arguments currently selected in the above panel (3). The text will be committed when the focus is lost.
Use this line editor to change the arguments currently selected in the above panel (6). The text will be committed when the focus is lost.
<h2>6 Cancel button</h2>
<h2>9 Cancel button</h2>
The changes made to the argument list are temporary. You can use this button to dismiss the changes and close the dialog.
<h2>7 OK (confirmation) button</h2>
<h2>10 OK (confirmation) button</h2>
The changes made to the argument list are only temporary. You can use this button to commit the changes and close the dialog.

Wyświetl plik

@ -76,16 +76,25 @@
<property name="text">
<string>HwID</string>
</property>
<property name="toolTip">
<string>Hardware ID</string>
</property>
</column>
<column>
<property name="text">
<string>Seq</string>
</property>
<property name="toolTip">
<string>Sequence</string>
</property>
</column>
<column>
<property name="text">
<string>Description</string>
</property>
<property name="toolTip">
<string>Description</string>
</property>
</column>
</widget>
<widget class="QWidget" name="horizontalLayoutWidget">

Wyświetl plik

@ -7,16 +7,21 @@ PluginsDialog::PluginsDialog(PluginManager* pluginManager, QWidget* parent) :
ui(new Ui::PluginsDialog)
{
ui->setupUi(this);
const PluginManager::Plugins& plugins = pluginManager->getPlugins();
for(PluginManager::Plugins::const_iterator it = plugins.constBegin(); it != plugins.constEnd(); ++it) {
for (PluginManager::Plugins::const_iterator it = plugins.constBegin(); it != plugins.constEnd(); ++it)
{
QStringList sl;
const PluginDescriptor& desc = it->pluginInterface->getPluginDescriptor();
sl.append(desc.displayedName);
sl.append(desc.version);
if(desc.licenseIsGPL)
if (desc.licenseIsGPL) {
sl.append(tr("YES"));
else sl.append("no");
} else {
sl.append("no");
}
QTreeWidgetItem* pluginItem = new QTreeWidgetItem(ui->tree, sl);
sl.clear();
sl.append(tr("Copyright: %1").arg(desc.copyright));
@ -30,8 +35,13 @@ PluginsDialog::PluginsDialog(PluginManager* pluginManager, QWidget* parent) :
sl.append(tr("Source Code: %1").arg(desc.sourceCodeURL));
item = new QTreeWidgetItem(pluginItem, sl);
item->setFirstColumnSpanned(true);
sl.clear();
sl.append(tr("Hardware ID: %1").arg(desc.hardwareId));
item = new QTreeWidgetItem(pluginItem, sl);
item->setFirstColumnSpanned(true);
}
ui->tree->resizeColumnToContents(0);
ui->tree->resizeColumnToContents(0);
ui->tree->resizeColumnToContents(1);
ui->tree->resizeColumnToContents(2);
}

Wyświetl plik

@ -193,6 +193,7 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parse
m_pluginManager = new PluginManager(this);
m_pluginManager->loadPlugins(QString("plugins"));
m_pluginManager->loadPluginsNonDiscoverable(m_settings.getDeviceUserArgs());
splash->showStatusMessage("load file input...", Qt::white);
qDebug() << "MainWindow::MainWindow: select SampleSource from settings or default (file input)...";
@ -1693,7 +1694,7 @@ void MainWindow::sampleSourceChanged()
deviceUI->m_deviceAPI->stopDeviceEngine();
// deletes old UI and input object
deviceUI->m_deviceAPI->getSampleSource()->setMessageQueueToGUI(0); // have source stop sending messages to the GUI
deviceUI->m_deviceAPI->getSampleSource()->setMessageQueueToGUI(nullptr); // have source stop sending messages to the GUI
deviceUI->m_deviceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI(
deviceUI->m_deviceAPI->getSamplingDevicePluginInstanceGUI());
deviceUI->m_deviceAPI->resetSamplingDeviceId();