From 96dfce0154f5b773cacb8edfb18b63c21bbd535c Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 1 Sep 2018 10:44:12 +0200 Subject: [PATCH] SDRdaemonSink: added compatibility with SDRangel and SDRdaemon server types --- .../sdrdaemonsink/sdrdaemonsinkgui.cpp | 79 +++++++++++++--- .../sdrdaemonsink/sdrdaemonsinkgui.h | 3 + .../sdrdaemonsink/sdrdaemonsinkgui.ui | 90 ++++++++++++++++++- .../sdrdaemonsink/sdrdaemonsinkoutput.cpp | 15 ++++ .../sdrdaemonsink/sdrdaemonsinksettings.cpp | 19 ++++ .../sdrdaemonsink/sdrdaemonsinksettings.h | 9 ++ sdrbase/resources/webapi/doc/html2/index.html | 11 ++- .../doc/swagger/include/SDRDaemonSink.yaml | 6 ++ .../api/swagger/include/SDRDaemonSink.yaml | 6 ++ swagger/sdrangel/code/html2/index.html | 11 ++- .../qt5/client/SWGSDRdaemonSinkSettings.cpp | 63 +++++++++++++ .../qt5/client/SWGSDRdaemonSinkSettings.h | 18 ++++ 12 files changed, 312 insertions(+), 18 deletions(-) diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.cpp b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.cpp index eada6d7f3..d877941dc 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.cpp +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.cpp @@ -327,12 +327,52 @@ void SDRdaemonSinkGui::on_nbFECBlocks_valueChanged(int value) sendSettings(); } +void SDRdaemonSinkGui::on_serverType_currentIndexChanged(int index) +{ + m_settings.m_serverType = (SDRdaemonSinkSettings::ServerType) index; + sendSettings(); + + QString typeCode = m_settings.m_serverType == SDRdaemonSinkSettings::ServerAngel ? "sdrangel" : "sdrdaemon"; + QString infoURL = QString("http://%1:%2/%3").arg(m_settings.m_apiAddress).arg(m_settings.m_apiPort).arg(typeCode); + m_networkRequest.setUrl(QUrl(infoURL)); + m_networkManager->get(m_networkRequest); +} + +void SDRdaemonSinkGui::on_deviceIndex_returnPressed() +{ + bool dataOk; + int deviceIndex = ui->deviceIndex->text().toInt(&dataOk); + + if ((!dataOk) || (deviceIndex < 0)) { + return; + } else { + m_settings.m_deviceIndex = deviceIndex; + } + + sendSettings(); +} + +void SDRdaemonSinkGui::on_channelIndex_returnPressed() +{ + bool dataOk; + int channelIndex = ui->channelIndex->text().toInt(&dataOk); + + if ((!dataOk) || (channelIndex < 0)) { + return; + } else { + m_settings.m_channelIndex = channelIndex; + } + + sendSettings(); +} + void SDRdaemonSinkGui::on_apiAddress_returnPressed() { m_settings.m_apiAddress = ui->apiAddress->text(); sendSettings(); - QString infoURL = QString("http://%1:%2/sdrdaemon").arg(m_settings.m_apiAddress).arg(m_settings.m_apiPort); + QString typeCode = m_settings.m_serverType == SDRdaemonSinkSettings::ServerAngel ? "sdrangel" : "sdrdaemon"; + QString infoURL = QString("http://%1:%2/%3").arg(m_settings.m_apiAddress).arg(m_settings.m_apiPort).arg(typeCode); m_networkRequest.setUrl(QUrl(infoURL)); m_networkManager->get(m_networkRequest); } @@ -342,18 +382,16 @@ void SDRdaemonSinkGui::on_apiPort_returnPressed() bool dataOk; int apiPort = ui->apiPort->text().toInt(&dataOk); - if((!dataOk) || (apiPort < 1024) || (apiPort > 65535)) - { + if((!dataOk) || (apiPort < 1024) || (apiPort > 65535)) { return; - } - else - { + } else { m_settings.m_apiPort = apiPort; } sendSettings(); - QString infoURL = QString("http://%1:%2/sdrdaemon").arg(m_settings.m_apiAddress).arg(m_settings.m_apiPort); + QString typeCode = m_settings.m_serverType == SDRdaemonSinkSettings::ServerAngel ? "sdrangel" : "sdrdaemon"; + QString infoURL = QString("http://%1:%2/%3").arg(m_settings.m_apiAddress).arg(m_settings.m_apiPort).arg(typeCode); m_networkRequest.setUrl(QUrl(infoURL)); m_networkManager->get(m_networkRequest); } @@ -369,12 +407,9 @@ void SDRdaemonSinkGui::on_dataPort_returnPressed() bool dataOk; int dataPort = ui->dataPort->text().toInt(&dataOk); - if((!dataOk) || (dataPort < 1024) || (dataPort > 65535)) - { + if((!dataOk) || (dataPort < 1024) || (dataPort > 65535)) { return; - } - else - { + } else { m_settings.m_dataPort = dataPort; } @@ -395,7 +430,8 @@ void SDRdaemonSinkGui::on_apiApplyButton_clicked(bool checked __attribute__((unu sendSettings(); - QString infoURL = QString("http://%1:%2/sdrdaemon").arg(m_settings.m_apiAddress).arg(m_settings.m_apiPort); + QString typeCode = m_settings.m_serverType == SDRdaemonSinkSettings::ServerAngel ? "sdrangel" : "sdrdaemon"; + QString infoURL = QString("http://%1:%2/%3").arg(m_settings.m_apiAddress).arg(m_settings.m_apiPort).arg(typeCode); m_networkRequest.setUrl(QUrl(infoURL)); m_networkManager->get(m_networkRequest); } @@ -471,7 +507,22 @@ void SDRdaemonSinkGui::tick() { if (++m_tickCount == 20) // once per second { - QString reportURL = QString("http://%1:%2/sdrdaemon/channel/report").arg(m_settings.m_apiAddress).arg(m_settings.m_apiPort); + QString reportURL; + + if (m_settings.m_serverType == SDRdaemonSinkSettings::ServerAngel) { + reportURL = QString("http://%1:%2/sdrangel/deviceset/%3/channel/%4/report") + .arg(m_settings.m_apiAddress) + .arg(m_settings.m_apiPort) + .arg(m_settings.m_deviceIndex) + .arg(m_settings.m_channelIndex); + } + else + { + reportURL = QString("http://%1:%2/sdrdaemon/channel/report") + .arg(m_settings.m_apiAddress) + .arg(m_settings.m_apiPort); + } + m_networkRequest.setUrl(QUrl(reportURL)); m_networkManager->get(m_networkRequest); diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.h b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.h index 48dcd901d..6c5453b08 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.h +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.h @@ -116,6 +116,9 @@ private slots: void on_sampleRate_changed(quint64 value); void on_txDelay_valueChanged(int value); void on_nbFECBlocks_valueChanged(int value); + void on_serverType_currentIndexChanged(int index); + void on_deviceIndex_returnPressed(); + void on_channelIndex_returnPressed(); void on_apiAddress_returnPressed(); void on_apiPort_returnPressed(); void on_dataAddress_returnPressed(); diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.ui b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.ui index 9cd957623..5a325b782 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.ui +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.ui @@ -7,7 +7,7 @@ 0 0 360 - 270 + 300 @@ -19,7 +19,7 @@ 360 - 270 + 300 @@ -520,6 +520,92 @@ + + + + + + Remote server type + + + + Angel + + + + + Daemon + + + + + + + + Device + + + + + + + + 40 + 16777215 + + + + Device index (for SDRangel server) + + + 00 + + + 0 + + + + + + + Channel + + + + + + + + 40 + 16777215 + + + + Channel index (for SDRangel) + + + 00 + + + 0 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp index 01e6e0814..f83c9b7bd 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp @@ -376,6 +376,18 @@ int SDRdaemonSinkOutput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("dataPort")) { settings.m_dataPort = response.getSdrDaemonSinkSettings()->getDataPort(); } + if (deviceSettingsKeys.contains("serverType")) { + int serverType = response.getSdrDaemonSinkSettings()->getServerType(); + settings.m_serverType = serverType < 0 ? SDRdaemonSinkSettings::ServerAngel + : serverType > 1 ? SDRdaemonSinkSettings::ServerAngel + : (SDRdaemonSinkSettings::ServerType) serverType; + } + if (deviceSettingsKeys.contains("deviceIndex")) { + settings.m_deviceIndex = response.getSdrDaemonSinkSettings()->getDeviceIndex(); + } + if (deviceSettingsKeys.contains("channelIndex")) { + settings.m_channelIndex = response.getSdrDaemonSinkSettings()->getChannelIndex(); + } MsgConfigureSDRdaemonSink *msg = MsgConfigureSDRdaemonSink::create(settings, force); m_inputMessageQueue.push(msg); @@ -410,6 +422,9 @@ void SDRdaemonSinkOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSetti response.getSdrDaemonSinkSettings()->setApiPort(settings.m_apiPort); response.getSdrDaemonSinkSettings()->setDataAddress(new QString(settings.m_dataAddress)); response.getSdrDaemonSinkSettings()->setDataPort(settings.m_dataPort); + response.getSdrDaemonSinkSettings()->setServerType((int) settings.m_serverType); + response.getSdrDaemonSinkSettings()->setDeviceIndex(settings.m_deviceIndex); + response.getSdrDaemonSinkSettings()->setChannelIndex(settings.m_channelIndex); } void SDRdaemonSinkOutput::webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response) diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinksettings.cpp b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinksettings.cpp index af41069cf..ad28bdfb0 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinksettings.cpp +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinksettings.cpp @@ -32,6 +32,9 @@ void SDRdaemonSinkSettings::resetToDefaults() m_apiPort = 9091; m_dataAddress = "127.0.0.1"; m_dataPort = 9090; + m_serverType = ServerAngel; + m_deviceIndex = 0; + m_channelIndex = 0; } QByteArray SDRdaemonSinkSettings::serialize() const @@ -46,6 +49,9 @@ QByteArray SDRdaemonSinkSettings::serialize() const s.writeU32(6, m_apiPort); s.writeString(7, m_dataAddress); s.writeU32(8, m_dataPort); + s.writeS32(9, (int) m_serverType); + s.writeU32(10, m_deviceIndex); + s.writeU32(11, m_channelIndex); return s.final(); } @@ -63,6 +69,8 @@ bool SDRdaemonSinkSettings::deserialize(const QByteArray& data) if (d.getVersion() == 1) { quint32 uintval; + int intval; + d.readU64(1, &m_centerFrequency, 435000*1000); d.readU32(2, &m_sampleRate, 48000); d.readFloat(3, &m_txDelay, 0.5); @@ -73,6 +81,17 @@ bool SDRdaemonSinkSettings::deserialize(const QByteArray& data) d.readString(7, &m_dataAddress, "127.0.0.1"); d.readU32(8, &uintval, 9090); m_dataPort = uintval % (1<<16); + d.readS32(9, &intval, 0); + + if ((intval < 0) || (intval > 1)) { + m_serverType = ServerAngel; + } else { + m_serverType = (ServerType) intval; + } + + d.readU32(10, &m_deviceIndex, 0); + d.readU32(11, &m_channelIndex, 0); + return true; } else diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinksettings.h b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinksettings.h index 9865bfff3..4c9d4d9e7 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinksettings.h +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinksettings.h @@ -20,6 +20,12 @@ #include struct SDRdaemonSinkSettings { + + typedef enum { + ServerAngel = 0, + ServerDaemon + } ServerType; + quint64 m_centerFrequency; quint32 m_sampleRate; float m_txDelay; @@ -28,6 +34,9 @@ struct SDRdaemonSinkSettings { quint16 m_apiPort; QString m_dataAddress; quint16 m_dataPort; + ServerType m_serverType; + quint32 m_deviceIndex; + quint32 m_channelIndex; SDRdaemonSinkSettings(); void resetToDefaults(); diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html index 5168c5ff7..ca83aacde 100644 --- a/sdrbase/resources/webapi/doc/html2/index.html +++ b/sdrbase/resources/webapi/doc/html2/index.html @@ -3351,6 +3351,15 @@ margin-bottom: 20px; }, "dataPort" : { "type" : "integer" + }, + "serverType" : { + "type" : "integer" + }, + "deviceIndex" : { + "type" : "integer" + }, + "channelIndex" : { + "type" : "integer" } }, "description" : "SDRdaemonSink" @@ -28694,7 +28703,7 @@ except ApiException as e:
- Generated 2018-09-01T05:45:40.779+02:00 + Generated 2018-09-01T10:19:35.190+02:00
diff --git a/sdrbase/resources/webapi/doc/swagger/include/SDRDaemonSink.yaml b/sdrbase/resources/webapi/doc/swagger/include/SDRDaemonSink.yaml index 17a22003f..a70b54e3f 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/SDRDaemonSink.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/SDRDaemonSink.yaml @@ -20,6 +20,12 @@ SDRdaemonSinkSettings: type: string dataPort: type: integer + serverType: + type: integer + deviceIndex: + type: integer + channelIndex: + type: integer SDRdaemonSinkReport: description: SDRdaemonSource diff --git a/swagger/sdrangel/api/swagger/include/SDRDaemonSink.yaml b/swagger/sdrangel/api/swagger/include/SDRDaemonSink.yaml index 17a22003f..a70b54e3f 100644 --- a/swagger/sdrangel/api/swagger/include/SDRDaemonSink.yaml +++ b/swagger/sdrangel/api/swagger/include/SDRDaemonSink.yaml @@ -20,6 +20,12 @@ SDRdaemonSinkSettings: type: string dataPort: type: integer + serverType: + type: integer + deviceIndex: + type: integer + channelIndex: + type: integer SDRdaemonSinkReport: description: SDRdaemonSource diff --git a/swagger/sdrangel/code/html2/index.html b/swagger/sdrangel/code/html2/index.html index 5168c5ff7..ca83aacde 100644 --- a/swagger/sdrangel/code/html2/index.html +++ b/swagger/sdrangel/code/html2/index.html @@ -3351,6 +3351,15 @@ margin-bottom: 20px; }, "dataPort" : { "type" : "integer" + }, + "serverType" : { + "type" : "integer" + }, + "deviceIndex" : { + "type" : "integer" + }, + "channelIndex" : { + "type" : "integer" } }, "description" : "SDRdaemonSink" @@ -28694,7 +28703,7 @@ except ApiException as e:
- Generated 2018-09-01T05:45:40.779+02:00 + Generated 2018-09-01T10:19:35.190+02:00
diff --git a/swagger/sdrangel/code/qt5/client/SWGSDRdaemonSinkSettings.cpp b/swagger/sdrangel/code/qt5/client/SWGSDRdaemonSinkSettings.cpp index 1c9997f76..f818aab62 100644 --- a/swagger/sdrangel/code/qt5/client/SWGSDRdaemonSinkSettings.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGSDRdaemonSinkSettings.cpp @@ -44,6 +44,12 @@ SWGSDRdaemonSinkSettings::SWGSDRdaemonSinkSettings() { m_data_address_isSet = false; data_port = 0; m_data_port_isSet = false; + server_type = 0; + m_server_type_isSet = false; + device_index = 0; + m_device_index_isSet = false; + channel_index = 0; + m_channel_index_isSet = false; } SWGSDRdaemonSinkSettings::~SWGSDRdaemonSinkSettings() { @@ -68,6 +74,12 @@ SWGSDRdaemonSinkSettings::init() { m_data_address_isSet = false; data_port = 0; m_data_port_isSet = false; + server_type = 0; + m_server_type_isSet = false; + device_index = 0; + m_device_index_isSet = false; + channel_index = 0; + m_channel_index_isSet = false; } void @@ -84,6 +96,9 @@ SWGSDRdaemonSinkSettings::cleanup() { delete data_address; } + + + } SWGSDRdaemonSinkSettings* @@ -113,6 +128,12 @@ SWGSDRdaemonSinkSettings::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&data_port, pJson["dataPort"], "qint32", ""); + ::SWGSDRangel::setValue(&server_type, pJson["serverType"], "qint32", ""); + + ::SWGSDRangel::setValue(&device_index, pJson["deviceIndex"], "qint32", ""); + + ::SWGSDRangel::setValue(&channel_index, pJson["channelIndex"], "qint32", ""); + } QString @@ -153,6 +174,15 @@ SWGSDRdaemonSinkSettings::asJsonObject() { if(m_data_port_isSet){ obj->insert("dataPort", QJsonValue(data_port)); } + if(m_server_type_isSet){ + obj->insert("serverType", QJsonValue(server_type)); + } + if(m_device_index_isSet){ + obj->insert("deviceIndex", QJsonValue(device_index)); + } + if(m_channel_index_isSet){ + obj->insert("channelIndex", QJsonValue(channel_index)); + } return obj; } @@ -237,6 +267,36 @@ SWGSDRdaemonSinkSettings::setDataPort(qint32 data_port) { this->m_data_port_isSet = true; } +qint32 +SWGSDRdaemonSinkSettings::getServerType() { + return server_type; +} +void +SWGSDRdaemonSinkSettings::setServerType(qint32 server_type) { + this->server_type = server_type; + this->m_server_type_isSet = true; +} + +qint32 +SWGSDRdaemonSinkSettings::getDeviceIndex() { + return device_index; +} +void +SWGSDRdaemonSinkSettings::setDeviceIndex(qint32 device_index) { + this->device_index = device_index; + this->m_device_index_isSet = true; +} + +qint32 +SWGSDRdaemonSinkSettings::getChannelIndex() { + return channel_index; +} +void +SWGSDRdaemonSinkSettings::setChannelIndex(qint32 channel_index) { + this->channel_index = channel_index; + this->m_channel_index_isSet = true; +} + bool SWGSDRdaemonSinkSettings::isSet(){ @@ -250,6 +310,9 @@ SWGSDRdaemonSinkSettings::isSet(){ if(m_api_port_isSet){ isObjectUpdated = true; break;} if(data_address != nullptr && *data_address != QString("")){ isObjectUpdated = true; break;} if(m_data_port_isSet){ isObjectUpdated = true; break;} + if(m_server_type_isSet){ isObjectUpdated = true; break;} + if(m_device_index_isSet){ isObjectUpdated = true; break;} + if(m_channel_index_isSet){ isObjectUpdated = true; break;} }while(false); return isObjectUpdated; } diff --git a/swagger/sdrangel/code/qt5/client/SWGSDRdaemonSinkSettings.h b/swagger/sdrangel/code/qt5/client/SWGSDRdaemonSinkSettings.h index d87d3763b..20f3f8a88 100644 --- a/swagger/sdrangel/code/qt5/client/SWGSDRdaemonSinkSettings.h +++ b/swagger/sdrangel/code/qt5/client/SWGSDRdaemonSinkSettings.h @@ -66,6 +66,15 @@ public: qint32 getDataPort(); void setDataPort(qint32 data_port); + qint32 getServerType(); + void setServerType(qint32 server_type); + + qint32 getDeviceIndex(); + void setDeviceIndex(qint32 device_index); + + qint32 getChannelIndex(); + void setChannelIndex(qint32 channel_index); + virtual bool isSet() override; @@ -94,6 +103,15 @@ private: qint32 data_port; bool m_data_port_isSet; + qint32 server_type; + bool m_server_type_isSet; + + qint32 device_index; + bool m_device_index_isSet; + + qint32 channel_index; + bool m_channel_index_isSet; + }; }