From a32d508256f3424406c6103ae1af19a1b897280b Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 2 Nov 2017 09:17:38 +0100 Subject: [PATCH] Pass device item index to the device API when creating or assigning a new device --- sdrbase/device/devicesinkapi.cpp | 6 ++++++ sdrbase/device/devicesinkapi.h | 15 +++++++++------ sdrbase/device/devicesourceapi.cpp | 6 ++++++ sdrbase/device/devicesourceapi.h | 15 +++++++++------ sdrbase/plugin/plugininterface.h | 2 +- sdrgui/mainwindow.cpp | 5 +++++ 6 files changed, 36 insertions(+), 13 deletions(-) diff --git a/sdrbase/device/devicesinkapi.cpp b/sdrbase/device/devicesinkapi.cpp index 228a07571..6707723e6 100644 --- a/sdrbase/device/devicesinkapi.cpp +++ b/sdrbase/device/devicesinkapi.cpp @@ -27,6 +27,7 @@ DeviceSinkAPI::DeviceSinkAPI(int deviceTabIndex, m_deviceTabIndex(deviceTabIndex), m_deviceSinkEngine(deviceSinkEngine), m_sampleSinkSequence(0), + m_itemIndex(0), m_pluginInterface(0), m_sampleSinkPluginInstanceUI(0), m_buddySharedPtr(0), @@ -159,6 +160,11 @@ void DeviceSinkAPI::setSampleSinkSequence(int sequence) m_deviceSinkEngine->setSinkSequence(sequence); } +void DeviceSinkAPI::setItemIndex(uint32_t index) +{ + m_itemIndex = index; +} + void DeviceSinkAPI::setSampleSinkPluginInterface(PluginInterface *iface) { m_pluginInterface = iface; diff --git a/sdrbase/device/devicesinkapi.h b/sdrbase/device/devicesinkapi.h index d20623f7f..aebd8c67e 100644 --- a/sdrbase/device/devicesinkapi.h +++ b/sdrbase/device/devicesinkapi.h @@ -66,6 +66,7 @@ public: void setSampleSinkSerial(const QString& serial); void setSampleSinkDisplayName(const QString& serial); void setSampleSinkSequence(int sequence); + void setItemIndex(uint32_t index); void setSampleSinkPluginInterface(PluginInterface *iface); void setSampleSinkPluginInstanceUI(PluginInstanceGUI *gui); @@ -73,8 +74,9 @@ public: const QString& getSampleSinkId() const { return m_sampleSinkId; } const QString& getSampleSinkSerial() const { return m_sampleSinkSerial; } const QString& getSampleSinkDisplayName() const { return m_sampleSinkDisplayName; } - PluginInterface *getPluginInterface() { return m_pluginInterface; } uint32_t getSampleSinkSequence() const { return m_sampleSinkSequence; } + uint32_t getItemIndex() const { return m_itemIndex; } + PluginInterface *getPluginInterface() { return m_pluginInterface; } PluginInstanceGUI *getSampleSinkPluginInstanceGUI() { return m_sampleSinkPluginInstanceUI; } void registerChannelInstance(const QString& channelName, PluginInstanceGUI* pluginGUI); @@ -104,11 +106,12 @@ protected: int m_deviceTabIndex; DSPDeviceSinkEngine *m_deviceSinkEngine; - QString m_hardwareId; - QString m_sampleSinkId; - QString m_sampleSinkSerial; - QString m_sampleSinkDisplayName; - uint32_t m_sampleSinkSequence; + QString m_hardwareId; //!< The internal id that identifies the type of hardware (i.e. HackRF, BladeRF, ...) + QString m_sampleSinkId; //!< The internal plugin ID corresponding to the device (i.e. for HackRF input, for HackRF output ...) + QString m_sampleSinkSerial; //!< The device serial number defined by the vendor + QString m_sampleSinkDisplayName; //!< The human readable name identifying this instance + uint32_t m_sampleSinkSequence; //!< The device sequence. >0 when more than one device of the same type is connected + uint32_t m_itemIndex; //!< The Rx stream index. Can be >0 for NxM devices (i.e. 0 or 1 for LimeSDR) PluginInterface* m_pluginInterface; PluginInstanceGUI* m_sampleSinkPluginInstanceUI; diff --git a/sdrbase/device/devicesourceapi.cpp b/sdrbase/device/devicesourceapi.cpp index fe31d1968..4522412fa 100644 --- a/sdrbase/device/devicesourceapi.cpp +++ b/sdrbase/device/devicesourceapi.cpp @@ -27,6 +27,7 @@ DeviceSourceAPI::DeviceSourceAPI(int deviceTabIndex, m_deviceTabIndex(deviceTabIndex), m_deviceSourceEngine(deviceSourceEngine), m_sampleSourceSequence(0), + m_itemIndex(0), m_pluginInterface(0), m_sampleSourcePluginInstanceUI(0), m_buddySharedPtr(0), @@ -151,6 +152,11 @@ void DeviceSourceAPI::setSampleSourceSequence(int sequence) m_deviceSourceEngine->setSourceSequence(sequence); } +void DeviceSourceAPI::setItemIndex(uint32_t index) +{ + m_itemIndex = index; +} + void DeviceSourceAPI::setSampleSourcePluginInterface(PluginInterface *iface) { m_pluginInterface = iface; diff --git a/sdrbase/device/devicesourceapi.h b/sdrbase/device/devicesourceapi.h index 8a58a556a..516b0c61e 100644 --- a/sdrbase/device/devicesourceapi.h +++ b/sdrbase/device/devicesourceapi.h @@ -66,6 +66,7 @@ public: void setSampleSourceSerial(const QString& serial); void setSampleSourceDisplayName(const QString& serial); void setSampleSourceSequence(int sequence); + void setItemIndex(uint32_t index); void setSampleSourcePluginInterface(PluginInterface *iface); void setSampleSourcePluginInstanceGUI(PluginInstanceGUI *gui); @@ -73,8 +74,9 @@ public: const QString& getSampleSourceId() const { return m_sampleSourceId; } const QString& getSampleSourceSerial() const { return m_sampleSourceSerial; } const QString& getSampleSourceDisplayName() const { return m_sampleSourceDisplayName; } - PluginInterface *getPluginInterface() { return m_pluginInterface; } uint32_t getSampleSourceSequence() const { return m_sampleSourceSequence; } + uint32_t getItemIndex() const { return m_itemIndex; } + PluginInterface *getPluginInterface() { return m_pluginInterface; } PluginInstanceGUI *getSampleSourcePluginInstanceGUI() { return m_sampleSourcePluginInstanceUI; } void loadSourceSettings(const Preset* preset); @@ -100,11 +102,12 @@ protected: int m_deviceTabIndex; DSPDeviceSourceEngine *m_deviceSourceEngine; - QString m_hardwareId; - QString m_sampleSourceId; - QString m_sampleSourceSerial; - QString m_sampleSourceDisplayName; - uint32_t m_sampleSourceSequence; + QString m_hardwareId; //!< The internal id that identifies the type of hardware (i.e. HackRF, BladeRF, ...) + QString m_sampleSourceId; //!< The internal plugin ID corresponding to the device (i.e. for HackRF input, for HackRF output ...) + QString m_sampleSourceSerial; //!< The device serial number defined by the vendor or a fake one (SDRplay) + QString m_sampleSourceDisplayName; //!< The human readable name identifying this instance + uint32_t m_sampleSourceSequence; //!< The device sequence. >0 when more than one device of the same type is connected + uint32_t m_itemIndex; //!< The Rx stream index. Can be >0 for NxM devices (i.e. 0 or 1 for LimeSDR) PluginInterface* m_pluginInterface; PluginInstanceGUI* m_sampleSourcePluginInstanceUI; diff --git a/sdrbase/plugin/plugininterface.h b/sdrbase/plugin/plugininterface.h index d3c20d552..b840e1895 100644 --- a/sdrbase/plugin/plugininterface.h +++ b/sdrbase/plugin/plugininterface.h @@ -36,7 +36,7 @@ public: QString displayedName; //!< The human readable name QString hardwareId; //!< The internal id that identifies the type of hardware (i.e. HackRF, BladeRF, ...) QString id; //!< The internal plugin ID corresponding to the device (i.e. for HackRF input, for HackRF output ...) - QString serial; //!< The device serial number + QString serial; //!< The device serial number defined by the vendor or a fake one (SDRplay) int sequence; //!< The device sequence. >0 when more than one device of the same type is connected SamplingDeviceType type; //!< The sampling device type for behavior information bool rxElseTx; //!< This is the Rx part else the Tx part of the device diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 2c853a0eb..87c47d496 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -155,6 +155,7 @@ MainWindow::MainWindow(QWidget* parent) : PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(deviceIndex); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceSequence(samplingDevice.sequence); + m_deviceUIs.back()->m_deviceSourceAPI->setItemIndex(samplingDevice.deviceItemIndex); m_deviceUIs.back()->m_deviceSourceAPI->setHardwareId(samplingDevice.hardwareId); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceId(samplingDevice.id); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceSerial(samplingDevice.serial); @@ -243,6 +244,7 @@ void MainWindow::addSourceDevice() int fileSourceDeviceIndex = DeviceEnumerator::instance()->getFileSourceDeviceIndex(); PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(fileSourceDeviceIndex); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceSequence(samplingDevice.sequence); + m_deviceUIs.back()->m_deviceSourceAPI->setItemIndex(samplingDevice.deviceItemIndex); m_deviceUIs.back()->m_deviceSourceAPI->setHardwareId(samplingDevice.hardwareId); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceId(samplingDevice.id); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSourceSerial(samplingDevice.serial); @@ -312,6 +314,7 @@ void MainWindow::addSinkDevice() int fileSinkDeviceIndex = DeviceEnumerator::instance()->getFileSinkDeviceIndex(); PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(fileSinkDeviceIndex); m_deviceUIs.back()->m_deviceSinkAPI->setSampleSinkSequence(samplingDevice.sequence); + m_deviceUIs.back()->m_deviceSinkAPI->setItemIndex(samplingDevice.deviceItemIndex); m_deviceUIs.back()->m_deviceSinkAPI->setHardwareId(samplingDevice.hardwareId); m_deviceUIs.back()->m_deviceSinkAPI->setSampleSinkId(samplingDevice.id); m_deviceUIs.back()->m_deviceSinkAPI->setSampleSinkSerial(samplingDevice.serial); @@ -898,6 +901,7 @@ void MainWindow::on_sampleSource_changed() PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(deviceUI->m_samplingDeviceControl->getSelectedDeviceIndex()); deviceUI->m_deviceSourceAPI->setSampleSourceSequence(samplingDevice.sequence); + deviceUI->m_deviceSourceAPI->setItemIndex(samplingDevice.deviceItemIndex); deviceUI->m_deviceSourceAPI->setHardwareId(samplingDevice.hardwareId); deviceUI->m_deviceSourceAPI->setSampleSourceId(samplingDevice.id); deviceUI->m_deviceSourceAPI->setSampleSourceSerial(samplingDevice.serial); @@ -984,6 +988,7 @@ void MainWindow::on_sampleSink_changed() PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(deviceUI->m_samplingDeviceControl->getSelectedDeviceIndex()); deviceUI->m_deviceSinkAPI->setSampleSinkSequence(samplingDevice.sequence); + deviceUI->m_deviceSinkAPI->setItemIndex(samplingDevice.deviceItemIndex); deviceUI->m_deviceSinkAPI->setHardwareId(samplingDevice.hardwareId); deviceUI->m_deviceSinkAPI->setSampleSinkId(samplingDevice.id); deviceUI->m_deviceSinkAPI->setSampleSinkSerial(samplingDevice.serial);