diff --git a/debian/changelog b/debian/changelog index 556968ab9..aa966f4f3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +sdrangel (3.0.0-1) unstable; urgency=medium + + * Implemented real Tx devices (BladeRF and HackRF) for real transmission + + -- Edouard Griffiths, F4EXB Sun, 01 Jan 2017 23:14:18 +0100 + sdrangel (2.5.2-1) unstable; urgency=medium * Changed modulators source device feeding diff --git a/fcdlib/fcdtraits.cpp b/fcdlib/fcdtraits.cpp index 08a8bc531..274d90b8c 100644 --- a/fcdlib/fcdtraits.cpp +++ b/fcdlib/fcdtraits.cpp @@ -10,6 +10,9 @@ const char *fcd_traits::alsaDeviceName = "hw:CARD=V10"; const char *fcd_traits::alsaDeviceName = "hw:CARD=V20"; +const char *fcd_traits::hardwareID = "FCDPro"; +const char *fcd_traits::hardwareID = "FCDPro+"; + const char *fcd_traits::interfaceIID = "sdrangel.samplesource.fcdpro"; const char *fcd_traits::interfaceIID = "sdrangel.samplesource.fcdproplus"; @@ -19,5 +22,5 @@ const char *fcd_traits::displayedName = "FunCube Dongle Pro+"; const char *fcd_traits::pluginDisplayedName = "FunCube Pro Input"; const char *fcd_traits::pluginDisplayedName = "FunCube Pro+ Input"; -const char *fcd_traits::pluginVersion = "2.0.0"; -const char *fcd_traits::pluginVersion = "2.0.0"; +const char *fcd_traits::pluginVersion = "3.0.0"; +const char *fcd_traits::pluginVersion = "3.0.0"; diff --git a/fcdlib/fcdtraits.h b/fcdlib/fcdtraits.h index 74df0c2d5..8d6cc9db0 100644 --- a/fcdlib/fcdtraits.h +++ b/fcdlib/fcdtraits.h @@ -25,6 +25,7 @@ struct fcd_traits static const int convBufSize = (1<<11); static const int fcdBufSize = (1<<12); static const char *alsaDeviceName; + static const char *hardwareID; static const char *interfaceIID; static const char *displayedName; static const char *pluginDisplayedName; @@ -40,6 +41,7 @@ struct fcd_traits static const int convBufSize = (1<<11); static const int fcdBufSize = (1<<12); static const char *alsaDeviceName; + static const char *hardwareID; static const char *interfaceIID; static const char *displayedName; static const char *pluginDisplayedName; @@ -55,6 +57,7 @@ struct fcd_traits static const int convBufSize = (1<<12); static const int fcdBufSize = (1<<18); static const char *alsaDeviceName; + static const char *hardwareID; static const char *interfaceIID; static const char *displayedName; static const char *pluginDisplayedName; @@ -62,6 +65,7 @@ struct fcd_traits }; template const char *fcd_traits::alsaDeviceName = ""; +template const char *fcd_traits::hardwareID = ""; template const char *fcd_traits::interfaceIID = ""; template const char *fcd_traits::displayedName = ""; template const char *fcd_traits::pluginDisplayedName = ""; diff --git a/plugins/samplesink/CMakeLists.txt b/plugins/samplesink/CMakeLists.txt index 7c1f5cca2..5d5c860f3 100644 --- a/plugins/samplesink/CMakeLists.txt +++ b/plugins/samplesink/CMakeLists.txt @@ -1,4 +1,15 @@ project(samplesink) +find_package(LibUSB) + +find_package(LibBLADERF) +if(LIBUSB_FOUND AND LIBBLADERF_FOUND) + add_subdirectory(bladerfoutput) +endif(LIBUSB_FOUND AND LIBBLADERF_FOUND) + +if (BUILD_DEBIAN) + add_subdirectory(bladerfoutput) +endif (BUILD_DEBIAN) + add_subdirectory(filesink) diff --git a/plugins/samplesink/filesink/filesinkplugin.cpp b/plugins/samplesink/filesink/filesinkplugin.cpp index ae9f8739b..cdce5ce6d 100644 --- a/plugins/samplesink/filesink/filesinkplugin.cpp +++ b/plugins/samplesink/filesink/filesinkplugin.cpp @@ -25,13 +25,14 @@ const PluginDescriptor FileSinkPlugin::m_pluginDescriptor = { QString("File sink output"), - QString("2.2.1"), + QString("3.0.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, QString("https://github.com/f4exb/sdrangel") }; +const QString FileSinkPlugin::m_hardwareID = "FileSink"; const QString FileSinkPlugin::m_deviceTypeID = FILESINK_DEVICE_TYPE_ID; FileSinkPlugin::FileSinkPlugin(QObject* parent) : @@ -59,6 +60,7 @@ PluginInterface::SamplingDevices FileSinkPlugin::enumSampleSinks() QString displayedName(QString("FileSink[%1]").arg(i)); result.append(SamplingDevice(displayedName, + m_hardwareID, m_deviceTypeID, QString::null, i)); diff --git a/plugins/samplesink/filesink/filesinkplugin.h b/plugins/samplesink/filesink/filesinkplugin.h index 03249c049..dd9316560 100644 --- a/plugins/samplesink/filesink/filesinkplugin.h +++ b/plugins/samplesink/filesink/filesinkplugin.h @@ -39,7 +39,8 @@ public: virtual SamplingDevices enumSampleSinks(); virtual PluginGUI* createSampleSinkPluginGUI(const QString& sourceId, QWidget **widget, DeviceSinkAPI *deviceAPI); - static const QString m_deviceTypeID; + static const QString m_hardwareID; + static const QString m_deviceTypeID; private: static const PluginDescriptor m_pluginDescriptor; diff --git a/plugins/samplesource/airspy/airspyplugin.cpp b/plugins/samplesource/airspy/airspyplugin.cpp index 793b7e72c..ab3e0afa7 100644 --- a/plugins/samplesource/airspy/airspyplugin.cpp +++ b/plugins/samplesource/airspy/airspyplugin.cpp @@ -27,13 +27,14 @@ const PluginDescriptor AirspyPlugin::m_pluginDescriptor = { QString("Airspy Input"), - QString("2.0.0"), + QString("3.0.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, QString("https://github.com/f4exb/sdrangel") }; +const QString AirspyPlugin::m_hardwareID = "Airspy"; const QString AirspyPlugin::m_deviceTypeID = AIRSPY_DEVICE_TYPE_ID; AirspyPlugin::AirspyPlugin(QObject* parent) : @@ -95,6 +96,7 @@ PluginInterface::SamplingDevices AirspyPlugin::enumSampleSources() QString displayedName(QString("Airspy[%1] %2").arg(i).arg(serial_str)); result.append(SamplingDevice(displayedName, + m_hardwareID, m_deviceTypeID, serial_str, i)); diff --git a/plugins/samplesource/airspy/airspyplugin.h b/plugins/samplesource/airspy/airspyplugin.h index b8368cdf4..7c9a328b2 100644 --- a/plugins/samplesource/airspy/airspyplugin.h +++ b/plugins/samplesource/airspy/airspyplugin.h @@ -38,7 +38,8 @@ public: virtual SamplingDevices enumSampleSources(); virtual PluginGUI* createSampleSourcePluginGUI(const QString& sourceId, QWidget **widget, DeviceSourceAPI *deviceAPI); - static const QString m_deviceTypeID; + static const QString m_hardwareID; + static const QString m_deviceTypeID; private: static const PluginDescriptor m_pluginDescriptor; diff --git a/plugins/samplesource/bladerfinput/bladerfinputplugin.cpp b/plugins/samplesource/bladerfinput/bladerfinputplugin.cpp index b45b1aa5e..3cdaa5c7a 100644 --- a/plugins/samplesource/bladerfinput/bladerfinputplugin.cpp +++ b/plugins/samplesource/bladerfinput/bladerfinputplugin.cpp @@ -27,13 +27,14 @@ const PluginDescriptor BlderfInputPlugin::m_pluginDescriptor = { QString("BladerRF Input"), - QString("2.0.0"), + QString("3.0.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, QString("https://github.com/f4exb/sdrangel") }; +const QString BlderfInputPlugin::m_hardwareID = "BladeRF"; const QString BlderfInputPlugin::m_deviceTypeID = BLADERF_DEVICE_TYPE_ID; BlderfInputPlugin::BlderfInputPlugin(QObject* parent) : @@ -63,6 +64,7 @@ PluginInterface::SamplingDevices BlderfInputPlugin::enumSampleSources() QString displayedName(QString("BladeRF[%1] %2").arg(devinfo[i].instance).arg(devinfo[i].serial)); result.append(SamplingDevice(displayedName, + m_hardwareID, m_deviceTypeID, QString(devinfo[i].serial), i)); diff --git a/plugins/samplesource/bladerfinput/bladerfinputplugin.h b/plugins/samplesource/bladerfinput/bladerfinputplugin.h index a7f4a2064..1d21e6fd8 100644 --- a/plugins/samplesource/bladerfinput/bladerfinputplugin.h +++ b/plugins/samplesource/bladerfinput/bladerfinputplugin.h @@ -38,7 +38,8 @@ public: virtual SamplingDevices enumSampleSources(); virtual PluginGUI* createSampleSourcePluginGUI(const QString& sourceId, QWidget **widget, DeviceSourceAPI *deviceAPI); - static const QString m_deviceTypeID; + static const QString m_hardwareID; + static const QString m_deviceTypeID; private: static const PluginDescriptor m_pluginDescriptor; diff --git a/plugins/samplesource/fcdpro/fcdproplugin.cpp b/plugins/samplesource/fcdpro/fcdproplugin.cpp index 2e41a6048..7d6f9b6f0 100644 --- a/plugins/samplesource/fcdpro/fcdproplugin.cpp +++ b/plugins/samplesource/fcdpro/fcdproplugin.cpp @@ -34,8 +34,6 @@ const PluginDescriptor FCDProPlugin::m_pluginDescriptor = { QString("https://github.com/f4exb/sdrangel") }; -const QString FCDProPlugin::m_deviceTypeID = FCDPRO_DEVICE_TYPE_ID; - FCDProPlugin::FCDProPlugin(QObject* parent) : QObject(parent) { @@ -64,7 +62,8 @@ PluginInterface::SamplingDevices FCDProPlugin::enumSampleSources() QString displayedName(QString("%1[%2] %3").arg(fcd_traits::displayedName).arg(i).arg(serialNumber)); result.append(SamplingDevice(displayedName, - fcd_traits::interfaceIID, + fcd_traits::hardwareID, + fcd_traits::interfaceIID, serialNumber, i)); diff --git a/plugins/samplesource/fcdpro/fcdproplugin.h b/plugins/samplesource/fcdpro/fcdproplugin.h index 0ad9ab3ac..9d7b9c8d9 100644 --- a/plugins/samplesource/fcdpro/fcdproplugin.h +++ b/plugins/samplesource/fcdpro/fcdproplugin.h @@ -22,8 +22,6 @@ public: virtual SamplingDevices enumSampleSources(); virtual PluginGUI* createSampleSourcePluginGUI(const QString& sourceId, QWidget **widget, DeviceSourceAPI *deviceAPI); - static const QString m_deviceTypeID; - private: static const PluginDescriptor m_pluginDescriptor; }; diff --git a/plugins/samplesource/fcdproplus/fcdproplusplugin.cpp b/plugins/samplesource/fcdproplus/fcdproplusplugin.cpp index 6888cd087..2e1ed6d24 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusplugin.cpp +++ b/plugins/samplesource/fcdproplus/fcdproplusplugin.cpp @@ -64,6 +64,7 @@ PluginInterface::SamplingDevices FCDProPlusPlugin::enumSampleSources() QString displayedName(QString("%1[%2] %3").arg(fcd_traits::displayedName).arg(i).arg(serialNumber)); result.append(SamplingDevice(displayedName, + fcd_traits::hardwareID, fcd_traits::interfaceIID, serialNumber, i)); diff --git a/plugins/samplesource/filesource/filesourceplugin.cpp b/plugins/samplesource/filesource/filesourceplugin.cpp index 1f2e41117..ef0cce861 100644 --- a/plugins/samplesource/filesource/filesourceplugin.cpp +++ b/plugins/samplesource/filesource/filesourceplugin.cpp @@ -25,13 +25,14 @@ const PluginDescriptor FileSourcePlugin::m_pluginDescriptor = { QString("File source input"), - QString("2.1.5"), + QString("3.0.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, QString("https://github.com/f4exb/sdrangel") }; +const QString FileSourcePlugin::m_hardwareID = "FileSource"; const QString FileSourcePlugin::m_deviceTypeID = FILESOURCE_DEVICE_TYPE_ID; FileSourcePlugin::FileSourcePlugin(QObject* parent) : @@ -59,6 +60,7 @@ PluginInterface::SamplingDevices FileSourcePlugin::enumSampleSources() QString displayedName(QString("FileSource[%1]").arg(i)); result.append(SamplingDevice(displayedName, + m_hardwareID, m_deviceTypeID, QString::null, i)); diff --git a/plugins/samplesource/filesource/filesourceplugin.h b/plugins/samplesource/filesource/filesourceplugin.h index 3bb3bc773..11ae4963b 100644 --- a/plugins/samplesource/filesource/filesourceplugin.h +++ b/plugins/samplesource/filesource/filesourceplugin.h @@ -38,7 +38,8 @@ public: virtual SamplingDevices enumSampleSources(); virtual PluginGUI* createSampleSourcePluginGUI(const QString& sourceId, QWidget **widget, DeviceSourceAPI *deviceAPI); - static const QString m_deviceTypeID; + static const QString m_hardwareID; + static const QString m_deviceTypeID; private: static const PluginDescriptor m_pluginDescriptor; diff --git a/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp b/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp index ce6f1c09a..3ec257ca3 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp @@ -29,13 +29,14 @@ const PluginDescriptor HackRFInputPlugin::m_pluginDescriptor = { QString("HackRF Input"), - QString("2.0.0"), + QString("3.0.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, QString("https://github.com/f4exb/sdrangel") }; +const QString HackRFInputPlugin::m_hardwareID = "HackRF"; const QString HackRFInputPlugin::m_deviceTypeID = HACKRF_DEVICE_TYPE_ID; HackRFInputPlugin::HackRFInputPlugin(QObject* parent) : @@ -92,7 +93,9 @@ PluginInterface::SamplingDevices HackRFInputPlugin::enumSampleSources() uint64_t serial_num = (((uint64_t) serial_msb)<<32) + serial_lsb; QString displayedName(QString("HackRF[%1] %2").arg(i).arg(serial_str)); - result.append(SamplingDevice(displayedName, m_deviceTypeID, + result.append(SamplingDevice(displayedName, + m_hardwareID, + m_deviceTypeID, serial_str, i)); diff --git a/plugins/samplesource/hackrfinput/hackrfinputplugin.h b/plugins/samplesource/hackrfinput/hackrfinputplugin.h index a62de99df..11af13592 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputplugin.h +++ b/plugins/samplesource/hackrfinput/hackrfinputplugin.h @@ -38,7 +38,8 @@ public: virtual SamplingDevices enumSampleSources(); virtual PluginGUI* createSampleSourcePluginGUI(const QString& sourceId, QWidget **widget, DeviceSourceAPI *deviceAPI); - static const QString m_deviceTypeID; + static const QString m_hardwareID; + static const QString m_deviceTypeID; private: static const PluginDescriptor m_pluginDescriptor; diff --git a/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp b/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp index f0ad15c5d..e59a9ff66 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp @@ -11,13 +11,14 @@ const PluginDescriptor RTLSDRPlugin::m_pluginDescriptor = { QString("RTL-SDR Input"), - QString("2.1.6"), + QString("3.0.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, QString("https://github.com/f4exb/sdrangel") }; +const QString RTLSDRPlugin::m_hardwareID = "RTLSDR"; const QString RTLSDRPlugin::m_deviceTypeID = RTLSDR_DEVICE_TYPE_ID; RTLSDRPlugin::RTLSDRPlugin(QObject* parent) : @@ -53,6 +54,7 @@ PluginInterface::SamplingDevices RTLSDRPlugin::enumSampleSources() QString displayedName(QString("RTL-SDR[%1] %2").arg(i).arg(serial)); result.append(SamplingDevice(displayedName, + m_hardwareID, m_deviceTypeID, QString(serial), i)); diff --git a/plugins/samplesource/rtlsdr/rtlsdrplugin.h b/plugins/samplesource/rtlsdr/rtlsdrplugin.h index 6ffb4948d..de176a9c9 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrplugin.h +++ b/plugins/samplesource/rtlsdr/rtlsdrplugin.h @@ -22,7 +22,8 @@ public: virtual SamplingDevices enumSampleSources(); virtual PluginGUI* createSampleSourcePluginGUI(const QString& sourceId, QWidget **widget, DeviceSourceAPI *deviceAPI); - static const QString m_deviceTypeID; + static const QString m_hardwareID; + static const QString m_deviceTypeID; private: static const PluginDescriptor m_pluginDescriptor; diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonplugin.cpp b/plugins/samplesource/sdrdaemon/sdrdaemonplugin.cpp index d244c3b88..629111b26 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemonplugin.cpp +++ b/plugins/samplesource/sdrdaemon/sdrdaemonplugin.cpp @@ -25,13 +25,14 @@ const PluginDescriptor SDRdaemonPlugin::m_pluginDescriptor = { QString("SDRdaemon input"), - QString("2.0.0"), + QString("3.0.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, QString("https://github.com/f4exb/sdrangel") }; +const QString SDRdaemonPlugin::m_hardwareID = "SDRdaemon"; const QString SDRdaemonPlugin::m_deviceTypeID = SDRDAEMON_DEVICE_TYPE_ID; SDRdaemonPlugin::SDRdaemonPlugin(QObject* parent) : @@ -59,6 +60,7 @@ PluginInterface::SamplingDevices SDRdaemonPlugin::enumSampleSources() QString displayedName(QString("SDRdaemon[%1]").arg(i)); result.append(SamplingDevice(displayedName, + m_hardwareID, m_deviceTypeID, QString::null, i)); diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonplugin.h b/plugins/samplesource/sdrdaemon/sdrdaemonplugin.h index 625ce2247..b71a1ec0f 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemonplugin.h +++ b/plugins/samplesource/sdrdaemon/sdrdaemonplugin.h @@ -38,7 +38,8 @@ public: virtual SamplingDevices enumSampleSources(); virtual PluginGUI* createSampleSourcePluginGUI(const QString& sourceId, QWidget **widget, DeviceSourceAPI *deviceAPI); - static const QString m_deviceTypeID; + static const QString m_hardwareID; + static const QString m_deviceTypeID; private: static const PluginDescriptor m_pluginDescriptor; diff --git a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecplugin.cpp b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecplugin.cpp index 05ea77c48..cc02fa009 100644 --- a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecplugin.cpp +++ b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecplugin.cpp @@ -27,13 +27,14 @@ const PluginDescriptor SDRdaemonFECPlugin::m_pluginDescriptor = { QString("SDRdaemon with FEC input"), - QString("2.1.0"), + QString("3.0.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, QString("https://github.com/f4exb/sdrangel") }; +const QString SDRdaemonFECPlugin::m_hardwareID = "SDRdaemonFEC"; const QString SDRdaemonFECPlugin::m_deviceTypeID = SDRDAEMONFEC_DEVICE_TYPE_ID; SDRdaemonFECPlugin::SDRdaemonFECPlugin(QObject* parent) : @@ -61,6 +62,7 @@ PluginInterface::SamplingDevices SDRdaemonFECPlugin::enumSampleSources() QString displayedName(QString("SDRdaemonFEC[%1]").arg(i)); result.append(SamplingDevice(displayedName, + m_hardwareID, m_deviceTypeID, QString::null, i)); diff --git a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecplugin.h b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecplugin.h index 87957f197..04999635d 100644 --- a/plugins/samplesource/sdrdaemonfec/sdrdaemonfecplugin.h +++ b/plugins/samplesource/sdrdaemonfec/sdrdaemonfecplugin.h @@ -38,7 +38,8 @@ public: virtual SamplingDevices enumSampleSources(); virtual PluginGUI* createSampleSourcePluginGUI(const QString& sourceId, QWidget **widget, DeviceSourceAPI *deviceAPI); - static const QString m_deviceTypeID; + static const QString m_hardwareID; + static const QString m_deviceTypeID; private: static const PluginDescriptor m_pluginDescriptor; diff --git a/plugins/samplesource/sdrplay/sdrplayplugin.cpp b/plugins/samplesource/sdrplay/sdrplayplugin.cpp index a2cc50ce6..bb8ab2589 100644 --- a/plugins/samplesource/sdrplay/sdrplayplugin.cpp +++ b/plugins/samplesource/sdrplay/sdrplayplugin.cpp @@ -24,14 +24,15 @@ #include const PluginDescriptor SDRPlayPlugin::m_pluginDescriptor = { - QString("SDRPlay Input"), - QString("2.3.0"), + QString("SDRPlay RSP1 Input"), + QString("3.0.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, QString("https://github.com/f4exb/sdrangel") }; +const QString SDRPlayPlugin::m_hardwareID = "SDRplay1"; const QString SDRPlayPlugin::m_deviceTypeID = SDRPLAY_DEVICE_TYPE_ID; SDRPlayPlugin::SDRPlayPlugin(QObject* parent) : @@ -73,6 +74,7 @@ PluginInterface::SamplingDevices SDRPlayPlugin::enumSampleSources() QString displayedName(QString("SDRPlay[%1] %2").arg(i).arg(serial)); result.append(SamplingDevice(displayedName, + m_hardwareID, m_deviceTypeID, QString(serial), i)); diff --git a/plugins/samplesource/sdrplay/sdrplayplugin.h b/plugins/samplesource/sdrplay/sdrplayplugin.h index b50789a61..25e8c1365 100644 --- a/plugins/samplesource/sdrplay/sdrplayplugin.h +++ b/plugins/samplesource/sdrplay/sdrplayplugin.h @@ -38,6 +38,7 @@ public: virtual SamplingDevices enumSampleSources(); virtual PluginGUI* createSampleSourcePluginGUI(const QString& sourceId, QWidget **widget, DeviceSourceAPI *deviceAPI); + static const QString m_hardwareID; static const QString m_deviceTypeID; private: diff --git a/sdrbase/device/devicesinkapi.cpp b/sdrbase/device/devicesinkapi.cpp index 749cd885a..4301970b3 100644 --- a/sdrbase/device/devicesinkapi.cpp +++ b/sdrbase/device/devicesinkapi.cpp @@ -15,6 +15,7 @@ /////////////////////////////////////////////////////////////////////////////////// #include "device/devicesinkapi.h" +#include "device/devicesourceapi.h" #include "plugin/plugingui.h" #include "plugin/pluginapi.h" #include "plugin/plugininterface.h" @@ -146,6 +147,11 @@ void DeviceSinkAPI::setOutputGUI(QWidget* outputGUI, const QString& sinkDisplayN m_mainWindow->setDeviceGUI(m_deviceTabIndex, outputGUI, sinkDisplayName, false); } +void DeviceSinkAPI::setHardwareId(const QString& id) +{ + m_hardwareId = id; +} + void DeviceSinkAPI::setSampleSinkId(const QString& id) { m_sampleSinkId = id; @@ -377,4 +383,107 @@ bool DeviceSinkAPI::ChannelInstanceRegistration::operator<(const ChannelInstance } } +void DeviceSinkAPI::addSourceBuddy(DeviceSourceAPI* buddy) +{ + std::vector::iterator it = m_sourceBuddies.begin(); + + for (;it != m_sourceBuddies.end(); ++it) + { + if (((*it)->getHardwareId() == buddy->getHardwareId()) && + ((*it)->getSampleSourceSerial() == buddy->getSampleSourceSerial())) + { + qDebug("DeviceSinkAPI::addSourceBuddy: buddy %s(%s) already in the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSourceSerial())); + return; + } + } + + m_sourceBuddies.push_back(buddy); + qDebug("DeviceSinkAPI::addSourceBuddy: added buddy %s(%s) to the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSourceSerial())); +} + +void DeviceSinkAPI::addSinkBuddy(DeviceSinkAPI* buddy) +{ + std::vector::iterator it = m_sinkBuddies.begin(); + + for (;it != m_sinkBuddies.end(); ++it) + { + if (((*it)->getHardwareId() == buddy->getHardwareId()) && + ((*it)->getSampleSinkSerial() == buddy->getSampleSinkSerial())) + { + qDebug("DeviceSinkAPI::addSinkBuddy: buddy %s(%s) already in the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSinkSerial())); + return; + } + } + + m_sinkBuddies.push_back(buddy); + qDebug("DeviceSinkAPI::addSinkBuddy: added buddy %s(%s) to the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSinkSerial())); +} + +void DeviceSinkAPI::removeSourceBuddy(DeviceSourceAPI* buddy) +{ + std::vector::iterator it = m_sourceBuddies.begin(); + + for (;it != m_sourceBuddies.end(); ++it) + { + if (((*it)->getHardwareId() == buddy->getHardwareId()) && + ((*it)->getSampleSourceSerial() == buddy->getSampleSourceSerial())) + { + m_sourceBuddies.erase(it); + qDebug("DeviceSinkAPI::removeSourceBuddy: buddy %s(%s) removed from the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSourceSerial())); + return; + } + } + + qDebug("DeviceSinkAPI::removeSourceBuddy: buddy %s(%s) not found in the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSourceSerial())); +} + +void DeviceSinkAPI::removeSinkBuddy(DeviceSinkAPI* buddy) +{ + std::vector::iterator it = m_sinkBuddies.begin(); + + for (;it != m_sinkBuddies.end(); ++it) + { + if (((*it)->getHardwareId() == buddy->getHardwareId()) && + ((*it)->getSampleSinkSerial() == buddy->getSampleSinkSerial())) + { + m_sinkBuddies.erase(it); + qDebug("DeviceSinkAPI::removeSinkBuddy: buddy %s(%s) removed from the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSinkSerial())); + return; + } + } + + qDebug("DeviceSinkAPI::removeSinkBuddy: buddy %s(%s) not found in the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSinkSerial())); +} + +void DeviceSinkAPI::removeFromBuddies() +{ + std::vector::iterator itSource = m_sourceBuddies.begin(); + std::vector::iterator itSink = m_sinkBuddies.begin(); + + for (;itSource != m_sourceBuddies.end(); ++itSource) + { + (*itSource)->removeSinkBuddy(this); + } + + for (;itSink != m_sinkBuddies.end(); ++itSink) + { + (*itSink)->removeSinkBuddy(this); + } +} diff --git a/sdrbase/device/devicesinkapi.h b/sdrbase/device/devicesinkapi.h index 4c6c638b6..66ddfe0f8 100644 --- a/sdrbase/device/devicesinkapi.h +++ b/sdrbase/device/devicesinkapi.h @@ -35,6 +35,7 @@ class QWidget; class PluginGUI; class PluginAPI; class Preset; +class DeviceSourceAPI; class SDRANGEL_API DeviceSinkAPI : public QObject { Q_OBJECT @@ -64,11 +65,17 @@ public: void addRollupWidget(QWidget *widget); //!< Add rollup widget to channel window void setOutputGUI(QWidget* outputGUI, const QString& sinkDisplayName); + void setHardwareId(const QString& id); void setSampleSinkId(const QString& id); void setSampleSinkSerial(const QString& serial); void setSampleSinkSequence(int sequence); void setSampleSinkPluginGUI(PluginGUI *gui); + const QString& getHardwareId() const { return m_hardwareId; } + const QString& getSampleSinkId() const { return m_sampleSinkId; } + const QString& getSampleSinkSerial() const { return m_sampleSinkSerial; } + int getSampleSinkSequence() const { return m_sampleSinkSequence; } + void registerChannelInstance(const QString& channelName, PluginGUI* pluginGUI); void removeChannelInstance(PluginGUI* pluginGUI); @@ -80,6 +87,15 @@ public: void saveChannelSettings(Preset* preset); MainWindow *getMainWindow() { return m_mainWindow; } + DSPDeviceSinkEngine *getDeviceSinkEngine() { return m_deviceSinkEngine; } + + const std::vector& getSourceBuddies() const { return m_sourceBuddies; } + const std::vector& getSinkBuddies() const { return m_sinkBuddies; } + void addSourceBuddy(DeviceSourceAPI* buddy); + void addSinkBuddy(DeviceSinkAPI* buddy); + void removeSourceBuddy(DeviceSourceAPI* buddy); + void removeSinkBuddy(DeviceSinkAPI* buddy); + void removeFromBuddies(); protected: struct ChannelInstanceRegistration @@ -117,6 +133,7 @@ protected: GLSpectrum *m_spectrum; ChannelWindow *m_channelWindow; + QString m_hardwareId; QString m_sampleSinkId; QString m_sampleSinkSerial; int m_sampleSinkSequence; @@ -124,6 +141,9 @@ protected: ChannelInstanceRegistrations m_channelInstanceRegistrations; + std::vector m_sourceBuddies; //!< Device source APIs referencing the same physical device + std::vector m_sinkBuddies; //!< Device sink APIs referencing the same physical device + friend class MainWindow; }; diff --git a/sdrbase/device/devicesourceapi.cpp b/sdrbase/device/devicesourceapi.cpp index fbf5c0998..5b7f16c2e 100644 --- a/sdrbase/device/devicesourceapi.cpp +++ b/sdrbase/device/devicesourceapi.cpp @@ -15,6 +15,7 @@ /////////////////////////////////////////////////////////////////////////////////// #include "device/devicesourceapi.h" +#include "device/devicesinkapi.h" #include "plugin/plugingui.h" #include "plugin/pluginapi.h" #include "plugin/plugininterface.h" @@ -137,6 +138,11 @@ void DeviceSourceAPI::setInputGUI(QWidget* inputGUI, const QString& sourceDispla m_mainWindow->setDeviceGUI(m_deviceTabIndex, inputGUI, sourceDisplayName); } +void DeviceSourceAPI::setHardwareId(const QString& id) +{ + m_hardwareId = id; +} + void DeviceSourceAPI::setSampleSourceId(const QString& id) { m_sampleSourceId = id; @@ -373,3 +379,107 @@ bool DeviceSourceAPI::ChannelInstanceRegistration::operator<(const ChannelInstan return false; } } + +void DeviceSourceAPI::addSourceBuddy(DeviceSourceAPI* buddy) +{ + std::vector::iterator it = m_sourceBuddies.begin(); + + for (;it != m_sourceBuddies.end(); ++it) + { + if (((*it)->getHardwareId() == buddy->getHardwareId()) && + ((*it)->getSampleSourceSerial() == buddy->getSampleSourceSerial())) + { + qDebug("DeviceSourceAPI::addSourceBuddy: buddy %s(%s) already in the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSourceSerial())); + return; + } + } + + m_sourceBuddies.push_back(buddy); + qDebug("DeviceSourceAPI::addSourceBuddy: added buddy %s(%s) to the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSourceSerial())); +} + +void DeviceSourceAPI::addSinkBuddy(DeviceSinkAPI* buddy) +{ + std::vector::iterator it = m_sinkBuddies.begin(); + + for (;it != m_sinkBuddies.end(); ++it) + { + if (((*it)->getHardwareId() == buddy->getHardwareId()) && + ((*it)->getSampleSinkSerial() == buddy->getSampleSinkSerial())) + { + qDebug("DeviceSourceAPI::addSinkBuddy: buddy %s(%s) already in the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSinkSerial())); + return; + } + } + + m_sinkBuddies.push_back(buddy); + qDebug("DeviceSourceAPI::addSinkBuddy: added buddy %s(%s) to the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSinkSerial())); +} + +void DeviceSourceAPI::removeSourceBuddy(DeviceSourceAPI* buddy) +{ + std::vector::iterator it = m_sourceBuddies.begin(); + + for (;it != m_sourceBuddies.end(); ++it) + { + if (((*it)->getHardwareId() == buddy->getHardwareId()) && + ((*it)->getSampleSourceSerial() == buddy->getSampleSourceSerial())) + { + m_sourceBuddies.erase(it); + qDebug("DeviceSourceAPI::removeSourceBuddy: buddy %s(%s) removed from the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSourceSerial())); + return; + } + } + + qDebug("DeviceSourceAPI::removeSourceBuddy: buddy %s(%s) not found in the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSourceSerial())); +} + +void DeviceSourceAPI::removeSinkBuddy(DeviceSinkAPI* buddy) +{ + std::vector::iterator it = m_sinkBuddies.begin(); + + for (;it != m_sinkBuddies.end(); ++it) + { + if (((*it)->getHardwareId() == buddy->getHardwareId()) && + ((*it)->getSampleSinkSerial() == buddy->getSampleSinkSerial())) + { + m_sinkBuddies.erase(it); + qDebug("DeviceSourceAPI::removeSinkBuddy: buddy %s(%s) removed from the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSinkSerial())); + return; + } + } + + qDebug("DeviceSourceAPI::removeSinkBuddy: buddy %s(%s) not found in the list", + qPrintable(buddy->getHardwareId()), + qPrintable(buddy->getSampleSinkSerial())); +} + +void DeviceSourceAPI::removeFromBuddies() +{ + std::vector::iterator itSource = m_sourceBuddies.begin(); + std::vector::iterator itSink = m_sinkBuddies.begin(); + + for (;itSource != m_sourceBuddies.end(); ++itSource) + { + (*itSource)->removeSourceBuddy(this); + } + + for (;itSink != m_sinkBuddies.end(); ++itSink) + { + (*itSink)->removeSourceBuddy(this); + } +} diff --git a/sdrbase/device/devicesourceapi.h b/sdrbase/device/devicesourceapi.h index 1786a4934..1564192fa 100644 --- a/sdrbase/device/devicesourceapi.h +++ b/sdrbase/device/devicesourceapi.h @@ -36,6 +36,7 @@ class QWidget; class PluginGUI; class PluginAPI; class Preset; +class DeviceSinkAPI; class SDRANGEL_API DeviceSourceAPI : public QObject { Q_OBJECT @@ -64,11 +65,17 @@ public: void addRollupWidget(QWidget *widget); //!< Add rollup widget to channel window void setInputGUI(QWidget* inputGUI, const QString& sourceDisplayName); + void setHardwareId(const QString& id); void setSampleSourceId(const QString& id); void setSampleSourceSerial(const QString& serial); void setSampleSourceSequence(int sequence); void setSampleSourcePluginGUI(PluginGUI *gui); + const QString& getHardwareId() const { return m_hardwareId; } + const QString& getSampleSourceId() const { return m_sampleSourceId; } + const QString& getSampleSourceSerial() const { return m_sampleSourceSerial; } + int getSampleSourceSequence() const { return m_sampleSourceSequence; } + void registerChannelInstance(const QString& channelName, PluginGUI* pluginGUI); void removeChannelInstance(PluginGUI* pluginGUI); @@ -80,6 +87,15 @@ public: void saveChannelSettings(Preset* preset); MainWindow *getMainWindow() { return m_mainWindow; } + DSPDeviceSourceEngine *getDeviceSourceEngine() { return m_deviceSourceEngine; } + + const std::vector& getSourceBuddies() const { return m_sourceBuddies; } + const std::vector& getSinkBuddies() const { return m_sinkBuddies; } + void addSourceBuddy(DeviceSourceAPI* buddy); + void addSinkBuddy(DeviceSinkAPI* buddy); + void removeSourceBuddy(DeviceSourceAPI* buddy); + void removeSinkBuddy(DeviceSinkAPI* buddy); + void removeFromBuddies(); protected: struct ChannelInstanceRegistration @@ -117,6 +133,7 @@ protected: GLSpectrum *m_spectrum; ChannelWindow *m_channelWindow; + QString m_hardwareId; QString m_sampleSourceId; QString m_sampleSourceSerial; int m_sampleSourceSequence; @@ -124,6 +141,9 @@ protected: ChannelInstanceRegistrations m_channelInstanceRegistrations; + std::vector m_sourceBuddies; //!< Device source APIs referencing the same physical device + std::vector m_sinkBuddies; //!< Device sink APIs referencing the same physical device + friend class MainWindow; }; diff --git a/sdrbase/gui/aboutdialog.ui b/sdrbase/gui/aboutdialog.ui index 01d79ad85..f413e97d1 100644 --- a/sdrbase/gui/aboutdialog.ui +++ b/sdrbase/gui/aboutdialog.ui @@ -84,7 +84,7 @@ - <html><head/><body><p>Version 2.5.2 - Copyright (C) 2015-2016 Edouard Griffiths, F4EXB. </p><p>Code at <a href="https://github.com/f4exb/sdrangel"><span style=" text-decoration: underline; color:#0000ff;">https://github.com/f4exb/sdrangel</span></a> This is a complete redesign from RTL-SDRangelove at <a href="https://github.com/hexameron/rtl-sdrangelove"><span style=" text-decoration: underline; color:#0000ff;">https://github.com/hexameron/rtl-sdrangelove</span></a></p><p>Many thanks to the original developers:</p><p>The osmocom developer team - especially horizon, Hoernchen &amp; tnt.</p><p>Christian Daniel from maintech GmbH.</p><p>John Greb (hexameron) for the contributions in RTL-SDRangelove</p><p>The following rules apply to the SDRangel main application and libsdrbase:<br/>This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You should have received a copy of the GNU General Public License along with this program. If not, see <a href="http://www.gnu.org/licenses/"><span style=" text-decoration: underline; color:#0000ff;">http://www.gnu.org/licenses/</span></a>.</p><p>For the license of installed plugins, look into the plugin list.</p></body></html> + <html><head/><body><p>Version 3.0.0 - Copyright (C) 2015-2016 Edouard Griffiths, F4EXB. </p><p>Code at <a href="https://github.com/f4exb/sdrangel"><span style=" text-decoration: underline; color:#0000ff;">https://github.com/f4exb/sdrangel</span></a> This is a complete redesign from RTL-SDRangelove at <a href="https://github.com/hexameron/rtl-sdrangelove"><span style=" text-decoration: underline; color:#0000ff;">https://github.com/hexameron/rtl-sdrangelove</span></a></p><p>Many thanks to the original developers:</p><p>The osmocom developer team - especially horizon, Hoernchen &amp; tnt.</p><p>Christian Daniel from maintech GmbH.</p><p>John Greb (hexameron) for the contributions in RTL-SDRangelove</p><p>The following rules apply to the SDRangel main application and libsdrbase:<br/>This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You should have received a copy of the GNU General Public License along with this program. If not, see <a href="http://www.gnu.org/licenses/"><span style=" text-decoration: underline; color:#0000ff;">http://www.gnu.org/licenses/</span></a>.</p><p>For the license of installed plugins, look into the plugin list.</p></body></html> true diff --git a/sdrbase/mainwindow.cpp b/sdrbase/mainwindow.cpp index 64b84b755..47ee013ab 100644 --- a/sdrbase/mainwindow.cpp +++ b/sdrbase/mainwindow.cpp @@ -451,9 +451,9 @@ void MainWindow::createStatusBar() { QString qtVersionStr = QString("Qt %1 ").arg(QT_VERSION_STR); #if QT_VERSION >= 0x050400 - m_showSystemWidget = new QLabel("SDRangel v2.5.2 " + qtVersionStr + QSysInfo::prettyProductName(), this); + m_showSystemWidget = new QLabel("SDRangel v3.0.0 " + qtVersionStr + QSysInfo::prettyProductName(), this); #else - m_showSystemWidget = new QLabel("SDRangel v2.5.2 " + qtVersionStr, this); + m_showSystemWidget = new QLabel("SDRangel v3.0.0 " + qtVersionStr, this); #endif statusBar()->addPermanentWidget(m_showSystemWidget); @@ -787,18 +787,44 @@ void MainWindow::on_sampleSource_confirmClicked(bool checked) { qDebug("MainWindow::on_sampleSource_confirmClicked: tab at %d", currentSourceTabIndex); DeviceUISet *deviceUI = m_deviceUIs[currentSourceTabIndex]; - deviceUI->m_deviceSourceAPI->saveSourceSettings(m_settings.getWorkingPreset()); + deviceUI->m_deviceSourceAPI->saveSourceSettings(m_settings.getWorkingPreset()); // save old API settings + deviceUI->m_deviceSourceAPI->removeFromBuddies(); // remove old API from buddies lists int selectedComboIndex = deviceUI->m_samplingDeviceControl->getDeviceSelector()->currentIndex(); void *devicePtr = deviceUI->m_samplingDeviceControl->getDeviceSelector()->itemData(selectedComboIndex).value(); - m_pluginManager->selectSampleSourceByDevice(devicePtr, deviceUI->m_deviceSourceAPI); - deviceUI->m_deviceSourceAPI->loadSourceSettings(m_settings.getWorkingPreset()); + m_pluginManager->selectSampleSourceByDevice(devicePtr, deviceUI->m_deviceSourceAPI); // sets the new API + deviceUI->m_deviceSourceAPI->loadSourceSettings(m_settings.getWorkingPreset()); // load new API settings + + // add to buddies list + std::vector::iterator it = m_deviceUIs.begin(); + for (; it != m_deviceUIs.end(); ++it) + { + if (*it != deviceUI) // do not add to itself + { + if ((*it)->m_deviceSourceEngine) // it is a source device + { + if ((deviceUI->m_deviceSourceAPI->getHardwareId() == (*it)->m_deviceSourceAPI->getHardwareId()) && + (deviceUI->m_deviceSourceAPI->getSampleSourceSerial() == (*it)->m_deviceSourceAPI->getSampleSourceSerial())) + { + (*it)->m_deviceSourceAPI->addSourceBuddy(deviceUI->m_deviceSourceAPI); + } + } + + if ((*it)->m_deviceSinkEngine) // it is a sink device + { + if ((deviceUI->m_deviceSourceAPI->getHardwareId() == (*it)->m_deviceSinkAPI->getHardwareId()) && + (deviceUI->m_deviceSourceAPI->getSampleSourceSerial() == (*it)->m_deviceSinkAPI->getSampleSinkSerial())) + { + (*it)->m_deviceSinkAPI->addSourceBuddy(deviceUI->m_deviceSourceAPI); + } + } + } + } if (currentSourceTabIndex == 0) { m_settings.setSourceIndex(deviceUI->m_samplingDeviceControl->getDeviceSelector()->currentIndex()); } } - } void MainWindow::on_sampleSink_confirmClicked(bool checked) @@ -810,11 +836,38 @@ void MainWindow::on_sampleSink_confirmClicked(bool checked) { qDebug("MainWindow::on_sampleSink_confirmClicked: tab at %d", currentSinkTabIndex); DeviceUISet *deviceUI = m_deviceUIs[currentSinkTabIndex]; - deviceUI->m_deviceSinkAPI->saveSinkSettings(m_settings.getWorkingPreset()); + deviceUI->m_deviceSinkAPI->saveSinkSettings(m_settings.getWorkingPreset()); // save old API settings + deviceUI->m_deviceSinkAPI->removeFromBuddies(); // remove old API from buddies lists int selectedComboIndex = deviceUI->m_samplingDeviceControl->getDeviceSelector()->currentIndex(); void *devicePtr = deviceUI->m_samplingDeviceControl->getDeviceSelector()->itemData(selectedComboIndex).value(); - m_pluginManager->selectSampleSinkByDevice(devicePtr, deviceUI->m_deviceSinkAPI); - deviceUI->m_deviceSinkAPI->loadSinkSettings(m_settings.getWorkingPreset()); + m_pluginManager->selectSampleSinkByDevice(devicePtr, deviceUI->m_deviceSinkAPI); // sets the new API + deviceUI->m_deviceSinkAPI->loadSinkSettings(m_settings.getWorkingPreset()); // load new API settings + + // add to buddies list + std::vector::iterator it = m_deviceUIs.begin(); + for (; it != m_deviceUIs.end(); ++it) + { + if (*it != deviceUI) // do not add to itself + { + if ((*it)->m_deviceSourceEngine) // it is a source device + { + if ((deviceUI->m_deviceSourceAPI->getHardwareId() == (*it)->m_deviceSourceAPI->getHardwareId()) && + (deviceUI->m_deviceSourceAPI->getSampleSourceSerial() == (*it)->m_deviceSourceAPI->getSampleSourceSerial())) + { + (*it)->m_deviceSourceAPI->addSinkBuddy(deviceUI->m_deviceSinkAPI); + } + } + + if ((*it)->m_deviceSinkEngine) // it is a sink device + { + if ((deviceUI->m_deviceSourceAPI->getHardwareId() == (*it)->m_deviceSinkAPI->getHardwareId()) && + (deviceUI->m_deviceSourceAPI->getSampleSourceSerial() == (*it)->m_deviceSinkAPI->getSampleSinkSerial())) + { + (*it)->m_deviceSinkAPI->addSinkBuddy(deviceUI->m_deviceSinkAPI); + } + } + } + } } } diff --git a/sdrbase/plugin/plugininterface.h b/sdrbase/plugin/plugininterface.h index 8a946d5f7..0d691e440 100644 --- a/sdrbase/plugin/plugininterface.h +++ b/sdrbase/plugin/plugininterface.h @@ -25,15 +25,18 @@ public: struct SamplingDevice { QString displayedName; + QString hardwareId; QString id; QString serial; int sequence; SamplingDevice(const QString& _displayedName, + const QString& _hardwareId, const QString& _id, const QString& _serial, int _sequence) : displayedName(_displayedName), + hardwareId(_hardwareId), id(_id), serial(_serial), sequence(_sequence) diff --git a/sdrbase/plugin/pluginmanager.cpp b/sdrbase/plugin/pluginmanager.cpp index 7ac1fec0d..876a62f61 100644 --- a/sdrbase/plugin/pluginmanager.cpp +++ b/sdrbase/plugin/pluginmanager.cpp @@ -32,8 +32,11 @@ #include "dsp/dspdevicesourceengine.h" #include "dsp/dspdevicesinkengine.h" +const QString PluginManager::m_sdrDaemonHardwareID = "SDRdaemon"; const QString PluginManager::m_sdrDaemonDeviceTypeID = "sdrangel.samplesource.sdrdaemon"; +const QString PluginManager::m_sdrDaemonFECHardwareID = "SDRdaemonFEC"; const QString PluginManager::m_sdrDaemonFECDeviceTypeID = "sdrangel.samplesource.sdrdaemonfec"; +const QString PluginManager::m_fileSourceHardwareID = "FileSource"; const QString PluginManager::m_fileSourceDeviceTypeID = "sdrangel.samplesource.filesource"; const QString PluginManager::m_fileSinkDeviceTypeID = "sdrangel.samplesink.filesink"; @@ -120,6 +123,7 @@ void PluginManager::updateSampleSourceDevices() { m_sampleSourceDevices.append(SamplingDevice(m_sampleSourceRegistrations[i].m_plugin, ssd[j].displayedName, + ssd[j].hardwareId, ssd[j].id, ssd[j].serial, ssd[j].sequence)); @@ -139,7 +143,8 @@ void PluginManager::updateSampleSinkDevices() { m_sampleSinkDevices.append(SamplingDevice(m_sampleSinkRegistrations[i].m_plugin, ssd[j].displayedName, - ssd[j].id, + ssd[j].hardwareId, + ssd[j].id, ssd[j].serial, ssd[j].sequence)); } @@ -196,6 +201,7 @@ void PluginManager::duplicateLocalSampleSourceDevices(uint deviceUID) SamplingDevice( sdrDaemonSSD0->m_plugin, QString("SDRdaemon[%1]").arg(deviceUID), + sdrDaemonSSD0->m_hadrwareId, sdrDaemonSSD0->m_deviceId, sdrDaemonSSD0->m_deviceSerial, deviceUID @@ -209,6 +215,7 @@ void PluginManager::duplicateLocalSampleSourceDevices(uint deviceUID) SamplingDevice( sdrDaemonFECSSD0->m_plugin, QString("SDRdaemonFEC[%1]").arg(deviceUID), + sdrDaemonFECSSD0->m_hadrwareId, sdrDaemonFECSSD0->m_deviceId, sdrDaemonFECSSD0->m_deviceSerial, deviceUID @@ -222,6 +229,7 @@ void PluginManager::duplicateLocalSampleSourceDevices(uint deviceUID) SamplingDevice( fileSourceSSD0->m_plugin, QString("FileSource[%1]").arg(deviceUID), + fileSourceSSD0->m_hadrwareId, fileSourceSSD0->m_deviceId, fileSourceSSD0->m_deviceSerial, deviceUID @@ -258,6 +266,7 @@ void PluginManager::duplicateLocalSampleSinkDevices(uint deviceUID) SamplingDevice( fileSinkSSD0->m_plugin, QString("FileSink[%1]").arg(deviceUID), + fileSinkSSD0->m_hadrwareId, fileSinkSSD0->m_deviceId, fileSinkSSD0->m_deviceSerial, deviceUID @@ -324,6 +333,7 @@ int PluginManager::selectSampleSourceByIndex(int index, DeviceSourceAPI *deviceA } qDebug() << "PluginManager::selectSampleSourceByIndex: m_sampleSource at index " << index + << " hid: " << m_sampleSourceDevices[index].m_hadrwareId.toStdString().c_str() << " id: " << m_sampleSourceDevices[index].m_deviceId.toStdString().c_str() << " ser: " << m_sampleSourceDevices[index].m_deviceSerial.toStdString().c_str() << " seq: " << m_sampleSourceDevices[index].m_deviceSequence; @@ -336,6 +346,7 @@ int PluginManager::selectSampleSourceByIndex(int index, DeviceSourceAPI *deviceA // m_sampleSourcePluginGUI = pluginGUI; deviceAPI->setSampleSourceSequence(m_sampleSourceDevices[index].m_deviceSequence); + deviceAPI->setHardwareId(m_sampleSourceDevices[index].m_hadrwareId); deviceAPI->setSampleSourceId(m_sampleSourceDevices[index].m_deviceId); deviceAPI->setSampleSourceSerial(m_sampleSourceDevices[index].m_deviceSerial); deviceAPI->setSampleSourcePluginGUI(pluginGUI); @@ -364,6 +375,7 @@ int PluginManager::selectSampleSinkByIndex(int index, DeviceSinkAPI *deviceAPI) } qDebug() << "PluginManager::selectSampleSinkByIndex: m_sampleSink at index " << index + << " hid: " << m_sampleSinkDevices[index].m_hadrwareId.toStdString().c_str() << " id: " << m_sampleSinkDevices[index].m_deviceId.toStdString().c_str() << " ser: " << m_sampleSinkDevices[index].m_deviceSerial.toStdString().c_str() << " seq: " << m_sampleSinkDevices[index].m_deviceSequence; @@ -376,6 +388,7 @@ int PluginManager::selectSampleSinkByIndex(int index, DeviceSinkAPI *deviceAPI) // m_sampleSourcePluginGUI = pluginGUI; deviceAPI->setSampleSinkSequence(m_sampleSinkDevices[index].m_deviceSequence); + deviceAPI->setHardwareId(m_sampleSinkDevices[index].m_hadrwareId); deviceAPI->setSampleSinkId(m_sampleSinkDevices[index].m_deviceId); deviceAPI->setSampleSinkSerial(m_sampleSinkDevices[index].m_deviceSerial); deviceAPI->setSampleSinkPluginGUI(pluginGUI); @@ -414,6 +427,7 @@ int PluginManager::selectFirstSampleSource(const QString& sourceId, DeviceSource } qDebug() << "PluginManager::selectFirstSampleSource: m_sampleSource at index " << index + << " hid: " << m_sampleSourceDevices[index].m_hadrwareId.toStdString().c_str() << " id: " << m_sampleSourceDevices[index].m_deviceId.toStdString().c_str() << " ser: " << m_sampleSourceDevices[index].m_deviceSerial.toStdString().c_str() << " seq: " << m_sampleSourceDevices[index].m_deviceSequence; @@ -426,6 +440,7 @@ int PluginManager::selectFirstSampleSource(const QString& sourceId, DeviceSource // m_sampleSourcePluginGUI = pluginGUI; deviceAPI->setSampleSourceSequence(m_sampleSourceDevices[index].m_deviceSequence); + deviceAPI->setHardwareId(m_sampleSourceDevices[index].m_hadrwareId); deviceAPI->setSampleSourceId(m_sampleSourceDevices[index].m_deviceId); deviceAPI->setSampleSourceSerial(m_sampleSourceDevices[index].m_deviceSerial); deviceAPI->setSampleSourcePluginGUI(pluginGUI); @@ -464,6 +479,7 @@ int PluginManager::selectFirstSampleSink(const QString& sinkId, DeviceSinkAPI *d } qDebug() << "PluginManager::selectFirstSampleSink: m_sampleSink at index " << index + << " hid: " << m_sampleSinkDevices[index].m_hadrwareId.toStdString().c_str() << " id: " << m_sampleSinkDevices[index].m_deviceId.toStdString().c_str() << " ser: " << m_sampleSinkDevices[index].m_deviceSerial.toStdString().c_str() << " seq: " << m_sampleSinkDevices[index].m_deviceSequence; @@ -476,6 +492,7 @@ int PluginManager::selectFirstSampleSink(const QString& sinkId, DeviceSinkAPI *d // m_sampleSourcePluginGUI = pluginGUI; deviceAPI->setSampleSinkSequence(m_sampleSinkDevices[index].m_deviceSequence); + deviceAPI->setHardwareId(m_sampleSinkDevices[index].m_hadrwareId); deviceAPI->setSampleSinkId(m_sampleSinkDevices[index].m_deviceId); deviceAPI->setSampleSinkSerial(m_sampleSinkDevices[index].m_deviceSerial); deviceAPI->setSampleSinkPluginGUI(pluginGUI); @@ -538,6 +555,7 @@ int PluginManager::selectSampleSourceBySerialOrSequence(const QString& sourceId, } qDebug() << "PluginManager::selectSampleSourceBySequence: m_sampleSource at index " << index + << " hid: " << m_sampleSourceDevices[index].m_hadrwareId.toStdString().c_str() << " id: " << m_sampleSourceDevices[index].m_deviceId.toStdString().c_str() << " ser: " << m_sampleSourceDevices[index].m_deviceSerial.toStdString().c_str() << " seq: " << m_sampleSourceDevices[index].m_deviceSequence; @@ -550,6 +568,7 @@ int PluginManager::selectSampleSourceBySerialOrSequence(const QString& sourceId, // m_sampleSourcePluginGUI = pluginGUI; deviceAPI->setSampleSourceSequence(m_sampleSourceDevices[index].m_deviceSequence); + deviceAPI->setHardwareId(m_sampleSourceDevices[index].m_hadrwareId); deviceAPI->setSampleSourceId(m_sampleSourceDevices[index].m_deviceId); deviceAPI->setSampleSourceSerial(m_sampleSourceDevices[index].m_deviceSerial); deviceAPI->setSampleSourcePluginGUI(pluginGUI); @@ -612,6 +631,7 @@ int PluginManager::selectSampleSinkBySerialOrSequence(const QString& sinkId, con } qDebug() << "PluginManager::selectSampleSinkBySerialOrSequence: m_sampleSink at index " << index + << " hid: " << m_sampleSinkDevices[index].m_hadrwareId.toStdString().c_str() << " id: " << m_sampleSinkDevices[index].m_deviceId.toStdString().c_str() << " ser: " << m_sampleSinkDevices[index].m_deviceSerial.toStdString().c_str() << " seq: " << m_sampleSinkDevices[index].m_deviceSequence; @@ -624,6 +644,7 @@ int PluginManager::selectSampleSinkBySerialOrSequence(const QString& sinkId, con // m_sampleSourcePluginGUI = pluginGUI; deviceAPI->setSampleSinkSequence(m_sampleSinkDevices[index].m_deviceSequence); + deviceAPI->setHardwareId(m_sampleSinkDevices[index].m_hadrwareId); deviceAPI->setSampleSinkId(m_sampleSinkDevices[index].m_deviceId); deviceAPI->setSampleSinkSerial(m_sampleSinkDevices[index].m_deviceSerial); deviceAPI->setSampleSinkPluginGUI(pluginGUI); @@ -637,6 +658,7 @@ void PluginManager::selectSampleSourceByDevice(void *devicePtr, DeviceSourceAPI SamplingDevice *sampleSourceDevice = (SamplingDevice *) devicePtr; qDebug() << "PluginManager::selectSampleSourceByDevice: " + << " hid: " << sampleSourceDevice->m_hadrwareId.toStdString().c_str() << " id: " << sampleSourceDevice->m_deviceId.toStdString().c_str() << " ser: " << sampleSourceDevice->m_deviceSerial.toStdString().c_str() << " seq: " << sampleSourceDevice->m_deviceSequence; @@ -649,6 +671,7 @@ void PluginManager::selectSampleSourceByDevice(void *devicePtr, DeviceSourceAPI // m_sampleSourcePluginGUI = pluginGUI; deviceAPI->setSampleSourceSequence(sampleSourceDevice->m_deviceSequence); + deviceAPI->setHardwareId(sampleSourceDevice->m_hadrwareId); deviceAPI->setSampleSourceId(sampleSourceDevice->m_deviceId); deviceAPI->setSampleSourceSerial(sampleSourceDevice->m_deviceSerial); deviceAPI->setSampleSourcePluginGUI(pluginGUI); @@ -660,6 +683,7 @@ void PluginManager::selectSampleSinkByDevice(void *devicePtr, DeviceSinkAPI *dev SamplingDevice *sampleSinkDevice = (SamplingDevice *) devicePtr; qDebug() << "PluginManager::selectSampleSinkByDevice: " + << " hid: " << sampleSinkDevice->m_hadrwareId.toStdString().c_str() << " id: " << sampleSinkDevice->m_deviceId.toStdString().c_str() << " ser: " << sampleSinkDevice->m_deviceSerial.toStdString().c_str() << " seq: " << sampleSinkDevice->m_deviceSequence; @@ -672,6 +696,7 @@ void PluginManager::selectSampleSinkByDevice(void *devicePtr, DeviceSinkAPI *dev // m_sampleSourcePluginGUI = pluginGUI; deviceAPI->setSampleSinkSequence(sampleSinkDevice->m_deviceSequence); + deviceAPI->setHardwareId(sampleSinkDevice->m_hadrwareId); deviceAPI->setSampleSinkId(sampleSinkDevice->m_deviceId); deviceAPI->setSampleSinkSerial(sampleSinkDevice->m_deviceSerial); deviceAPI->setSampleSinkPluginGUI(pluginGUI); diff --git a/sdrbase/plugin/pluginmanager.h b/sdrbase/plugin/pluginmanager.h index afab1006e..72e37f75b 100644 --- a/sdrbase/plugin/pluginmanager.h +++ b/sdrbase/plugin/pluginmanager.h @@ -89,17 +89,20 @@ private: struct SamplingDevice { PluginInterface* m_plugin; QString m_displayName; + QString m_hadrwareId; QString m_deviceId; QString m_deviceSerial; int m_deviceSequence; SamplingDevice(PluginInterface* plugin, const QString& displayName, + const QString& hadrwareId, const QString& deviceId, const QString& deviceSerial, int deviceSequence) : m_plugin(plugin), m_displayName(displayName), + m_hadrwareId(hadrwareId), m_deviceId(deviceId), m_deviceSerial(deviceSerial), m_deviceSequence(deviceSequence) @@ -121,8 +124,11 @@ private: SamplingDevices m_sampleSinkDevices; //!< Instances of output sinks present in the system // "Local" sample source device IDs + static const QString m_sdrDaemonHardwareID; //!< SDRdaemon hardware ID static const QString m_sdrDaemonDeviceTypeID; //!< SDRdaemon source plugin ID + static const QString m_sdrDaemonFECHardwareID; //!< SDRdaemon with FEC hardware ID static const QString m_sdrDaemonFECDeviceTypeID; //!< SDRdaemon with FEC source plugin ID + static const QString m_fileSourceHardwareID; //!< FileSource source hardware ID static const QString m_fileSourceDeviceTypeID; //!< FileSource source plugin ID // "Local" sample sink device IDs