diff --git a/sdrbase/resources/index.html b/sdrbase/resources/index.html index cb4e02a2d..08b494756 100644 --- a/sdrbase/resources/index.html +++ b/sdrbase/resources/index.html @@ -7638,7 +7638,7 @@ except ApiException as e:
- Generated 2017-11-25T20:11:05.104+01:00 + Generated 2017-11-25T22:31:12.548+01:00
diff --git a/sdrbase/webapi/webapiadapterinterface.h b/sdrbase/webapi/webapiadapterinterface.h index 19884dc59..ffd8e8a13 100644 --- a/sdrbase/webapi/webapiadapterinterface.h +++ b/sdrbase/webapi/webapiadapterinterface.h @@ -35,6 +35,7 @@ namespace Swagger class SWGPresetTransfer; class SWGPresetIdentifier; class SWGDeviceSetList; + class SWGDeviceSet; class SWGErrorResponse; } @@ -185,7 +186,7 @@ public: { return 501; } /** - * Handler of /sdrangel/preset (DELETE) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels + * Handler of /sdrangel/devicesets (GET) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels * returns the Http status code (default 501: not implemented) */ virtual int instanceDeviceSetsGet( @@ -193,6 +194,26 @@ public: Swagger::SWGErrorResponse& error __attribute__((unused))) { return 501; } + /** + * Handler of /sdrangel/devicesets (POST) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels + * returns the Http status code (default 501: not implemented) + */ + virtual int instanceDeviceSetsPost( + bool tx __attribute__((unused)), + Swagger::SWGDeviceSet& response __attribute__((unused)), + Swagger::SWGErrorResponse& error __attribute__((unused))) + { return 501; } + + + /** + * Handler of /sdrangel/devicesets (DELETE) swagger/sdrangel/code/html2/index.html#api-Default-instanceChannels + * returns the Http status code (default 501: not implemented) + */ + virtual int instanceDeviceSetsDelete( + Swagger::SWGDeviceSetList& response __attribute__((unused)), + Swagger::SWGErrorResponse& error __attribute__((unused))) + { return 501; } + static QString instanceSummaryURL; static QString instanceDevicesURL; static QString instanceChannelsURL; diff --git a/sdrbase/webapi/webapirequestmapper.cpp b/sdrbase/webapi/webapirequestmapper.cpp index 434ff3247..0fa7c9f8f 100644 --- a/sdrbase/webapi/webapirequestmapper.cpp +++ b/sdrbase/webapi/webapirequestmapper.cpp @@ -487,6 +487,37 @@ void WebAPIRequestMapper::instanceDeviceSetsService(qtwebapp::HttpRequest& reque response.write(errorResponse.asJson().toUtf8()); } } + else if (request.getMethod() == "POST") + { + Swagger::SWGDeviceSet normalResponse; + QByteArray txStr = request.getParameter("tx"); + bool tx = false; + + if (txStr.length() != 0) { + tx = !(txStr == "0"); + } + + int status = m_adapter->instanceDeviceSetsPost(tx, normalResponse, errorResponse); + response.setStatus(status); + + if (status == 200) { + response.write(normalResponse.asJson().toUtf8()); + } else { + response.write(errorResponse.asJson().toUtf8()); + } + } + else if (request.getMethod() == "DELETE") + { + Swagger::SWGDeviceSetList normalResponse; + int status = m_adapter->instanceDeviceSetsDelete(normalResponse, errorResponse); + response.setStatus(status); + + if (status == 200) { + response.write(normalResponse.asJson().toUtf8()); + } else { + response.write(errorResponse.asJson().toUtf8()); + } + } else { response.setStatus(405,"Invalid HTTP method"); diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 03eb9f06e..cd620e498 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -65,6 +65,8 @@ MESSAGE_CLASS_DEFINITION(MainWindow::MsgLoadPreset, Message) MESSAGE_CLASS_DEFINITION(MainWindow::MsgSavePreset, Message) MESSAGE_CLASS_DEFINITION(MainWindow::MsgDeletePreset, Message) +MESSAGE_CLASS_DEFINITION(MainWindow::MsgAddDeviceSet, Message) +MESSAGE_CLASS_DEFINITION(MainWindow::MsgRemoveLastDeviceSet, Message) MainWindow *MainWindow::m_instance = 0; @@ -706,6 +708,26 @@ bool MainWindow::handleMessage(const Message& cmd) m_settings.deletePreset(presetToDelete); return true; } + else if (MsgAddDeviceSet::match(cmd)) + { + MsgAddDeviceSet& notif = (MsgAddDeviceSet&) cmd; + + if (notif.isTx()) { + addSinkDevice(); + } else { + addSourceDevice(); + } + + return true; + } + else if (MsgRemoveLastDeviceSet::match(cmd)) + { + if (m_deviceUIs.size() > 1) { + removeLastDevice(); + } + + return true; + } return false; } diff --git a/sdrgui/mainwindow.h b/sdrgui/mainwindow.h index da745d513..d0095f873 100644 --- a/sdrgui/mainwindow.h +++ b/sdrgui/mainwindow.h @@ -153,6 +153,41 @@ private: { } }; + class MsgAddDeviceSet : public Message { + MESSAGE_CLASS_DECLARATION + + public: + bool isTx() const { return m_tx; } + + static MsgAddDeviceSet* create(bool tx) + { + return new MsgAddDeviceSet(tx); + } + + private: + bool m_tx; + + MsgAddDeviceSet(bool tx) : + Message(), + m_tx(tx) + { } + }; + + class MsgRemoveLastDeviceSet : public Message { + MESSAGE_CLASS_DECLARATION + + public: + static MsgRemoveLastDeviceSet* create() + { + return new MsgRemoveLastDeviceSet(); + } + + private: + MsgRemoveLastDeviceSet() : + Message() + { } + }; + enum { PGroup, PItem diff --git a/sdrgui/webapi/webapiadaptergui.cpp b/sdrgui/webapi/webapiadaptergui.cpp index 689c6692c..0f0417700 100644 --- a/sdrgui/webapi/webapiadaptergui.cpp +++ b/sdrgui/webapi/webapiadaptergui.cpp @@ -19,6 +19,8 @@ #include #include +#include + #include "mainwindow.h" #include "loggerwithfile.h" #include "device/devicesourceapi.h" @@ -551,6 +553,46 @@ int WebAPIAdapterGUI::instanceDeviceSetsGet( return 200; } +int WebAPIAdapterGUI::instanceDeviceSetsPost( + bool tx, + Swagger::SWGDeviceSet& response, + Swagger::SWGErrorResponse& error __attribute__((unused))) +{ + MainWindow::MsgAddDeviceSet *msg = MainWindow::MsgAddDeviceSet::create(tx); + m_mainWindow.m_inputMessageQueue.push(msg); + + usleep(100000); + + const DeviceUISet *lastDeviceSet = m_mainWindow.m_deviceUIs.back(); + getDeviceSet(&response,lastDeviceSet, (int) m_mainWindow.m_deviceUIs.size() - 1); + + return 200; +} + +int WebAPIAdapterGUI::instanceDeviceSetsDelete( + Swagger::SWGDeviceSetList& response, + Swagger::SWGErrorResponse& error) +{ + if (m_mainWindow.m_deviceUIs.size() > 1) + { + MainWindow::MsgRemoveLastDeviceSet *msg = MainWindow::MsgRemoveLastDeviceSet::create(); + m_mainWindow.m_inputMessageQueue.push(msg); + + usleep(100000); + + getDeviceSetList(&response); + + return 200; + } + else + { + error.init(); + *error.getMessage() = "No more device sets to be removed"; + + return 404; + } +} + void WebAPIAdapterGUI::getDeviceSetList(Swagger::SWGDeviceSetList* deviceSetList) { deviceSetList->init(); @@ -560,71 +602,77 @@ void WebAPIAdapterGUI::getDeviceSetList(Swagger::SWGDeviceSetList* deviceSetList for (int i = 0; it != m_mainWindow.m_deviceUIs.end(); ++it, i++) { - QList *deviceSet = deviceSetList->getDeviceSets(); - deviceSet->append(new Swagger::SWGDeviceSet()); - Swagger::SWGSamplingDevice *samplingDevice = deviceSet->back()->getSamplingDevice(); - samplingDevice->init(); - samplingDevice->setIndex(i); - samplingDevice->setTx((*it)->m_deviceSinkEngine != 0); + QList *deviceSets = deviceSetList->getDeviceSets(); + deviceSets->append(new Swagger::SWGDeviceSet()); - if ((*it)->m_deviceSinkEngine) // Tx data - { - *samplingDevice->getHwType() = (*it)->m_deviceSinkAPI->getHardwareId(); - *samplingDevice->getSerial() = (*it)->m_deviceSinkAPI->getSampleSinkSerial(); - samplingDevice->setSequence((*it)->m_deviceSinkAPI->getSampleSinkSequence()); - samplingDevice->setNbStreams((*it)->m_deviceSinkAPI->getNbItems()); - samplingDevice->setStreamIndex((*it)->m_deviceSinkAPI->getItemIndex()); - (*it)->m_deviceSinkAPI->getDeviceEngineStateStr(*samplingDevice->getState()); - DeviceSampleSink *sampleSink = (*it)->m_deviceSinkEngine->getSink(); + getDeviceSet(deviceSets->back(), *it, i); + } +} - if (sampleSink) { - samplingDevice->setCenterFrequency(sampleSink->getCenterFrequency()); - samplingDevice->setBandwidth(sampleSink->getSampleRate()); - } +void WebAPIAdapterGUI::getDeviceSet(Swagger::SWGDeviceSet *deviceSet, const DeviceUISet* deviceUISet, int deviceUISetIndex) +{ + Swagger::SWGSamplingDevice *samplingDevice = deviceSet->getSamplingDevice(); + samplingDevice->init(); + samplingDevice->setIndex(deviceUISetIndex); + samplingDevice->setTx(deviceUISet->m_deviceSinkEngine != 0); - deviceSet->back()->setChannelcount((*it)->m_deviceSinkAPI->getNbChannels()); - QList *channels = deviceSet->back()->getChannels(); + if (deviceUISet->m_deviceSinkEngine) // Tx data + { + *samplingDevice->getHwType() = deviceUISet->m_deviceSinkAPI->getHardwareId(); + *samplingDevice->getSerial() = deviceUISet->m_deviceSinkAPI->getSampleSinkSerial(); + samplingDevice->setSequence(deviceUISet->m_deviceSinkAPI->getSampleSinkSequence()); + samplingDevice->setNbStreams(deviceUISet->m_deviceSinkAPI->getNbItems()); + samplingDevice->setStreamIndex(deviceUISet->m_deviceSinkAPI->getItemIndex()); + deviceUISet->m_deviceSinkAPI->getDeviceEngineStateStr(*samplingDevice->getState()); + DeviceSampleSink *sampleSink = deviceUISet->m_deviceSinkEngine->getSink(); - for (int i = 0; i < deviceSet->back()->getChannelcount(); i++) - { - channels->append(new Swagger::SWGChannel); - ChannelSourceAPI *channel = (*it)->m_deviceSinkAPI->getChanelAPIAt(i); - channels->back()->setDeltaFrequency(channel->getDeltaFrequency()); - channels->back()->setIndex(channel->getIndexInDeviceSet()); - channels->back()->setUid(channel->getUID()); - channel->getIdentifier(*channels->back()->getId()); - channel->getTitle(*channels->back()->getTitle()); - } + if (sampleSink) { + samplingDevice->setCenterFrequency(sampleSink->getCenterFrequency()); + samplingDevice->setBandwidth(sampleSink->getSampleRate()); } - if ((*it)->m_deviceSourceEngine) // Rx data + deviceSet->setChannelcount(deviceUISet->m_deviceSinkAPI->getNbChannels()); + QList *channels = deviceSet->getChannels(); + + for (int i = 0; i < deviceSet->getChannelcount(); i++) { - *samplingDevice->getHwType() = (*it)->m_deviceSourceAPI->getHardwareId(); - *samplingDevice->getSerial() = (*it)->m_deviceSourceAPI->getSampleSourceSerial(); - samplingDevice->setSequence((*it)->m_deviceSourceAPI->getSampleSourceSequence()); - samplingDevice->setNbStreams((*it)->m_deviceSourceAPI->getNbItems()); - samplingDevice->setStreamIndex((*it)->m_deviceSourceAPI->getItemIndex()); - (*it)->m_deviceSourceAPI->getDeviceEngineStateStr(*samplingDevice->getState()); - DeviceSampleSource *sampleSource = (*it)->m_deviceSourceEngine->getSource(); + channels->append(new Swagger::SWGChannel); + ChannelSourceAPI *channel = deviceUISet->m_deviceSinkAPI->getChanelAPIAt(i); + channels->back()->setDeltaFrequency(channel->getDeltaFrequency()); + channels->back()->setIndex(channel->getIndexInDeviceSet()); + channels->back()->setUid(channel->getUID()); + channel->getIdentifier(*channels->back()->getId()); + channel->getTitle(*channels->back()->getTitle()); + } + } - if (sampleSource) { - samplingDevice->setCenterFrequency(sampleSource->getCenterFrequency()); - samplingDevice->setBandwidth(sampleSource->getSampleRate()); - } + if (deviceUISet->m_deviceSourceEngine) // Rx data + { + *samplingDevice->getHwType() = deviceUISet->m_deviceSourceAPI->getHardwareId(); + *samplingDevice->getSerial() = deviceUISet->m_deviceSourceAPI->getSampleSourceSerial(); + samplingDevice->setSequence(deviceUISet->m_deviceSourceAPI->getSampleSourceSequence()); + samplingDevice->setNbStreams(deviceUISet->m_deviceSourceAPI->getNbItems()); + samplingDevice->setStreamIndex(deviceUISet->m_deviceSourceAPI->getItemIndex()); + deviceUISet->m_deviceSourceAPI->getDeviceEngineStateStr(*samplingDevice->getState()); + DeviceSampleSource *sampleSource = deviceUISet->m_deviceSourceEngine->getSource(); - deviceSet->back()->setChannelcount((*it)->m_deviceSourceAPI->getNbChannels()); - QList *channels = deviceSet->back()->getChannels(); + if (sampleSource) { + samplingDevice->setCenterFrequency(sampleSource->getCenterFrequency()); + samplingDevice->setBandwidth(sampleSource->getSampleRate()); + } - for (int i = 0; i < deviceSet->back()->getChannelcount(); i++) - { - channels->append(new Swagger::SWGChannel); - ChannelSinkAPI *channel = (*it)->m_deviceSourceAPI->getChanelAPIAt(i); - channels->back()->setDeltaFrequency(channel->getDeltaFrequency()); - channels->back()->setIndex(channel->getIndexInDeviceSet()); - channels->back()->setUid(channel->getUID()); - channel->getIdentifier(*channels->back()->getId()); - channel->getTitle(*channels->back()->getTitle()); - } + deviceSet->setChannelcount(deviceUISet->m_deviceSourceAPI->getNbChannels()); + QList *channels = deviceSet->getChannels(); + + for (int i = 0; i < deviceSet->getChannelcount(); i++) + { + channels->append(new Swagger::SWGChannel); + ChannelSinkAPI *channel = deviceUISet->m_deviceSourceAPI->getChanelAPIAt(i); + channels->back()->setDeltaFrequency(channel->getDeltaFrequency()); + channels->back()->setIndex(channel->getIndexInDeviceSet()); + channels->back()->setUid(channel->getUID()); + channel->getIdentifier(*channels->back()->getId()); + channel->getTitle(*channels->back()->getTitle()); } } } diff --git a/sdrgui/webapi/webapiadaptergui.h b/sdrgui/webapi/webapiadaptergui.h index 60545731e..992844ea5 100644 --- a/sdrgui/webapi/webapiadaptergui.h +++ b/sdrgui/webapi/webapiadaptergui.h @@ -101,10 +101,20 @@ public: Swagger::SWGDeviceSetList& response, Swagger::SWGErrorResponse& error); + virtual int instanceDeviceSetsPost( + bool tx, + Swagger::SWGDeviceSet& response, + Swagger::SWGErrorResponse& error); + + virtual int instanceDeviceSetsDelete( + Swagger::SWGDeviceSetList& response, + Swagger::SWGErrorResponse& error); + private: MainWindow& m_mainWindow; void getDeviceSetList(Swagger::SWGDeviceSetList* deviceSetList); + void getDeviceSet(Swagger::SWGDeviceSet *deviceSet, const DeviceUISet* deviceUISet, int deviceUISetIndex); static QtMsgType getMsgTypeFromString(const QString& msgTypeString); static void getMsgTypeString(const QtMsgType& msgType, QString& level); }; diff --git a/swagger/sdrangel/api/swagger/swagger.yaml b/swagger/sdrangel/api/swagger/swagger.yaml index ca24a8358..66feafa25 100644 --- a/swagger/sdrangel/api/swagger/swagger.yaml +++ b/swagger/sdrangel/api/swagger/swagger.yaml @@ -421,6 +421,8 @@ paths: $ref: "#/definitions/DeviceSetList" "404": description: "No more device sets to be deleted" + schema: + $ref: "#/definitions/ErrorResponse" "500": description: Error schema: diff --git a/swagger/sdrangel/code/html2/index.html b/swagger/sdrangel/code/html2/index.html index cb4e02a2d..08b494756 100644 --- a/swagger/sdrangel/code/html2/index.html +++ b/swagger/sdrangel/code/html2/index.html @@ -7638,7 +7638,7 @@ except ApiException as e:
- Generated 2017-11-25T20:11:05.104+01:00 + Generated 2017-11-25T22:31:12.548+01:00