diff --git a/sdrbase/device/deviceapi.h b/sdrbase/device/deviceapi.h index ebb4ada00..5e5536dea 100644 --- a/sdrbase/device/deviceapi.h +++ b/sdrbase/device/deviceapi.h @@ -102,50 +102,26 @@ public: MessageQueue *getDeviceEngineInputMessageQueue(); //!< Device engine message queue MessageQueue *getSamplingDeviceInputMessageQueue(); //!< Sampling device (ex: single Rx) input message queue - // MessageQueue *getSampleSinkInputMessageQueue(); - // MessageQueue *getSampleSourceInputMessageQueue(); MessageQueue *getSamplingDeviceGUIMessageQueue(); //!< Sampling device (ex: single Tx) GUI input message queue - // MessageQueue *getSampleSinkGUIMessageQueue(); - // MessageQueue *getSampleSourceGUIMessageQueue(); void configureCorrections(bool dcOffsetCorrection, bool iqImbalanceCorrection, int streamIndex = 0); //!< Configure current device engine DSP corrections (Rx) void setHardwareId(const QString& id); void setSamplingDeviceId(const QString& id) { m_samplingDeviceId = id; } - // void setSampleSourceId(const QString& id); - // void setSampleSinkId(const QString& id); void resetSamplingDeviceId() { m_samplingDeviceId.clear(); } - // void resetSampleSourceId(); - // void resetSampleSinkId(); void setSamplingDeviceSerial(const QString& serial) { m_samplingDeviceSerial = serial; } - // void setSampleSourceSerial(const QString& serial); - // void setSampleSinkSerial(const QString& serial); void setSamplingDeviceDisplayName(const QString& name) { m_samplingDeviceDisplayName = name; } - // void setSampleSourceDisplayName(const QString& serial); - // void setSampleSinkDisplayName(const QString& serial); void setSamplingDeviceSequence(int sequence) { m_samplingDeviceSequence = sequence; } - // void setSampleSourceSequence(int sequence); - // void setSampleSinkSequence(int sequence); + void setHardwareUserArguments(const QString& userArguments) { m_hardwareUserArguments = userArguments; } void setSamplingDevicePluginInterface(PluginInterface *iface); - // void setSampleSourcePluginInterface(PluginInterface *iface); - // void setSampleSinkPluginInterface(PluginInterface *iface); void setSamplingDevicePluginInstanceGUI(PluginInstanceGUI *gui); - // void setSampleSourcePluginInstanceGUI(PluginInstanceGUI *gui); - // void setSampleSinkPluginInstanceUI(PluginInstanceGUI *gui); const QString& getHardwareId() const { return m_hardwareId; } const QString& getSamplingDeviceId() const { return m_samplingDeviceId; } - // const QString& getSampleSourceId() const { return m_sampleSourceId; } - // const QString& getSampleSinkId() const { return m_sampleSinkId; } const QString& getSamplingDeviceSerial() const { return m_samplingDeviceSerial; } - // const QString& getSampleSourceSerial() const { return m_sampleSourceSerial; } - // const QString& getSampleSinkSerial() const { return m_sampleSinkSerial; } const QString& getSamplingDeviceDisplayName() const { return m_samplingDeviceDisplayName; } - // const QString& getSampleSourceDisplayName() const { return m_sampleSourceDisplayName; } - // const QString& getSampleSinkDisplayName() const { return m_sampleSinkDisplayName; } uint32_t getSamplingDeviceSequence() const { return m_samplingDeviceSequence; } - // uint32_t getSampleSourceSequence() const { return m_sampleSourceSequence; } - // uint32_t getSampleSinkSequence() const { return m_sampleSinkSequence; } + const QString& getHardwareUserArguments() const { return m_hardwareUserArguments; } void setDeviceNbItems(uint32_t nbItems); void setDeviceItemIndex(uint32_t index); @@ -212,6 +188,7 @@ protected: QString m_samplingDeviceSerial; //!< The device serial number defined by the vendor or a fake one (SDRplay) QString m_samplingDeviceDisplayName; //!< The human readable name identifying this instance uint32_t m_samplingDeviceSequence; //!< The device sequence. >0 when more than one device of the same type is connected + QString m_hardwareUserArguments; //!< User given arguments to be used at hardware level i.e. for the hardware device and device sequence PluginInstanceGUI* m_samplingDevicePluginInstanceUI; // Buddies (single Rx or single Tx) diff --git a/sdrbase/device/deviceuserargs.cpp b/sdrbase/device/deviceuserargs.cpp index 2df5367e1..a3b3bda67 100644 --- a/sdrbase/device/deviceuserargs.cpp +++ b/sdrbase/device/deviceuserargs.cpp @@ -79,6 +79,17 @@ QList::iterator DeviceUserArgs::findDeviceArgs(const QStri } } +QString DeviceUserArgs::findUserArgs(const QString& id, int sequence) +{ + QList::iterator it = findDeviceArgs(id, sequence); + + if (it != m_argsByDevice.end()) { + return it->m_args; + } else { + return ""; + } +} + void DeviceUserArgs::addDeviceArgs(const QString& id, int sequence, const QString& deviceArgs) { Args args; diff --git a/sdrbase/device/deviceuserargs.h b/sdrbase/device/deviceuserargs.h index 94a70800e..5a64e2c4a 100644 --- a/sdrbase/device/deviceuserargs.h +++ b/sdrbase/device/deviceuserargs.h @@ -43,6 +43,7 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); QList::iterator findDeviceArgs(const QString& id, int sequence); + QString findUserArgs(const QString& id, int sequence); void addDeviceArgs(const QString& id, int sequence, const QString& args); //!< Will not add if it exists for same reference void addOrUpdateDeviceArgs(const QString& id, int sequence, const QString& args); //!< Add or update if it exists for same reference void updateDeviceArgs(const QString& id, int sequence, const QString& args); //!< Will not update if reference does not exist diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index a3fc8617a..c8f3117c6 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -315,6 +315,12 @@ void MainWindow::addSourceDevice(int deviceIndex) m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); m_deviceUIs.back()->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getRxPluginInterface(deviceIndex)); + QString userArgs = m_settings.getDeviceUserArgs().findUserArgs(samplingDevice->hardwareId, samplingDevice->sequence); + + if (userArgs.size() > 0) { + m_deviceUIs.back()->m_deviceAPI->setHardwareUserArguments(userArgs); + } + m_deviceUIs.back()->m_samplingDeviceControl->setSelectedDeviceIndex(deviceIndex); // delete previous plugin GUI @@ -388,6 +394,12 @@ void MainWindow::addSinkDevice() m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); m_deviceUIs.back()->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getTxPluginInterface(fileSinkDeviceIndex)); + QString userArgs = m_settings.getDeviceUserArgs().findUserArgs(samplingDevice->hardwareId, samplingDevice->sequence); + + if (userArgs.size() > 0) { + m_deviceUIs.back()->m_deviceAPI->setHardwareUserArguments(userArgs); + } + m_deviceUIs.back()->m_samplingDeviceControl->setSelectedDeviceIndex(fileSinkDeviceIndex); // delete previous plugin GUI if it exists @@ -469,6 +481,12 @@ void MainWindow::addMIMODevice() m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); m_deviceUIs.back()->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getMIMOPluginInterface(testMIMODeviceIndex)); + QString userArgs = m_settings.getDeviceUserArgs().findUserArgs(samplingDevice->hardwareId, samplingDevice->sequence); + + if (userArgs.size() > 0) { + m_deviceUIs.back()->m_deviceAPI->setHardwareUserArguments(userArgs); + } + m_deviceUIs.back()->m_samplingDeviceControl->setSelectedDeviceIndex(testMIMODeviceIndex); // delete previous plugin GUI if it exists @@ -1676,6 +1694,12 @@ void MainWindow::sampleSourceChanged() deviceUI->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); deviceUI->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getRxPluginInterface(deviceUI->m_samplingDeviceControl->getSelectedDeviceIndex())); + QString userArgs = m_settings.getDeviceUserArgs().findUserArgs(samplingDevice->hardwareId, samplingDevice->sequence); + + if (userArgs.size() > 0) { + deviceUI->m_deviceAPI->setHardwareUserArguments(userArgs); + } + // add to buddies list std::vector::iterator it = m_deviceUIs.begin(); int nbOfBuddies = 0; @@ -1765,6 +1789,12 @@ void MainWindow::sampleSinkChanged() deviceUI->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); deviceUI->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getTxPluginInterface(deviceUI->m_samplingDeviceControl->getSelectedDeviceIndex())); + QString userArgs = m_settings.getDeviceUserArgs().findUserArgs(samplingDevice->hardwareId, samplingDevice->sequence); + + if (userArgs.size() > 0) { + deviceUI->m_deviceAPI->setHardwareUserArguments(userArgs); + } + // add to buddies list std::vector::iterator it = m_deviceUIs.begin(); int nbOfBuddies = 0; @@ -1849,6 +1879,12 @@ void MainWindow::sampleMIMOChanged() deviceUI->m_deviceAPI->setSamplingDevicePluginInterface( DeviceEnumerator::instance()->getMIMOPluginInterface(deviceUI->m_samplingDeviceControl->getSelectedDeviceIndex())); + QString userArgs = m_settings.getDeviceUserArgs().findUserArgs(samplingDevice->hardwareId, samplingDevice->sequence); + + if (userArgs.size() > 0) { + deviceUI->m_deviceAPI->setHardwareUserArguments(userArgs); + } + // constructs new GUI and MIMO object DeviceSampleMIMO *mimo = deviceUI->m_deviceAPI->getPluginInterface()->createSampleMIMOPluginInstance( deviceUI->m_deviceAPI->getSamplingDeviceId(), deviceUI->m_deviceAPI);