From 4ef1f011cb58105bb08da3da71a7685bbda6cee2 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 21 Jul 2019 01:57:51 +0200 Subject: [PATCH] New AMBE engine REST API support --- .../resources/webapi/doc/swagger/swagger.yaml | 8 +- sdrbase/webapi/webapiadapterinterface.cpp | 2 + sdrbase/webapi/webapiadapterinterface.h | 77 +++++++++ sdrbase/webapi/webapirequestmapper.cpp | 162 ++++++++++++++++++ sdrbase/webapi/webapirequestmapper.h | 3 + sdrgui/webapi/webapiadaptergui.cpp | 108 ++++++++++++ sdrgui/webapi/webapiadaptergui.h | 22 +++ sdrsrv/webapi/webapiadaptersrv.cpp | 108 ++++++++++++ sdrsrv/webapi/webapiadaptersrv.h | 22 +++ 9 files changed, 508 insertions(+), 4 deletions(-) diff --git a/sdrbase/resources/webapi/doc/swagger/swagger.yaml b/sdrbase/resources/webapi/doc/swagger/swagger.yaml index c17a93af0..8081e3af0 100644 --- a/sdrbase/resources/webapi/doc/swagger/swagger.yaml +++ b/sdrbase/resources/webapi/doc/swagger/swagger.yaml @@ -431,7 +431,7 @@ paths: x-swagger-router-controller: instance get: description: get the list of AMBE devices (serial or address) used for AMBE frames decoding in digital voice modes - operationId: InstanceAMBEDevicesGet + operationId: instanceAMBEDevicesGet tags: - Instance responses: @@ -445,7 +445,7 @@ paths: $ref: "#/responses/Response_501" put: description: Replace the list of active devices - operationId: InstanceAMBEDevicesPut + operationId: instanceAMBEDevicesPut tags: - Instance consumes: @@ -468,7 +468,7 @@ paths: $ref: "#/responses/Response_501" delete: description: Emtpy the active devices thus effectively closing down AMBE devices support - operationId: InstanceAMBEDevicesDelete + operationId: instanceAMBEDevicesDelete tags: - Instance responses: @@ -482,7 +482,7 @@ paths: $ref: "#/responses/Response_501" patch: description: Add and/or delete devices to/from the active list - operationId: InstanceAMBEDevicesPatch + operationId: instanceAMBEDevicesPatch tags: - Instance consumes: diff --git a/sdrbase/webapi/webapiadapterinterface.cpp b/sdrbase/webapi/webapiadapterinterface.cpp index 3ec4fc9fd..f56aa29e4 100644 --- a/sdrbase/webapi/webapiadapterinterface.cpp +++ b/sdrbase/webapi/webapiadapterinterface.cpp @@ -30,6 +30,8 @@ QString WebAPIAdapterInterface::instanceAudioInputCleanupURL = "/sdrangel/audio/ QString WebAPIAdapterInterface::instanceAudioOutputCleanupURL = "/sdrangel/audio/output/cleanup"; QString WebAPIAdapterInterface::instanceLocationURL = "/sdrangel/location"; QString WebAPIAdapterInterface::instanceDVSerialURL = "/sdrangel/dvserial"; +QString WebAPIAdapterInterface::instanceAMBESerialURL = "/sdrangel/ambe/serial"; +QString WebAPIAdapterInterface::instanceAMBEDevicesURL = "/sdrangel/ambe/devices"; QString WebAPIAdapterInterface::instancePresetsURL = "/sdrangel/presets"; QString WebAPIAdapterInterface::instancePresetURL = "/sdrangel/preset"; QString WebAPIAdapterInterface::instancePresetFileURL = "/sdrangel/preset/file"; diff --git a/sdrbase/webapi/webapiadapterinterface.h b/sdrbase/webapi/webapiadapterinterface.h index 89be63988..6b6fd855f 100644 --- a/sdrbase/webapi/webapiadapterinterface.h +++ b/sdrbase/webapi/webapiadapterinterface.h @@ -38,6 +38,7 @@ namespace SWGSDRangel class SWGAudioOutputDevice; class SWGLocationInformation; class SWGDVSeralDevices; + class SWGAMBEDevices; class SWGPresets; class SWGPresetTransfer; class SWGPresetIdentifier; @@ -310,6 +311,80 @@ public: return 501; } + /** + * Handler of /sdrangel/ambe/serial (GET) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels + * returns the Http status code (default 501: not implemented) + */ + virtual int instanceAMBESerialGet( + SWGSDRangel::SWGDVSeralDevices& response, + SWGSDRangel::SWGErrorResponse& error) + { + (void) response; + error.init(); + *error.getMessage() = QString("Function not implemented"); + return 501; + } + + /** + * Handler of /sdrangel/ambe/devices (GET) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels + * returns the Http status code (default 501: not implemented) + */ + virtual int instanceAMBEDevicesGet( + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error) + { + (void) response; + error.init(); + *error.getMessage() = QString("Function not implemented"); + return 501; + } + + /** + * Handler of /sdrangel/ambe/devices (PUT) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels + * returns the Http status code (default 501: not implemented) + */ + virtual int instanceAMBEDevicesPut( + SWGSDRangel::SWGAMBEDevices& query, + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error) + { + (void) query; + (void) response; + error.init(); + *error.getMessage() = QString("Function not implemented"); + return 501; + } + + /** + * Handler of /sdrangel/ambe/devices (PATCH) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels + * returns the Http status code (default 501: not implemented) + */ + virtual int instanceAMBEDevicesPatch( + SWGSDRangel::SWGAMBEDevices& query, + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error) + { + (void) query; + (void) response; + error.init(); + *error.getMessage() = QString("Function not implemented"); + return 501; + } + + /** + * Handler of /sdrangel/ambe/devices (DELETE) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels + * returns the Http status code (default 501: not implemented) + */ + virtual int instanceAMBEDevicesDelete( + SWGSDRangel::SWGSuccessResponse& response, + SWGSDRangel::SWGErrorResponse& error) + { + (void) response; + error.init(); + *error.getMessage() = QString("Function not implemented"); + return 501; + } + /** * Handler of /sdrangel/presets (GET) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels * returns the Http status code (default 501: not implemented) @@ -735,6 +810,8 @@ public: static QString instanceAudioOutputCleanupURL; static QString instanceLocationURL; static QString instanceDVSerialURL; + static QString instanceAMBESerialURL; + static QString instanceAMBEDevicesURL; static QString instancePresetsURL; static QString instancePresetURL; static QString instancePresetFileURL; diff --git a/sdrbase/webapi/webapirequestmapper.cpp b/sdrbase/webapi/webapirequestmapper.cpp index 3c4cb58f7..74b781163 100644 --- a/sdrbase/webapi/webapirequestmapper.cpp +++ b/sdrbase/webapi/webapirequestmapper.cpp @@ -31,6 +31,7 @@ #include "SWGAudioDevices.h" #include "SWGLocationInformation.h" #include "SWGDVSeralDevices.h" +#include "SWGAMBEDevices.h" #include "SWGPresets.h" #include "SWGPresetTransfer.h" #include "SWGPresetIdentifier.h" @@ -115,6 +116,10 @@ void WebAPIRequestMapper::service(qtwebapp::HttpRequest& request, qtwebapp::Http instanceLocationService(request, response); } else if (path == WebAPIAdapterInterface::instanceDVSerialURL) { instanceDVSerialService(request, response); + } else if (path == WebAPIAdapterInterface::instanceAMBESerialURL) { + instanceAMBESerialService(request, response); + } else if (path == WebAPIAdapterInterface::instanceAMBEDevicesURL) { + instanceAMBEDevicesService(request, response); } else if (path == WebAPIAdapterInterface::instancePresetsURL) { instancePresetsService(request, response); } else if (path == WebAPIAdapterInterface::instancePresetURL) { @@ -664,6 +669,118 @@ void WebAPIRequestMapper::instanceDVSerialService(qtwebapp::HttpRequest& request } } +void WebAPIRequestMapper::instanceAMBESerialService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response) +{ + SWGSDRangel::SWGErrorResponse errorResponse; + response.setHeader("Content-Type", "application/json"); + response.setHeader("Access-Control-Allow-Origin", "*"); + + if (request.getMethod() == "GET") + { + SWGSDRangel::SWGDVSeralDevices normalResponse; + + int status = m_adapter->instanceAMBESerialGet(normalResponse, errorResponse); + response.setStatus(status); + + if (status/100 == 2) { + response.write(normalResponse.asJson().toUtf8()); + } else { + response.write(errorResponse.asJson().toUtf8()); + } + } + else + { + response.setStatus(405,"Invalid HTTP method"); + errorResponse.init(); + *errorResponse.getMessage() = "Invalid HTTP method"; + response.write(errorResponse.asJson().toUtf8()); + } +} + +void WebAPIRequestMapper::instanceAMBEDevicesService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response) +{ + SWGSDRangel::SWGErrorResponse errorResponse; + response.setHeader("Content-Type", "application/json"); + response.setHeader("Access-Control-Allow-Origin", "*"); + + if (request.getMethod() == "GET") + { + SWGSDRangel::SWGAMBEDevices normalResponse; + + int status = m_adapter->instanceAMBEDevicesGet(normalResponse, errorResponse); + response.setStatus(status); + + if (status/100 == 2) { + response.write(normalResponse.asJson().toUtf8()); + } else { + response.write(errorResponse.asJson().toUtf8()); + } + } + else if ((request.getMethod() == "PATCH") || (request.getMethod() == "PUT")) + { + SWGSDRangel::SWGAMBEDevices query; + SWGSDRangel::SWGAMBEDevices normalResponse; + QString jsonStr = request.getBody(); + QJsonObject jsonObject; + + if (parseJsonBody(jsonStr, jsonObject, response)) + { + if (validateAMBEDevices(query, jsonObject)) + { + int status; + + if (request.getMethod() == "PATCH") { + status = m_adapter->instanceAMBEDevicesPatch(query, normalResponse, errorResponse); + } else { + status = m_adapter->instanceAMBEDevicesPut(query, normalResponse, errorResponse); + } + + response.setStatus(status); + + if (status/100 == 2) { + response.write(normalResponse.asJson().toUtf8()); + } else { + response.write(errorResponse.asJson().toUtf8()); + } + } + else + { + response.setStatus(400,"Invalid JSON request"); + errorResponse.init(); + *errorResponse.getMessage() = "Invalid JSON request"; + response.write(errorResponse.asJson().toUtf8()); + } + } + else + { + response.setStatus(400,"Invalid JSON format"); + errorResponse.init(); + *errorResponse.getMessage() = "Invalid JSON format"; + response.write(errorResponse.asJson().toUtf8()); + } + } + else if (request.getMethod() == "DELETE") + { + SWGSDRangel::SWGSuccessResponse normalResponse; + + int status = m_adapter->instanceAMBEDevicesDelete(normalResponse, errorResponse); + response.setStatus(status); + + if (status/100 == 2) { + response.write(normalResponse.asJson().toUtf8()); + } else { + response.write(errorResponse.asJson().toUtf8()); + } + } + else + { + response.setStatus(405,"Invalid HTTP method"); + errorResponse.init(); + *errorResponse.getMessage() = "Invalid HTTP method"; + response.write(errorResponse.asJson().toUtf8()); + } +} + void WebAPIRequestMapper::instancePresetsService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response) { SWGSDRangel::SWGErrorResponse errorResponse; @@ -2637,6 +2754,51 @@ bool WebAPIRequestMapper::validateAudioOutputDevice( return true; } +bool WebAPIRequestMapper::validateAMBEDevices(SWGSDRangel::SWGAMBEDevices& ambeDevices, QJsonObject& jsonObject) +{ + if (jsonObject.contains("nbDevices")) + { + int nbDevices = jsonObject["nbDevices"].toInt(); + + if (jsonObject.contains("ambeDevices")) + { + QJsonArray ambeDevicesJson = jsonObject["ambeDevices"].toArray(); + + if (nbDevices != ambeDevicesJson.size()) { + return false; + } + + ambeDevices.init(); + ambeDevices.setNbDevices(nbDevices); + QList *ambeList = ambeDevices.getAmbeDevices(); + + for (int i = 0; i < nbDevices; i++) + { + QJsonObject ambeDeviceJson = ambeDevicesJson.at(i).toObject(); + if (ambeDeviceJson.contains("deviceRef") && ambeDeviceJson.contains("delete")) + { + ambeList->push_back(new SWGSDRangel::SWGAMBEDevice()); + ambeList->back()->init(); + ambeList->back()->setDeviceRef(new QString(ambeDeviceJson["deviceRef"].toString())); + ambeList->back()->setDelete(ambeDeviceJson["delete"].toInt()); + } + else + { + return false; + } + } + } + else + { + return false; + } + } + else + { + return false; + } +} + void WebAPIRequestMapper::appendSettingsSubKeys( const QJsonObject& parentSettingsJsonObject, QJsonObject& childSettingsJsonObject, diff --git a/sdrbase/webapi/webapirequestmapper.h b/sdrbase/webapi/webapirequestmapper.h index 3753b80aa..489a862b9 100644 --- a/sdrbase/webapi/webapirequestmapper.h +++ b/sdrbase/webapi/webapirequestmapper.h @@ -59,6 +59,8 @@ private: void instanceAudioOutputCleanupService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response); void instanceLocationService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response); void instanceDVSerialService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response); + void instanceAMBESerialService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response); + void instanceAMBEDevicesService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response); void instancePresetsService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response); void instancePresetService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response); void instancePresetFileService(qtwebapp::HttpRequest& request, qtwebapp::HttpResponse& response); @@ -85,6 +87,7 @@ private: bool validateChannelSettings(SWGSDRangel::SWGChannelSettings& deviceSettings, QJsonObject& jsonObject, QStringList& channelSettingsKeys); bool validateAudioInputDevice(SWGSDRangel::SWGAudioInputDevice& audioInputDevice, QJsonObject& jsonObject, QStringList& audioInputDeviceKeys); bool validateAudioOutputDevice(SWGSDRangel::SWGAudioOutputDevice& audioOutputDevice, QJsonObject& jsonObject, QStringList& audioOutputDeviceKeys); + bool validateAMBEDevices(SWGSDRangel::SWGAMBEDevices& ambeDevices, QJsonObject& jsonObject); void appendSettingsSubKeys( const QJsonObject& parentSettingsJsonObject, diff --git a/sdrgui/webapi/webapiadaptergui.cpp b/sdrgui/webapi/webapiadaptergui.cpp index dfc58e4c4..fea7e2464 100644 --- a/sdrgui/webapi/webapiadaptergui.cpp +++ b/sdrgui/webapi/webapiadaptergui.cpp @@ -44,6 +44,7 @@ #include "SWGLocationInformation.h" #include "SWGDVSeralDevices.h" #include "SWGDVSerialDevice.h" +#include "SWGAMBEDevices.h" #include "SWGPresets.h" #include "SWGPresetGroup.h" #include "SWGPresetItem.h" @@ -626,6 +627,113 @@ int WebAPIAdapterGUI::instanceDVSerialPatch( return 200; } +int WebAPIAdapterGUI::instanceAMBESerialGet( + SWGSDRangel::SWGDVSeralDevices& response, + SWGSDRangel::SWGErrorResponse& error) +{ + (void) error; + response.init(); + + std::vector deviceNames; + std::vector qDeviceNames; + m_mainWindow.m_dspEngine->getAMBEEngine()->scan(qDeviceNames); + + for (std::vector::const_iterator it = qDeviceNames.begin(); it != qDeviceNames.end(); ++it) { + deviceNames.push_back(it->toStdString()); + } + + response.setNbDevices((int) deviceNames.size()); + QList *deviceNamesList = response.getDvSerialDevices(); + + std::vector::iterator it = deviceNames.begin(); + + while (it != deviceNames.end()) + { + deviceNamesList->append(new SWGSDRangel::SWGDVSerialDevice); + deviceNamesList->back()->init(); + *deviceNamesList->back()->getDeviceName() = QString::fromStdString(*it); + ++it; + } + + return 200; +} + +int WebAPIAdapterGUI::instanceAMBEDevicesGet( + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error) +{ + (void) error; + response.init(); + + std::vector deviceNames; + m_mainWindow.m_dspEngine->getDVSerialNames(deviceNames); + response.setNbDevices((int) deviceNames.size()); + QList *deviceNamesList = response.getAmbeDevices(); + + std::vector::iterator it = deviceNames.begin(); + + while (it != deviceNames.end()) + { + deviceNamesList->append(new SWGSDRangel::SWGAMBEDevice); + deviceNamesList->back()->init(); + *deviceNamesList->back()->getDeviceRef() = QString::fromStdString(*it); + deviceNamesList->back()->setDelete(0); + ++it; + } + + return 200; +} + +int WebAPIAdapterGUI::instanceAMBEDevicesDelete( + SWGSDRangel::SWGSuccessResponse& response, + SWGSDRangel::SWGErrorResponse& error) +{ + (void) error; + m_mainWindow.m_dspEngine->getAMBEEngine()->releaseAll(); + + response.init(); + *response.getMessage() = QString("All AMBE devices released"); + + return 200; +} + +int WebAPIAdapterGUI::instanceAMBEDevicesPut( + SWGSDRangel::SWGAMBEDevices& query, + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error) +{ + m_mainWindow.m_dspEngine->getAMBEEngine()->releaseAll(); + + QList *ambeList = query.getAmbeDevices(); + + for (QList::const_iterator it = ambeList->begin(); it != ambeList->end(); ++it) { + m_mainWindow.m_dspEngine->getAMBEEngine()->registerController((*it)->getDeviceRef()->toStdString()); + } + + instanceAMBEDevicesGet(response, error); + return 200; +} + +int WebAPIAdapterGUI::instanceAMBEDevicesPatch( + SWGSDRangel::SWGAMBEDevices& query, + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error) +{ + QList *ambeList = query.getAmbeDevices(); + + for (QList::const_iterator it = ambeList->begin(); it != ambeList->end(); ++it) + { + if ((*it)->getDelete()) { + m_mainWindow.m_dspEngine->getAMBEEngine()->releaseController((*it)->getDeviceRef()->toStdString()); + } else { + m_mainWindow.m_dspEngine->getAMBEEngine()->registerController((*it)->getDeviceRef()->toStdString()); + } + } + + instanceAMBEDevicesGet(response, error); + return 200; +} + int WebAPIAdapterGUI::instancePresetsGet( SWGSDRangel::SWGPresets& response, SWGSDRangel::SWGErrorResponse& error) diff --git a/sdrgui/webapi/webapiadaptergui.h b/sdrgui/webapi/webapiadaptergui.h index a25454dff..54a6c9744 100644 --- a/sdrgui/webapi/webapiadaptergui.h +++ b/sdrgui/webapi/webapiadaptergui.h @@ -107,6 +107,28 @@ public: SWGSDRangel::SWGDVSeralDevices& response, SWGSDRangel::SWGErrorResponse& error); + virtual int instanceAMBESerialGet( + SWGSDRangel::SWGDVSeralDevices& response, + SWGSDRangel::SWGErrorResponse& error); + + virtual int instanceAMBEDevicesGet( + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error); + + virtual int instanceAMBEDevicesPut( + SWGSDRangel::SWGAMBEDevices& query, + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error); + + virtual int instanceAMBEDevicesPatch( + SWGSDRangel::SWGAMBEDevices& query, + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error); + + virtual int instanceAMBEDevicesDelete( + SWGSDRangel::SWGSuccessResponse& response, + SWGSDRangel::SWGErrorResponse& error); + virtual int instancePresetsGet( SWGSDRangel::SWGPresets& response, SWGSDRangel::SWGErrorResponse& error); diff --git a/sdrsrv/webapi/webapiadaptersrv.cpp b/sdrsrv/webapi/webapiadaptersrv.cpp index 9443cac35..ed5586855 100644 --- a/sdrsrv/webapi/webapiadaptersrv.cpp +++ b/sdrsrv/webapi/webapiadaptersrv.cpp @@ -29,6 +29,7 @@ #include "SWGAudioDevices.h" #include "SWGLocationInformation.h" #include "SWGDVSeralDevices.h" +#include "SWGAMBEDevices.h" #include "SWGPresetImport.h" #include "SWGPresetExport.h" #include "SWGPresets.h" @@ -609,6 +610,113 @@ int WebAPIAdapterSrv::instanceDVSerialPatch( return 200; } +int WebAPIAdapterSrv::instanceAMBESerialGet( + SWGSDRangel::SWGDVSeralDevices& response, + SWGSDRangel::SWGErrorResponse& error) +{ + (void) error; + response.init(); + + std::vector deviceNames; + std::vector qDeviceNames; + m_mainCore.m_dspEngine->getAMBEEngine()->scan(qDeviceNames); + + for (std::vector::const_iterator it = qDeviceNames.begin(); it != qDeviceNames.end(); ++it) { + deviceNames.push_back(it->toStdString()); + } + + response.setNbDevices((int) deviceNames.size()); + QList *deviceNamesList = response.getDvSerialDevices(); + + std::vector::iterator it = deviceNames.begin(); + + while (it != deviceNames.end()) + { + deviceNamesList->append(new SWGSDRangel::SWGDVSerialDevice); + deviceNamesList->back()->init(); + *deviceNamesList->back()->getDeviceName() = QString::fromStdString(*it); + ++it; + } + + return 200; +} + +int WebAPIAdapterSrv::instanceAMBEDevicesGet( + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error) +{ + (void) error; + response.init(); + + std::vector deviceNames; + m_mainCore.m_dspEngine->getDVSerialNames(deviceNames); + response.setNbDevices((int) deviceNames.size()); + QList *deviceNamesList = response.getAmbeDevices(); + + std::vector::iterator it = deviceNames.begin(); + + while (it != deviceNames.end()) + { + deviceNamesList->append(new SWGSDRangel::SWGAMBEDevice); + deviceNamesList->back()->init(); + *deviceNamesList->back()->getDeviceRef() = QString::fromStdString(*it); + deviceNamesList->back()->setDelete(0); + ++it; + } + + return 200; +} + +int WebAPIAdapterSrv::instanceAMBEDevicesDelete( + SWGSDRangel::SWGSuccessResponse& response, + SWGSDRangel::SWGErrorResponse& error) +{ + (void) error; + m_mainCore.m_dspEngine->getAMBEEngine()->releaseAll(); + + response.init(); + *response.getMessage() = QString("All AMBE devices released"); + + return 200; +} + +int WebAPIAdapterSrv::instanceAMBEDevicesPut( + SWGSDRangel::SWGAMBEDevices& query, + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error) +{ + m_mainCore.m_dspEngine->getAMBEEngine()->releaseAll(); + + QList *ambeList = query.getAmbeDevices(); + + for (QList::const_iterator it = ambeList->begin(); it != ambeList->end(); ++it) { + m_mainCore.m_dspEngine->getAMBEEngine()->registerController((*it)->getDeviceRef()->toStdString()); + } + + instanceAMBEDevicesGet(response, error); + return 200; +} + +int WebAPIAdapterSrv::instanceAMBEDevicesPatch( + SWGSDRangel::SWGAMBEDevices& query, + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error) +{ + QList *ambeList = query.getAmbeDevices(); + + for (QList::const_iterator it = ambeList->begin(); it != ambeList->end(); ++it) + { + if ((*it)->getDelete()) { + m_mainCore.m_dspEngine->getAMBEEngine()->releaseController((*it)->getDeviceRef()->toStdString()); + } else { + m_mainCore.m_dspEngine->getAMBEEngine()->registerController((*it)->getDeviceRef()->toStdString()); + } + } + + instanceAMBEDevicesGet(response, error); + return 200; +} + int WebAPIAdapterSrv::instancePresetFilePut( SWGSDRangel::SWGPresetImport& query, SWGSDRangel::SWGPresetIdentifier& response, diff --git a/sdrsrv/webapi/webapiadaptersrv.h b/sdrsrv/webapi/webapiadaptersrv.h index d897a199e..5988c707c 100644 --- a/sdrsrv/webapi/webapiadaptersrv.h +++ b/sdrsrv/webapi/webapiadaptersrv.h @@ -107,6 +107,28 @@ public: SWGSDRangel::SWGDVSeralDevices& response, SWGSDRangel::SWGErrorResponse& error); + virtual int instanceAMBESerialGet( + SWGSDRangel::SWGDVSeralDevices& response, + SWGSDRangel::SWGErrorResponse& error); + + virtual int instanceAMBEDevicesGet( + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error); + + virtual int instanceAMBEDevicesPut( + SWGSDRangel::SWGAMBEDevices& query, + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error); + + virtual int instanceAMBEDevicesPatch( + SWGSDRangel::SWGAMBEDevices& query, + SWGSDRangel::SWGAMBEDevices& response, + SWGSDRangel::SWGErrorResponse& error); + + virtual int instanceAMBEDevicesDelete( + SWGSDRangel::SWGSuccessResponse& response, + SWGSDRangel::SWGErrorResponse& error); + virtual int instancePresetFilePut( SWGSDRangel::SWGPresetImport& query, SWGSDRangel::SWGPresetIdentifier& response,