diff --git a/sdrbase/device/deviceenumerator.h b/sdrbase/device/deviceenumerator.h index cb84aa5ad..9062007d5 100644 --- a/sdrbase/device/deviceenumerator.h +++ b/sdrbase/device/deviceenumerator.h @@ -43,8 +43,8 @@ public: void removeTxSelection(int tabIndex); int getNbRxSamplingDevices() const { return m_rxEnumeration.size(); } int getNbTxSamplingDevices() const { return m_txEnumeration.size(); } - PluginInterface::SamplingDevice getRxSamplingDevice(int deviceIndex) const { return m_rxEnumeration[deviceIndex].m_samplingDevice; } - PluginInterface::SamplingDevice getTxSamplingDevice(int deviceIndex) const { return m_txEnumeration[deviceIndex].m_samplingDevice; } + const PluginInterface::SamplingDevice* getRxSamplingDevice(int deviceIndex) const { return &m_rxEnumeration[deviceIndex].m_samplingDevice; } + const PluginInterface::SamplingDevice* getTxSamplingDevice(int deviceIndex) const { return &m_txEnumeration[deviceIndex].m_samplingDevice; } PluginInterface *getRxPluginInterface(int deviceIndex) { return m_rxEnumeration[deviceIndex].m_pluginInterface; } PluginInterface *getTxPluginInterface(int deviceIndex) { return m_txEnumeration[deviceIndex].m_pluginInterface; } int getFileSourceDeviceIndex() const; diff --git a/sdrbase/settings/mainsettings.cpp b/sdrbase/settings/mainsettings.cpp index c55f8531f..f00ce91be 100644 --- a/sdrbase/settings/mainsettings.cpp +++ b/sdrbase/settings/mainsettings.cpp @@ -179,7 +179,7 @@ void MainSettings::renamePresetGroup(const QString& oldGroupName, const QString& } } -const Preset* MainSettings::getPreset(const QString& groupName, quint64 centerFrequency, const QString& description) const +const Preset* MainSettings::getPreset(const QString& groupName, quint64 centerFrequency, const QString& description, const QString& type) const { int nbPresets = getPresetCount(); @@ -189,7 +189,11 @@ const Preset* MainSettings::getPreset(const QString& groupName, quint64 centerFr (getPreset(i)->getCenterFrequency() == centerFrequency) && (getPreset(i)->getDescription() == description)) { - return getPreset(i); + if (type == "R" && getPreset(i)->isSourcePreset()) { + return getPreset(i); + } else if (type == "T" && !getPreset(i)->isSourcePreset()) { + return getPreset(i); + } } } diff --git a/sdrbase/settings/mainsettings.h b/sdrbase/settings/mainsettings.h index ec852a640..5e2cddc2d 100644 --- a/sdrbase/settings/mainsettings.h +++ b/sdrbase/settings/mainsettings.h @@ -25,7 +25,7 @@ public: void deletePreset(const Preset* preset); int getPresetCount() const { return m_presets.count(); } const Preset* getPreset(int index) const { return m_presets[index]; } - const Preset* getPreset(const QString& groupName, quint64 centerFrequency, const QString& description) const; + const Preset* getPreset(const QString& groupName, quint64 centerFrequency, const QString& description, const QString& type) const; void sortPresets(); void renamePresetGroup(const QString& oldGroupName, const QString& newGroupName); void deletePresetGroup(const QString& groupName); diff --git a/sdrbase/webapi/webapiadapterinterface.h b/sdrbase/webapi/webapiadapterinterface.h index f31a25ac0..89be63988 100644 --- a/sdrbase/webapi/webapiadapterinterface.h +++ b/sdrbase/webapi/webapiadapterinterface.h @@ -93,11 +93,11 @@ public: * returns the Http status code (default 501: not implemented) */ virtual int instanceDevices( - bool tx, + int direction, SWGSDRangel::SWGInstanceDevicesResponse& response, SWGSDRangel::SWGErrorResponse& error) { - (void) tx; + (void) direction; (void) response; error.init(); *error.getMessage() = QString("Function not implemented"); @@ -109,11 +109,11 @@ public: * returns the Http status code (default 501: not implemented) */ virtual int instanceChannels( - bool tx, + int direction, SWGSDRangel::SWGInstanceChannelsResponse& response, SWGSDRangel::SWGErrorResponse& error) { - (void) tx; + (void) direction; (void) response; error.init(); *error.getMessage() = QString("Function not implemented"); @@ -437,11 +437,11 @@ public: * returns the Http status code (default 501: not implemented) */ virtual int instanceDeviceSetPost( - bool tx, + int direction, SWGSDRangel::SWGSuccessResponse& response, SWGSDRangel::SWGErrorResponse& error) { - (void) tx; + (void) direction; (void) response; error.init(); *error.getMessage() = QString("Function not implemented"); diff --git a/sdrbase/webapi/webapirequestmapper.cpp b/sdrbase/webapi/webapirequestmapper.cpp index a50578539..e652e8aeb 100644 --- a/sdrbase/webapi/webapirequestmapper.cpp +++ b/sdrbase/webapi/webapirequestmapper.cpp @@ -212,14 +212,19 @@ void WebAPIRequestMapper::instanceDevicesService(qtwebapp::HttpRequest& request, if (request.getMethod() == "GET") { - QByteArray txStr = request.getParameter("tx"); - bool tx = false; + QByteArray dirStr = request.getParameter("direction"); + int direction = 0; - if (txStr.length() != 0) { - tx = !(txStr == "0"); + if (dirStr.length() != 0) + { + bool ok; + int tmp = dirStr.toInt(&ok); + if (ok) { + direction = tmp; + } } - int status = m_adapter->instanceDevices(tx, normalResponse, errorResponse); + int status = m_adapter->instanceDevices(direction, normalResponse, errorResponse); response.setStatus(status); if (status/100 == 2) { @@ -246,14 +251,19 @@ void WebAPIRequestMapper::instanceChannelsService(qtwebapp::HttpRequest& request if (request.getMethod() == "GET") { - QByteArray txStr = request.getParameter("tx"); - bool tx = false; + QByteArray dirStr = request.getParameter("direction"); + int direction = 0; - if (txStr.length() != 0) { - tx = !(txStr == "0"); + if (dirStr.length() != 0) + { + bool ok; + int tmp = dirStr.toInt(&ok); + if (ok) { + direction = tmp; + } } - int status = m_adapter->instanceChannels(tx, normalResponse, errorResponse); + int status = m_adapter->instanceChannels(direction, normalResponse, errorResponse); response.setStatus(status); if (status/100 == 2) { @@ -962,14 +972,19 @@ void WebAPIRequestMapper::instanceDeviceSetService(qtwebapp::HttpRequest& reques if (request.getMethod() == "POST") { SWGSDRangel::SWGSuccessResponse normalResponse; - QByteArray txStr = request.getParameter("tx"); - bool tx = false; + QByteArray dirStr = request.getParameter("direction"); + int direction = 0; - if (txStr.length() != 0) { - tx = !(txStr == "0"); + if (dirStr.length() != 0) + { + bool ok; + int tmp = dirStr.toInt(&ok); + if (ok) { + direction = tmp; + } } - int status = m_adapter->instanceDeviceSetPost(tx, normalResponse, errorResponse); + int status = m_adapter->instanceDeviceSetPost(direction, normalResponse, errorResponse); response.setStatus(status); if (status/100 == 2) { diff --git a/sdrgui/gui/samplingdevicecontrol.cpp b/sdrgui/gui/samplingdevicecontrol.cpp index 34c462dff..35a774997 100644 --- a/sdrgui/gui/samplingdevicecontrol.cpp +++ b/sdrgui/gui/samplingdevicecontrol.cpp @@ -63,15 +63,15 @@ void SamplingDeviceControl::setSelectedDeviceIndex(int index) { if (m_rxElseTx) { - PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(index); + const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(index); DeviceEnumerator::instance()->changeRxSelection(m_deviceTabIndex, index); - ui->deviceSelectedText->setText(samplingDevice.displayedName); + ui->deviceSelectedText->setText(samplingDevice->displayedName); } else { - PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(index); + const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(index); DeviceEnumerator::instance()->changeTxSelection(m_deviceTabIndex, index); - ui->deviceSelectedText->setText(samplingDevice.displayedName); + ui->deviceSelectedText->setText(samplingDevice->displayedName); } m_selectedDeviceIndex = index; diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 759e66c1f..ffc5c376e 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -278,14 +278,14 @@ void MainWindow::addSourceDevice(int deviceIndex) deviceIndex = DeviceEnumerator::instance()->getFileSourceDeviceIndex(); } - PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(deviceIndex); - m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceSequence(samplingDevice.sequence); - m_deviceUIs.back()->m_deviceAPI->setNbItems(samplingDevice.deviceNbItems); - m_deviceUIs.back()->m_deviceAPI->setItemIndex(samplingDevice.deviceItemIndex); - m_deviceUIs.back()->m_deviceAPI->setHardwareId(samplingDevice.hardwareId); - m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceId(samplingDevice.id); - m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceSerial(samplingDevice.serial); - m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice.displayedName); + const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(deviceIndex); + m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceSequence(samplingDevice->sequence); + m_deviceUIs.back()->m_deviceAPI->setNbItems(samplingDevice->deviceNbItems); + m_deviceUIs.back()->m_deviceAPI->setItemIndex(samplingDevice->deviceItemIndex); + m_deviceUIs.back()->m_deviceAPI->setHardwareId(samplingDevice->hardwareId); + m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceId(samplingDevice->id); + m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceSerial(samplingDevice->serial); + m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); m_deviceUIs.back()->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getRxPluginInterface(deviceIndex)); m_deviceUIs.back()->m_samplingDeviceControl->setSelectedDeviceIndex(deviceIndex); @@ -349,14 +349,14 @@ void MainWindow::addSinkDevice() // create a file sink by default int fileSinkDeviceIndex = DeviceEnumerator::instance()->getFileSinkDeviceIndex(); - PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(fileSinkDeviceIndex); - m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceSequence(samplingDevice.sequence); - m_deviceUIs.back()->m_deviceAPI->setNbItems(samplingDevice.deviceNbItems); - m_deviceUIs.back()->m_deviceAPI->setItemIndex(samplingDevice.deviceItemIndex); - m_deviceUIs.back()->m_deviceAPI->setHardwareId(samplingDevice.hardwareId); - m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceId(samplingDevice.id); - m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceSerial(samplingDevice.serial); - m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice.displayedName); + const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(fileSinkDeviceIndex); + m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceSequence(samplingDevice->sequence); + m_deviceUIs.back()->m_deviceAPI->setNbItems(samplingDevice->deviceNbItems); + m_deviceUIs.back()->m_deviceAPI->setItemIndex(samplingDevice->deviceItemIndex); + m_deviceUIs.back()->m_deviceAPI->setHardwareId(samplingDevice->hardwareId); + m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceId(samplingDevice->id); + m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceSerial(samplingDevice->serial); + m_deviceUIs.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); m_deviceUIs.back()->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getTxPluginInterface(fileSinkDeviceIndex)); m_deviceUIs.back()->m_samplingDeviceControl->setSelectedDeviceIndex(fileSinkDeviceIndex); @@ -795,12 +795,13 @@ bool MainWindow::handleMessage(const Message& cmd) else if (MsgAddDeviceSet::match(cmd)) { MsgAddDeviceSet& notif = (MsgAddDeviceSet&) cmd; + int direction = notif.getDirection(); - if (notif.isTx()) { + if (direction == 1) { // Single stream Tx addSinkDevice(); - } else { + } else if (direction == 0) { // Single stream Rx addSourceDevice(-1); // create with file source device by default - } + } // other device types not (yet) supported return true; } @@ -1506,15 +1507,15 @@ void MainWindow::sampleSourceChanged() deviceUI->m_deviceAPI->getSampleSource()); deviceUI->m_deviceAPI->clearBuddiesLists(); // clear old API buddies lists - PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice( + const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice( deviceUI->m_samplingDeviceControl->getSelectedDeviceIndex()); - deviceUI->m_deviceAPI->setSamplingDeviceSequence(samplingDevice.sequence); - deviceUI->m_deviceAPI->setNbItems(samplingDevice.deviceNbItems); - deviceUI->m_deviceAPI->setItemIndex(samplingDevice.deviceItemIndex); - deviceUI->m_deviceAPI->setHardwareId(samplingDevice.hardwareId); - deviceUI->m_deviceAPI->setSamplingDeviceId(samplingDevice.id); - deviceUI->m_deviceAPI->setSamplingDeviceSerial(samplingDevice.serial); - deviceUI->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice.displayedName); + deviceUI->m_deviceAPI->setSamplingDeviceSequence(samplingDevice->sequence); + deviceUI->m_deviceAPI->setNbItems(samplingDevice->deviceNbItems); + deviceUI->m_deviceAPI->setItemIndex(samplingDevice->deviceItemIndex); + deviceUI->m_deviceAPI->setHardwareId(samplingDevice->hardwareId); + deviceUI->m_deviceAPI->setSamplingDeviceId(samplingDevice->id); + deviceUI->m_deviceAPI->setSamplingDeviceSerial(samplingDevice->serial); + deviceUI->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); deviceUI->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getRxPluginInterface(deviceUI->m_samplingDeviceControl->getSelectedDeviceIndex())); // add to buddies list @@ -1569,8 +1570,8 @@ void MainWindow::sampleSourceChanged() if (currentSourceTabIndex == 0) // save as default starting device { - m_settings.setSourceIndex(samplingDevice.sequence); - m_settings.setSourceDeviceId(samplingDevice.id); + m_settings.setSourceIndex(samplingDevice->sequence); + m_settings.setSourceDeviceId(samplingDevice->id); } } } @@ -1596,14 +1597,14 @@ void MainWindow::sampleSinkChanged() deviceUI->m_deviceAPI->getSampleSink()); deviceUI->m_deviceAPI->clearBuddiesLists(); // clear old API buddies lists - PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(deviceUI->m_samplingDeviceControl->getSelectedDeviceIndex()); - deviceUI->m_deviceAPI->setSamplingDeviceSequence(samplingDevice.sequence); - deviceUI->m_deviceAPI->setNbItems(samplingDevice.deviceNbItems); - deviceUI->m_deviceAPI->setItemIndex(samplingDevice.deviceItemIndex); - deviceUI->m_deviceAPI->setHardwareId(samplingDevice.hardwareId); - deviceUI->m_deviceAPI->setSamplingDeviceId(samplingDevice.id); - deviceUI->m_deviceAPI->setSamplingDeviceSerial(samplingDevice.serial); - deviceUI->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice.displayedName); + const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(deviceUI->m_samplingDeviceControl->getSelectedDeviceIndex()); + deviceUI->m_deviceAPI->setSamplingDeviceSequence(samplingDevice->sequence); + deviceUI->m_deviceAPI->setNbItems(samplingDevice->deviceNbItems); + deviceUI->m_deviceAPI->setItemIndex(samplingDevice->deviceItemIndex); + deviceUI->m_deviceAPI->setHardwareId(samplingDevice->hardwareId); + deviceUI->m_deviceAPI->setSamplingDeviceId(samplingDevice->id); + deviceUI->m_deviceAPI->setSamplingDeviceSerial(samplingDevice->serial); + deviceUI->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); deviceUI->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getTxPluginInterface(deviceUI->m_samplingDeviceControl->getSelectedDeviceIndex())); // add to buddies list diff --git a/sdrgui/mainwindow.h b/sdrgui/mainwindow.h index 8cdbe3db9..a06337e12 100644 --- a/sdrgui/mainwindow.h +++ b/sdrgui/mainwindow.h @@ -159,19 +159,19 @@ private: MESSAGE_CLASS_DECLARATION public: - bool isTx() const { return m_tx; } + int getDirection() const { return m_direction; } - static MsgAddDeviceSet* create(bool tx) + static MsgAddDeviceSet* create(int direction) { - return new MsgAddDeviceSet(tx); + return new MsgAddDeviceSet(direction); } private: - bool m_tx; + int m_direction; - MsgAddDeviceSet(bool tx) : + MsgAddDeviceSet(int direction) : Message(), - m_tx(tx) + m_direction(direction) { } }; diff --git a/sdrgui/webapi/webapiadaptergui.cpp b/sdrgui/webapi/webapiadaptergui.cpp index 0e62688fc..c6c68743b 100644 --- a/sdrgui/webapi/webapiadaptergui.cpp +++ b/sdrgui/webapi/webapiadaptergui.cpp @@ -115,28 +115,47 @@ int WebAPIAdapterGUI::instanceDelete( } int WebAPIAdapterGUI::instanceDevices( - bool tx, + int direction, SWGSDRangel::SWGInstanceDevicesResponse& response, SWGSDRangel::SWGErrorResponse& error) { (void) error; response.init(); - int nbSamplingDevices = tx ? DeviceEnumerator::instance()->getNbTxSamplingDevices() : DeviceEnumerator::instance()->getNbRxSamplingDevices(); + + int nbSamplingDevices; + + if (direction == 0) { // Single Rx stream device + nbSamplingDevices = DeviceEnumerator::instance()->getNbRxSamplingDevices(); + } else if (direction == 1) { // Single Tx stream device + nbSamplingDevices = DeviceEnumerator::instance()->getNbTxSamplingDevices(); + } else { // not supported + nbSamplingDevices = 0; + } + response.setDevicecount(nbSamplingDevices); QList *devices = response.getDevices(); for (int i = 0; i < nbSamplingDevices; i++) { - PluginInterface::SamplingDevice samplingDevice = tx ? DeviceEnumerator::instance()->getTxSamplingDevice(i) : DeviceEnumerator::instance()->getRxSamplingDevice(i); + const PluginInterface::SamplingDevice *samplingDevice = nullptr; + + if (direction == 0) { + samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(i); + } else if (direction == 1) { + samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(i); + } else { + continue; + } + devices->append(new SWGSDRangel::SWGDeviceListItem); devices->back()->init(); - *devices->back()->getDisplayedName() = samplingDevice.displayedName; - *devices->back()->getHwType() = samplingDevice.hardwareId; - *devices->back()->getSerial() = samplingDevice.serial; - devices->back()->setSequence(samplingDevice.sequence); - devices->back()->setDirection((int) samplingDevice.streamType); - devices->back()->setDeviceNbStreams(samplingDevice.deviceNbItems); - devices->back()->setDeviceSetIndex(samplingDevice.claimed); + *devices->back()->getDisplayedName() = samplingDevice->displayedName; + *devices->back()->getHwType() = samplingDevice->hardwareId; + *devices->back()->getSerial() = samplingDevice->serial; + devices->back()->setSequence(samplingDevice->sequence); + devices->back()->setDirection((int) samplingDevice->streamType); + devices->back()->setDeviceNbStreams(samplingDevice->deviceNbItems); + devices->back()->setDeviceSetIndex(samplingDevice->claimed); devices->back()->setIndex(i); } @@ -144,14 +163,31 @@ int WebAPIAdapterGUI::instanceDevices( } int WebAPIAdapterGUI::instanceChannels( - bool tx, + int direction, SWGSDRangel::SWGInstanceChannelsResponse& response, SWGSDRangel::SWGErrorResponse& error) { (void) error; response.init(); - PluginAPI::ChannelRegistrations *channelRegistrations = tx ? m_mainWindow.m_pluginManager->getTxChannelRegistrations() : m_mainWindow.m_pluginManager->getRxChannelRegistrations(); - int nbChannelDevices = channelRegistrations->size(); + PluginAPI::ChannelRegistrations *channelRegistrations; + int nbChannelDevices; + + if (direction == 0) // Single sink (Rx) channel + { + channelRegistrations = m_mainWindow.m_pluginManager->getRxChannelRegistrations(); + nbChannelDevices = channelRegistrations->size(); + } + else if (direction == 1) // Single source (Tx) channel + { + channelRegistrations = m_mainWindow.m_pluginManager->getTxChannelRegistrations(); + nbChannelDevices = channelRegistrations->size(); + } + else // not supported + { + channelRegistrations = nullptr; + nbChannelDevices = 0; + } + response.setChannelcount(nbChannelDevices); QList *channels = response.getChannels(); @@ -163,7 +199,7 @@ int WebAPIAdapterGUI::instanceChannels( const PluginDescriptor& pluginDescriptor = channelInterface->getPluginDescriptor(); *channels->back()->getVersion() = pluginDescriptor.version; *channels->back()->getName() = pluginDescriptor.displayedName; - channels->back()->setDirection(tx ? 1 : 0); + channels->back()->setDirection(direction); *channels->back()->getIdUri() = channelRegistrations->at(i).m_channelIdURI; *channels->back()->getId() = channelRegistrations->at(i).m_channelId; channels->back()->setIndex(i); @@ -655,15 +691,17 @@ int WebAPIAdapterGUI::instancePresetPatch( const Preset *selectedPreset = m_mainWindow.m_settings.getPreset(*presetIdentifier->getGroupName(), presetIdentifier->getCenterFrequency(), - *presetIdentifier->getName()); + *presetIdentifier->getName(), + *presetIdentifier->getType()); if (selectedPreset == 0) { error.init(); - *error.getMessage() = QString("There is no preset [%1, %2, %3]") + *error.getMessage() = QString("There is no preset [%1, %2, %3 %4]") .arg(*presetIdentifier->getGroupName()) .arg(presetIdentifier->getCenterFrequency()) - .arg(*presetIdentifier->getName()); + .arg(*presetIdentifier->getName()) + .arg(*presetIdentifier->getType()); return 404; } @@ -713,15 +751,17 @@ int WebAPIAdapterGUI::instancePresetPut( const Preset *selectedPreset = m_mainWindow.m_settings.getPreset(*presetIdentifier->getGroupName(), presetIdentifier->getCenterFrequency(), - *presetIdentifier->getName()); + *presetIdentifier->getName(), + *presetIdentifier->getType()); if (selectedPreset == 0) { error.init(); - *error.getMessage() = QString("There is no preset [%1, %2, %3]") + *error.getMessage() = QString("There is no preset [%1, %2, %3 %4]") .arg(*presetIdentifier->getGroupName()) .arg(presetIdentifier->getCenterFrequency()) - .arg(*presetIdentifier->getName()); + .arg(*presetIdentifier->getName()) + .arg(*presetIdentifier->getType()); return 404; } else // update existing preset @@ -786,7 +826,8 @@ int WebAPIAdapterGUI::instancePresetPost( const Preset *selectedPreset = m_mainWindow.m_settings.getPreset(*presetIdentifier->getGroupName(), deviceCenterFrequency, - *presetIdentifier->getName()); + *presetIdentifier->getName(), + *presetIdentifier->getType()); if (selectedPreset == 0) // save on a new preset { @@ -795,10 +836,11 @@ int WebAPIAdapterGUI::instancePresetPost( else { error.init(); - *error.getMessage() = QString("Preset already exists [%1, %2, %3]") + *error.getMessage() = QString("Preset already exists [%1, %2, %3 %4]") .arg(*presetIdentifier->getGroupName()) .arg(deviceCenterFrequency) - .arg(*presetIdentifier->getName()); + .arg(*presetIdentifier->getName()) + .arg(*presetIdentifier->getType()); return 409; } @@ -820,14 +862,16 @@ int WebAPIAdapterGUI::instancePresetDelete( { const Preset *selectedPreset = m_mainWindow.m_settings.getPreset(*response.getGroupName(), response.getCenterFrequency(), - *response.getName()); + *response.getName(), + *response.getType()); if (selectedPreset == 0) { - *error.getMessage() = QString("There is no preset [%1, %2, %3]") + *error.getMessage() = QString("There is no preset [%1, %2, %3 %4]") .arg(*response.getGroupName()) .arg(response.getCenterFrequency()) - .arg(*response.getName()); + .arg(*response.getName()) + .arg(*response.getType()); return 404; } @@ -852,12 +896,12 @@ int WebAPIAdapterGUI::instanceDeviceSetsGet( } int WebAPIAdapterGUI::instanceDeviceSetPost( - bool tx, + int direction, SWGSDRangel::SWGSuccessResponse& response, SWGSDRangel::SWGErrorResponse& error) { (void) error; - MainWindow::MsgAddDeviceSet *msg = MainWindow::MsgAddDeviceSet::create(tx); + MainWindow::MsgAddDeviceSet *msg = MainWindow::MsgAddDeviceSet::create(direction); m_mainWindow.m_inputMessageQueue.push(msg); response.init(); @@ -972,34 +1016,40 @@ int WebAPIAdapterGUI::devicesetDevicePut( for (int i = 0; i < nbSamplingDevices; i++) { int tx; + const PluginInterface::SamplingDevice *samplingDevice; - if (query.getDirection() == 0) { + if (query.getDirection() == 0) + { tx = 0; - } else if (query.getDirection() == 1) { + samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(i); + } + else if (query.getDirection() == 1) + { tx = 1; - } else { + samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(i); + } + else + { continue; // TODO: any device (2) not supported yet } - PluginInterface::SamplingDevice samplingDevice = query.getDirection() == 0 ? DeviceEnumerator::instance()->getRxSamplingDevice(i) : DeviceEnumerator::instance()->getTxSamplingDevice(i); - - if (query.getDisplayedName() && (*query.getDisplayedName() != samplingDevice.displayedName)) { + if (query.getDisplayedName() && (*query.getDisplayedName() != samplingDevice->displayedName)) { continue; } - if (query.getHwType() && (*query.getHwType() != samplingDevice.hardwareId)) { + if (query.getHwType() && (*query.getHwType() != samplingDevice->hardwareId)) { continue; } - if ((query.getSequence() >= 0) && (query.getSequence() != samplingDevice.sequence)) { + if ((query.getSequence() >= 0) && (query.getSequence() != samplingDevice->sequence)) { continue; } - if (query.getSerial() && (*query.getSerial() != samplingDevice.serial)) { + if (query.getSerial() && (*query.getSerial() != samplingDevice->serial)) { continue; } - if ((query.getDeviceStreamIndex() >= 0) && (query.getDeviceStreamIndex() != samplingDevice.deviceItemIndex)) { + if ((query.getDeviceStreamIndex() >= 0) && (query.getDeviceStreamIndex() != samplingDevice->deviceItemIndex)) { continue; } @@ -1007,13 +1057,13 @@ int WebAPIAdapterGUI::devicesetDevicePut( m_mainWindow.m_inputMessageQueue.push(msg); response.init(); - *response.getDisplayedName() = samplingDevice.displayedName; - *response.getHwType() = samplingDevice.hardwareId; - *response.getSerial() = samplingDevice.serial; - response.setSequence(samplingDevice.sequence); + *response.getDisplayedName() = samplingDevice->displayedName; + *response.getHwType() = samplingDevice->hardwareId; + *response.getSerial() = samplingDevice->serial; + response.setSequence(samplingDevice->sequence); response.setDirection(tx); - response.setDeviceNbStreams(samplingDevice.deviceNbItems); - response.setDeviceStreamIndex(samplingDevice.deviceItemIndex); + response.setDeviceNbStreams(samplingDevice->deviceNbItems); + response.setDeviceStreamIndex(samplingDevice->deviceItemIndex); response.setDeviceSetIndex(deviceSetIndex); response.setIndex(i); diff --git a/sdrgui/webapi/webapiadaptergui.h b/sdrgui/webapi/webapiadaptergui.h index 1b7946cec..a25454dff 100644 --- a/sdrgui/webapi/webapiadaptergui.h +++ b/sdrgui/webapi/webapiadaptergui.h @@ -42,12 +42,12 @@ public: SWGSDRangel::SWGErrorResponse& error); virtual int instanceDevices( - bool tx, + int direction, SWGSDRangel::SWGInstanceDevicesResponse& response, SWGSDRangel::SWGErrorResponse& error); virtual int instanceChannels( - bool tx, + int direction, SWGSDRangel::SWGInstanceChannelsResponse& response, SWGSDRangel::SWGErrorResponse& error); @@ -135,7 +135,7 @@ public: SWGSDRangel::SWGErrorResponse& error); virtual int instanceDeviceSetPost( - bool tx, + int direction, SWGSDRangel::SWGSuccessResponse& response, SWGSDRangel::SWGErrorResponse& error); diff --git a/sdrsrv/maincore.cpp b/sdrsrv/maincore.cpp index 57adb1bc6..d31e68f58 100644 --- a/sdrsrv/maincore.cpp +++ b/sdrsrv/maincore.cpp @@ -142,12 +142,13 @@ bool MainCore::handleMessage(const Message& cmd) else if (MsgAddDeviceSet::match(cmd)) { MsgAddDeviceSet& notif = (MsgAddDeviceSet&) cmd; + int direction = notif.getDirection(); - if (notif.isTx()) { + if (direction == 1) { // Single stream Tx addSinkDevice(); - } else { + } else if (direction == 0) { // Single stream Rx addSourceDevice(); - } + } // device type not (yet) supported return true; } @@ -283,14 +284,14 @@ void MainCore::addSinkDevice() // create a file sink by default int fileSinkDeviceIndex = DeviceEnumerator::instance()->getFileSinkDeviceIndex(); - PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(fileSinkDeviceIndex); - m_deviceSets.back()->m_deviceAPI->setSamplingDeviceSequence(samplingDevice.sequence); - m_deviceSets.back()->m_deviceAPI->setNbItems(samplingDevice.deviceNbItems); - m_deviceSets.back()->m_deviceAPI->setItemIndex(samplingDevice.deviceItemIndex); - m_deviceSets.back()->m_deviceAPI->setHardwareId(samplingDevice.hardwareId); - m_deviceSets.back()->m_deviceAPI->setSamplingDeviceId(samplingDevice.id); - m_deviceSets.back()->m_deviceAPI->setSamplingDeviceSerial(samplingDevice.serial); - m_deviceSets.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice.displayedName); + const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(fileSinkDeviceIndex); + m_deviceSets.back()->m_deviceAPI->setSamplingDeviceSequence(samplingDevice->sequence); + m_deviceSets.back()->m_deviceAPI->setNbItems(samplingDevice->deviceNbItems); + m_deviceSets.back()->m_deviceAPI->setItemIndex(samplingDevice->deviceItemIndex); + m_deviceSets.back()->m_deviceAPI->setHardwareId(samplingDevice->hardwareId); + m_deviceSets.back()->m_deviceAPI->setSamplingDeviceId(samplingDevice->id); + m_deviceSets.back()->m_deviceAPI->setSamplingDeviceSerial(samplingDevice->serial); + m_deviceSets.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); m_deviceSets.back()->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getTxPluginInterface(fileSinkDeviceIndex)); // delete previous plugin instance @@ -323,14 +324,14 @@ void MainCore::addSourceDevice() // Create a file source instance by default int fileSourceDeviceIndex = DeviceEnumerator::instance()->getFileSourceDeviceIndex(); - PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(fileSourceDeviceIndex); - m_deviceSets.back()->m_deviceAPI->setSamplingDeviceSequence(samplingDevice.sequence); - m_deviceSets.back()->m_deviceAPI->setNbItems(samplingDevice.deviceNbItems); - m_deviceSets.back()->m_deviceAPI->setItemIndex(samplingDevice.deviceItemIndex); - m_deviceSets.back()->m_deviceAPI->setHardwareId(samplingDevice.hardwareId); - m_deviceSets.back()->m_deviceAPI->setSamplingDeviceId(samplingDevice.id); - m_deviceSets.back()->m_deviceAPI->setSamplingDeviceSerial(samplingDevice.serial); - m_deviceSets.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice.displayedName); + const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(fileSourceDeviceIndex); + m_deviceSets.back()->m_deviceAPI->setSamplingDeviceSequence(samplingDevice->sequence); + m_deviceSets.back()->m_deviceAPI->setNbItems(samplingDevice->deviceNbItems); + m_deviceSets.back()->m_deviceAPI->setItemIndex(samplingDevice->deviceItemIndex); + m_deviceSets.back()->m_deviceAPI->setHardwareId(samplingDevice->hardwareId); + m_deviceSets.back()->m_deviceAPI->setSamplingDeviceId(samplingDevice->id); + m_deviceSets.back()->m_deviceAPI->setSamplingDeviceSerial(samplingDevice->serial); + m_deviceSets.back()->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); m_deviceSets.back()->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getRxPluginInterface(fileSourceDeviceIndex)); DeviceSampleSource *source = m_deviceSets.back()->m_deviceAPI->getPluginInterface()->createSampleSourcePluginInstanceInput( @@ -399,14 +400,14 @@ void MainCore::changeSampleSource(int deviceSetIndex, int selectedDeviceIndex) deviceSet->m_deviceAPI->getSampleSource()); deviceSet->m_deviceAPI->clearBuddiesLists(); // clear old API buddies lists - PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(selectedDeviceIndex); - deviceSet->m_deviceAPI->setSamplingDeviceSequence(samplingDevice.sequence); - deviceSet->m_deviceAPI->setNbItems(samplingDevice.deviceNbItems); - deviceSet->m_deviceAPI->setItemIndex(samplingDevice.deviceItemIndex); - deviceSet->m_deviceAPI->setHardwareId(samplingDevice.hardwareId); - deviceSet->m_deviceAPI->setSamplingDeviceId(samplingDevice.id); - deviceSet->m_deviceAPI->setSamplingDeviceSerial(samplingDevice.serial); - deviceSet->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice.displayedName); + const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(selectedDeviceIndex); + deviceSet->m_deviceAPI->setSamplingDeviceSequence(samplingDevice->sequence); + deviceSet->m_deviceAPI->setNbItems(samplingDevice->deviceNbItems); + deviceSet->m_deviceAPI->setItemIndex(samplingDevice->deviceItemIndex); + deviceSet->m_deviceAPI->setHardwareId(samplingDevice->hardwareId); + deviceSet->m_deviceAPI->setSamplingDeviceId(samplingDevice->id); + deviceSet->m_deviceAPI->setSamplingDeviceSerial(samplingDevice->serial); + deviceSet->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); deviceSet->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getRxPluginInterface(selectedDeviceIndex)); // add to buddies list @@ -467,14 +468,14 @@ void MainCore::changeSampleSink(int deviceSetIndex, int selectedDeviceIndex) deviceSet->m_deviceAPI->getSampleSink()); deviceSet->m_deviceAPI->clearBuddiesLists(); // clear old API buddies lists - PluginInterface::SamplingDevice samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(selectedDeviceIndex); - deviceSet->m_deviceAPI->setSamplingDeviceSequence(samplingDevice.sequence); - deviceSet->m_deviceAPI->setNbItems(samplingDevice.deviceNbItems); - deviceSet->m_deviceAPI->setItemIndex(samplingDevice.deviceItemIndex); - deviceSet->m_deviceAPI->setHardwareId(samplingDevice.hardwareId); - deviceSet->m_deviceAPI->setSamplingDeviceId(samplingDevice.id); - deviceSet->m_deviceAPI->setSamplingDeviceSerial(samplingDevice.serial); - deviceSet->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice.displayedName); + const PluginInterface::SamplingDevice *samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(selectedDeviceIndex); + deviceSet->m_deviceAPI->setSamplingDeviceSequence(samplingDevice->sequence); + deviceSet->m_deviceAPI->setNbItems(samplingDevice->deviceNbItems); + deviceSet->m_deviceAPI->setItemIndex(samplingDevice->deviceItemIndex); + deviceSet->m_deviceAPI->setHardwareId(samplingDevice->hardwareId); + deviceSet->m_deviceAPI->setSamplingDeviceId(samplingDevice->id); + deviceSet->m_deviceAPI->setSamplingDeviceSerial(samplingDevice->serial); + deviceSet->m_deviceAPI->setSamplingDeviceDisplayName(samplingDevice->displayedName); deviceSet->m_deviceAPI->setSamplingDevicePluginInterface(DeviceEnumerator::instance()->getTxPluginInterface(selectedDeviceIndex)); // add to buddies list diff --git a/sdrsrv/maincore.h b/sdrsrv/maincore.h index ac6b2a7ed..a2a5e0e28 100644 --- a/sdrsrv/maincore.h +++ b/sdrsrv/maincore.h @@ -160,19 +160,19 @@ private: MESSAGE_CLASS_DECLARATION public: - bool isTx() const { return m_tx; } + int getDirection() const { return m_direction; } - static MsgAddDeviceSet* create(bool tx) + static MsgAddDeviceSet* create(int direction) { - return new MsgAddDeviceSet(tx); + return new MsgAddDeviceSet(direction); } private: - bool m_tx; + int m_direction; - MsgAddDeviceSet(bool tx) : + MsgAddDeviceSet(int direction) : Message(), - m_tx(tx) + m_direction(direction) { } }; diff --git a/sdrsrv/webapi/webapiadaptersrv.cpp b/sdrsrv/webapi/webapiadaptersrv.cpp index 7baf3c353..0a0fb7d71 100644 --- a/sdrsrv/webapi/webapiadaptersrv.cpp +++ b/sdrsrv/webapi/webapiadaptersrv.cpp @@ -116,27 +116,47 @@ int WebAPIAdapterSrv::instanceDelete( } int WebAPIAdapterSrv::instanceDevices( - bool tx, + int direction, SWGSDRangel::SWGInstanceDevicesResponse& response, SWGSDRangel::SWGErrorResponse& error __attribute__((unused))) { response.init(); - int nbSamplingDevices = tx ? DeviceEnumerator::instance()->getNbTxSamplingDevices() : DeviceEnumerator::instance()->getNbRxSamplingDevices(); + + int nbSamplingDevices; + + if (direction == 0) { // Single Rx stream device + nbSamplingDevices = DeviceEnumerator::instance()->getNbRxSamplingDevices(); + } else if (direction == 1) { // Single Tx stream device + nbSamplingDevices = DeviceEnumerator::instance()->getNbTxSamplingDevices(); + } else { // not supported + nbSamplingDevices = 0; + } + + response.setDevicecount(nbSamplingDevices); QList *devices = response.getDevices(); for (int i = 0; i < nbSamplingDevices; i++) { - PluginInterface::SamplingDevice samplingDevice = tx ? DeviceEnumerator::instance()->getTxSamplingDevice(i) : DeviceEnumerator::instance()->getRxSamplingDevice(i); + const PluginInterface::SamplingDevice *samplingDevice = nullptr; + + if (direction == 0) { + samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(i); + } else if (direction == 1) { + samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(i); + } else { + continue; + } + devices->append(new SWGSDRangel::SWGDeviceListItem); devices->back()->init(); - *devices->back()->getDisplayedName() = samplingDevice.displayedName; - *devices->back()->getHwType() = samplingDevice.hardwareId; - *devices->back()->getSerial() = samplingDevice.serial; - devices->back()->setSequence(samplingDevice.sequence); - devices->back()->setDirection((int) samplingDevice.streamType); - devices->back()->setDeviceNbStreams(samplingDevice.deviceNbItems); - devices->back()->setDeviceSetIndex(samplingDevice.claimed); + *devices->back()->getDisplayedName() = samplingDevice->displayedName; + *devices->back()->getHwType() = samplingDevice->hardwareId; + *devices->back()->getSerial() = samplingDevice->serial; + devices->back()->setSequence(samplingDevice->sequence); + devices->back()->setDirection((int) samplingDevice->streamType); + devices->back()->setDeviceNbStreams(samplingDevice->deviceNbItems); + devices->back()->setDeviceSetIndex(samplingDevice->claimed); devices->back()->setIndex(i); } @@ -144,13 +164,30 @@ int WebAPIAdapterSrv::instanceDevices( } int WebAPIAdapterSrv::instanceChannels( - bool tx, + int direction, SWGSDRangel::SWGInstanceChannelsResponse& response, SWGSDRangel::SWGErrorResponse& error __attribute__((unused))) { response.init(); - PluginAPI::ChannelRegistrations *channelRegistrations = tx ? m_mainCore.m_pluginManager->getTxChannelRegistrations() : m_mainCore.m_pluginManager->getRxChannelRegistrations(); - int nbChannelDevices = channelRegistrations->size(); + PluginAPI::ChannelRegistrations *channelRegistrations; + int nbChannelDevices; + + if (direction == 0) // Single sink (Rx) channel + { + channelRegistrations = m_mainCore.m_pluginManager->getRxChannelRegistrations(); + nbChannelDevices = channelRegistrations->size(); + } + else if (direction == 1) // Single source (Tx) channel + { + channelRegistrations = m_mainCore.m_pluginManager->getTxChannelRegistrations(); + nbChannelDevices = channelRegistrations->size(); + } + else // not supported + { + channelRegistrations = nullptr; + nbChannelDevices = 0; + } + response.setChannelcount(nbChannelDevices); QList *channels = response.getChannels(); @@ -162,7 +199,7 @@ int WebAPIAdapterSrv::instanceChannels( const PluginDescriptor& pluginDescriptor = channelInterface->getPluginDescriptor(); *channels->back()->getVersion() = pluginDescriptor.version; *channels->back()->getName() = pluginDescriptor.displayedName; - channels->back()->setDirection(tx ? 1 : 0); + channels->back()->setDirection(direction); *channels->back()->getIdUri() = channelRegistrations->at(i).m_channelIdURI; *channels->back()->getId() = channelRegistrations->at(i).m_channelId; channels->back()->setIndex(i); @@ -637,15 +674,17 @@ int WebAPIAdapterSrv::instancePresetFilePost( const Preset *selectedPreset = m_mainCore.m_settings.getPreset(*presetIdentifier->getGroupName(), presetIdentifier->getCenterFrequency(), - *presetIdentifier->getName()); + *presetIdentifier->getName(), + *presetIdentifier->getType()); if (selectedPreset == 0) { error.init(); - *error.getMessage() = QString("There is no preset [%1, %2, %3]") + *error.getMessage() = QString("There is no preset [%1, %2, %3, %4]") .arg(*presetIdentifier->getGroupName()) .arg(presetIdentifier->getCenterFrequency()) - .arg(*presetIdentifier->getName()); + .arg(*presetIdentifier->getName()) + .arg(*presetIdentifier->getType()); return 404; } @@ -753,15 +792,17 @@ int WebAPIAdapterSrv::instancePresetPatch( const Preset *selectedPreset = m_mainCore.m_settings.getPreset(*presetIdentifier->getGroupName(), presetIdentifier->getCenterFrequency(), - *presetIdentifier->getName()); + *presetIdentifier->getName(), + *presetIdentifier->getType()); if (selectedPreset == 0) { error.init(); - *error.getMessage() = QString("There is no preset [%1, %2, %3]") + *error.getMessage() = QString("There is no preset [%1, %2, %3 %4]") .arg(*presetIdentifier->getGroupName()) .arg(presetIdentifier->getCenterFrequency()) - .arg(*presetIdentifier->getName()); + .arg(*presetIdentifier->getName()) + .arg(*presetIdentifier->getType()); return 404; } @@ -811,15 +852,17 @@ int WebAPIAdapterSrv::instancePresetPut( const Preset *selectedPreset = m_mainCore.m_settings.getPreset(*presetIdentifier->getGroupName(), presetIdentifier->getCenterFrequency(), - *presetIdentifier->getName()); + *presetIdentifier->getName(), + *presetIdentifier->getType()); if (selectedPreset == 0) { error.init(); - *error.getMessage() = QString("There is no preset [%1, %2, %3]") + *error.getMessage() = QString("There is no preset [%1, %2, %3 %4]") .arg(*presetIdentifier->getGroupName()) .arg(presetIdentifier->getCenterFrequency()) - .arg(*presetIdentifier->getName()); + .arg(*presetIdentifier->getName()) + .arg(*presetIdentifier->getType()); return 404; } else // update existing preset @@ -887,7 +930,8 @@ int WebAPIAdapterSrv::instancePresetPost( const Preset *selectedPreset = m_mainCore.m_settings.getPreset(*presetIdentifier->getGroupName(), deviceCenterFrequency, - *presetIdentifier->getName()); + *presetIdentifier->getName(), + *presetIdentifier->getType()); if (selectedPreset == 0) // save on a new preset { @@ -896,10 +940,11 @@ int WebAPIAdapterSrv::instancePresetPost( else { error.init(); - *error.getMessage() = QString("Preset already exists [%1, %2, %3]") + *error.getMessage() = QString("Preset already exists [%1, %2, %3 %4]") .arg(*presetIdentifier->getGroupName()) .arg(deviceCenterFrequency) - .arg(*presetIdentifier->getName()); + .arg(*presetIdentifier->getName()) + .arg(*presetIdentifier->getType()); return 409; } @@ -921,15 +966,17 @@ int WebAPIAdapterSrv::instancePresetDelete( { const Preset *selectedPreset = m_mainCore.m_settings.getPreset(*response.getGroupName(), response.getCenterFrequency(), - *response.getName()); + *response.getName(), + *response.getType()); if (selectedPreset == 0) { error.init(); - *error.getMessage() = QString("There is no preset [%1, %2, %3]") + *error.getMessage() = QString("There is no preset [%1, %2, %3 %4]") .arg(*response.getGroupName()) .arg(response.getCenterFrequency()) - .arg(*response.getName()); + .arg(*response.getName()) + .arg(*response.getType()); return 404; } @@ -953,11 +1000,11 @@ int WebAPIAdapterSrv::instanceDeviceSetsGet( } int WebAPIAdapterSrv::instanceDeviceSetPost( - bool tx, + int direction, SWGSDRangel::SWGSuccessResponse& response, SWGSDRangel::SWGErrorResponse& error __attribute__((unused))) { - MainCore::MsgAddDeviceSet *msg = MainCore::MsgAddDeviceSet::create(tx); + MainCore::MsgAddDeviceSet *msg = MainCore::MsgAddDeviceSet::create(direction); m_mainCore.m_inputMessageQueue.push(msg); response.init(); @@ -1055,35 +1102,41 @@ int WebAPIAdapterSrv::devicesetDevicePut( for (int i = 0; i < nbSamplingDevices; i++) { - int tx; + int direction; + const PluginInterface::SamplingDevice *samplingDevice; - if (query.getDirection() == 0) { - tx = 0; - } else if (query.getDirection() == 1) { - tx = 1; - } else { + if (query.getDirection() == 0) + { + direction = 0; + samplingDevice = DeviceEnumerator::instance()->getRxSamplingDevice(i); + } + else if (query.getDirection() == 1) + { + direction = 1; + samplingDevice = DeviceEnumerator::instance()->getTxSamplingDevice(i); + } + else + { continue; // TODO: any device (2) not supported yet } - PluginInterface::SamplingDevice samplingDevice = query.getDirection() == 0 ? DeviceEnumerator::instance()->getRxSamplingDevice(i) : DeviceEnumerator::instance()->getTxSamplingDevice(i); - - if (query.getDisplayedName() && (*query.getDisplayedName() != samplingDevice.displayedName)) { + if (query.getDisplayedName() && (*query.getDisplayedName() != samplingDevice->displayedName)) { continue; } - if (query.getHwType() && (*query.getHwType() != samplingDevice.hardwareId)) { + if (query.getHwType() && (*query.getHwType() != samplingDevice->hardwareId)) { continue; } - if ((query.getSequence() >= 0) && (query.getSequence() != samplingDevice.sequence)) { + if ((query.getSequence() >= 0) && (query.getSequence() != samplingDevice->sequence)) { continue; } - if (query.getSerial() && (*query.getSerial() != samplingDevice.serial)) { + if (query.getSerial() && (*query.getSerial() != samplingDevice->serial)) { continue; } - if ((query.getDeviceStreamIndex() >= 0) && (query.getDeviceStreamIndex() != samplingDevice.deviceItemIndex)) { + if ((query.getDeviceStreamIndex() >= 0) && (query.getDeviceStreamIndex() != samplingDevice->deviceItemIndex)) { continue; } @@ -1091,13 +1144,13 @@ int WebAPIAdapterSrv::devicesetDevicePut( m_mainCore.m_inputMessageQueue.push(msg); response.init(); - *response.getDisplayedName() = samplingDevice.displayedName; - *response.getHwType() = samplingDevice.hardwareId; - *response.getSerial() = samplingDevice.serial; - response.setSequence(samplingDevice.sequence); - response.setDirection(tx); - response.setDeviceNbStreams(samplingDevice.deviceNbItems); - response.setDeviceStreamIndex(samplingDevice.deviceItemIndex); + *response.getDisplayedName() = samplingDevice->displayedName; + *response.getHwType() = samplingDevice->hardwareId; + *response.getSerial() = samplingDevice->serial; + response.setSequence(samplingDevice->sequence); + response.setDirection(direction); + response.setDeviceNbStreams(samplingDevice->deviceNbItems); + response.setDeviceStreamIndex(samplingDevice->deviceItemIndex); response.setDeviceSetIndex(deviceSetIndex); response.setIndex(i); diff --git a/sdrsrv/webapi/webapiadaptersrv.h b/sdrsrv/webapi/webapiadaptersrv.h index de49aa023..d897a199e 100644 --- a/sdrsrv/webapi/webapiadaptersrv.h +++ b/sdrsrv/webapi/webapiadaptersrv.h @@ -42,12 +42,12 @@ public: SWGSDRangel::SWGErrorResponse& error); virtual int instanceDevices( - bool tx, + int direction, SWGSDRangel::SWGInstanceDevicesResponse& response, SWGSDRangel::SWGErrorResponse& error); virtual int instanceChannels( - bool tx, + int direction, SWGSDRangel::SWGInstanceChannelsResponse& response, SWGSDRangel::SWGErrorResponse& error); @@ -145,7 +145,7 @@ public: SWGSDRangel::SWGErrorResponse& error); virtual int instanceDeviceSetPost( - bool tx, + int direction, SWGSDRangel::SWGSuccessResponse& response, SWGSDRangel::SWGErrorResponse& error);