diff --git a/devices/soapysdr/devicesoapysdr.cpp b/devices/soapysdr/devicesoapysdr.cpp
index 31b5da5ab..723e401ed 100644
--- a/devices/soapysdr/devicesoapysdr.cpp
+++ b/devices/soapysdr/devicesoapysdr.cpp
@@ -15,6 +15,7 @@
// along with this program. If not, see . //
///////////////////////////////////////////////////////////////////////////////////
+#include
#include "devicesoapysdr.h"
DeviceSoapySDR::DeviceSoapySDR()
@@ -31,10 +32,10 @@ DeviceSoapySDR& DeviceSoapySDR::instance()
return inst;
}
-SoapySDR::Device *DeviceSoapySDR::openSoapySDR(uint32_t sequence)
+SoapySDR::Device *DeviceSoapySDR::openSoapySDR(uint32_t sequence, const QString& hardwareUserArguments)
{
instance();
- return openopenSoapySDRFromSequence(sequence);
+ return openopenSoapySDRFromSequence(sequence, hardwareUserArguments);
}
void DeviceSoapySDR::closeSoapySdr(SoapySDR::Device *device)
@@ -42,7 +43,7 @@ void DeviceSoapySDR::closeSoapySdr(SoapySDR::Device *device)
SoapySDR::Device::unmake(device);
}
-SoapySDR::Device *DeviceSoapySDR::openopenSoapySDRFromSequence(uint32_t sequence)
+SoapySDR::Device *DeviceSoapySDR::openopenSoapySDRFromSequence(uint32_t sequence, const QString& hardwareUserArguments)
{
if (sequence > m_scanner.getNbDevices())
{
@@ -57,10 +58,30 @@ SoapySDR::Device *DeviceSoapySDR::openopenSoapySDRFromSequence(uint32_t sequence
SoapySDR::Kwargs kwargs;
kwargs["driver"] = deviceEnum.m_driverName.toStdString();
- if (deviceEnum.m_idKey.size() > 0) {
+ if (hardwareUserArguments.size() > 0)
+ {
+ QStringList kvArgs = hardwareUserArguments.split(',');
+
+ for (int i = 0; i < kvArgs.size(); i++)
+ {
+ QStringList kv = kvArgs.at(i).split('=');
+
+ if (kv.size() > 1) {
+ kwargs[kv.at(0).toStdString()] = kv.at(1).toStdString();
+ }
+ }
+ }
+ else if (deviceEnum.m_idKey.size() > 0)
+ {
kwargs[deviceEnum.m_idKey.toStdString()] = deviceEnum.m_idValue.toStdString();
}
+ SoapySDR::Kwargs::const_iterator it = kwargs.begin();
+
+ for (; it != kwargs.end(); ++it) {
+ qDebug("DeviceSoapySDR::openopenSoapySDRFromSequence: %s=%s", it->first.c_str(), it->second.c_str());
+ }
+
SoapySDR::Device *device = SoapySDR::Device::make(kwargs);
return device;
}
diff --git a/devices/soapysdr/devicesoapysdr.h b/devices/soapysdr/devicesoapysdr.h
index e75001750..6c825bca4 100644
--- a/devices/soapysdr/devicesoapysdr.h
+++ b/devices/soapysdr/devicesoapysdr.h
@@ -28,7 +28,7 @@ class DEVICES_API DeviceSoapySDR
{
public:
static DeviceSoapySDR& instance();
- SoapySDR::Device *openSoapySDR(uint32_t sequence);
+ SoapySDR::Device *openSoapySDR(uint32_t sequence, const QString& hardwareUserArguments);
void closeSoapySdr(SoapySDR::Device *device);
uint32_t getNbDevices() const { return m_scanner.getNbDevices(); }
@@ -43,7 +43,7 @@ protected:
~DeviceSoapySDR();
private:
- SoapySDR::Device *openopenSoapySDRFromSequence(uint32_t sequence);
+ SoapySDR::Device *openopenSoapySDRFromSequence(uint32_t sequence, const QString& hardwareUserArguments);
DeviceSoapySDRScan m_scanner;
};
diff --git a/plugins/samplesink/soapysdroutput/soapysdroutput.cpp b/plugins/samplesink/soapysdroutput/soapysdroutput.cpp
index 5ab3c692f..5b8707639 100644
--- a/plugins/samplesink/soapysdroutput/soapysdroutput.cpp
+++ b/plugins/samplesink/soapysdroutput/soapysdroutput.cpp
@@ -131,7 +131,7 @@ bool SoapySDROutput::openDevice()
{
qDebug("SoapySDROutput::openDevice: open device here");
DeviceSoapySDR& deviceSoapySDR = DeviceSoapySDR::instance();
- m_deviceShared.m_device = deviceSoapySDR.openSoapySDR(m_deviceAPI->getSamplingDeviceSequence());
+ m_deviceShared.m_device = deviceSoapySDR.openSoapySDR(m_deviceAPI->getSamplingDeviceSequence(), m_deviceAPI->getHardwareUserArguments());
if (!m_deviceShared.m_device)
{
diff --git a/plugins/samplesource/soapysdrinput/soapysdrinput.cpp b/plugins/samplesource/soapysdrinput/soapysdrinput.cpp
index 46a227d15..eaee50da5 100644
--- a/plugins/samplesource/soapysdrinput/soapysdrinput.cpp
+++ b/plugins/samplesource/soapysdrinput/soapysdrinput.cpp
@@ -149,7 +149,7 @@ bool SoapySDRInput::openDevice()
{
qDebug("SoapySDRInput::openDevice: open device here");
DeviceSoapySDR& deviceSoapySDR = DeviceSoapySDR::instance();
- m_deviceShared.m_device = deviceSoapySDR.openSoapySDR(m_deviceAPI->getSamplingDeviceSequence());
+ m_deviceShared.m_device = deviceSoapySDR.openSoapySDR(m_deviceAPI->getSamplingDeviceSequence(), m_deviceAPI->getHardwareUserArguments());
if (!m_deviceShared.m_device)
{
diff --git a/sdrsrv/maincore.cpp b/sdrsrv/maincore.cpp
index c63e659f9..bc7604c6c 100644
--- a/sdrsrv/maincore.cpp
+++ b/sdrsrv/maincore.cpp
@@ -288,8 +288,11 @@ void MainCore::addSinkDevice()
m_deviceSets.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName);
m_deviceSets.back()->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getTxPluginInterface(fileSinkDeviceIndex));
- // delete previous plugin instance
- //m_deviceSets.back()->m_deviceSinkAPI->getPluginInterface()->deleteSampleSinkPluginInstanceOutput()
+ QString userArgs = m_settings.getDeviceUserArgs().findUserArgs(samplingDevice->hardwareId, samplingDevice->sequence);
+
+ if (userArgs.size() > 0) {
+ m_deviceSets.back()->m_deviceAPI->setHardwareUserArguments(userArgs);
+ }
DeviceSampleSink *sink = m_deviceSets.back()->m_deviceAPI->getPluginInterface()->createSampleSinkPluginInstance(
m_deviceSets.back()->m_deviceAPI->getSamplingDeviceId(), m_deviceSets.back()->m_deviceAPI);
@@ -330,6 +333,12 @@ void MainCore::addSourceDevice()
m_deviceSets.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName);
m_deviceSets.back()->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getRxPluginInterface(fileSourceDeviceIndex));
+ QString userArgs = m_settings.getDeviceUserArgs().findUserArgs(samplingDevice->hardwareId, samplingDevice->sequence);
+
+ if (userArgs.size() > 0) {
+ m_deviceSets.back()->m_deviceAPI->setHardwareUserArguments(userArgs);
+ }
+
DeviceSampleSource *source = m_deviceSets.back()->m_deviceAPI->getPluginInterface()->createSampleSourcePluginInstance(
m_deviceSets.back()->m_deviceAPI->getSamplingDeviceId(), m_deviceSets.back()->m_deviceAPI);
m_deviceSets.back()->m_deviceAPI->setSampleSource(source);