From 15453b75287cdaeba34a69f00662f82441901702 Mon Sep 17 00:00:00 2001 From: f4exb <f4exb06@gmail.com> Date: Thu, 21 Dec 2017 00:23:36 +0100 Subject: [PATCH] Server: Web API: implemented /sdrangel/preset POST --- sdrgui/webapi/webapiadaptergui.cpp | 4 +-- sdrsrv/webapi/webapiadaptersrv.cpp | 58 +++++++++++++++++++++++++++++- sdrsrv/webapi/webapiadaptersrv.h | 5 +++ 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/sdrgui/webapi/webapiadaptergui.cpp b/sdrgui/webapi/webapiadaptergui.cpp index 4c7f983e7..239e3006f 100644 --- a/sdrgui/webapi/webapiadaptergui.cpp +++ b/sdrgui/webapi/webapiadaptergui.cpp @@ -433,7 +433,7 @@ int WebAPIAdapterGUI::instancePresetPut( SWGSDRangel::SWGPresetIdentifier *presetIdentifier = query.getPreset(); int nbDeviceSets = m_mainWindow.m_deviceUIs.size(); - if (deviceSetIndex > nbDeviceSets) + if (deviceSetIndex >= nbDeviceSets) { *error.getMessage() = QString("There is no device set at index %1. Number of device sets is %2").arg(deviceSetIndex).arg(nbDeviceSets); return 404; @@ -489,7 +489,7 @@ int WebAPIAdapterGUI::instancePresetPost( SWGSDRangel::SWGPresetIdentifier *presetIdentifier = query.getPreset(); int nbDeviceSets = m_mainWindow.m_deviceUIs.size(); - if (deviceSetIndex > nbDeviceSets) + if (deviceSetIndex >= nbDeviceSets) { *error.getMessage() = QString("There is no device set at index %1. Number of device sets is %2").arg(deviceSetIndex).arg(nbDeviceSets); return 404; diff --git a/sdrsrv/webapi/webapiadaptersrv.cpp b/sdrsrv/webapi/webapiadaptersrv.cpp index 1f198ecfa..2bb365ebe 100644 --- a/sdrsrv/webapi/webapiadaptersrv.cpp +++ b/sdrsrv/webapi/webapiadaptersrv.cpp @@ -548,7 +548,7 @@ int WebAPIAdapterSrv::instancePresetPut( SWGSDRangel::SWGPresetIdentifier *presetIdentifier = query.getPreset(); int nbDeviceSets = m_mainCore.m_deviceSets.size(); - if (deviceSetIndex > nbDeviceSets) + if (deviceSetIndex >= nbDeviceSets) { *error.getMessage() = QString("There is no device set at index %1. Number of device sets is %2").arg(deviceSetIndex).arg(nbDeviceSets); return 404; @@ -595,6 +595,62 @@ int WebAPIAdapterSrv::instancePresetPut( return 200; } +int WebAPIAdapterSrv::instancePresetPost( + SWGSDRangel::SWGPresetTransfer& query, + SWGSDRangel::SWGPresetIdentifier& response, + SWGSDRangel::SWGErrorResponse& error) +{ + int deviceSetIndex = query.getDeviceSetIndex(); + SWGSDRangel::SWGPresetIdentifier *presetIdentifier = query.getPreset(); + int nbDeviceSets = m_mainCore.m_deviceSets.size(); + + if (deviceSetIndex >= nbDeviceSets) + { + *error.getMessage() = QString("There is no device set at index %1. Number of device sets is %2").arg(deviceSetIndex).arg(nbDeviceSets); + return 404; + } + + DeviceSet *deviceSet = m_mainCore.m_deviceSets[deviceSetIndex]; + int deviceCenterFrequency = 0; + + if (deviceSet->m_deviceSourceEngine) { // Rx + deviceCenterFrequency = deviceSet->m_deviceSourceEngine->getSource()->getCenterFrequency(); + } else if (deviceSet->m_deviceSinkEngine) { // Tx + deviceCenterFrequency = deviceSet->m_deviceSinkEngine->getSink()->getCenterFrequency(); + } else { + *error.getMessage() = QString("Unknown device in device set (not Rx nor Tx)"); + return 500; + } + + const Preset *selectedPreset = m_mainCore.m_settings.getPreset(*presetIdentifier->getGroupName(), + deviceCenterFrequency, + *presetIdentifier->getName()); + + if (selectedPreset == 0) // save on a new preset + { + selectedPreset = m_mainCore.m_settings.newPreset(*presetIdentifier->getGroupName(), *presetIdentifier->getName()); + } + else + { + *error.getMessage() = QString("Preset already exists [%1, %2, %3]") + .arg(*presetIdentifier->getGroupName()) + .arg(deviceCenterFrequency) + .arg(*presetIdentifier->getName()); + return 409; + } + + MainCore::MsgSavePreset *msg = MainCore::MsgSavePreset::create(const_cast<Preset*>(selectedPreset), deviceSetIndex, true); + m_mainCore.m_inputMessageQueue.push(msg); + + response.init(); + response.setCenterFrequency(selectedPreset->getCenterFrequency()); + *response.getGroupName() = selectedPreset->getGroup(); + *response.getType() = selectedPreset->isSourcePreset() ? "R" : "T"; + *response.getName() = selectedPreset->getDescription(); + + return 200; +} + int WebAPIAdapterSrv::instanceDeviceSetsPost( bool tx, SWGSDRangel::SWGSuccessResponse& response, diff --git a/sdrsrv/webapi/webapiadaptersrv.h b/sdrsrv/webapi/webapiadaptersrv.h index f06d13c81..24d373448 100644 --- a/sdrsrv/webapi/webapiadaptersrv.h +++ b/sdrsrv/webapi/webapiadaptersrv.h @@ -103,6 +103,11 @@ public: SWGSDRangel::SWGPresetIdentifier& response, SWGSDRangel::SWGErrorResponse& error); + virtual int instancePresetPost( + SWGSDRangel::SWGPresetTransfer& query, + SWGSDRangel::SWGPresetIdentifier& response, + SWGSDRangel::SWGErrorResponse& error); + virtual int instanceDeviceSetsPost( bool tx, SWGSDRangel::SWGSuccessResponse& response,