mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-17 13:51:47 -05:00
File Output: make file name persistent. Completed REST API. AIS: added REST API missing doc files
This commit is contained in:
parent
58f16f539a
commit
7500932c7c
@ -4,14 +4,16 @@ set(fileoutput_SOURCES
|
||||
fileoutput.cpp
|
||||
fileoutputplugin.cpp
|
||||
fileoutputsettings.cpp
|
||||
fileoutputworker.cpp
|
||||
fileoutputworker.cpp
|
||||
fileoutputwebapiadapter.cpp
|
||||
)
|
||||
|
||||
set(fileoutput_HEADERS
|
||||
fileoutput.h
|
||||
fileoutputplugin.h
|
||||
fileoutputsettings.h
|
||||
fileoutputworker.h
|
||||
fileoutputworker.h
|
||||
fileoutputwebapiadapter.h
|
||||
)
|
||||
|
||||
include_directories(
|
||||
|
@ -17,6 +17,8 @@
|
||||
|
||||
#include <errno.h>
|
||||
#include <QDebug>
|
||||
#include <QNetworkReply>
|
||||
#include <QBuffer>
|
||||
|
||||
#include "SWGDeviceSettings.h"
|
||||
#include "SWGDeviceState.h"
|
||||
@ -44,7 +46,6 @@ FileOutput::FileOutput(DeviceAPI *deviceAPI) :
|
||||
m_settings(),
|
||||
m_fileOutputWorker(nullptr),
|
||||
m_deviceDescription("FileOutput"),
|
||||
m_fileName("./test.sdriq"),
|
||||
m_startingTimeStamp(0),
|
||||
m_masterTimer(deviceAPI->getMasterTimer())
|
||||
{
|
||||
@ -67,7 +68,7 @@ void FileOutput::openFileStream()
|
||||
m_ofstream.close();
|
||||
}
|
||||
|
||||
m_ofstream.open(m_fileName.toStdString().c_str(), std::ios::binary);
|
||||
m_ofstream.open(m_settings.m_fileName.toStdString().c_str(), std::ios::binary);
|
||||
|
||||
FileRecord::Header header;
|
||||
int actualSampleRate = m_settings.m_sampleRate * (1<<m_settings.m_log2Interp);
|
||||
@ -79,7 +80,7 @@ void FileOutput::openFileStream()
|
||||
|
||||
FileRecord::writeHeader(m_ofstream, header);
|
||||
|
||||
qDebug() << "FileOutput::openFileStream: " << m_fileName.toStdString().c_str();
|
||||
qDebug() << "FileOutput::openFileStream: " << m_settings.m_fileName.toStdString().c_str();
|
||||
}
|
||||
|
||||
void FileOutput::init()
|
||||
@ -217,7 +218,7 @@ bool FileOutput::handleMessage(const Message& message)
|
||||
if (MsgConfigureFileOutputName::match(message))
|
||||
{
|
||||
MsgConfigureFileOutputName& conf = (MsgConfigureFileOutputName&) message;
|
||||
m_fileName = conf.getFileName();
|
||||
m_settings.m_fileName = conf.getFileName();
|
||||
openFileStream();
|
||||
return true;
|
||||
}
|
||||
@ -238,6 +239,10 @@ bool FileOutput::handleMessage(const Message& message)
|
||||
m_deviceAPI->stopDeviceEngine();
|
||||
}
|
||||
|
||||
if (m_settings.m_useReverseAPI) {
|
||||
webapiReverseSendStartStop(cmd.getStartStop());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else if (MsgConfigureFileOutput::match(message))
|
||||
@ -285,37 +290,49 @@ void FileOutput::applySettings(const FileOutputSettings& settings, bool force)
|
||||
{
|
||||
QMutexLocker mutexLocker(&m_mutex);
|
||||
bool forwardChange = false;
|
||||
QList<QString> reverseAPIKeys;
|
||||
|
||||
if (force || (m_settings.m_fileName != settings.m_fileName)) {
|
||||
reverseAPIKeys.append("fileName");
|
||||
}
|
||||
|
||||
if (force || (m_settings.m_centerFrequency != settings.m_centerFrequency))
|
||||
{
|
||||
m_settings.m_centerFrequency = settings.m_centerFrequency;
|
||||
reverseAPIKeys.append("centerFrequency");
|
||||
forwardChange = true;
|
||||
}
|
||||
|
||||
if (force || (m_settings.m_sampleRate != settings.m_sampleRate))
|
||||
{
|
||||
m_settings.m_sampleRate = settings.m_sampleRate;
|
||||
|
||||
if (m_fileOutputWorker != 0)
|
||||
{
|
||||
m_fileOutputWorker->setSamplerate(m_settings.m_sampleRate);
|
||||
if (m_fileOutputWorker != 0) {
|
||||
m_fileOutputWorker->setSamplerate(settings.m_sampleRate);
|
||||
}
|
||||
|
||||
reverseAPIKeys.append("sampleRate");
|
||||
forwardChange = true;
|
||||
}
|
||||
|
||||
if (force || (m_settings.m_log2Interp != settings.m_log2Interp))
|
||||
{
|
||||
m_settings.m_log2Interp = settings.m_log2Interp;
|
||||
|
||||
if (m_fileOutputWorker != 0)
|
||||
{
|
||||
m_fileOutputWorker->setLog2Interpolation(m_settings.m_log2Interp);
|
||||
if (m_fileOutputWorker != 0) {
|
||||
m_fileOutputWorker->setLog2Interpolation(settings.m_log2Interp);
|
||||
}
|
||||
|
||||
reverseAPIKeys.append("log2Interp");
|
||||
forwardChange = true;
|
||||
}
|
||||
|
||||
if (settings.m_useReverseAPI)
|
||||
{
|
||||
bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) ||
|
||||
(m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress) ||
|
||||
(m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) ||
|
||||
(m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex);
|
||||
webapiReverseSendSettings(reverseAPIKeys, settings, fullUpdate || force);
|
||||
}
|
||||
|
||||
m_settings = settings;
|
||||
|
||||
if (forwardChange)
|
||||
{
|
||||
qDebug("FileOutput::applySettings: forward: m_centerFrequency: %llu m_sampleRate: %llu m_log2Interp: %d",
|
||||
@ -325,7 +342,40 @@ void FileOutput::applySettings(const FileOutputSettings& settings, bool force)
|
||||
DSPSignalNotification *notif = new DSPSignalNotification(m_settings.m_sampleRate, m_settings.m_centerFrequency);
|
||||
m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
|
||||
}
|
||||
}
|
||||
|
||||
int FileOutput::webapiSettingsGet(
|
||||
SWGSDRangel::SWGDeviceSettings& response,
|
||||
QString& errorMessage)
|
||||
{
|
||||
(void) errorMessage;
|
||||
response.setFileOutputSettings(new SWGSDRangel::SWGFileOutputSettings());
|
||||
response.getFileOutputSettings()->init();
|
||||
webapiFormatDeviceSettings(response, m_settings);
|
||||
return 200;
|
||||
}
|
||||
|
||||
int FileOutput::webapiSettingsPutPatch(
|
||||
bool force,
|
||||
const QStringList& deviceSettingsKeys,
|
||||
SWGSDRangel::SWGDeviceSettings& response, // query + response
|
||||
QString& errorMessage)
|
||||
{
|
||||
(void) errorMessage;
|
||||
FileOutputSettings settings = m_settings;
|
||||
webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response);
|
||||
|
||||
MsgConfigureFileOutput *msg = MsgConfigureFileOutput::create(settings, force);
|
||||
m_inputMessageQueue.push(msg);
|
||||
|
||||
if (m_guiMessageQueue) // forward to GUI if any
|
||||
{
|
||||
MsgConfigureFileOutput *msgToGUI = MsgConfigureFileOutput::create(settings, force);
|
||||
m_guiMessageQueue->push(msgToGUI);
|
||||
}
|
||||
|
||||
webapiFormatDeviceSettings(response, settings);
|
||||
return 200;
|
||||
}
|
||||
|
||||
int FileOutput::webapiRunGet(
|
||||
@ -356,4 +406,146 @@ int FileOutput::webapiRun(
|
||||
return 200;
|
||||
}
|
||||
|
||||
void FileOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const FileOutputSettings& settings)
|
||||
{
|
||||
response.getFileOutputSettings()->setFileName(new QString(settings.m_fileName));
|
||||
response.getFileOutputSettings()->setCenterFrequency(settings.m_centerFrequency);
|
||||
response.getFileOutputSettings()->setSampleRate(settings.m_sampleRate);
|
||||
response.getFileOutputSettings()->setLog2Interp(settings.m_log2Interp);
|
||||
|
||||
response.getFileOutputSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0);
|
||||
|
||||
if (response.getFileOutputSettings()->getReverseApiAddress()) {
|
||||
*response.getFileOutputSettings()->getReverseApiAddress() = settings.m_reverseAPIAddress;
|
||||
} else {
|
||||
response.getFileOutputSettings()->setReverseApiAddress(new QString(settings.m_reverseAPIAddress));
|
||||
}
|
||||
|
||||
response.getFileOutputSettings()->setReverseApiPort(settings.m_reverseAPIPort);
|
||||
response.getFileOutputSettings()->setReverseApiDeviceIndex(settings.m_reverseAPIDeviceIndex);
|
||||
}
|
||||
|
||||
void FileOutput::webapiUpdateDeviceSettings(
|
||||
FileOutputSettings& settings,
|
||||
const QStringList& deviceSettingsKeys,
|
||||
SWGSDRangel::SWGDeviceSettings& response)
|
||||
{
|
||||
if (deviceSettingsKeys.contains("fileName")) {
|
||||
settings.m_fileName = *response.getFileOutputSettings()->getFileName();
|
||||
}
|
||||
if (deviceSettingsKeys.contains("centerFrequency")) {
|
||||
settings.m_centerFrequency = response.getFileOutputSettings()->getCenterFrequency();
|
||||
}
|
||||
if (deviceSettingsKeys.contains("sampleRate")) {
|
||||
settings.m_sampleRate = response.getFileOutputSettings()->getSampleRate();
|
||||
}
|
||||
if (deviceSettingsKeys.contains("log2Interp")) {
|
||||
settings.m_log2Interp = response.getFileOutputSettings()->getLog2Interp();
|
||||
}
|
||||
if (deviceSettingsKeys.contains("useReverseAPI")) {
|
||||
settings.m_useReverseAPI = response.getFileOutputSettings()->getUseReverseApi() != 0;
|
||||
}
|
||||
if (deviceSettingsKeys.contains("reverseAPIAddress")) {
|
||||
settings.m_reverseAPIAddress = *response.getFileOutputSettings()->getReverseApiAddress();
|
||||
}
|
||||
if (deviceSettingsKeys.contains("reverseAPIPort")) {
|
||||
settings.m_reverseAPIPort = response.getFileOutputSettings()->getReverseApiPort();
|
||||
}
|
||||
if (deviceSettingsKeys.contains("reverseAPIDeviceIndex")) {
|
||||
settings.m_reverseAPIDeviceIndex = response.getFileOutputSettings()->getReverseApiDeviceIndex();
|
||||
}
|
||||
}
|
||||
|
||||
void FileOutput::webapiReverseSendSettings(QList<QString>& deviceSettingsKeys, const FileOutputSettings& settings, bool force)
|
||||
{
|
||||
SWGSDRangel::SWGDeviceSettings *swgDeviceSettings = new SWGSDRangel::SWGDeviceSettings();
|
||||
swgDeviceSettings->setDirection(1); // single Tx
|
||||
swgDeviceSettings->setOriginatorIndex(m_deviceAPI->getDeviceSetIndex());
|
||||
swgDeviceSettings->setDeviceHwType(new QString("FileOutput"));
|
||||
swgDeviceSettings->setFileOutputSettings(new SWGSDRangel::SWGFileOutputSettings());
|
||||
SWGSDRangel::SWGFileOutputSettings *swgFileOutputSettings = swgDeviceSettings->getFileOutputSettings();
|
||||
|
||||
// transfer data that has been modified. When force is on transfer all data except reverse API data
|
||||
|
||||
if (deviceSettingsKeys.contains("centerFrequency") || force) {
|
||||
swgFileOutputSettings->setCenterFrequency(settings.m_centerFrequency);
|
||||
}
|
||||
if (deviceSettingsKeys.contains("sampleRate") || force) {
|
||||
swgFileOutputSettings->setSampleRate(settings.m_sampleRate);
|
||||
}
|
||||
if (deviceSettingsKeys.contains("log2Interp") || force) {
|
||||
swgFileOutputSettings->setLog2Interp(settings.m_log2Interp);
|
||||
}
|
||||
if (deviceSettingsKeys.contains("fileName") || force) {
|
||||
swgFileOutputSettings->setFileName(new QString(settings.m_fileName));
|
||||
}
|
||||
|
||||
QString deviceSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/settings")
|
||||
.arg(settings.m_reverseAPIAddress)
|
||||
.arg(settings.m_reverseAPIPort)
|
||||
.arg(settings.m_reverseAPIDeviceIndex);
|
||||
m_networkRequest.setUrl(QUrl(deviceSettingsURL));
|
||||
m_networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||
|
||||
QBuffer *buffer = new QBuffer();
|
||||
buffer->open((QBuffer::ReadWrite));
|
||||
buffer->write(swgDeviceSettings->asJson().toUtf8());
|
||||
buffer->seek(0);
|
||||
|
||||
// Always use PATCH to avoid passing reverse API settings
|
||||
QNetworkReply *reply = m_networkManager->sendCustomRequest(m_networkRequest, "PATCH", buffer);
|
||||
buffer->setParent(reply);
|
||||
|
||||
delete swgDeviceSettings;
|
||||
}
|
||||
|
||||
void FileOutput::webapiReverseSendStartStop(bool start)
|
||||
{
|
||||
SWGSDRangel::SWGDeviceSettings *swgDeviceSettings = new SWGSDRangel::SWGDeviceSettings();
|
||||
swgDeviceSettings->setDirection(1); // single Tx
|
||||
swgDeviceSettings->setOriginatorIndex(m_deviceAPI->getDeviceSetIndex());
|
||||
swgDeviceSettings->setDeviceHwType(new QString("FileOutput"));
|
||||
|
||||
QString deviceSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/run")
|
||||
.arg(m_settings.m_reverseAPIAddress)
|
||||
.arg(m_settings.m_reverseAPIPort)
|
||||
.arg(m_settings.m_reverseAPIDeviceIndex);
|
||||
m_networkRequest.setUrl(QUrl(deviceSettingsURL));
|
||||
m_networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||
|
||||
QBuffer *buffer = new QBuffer();
|
||||
buffer->open((QBuffer::ReadWrite));
|
||||
buffer->write(swgDeviceSettings->asJson().toUtf8());
|
||||
buffer->seek(0);
|
||||
QNetworkReply *reply;
|
||||
|
||||
if (start) {
|
||||
reply = m_networkManager->sendCustomRequest(m_networkRequest, "POST", buffer);
|
||||
} else {
|
||||
reply = m_networkManager->sendCustomRequest(m_networkRequest, "DELETE", buffer);
|
||||
}
|
||||
|
||||
buffer->setParent(reply);
|
||||
delete swgDeviceSettings;
|
||||
}
|
||||
|
||||
void FileOutput::networkManagerFinished(QNetworkReply *reply)
|
||||
{
|
||||
QNetworkReply::NetworkError replyError = reply->error();
|
||||
|
||||
if (replyError)
|
||||
{
|
||||
qWarning() << "FileOutput::networkManagerFinished:"
|
||||
<< " error(" << (int) replyError
|
||||
<< "): " << replyError
|
||||
<< ": " << reply->errorString();
|
||||
}
|
||||
else
|
||||
{
|
||||
QString answer = reply->readAll();
|
||||
answer.chop(1); // remove last \n
|
||||
qDebug("FileOutput::networkManagerFinished: reply:\n%s", answer.toStdString().c_str());
|
||||
}
|
||||
|
||||
reply->deleteLater();
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <QString>
|
||||
#include <QTimer>
|
||||
#include <QThread>
|
||||
#include <QNetworkRequest>
|
||||
|
||||
#include <ctime>
|
||||
#include <iostream>
|
||||
@ -29,6 +30,8 @@
|
||||
#include "dsp/devicesamplesink.h"
|
||||
#include "fileoutputsettings.h"
|
||||
|
||||
class QNetworkAccessManager;
|
||||
class QNetworkReply;
|
||||
class FileOutputWorker;
|
||||
class DeviceAPI;
|
||||
|
||||
@ -194,6 +197,16 @@ public:
|
||||
|
||||
virtual bool handleMessage(const Message& message);
|
||||
|
||||
virtual int webapiSettingsGet(
|
||||
SWGSDRangel::SWGDeviceSettings& response,
|
||||
QString& errorMessage);
|
||||
|
||||
virtual int webapiSettingsPutPatch(
|
||||
bool force,
|
||||
const QStringList& deviceSettingsKeys,
|
||||
SWGSDRangel::SWGDeviceSettings& response, // query + response
|
||||
QString& errorMessage);
|
||||
|
||||
virtual int webapiRunGet(
|
||||
SWGSDRangel::SWGDeviceState& response,
|
||||
QString& errorMessage);
|
||||
@ -203,6 +216,15 @@ public:
|
||||
SWGSDRangel::SWGDeviceState& response,
|
||||
QString& errorMessage);
|
||||
|
||||
static void webapiFormatDeviceSettings(
|
||||
SWGSDRangel::SWGDeviceSettings& response,
|
||||
const FileOutputSettings& settings);
|
||||
|
||||
static void webapiUpdateDeviceSettings(
|
||||
FileOutputSettings& settings,
|
||||
const QStringList& deviceSettingsKeys,
|
||||
SWGSDRangel::SWGDeviceSettings& response);
|
||||
|
||||
private:
|
||||
DeviceAPI *m_deviceAPI;
|
||||
QMutex m_mutex;
|
||||
@ -211,14 +233,20 @@ private:
|
||||
FileOutputWorker* m_fileOutputWorker;
|
||||
QThread m_fileOutputWorkerThread;
|
||||
QString m_deviceDescription;
|
||||
QString m_fileName;
|
||||
std::time_t m_startingTimeStamp;
|
||||
const QTimer& m_masterTimer;
|
||||
QNetworkAccessManager *m_networkManager;
|
||||
QNetworkRequest m_networkRequest;
|
||||
|
||||
void startWorker();
|
||||
void stopWorker();
|
||||
void openFileStream();
|
||||
void applySettings(const FileOutputSettings& settings, bool force = false);
|
||||
void webapiReverseSendSettings(QList<QString>& deviceSettingsKeys, const FileOutputSettings& settings, bool force);
|
||||
void webapiReverseSendStartStop(bool start);
|
||||
|
||||
private slots:
|
||||
void networkManagerFinished(QNetworkReply *reply);
|
||||
};
|
||||
|
||||
#endif // INCLUDE_FILEOUTPUT_H
|
||||
|
@ -43,7 +43,6 @@ FileOutputGui::FileOutputGui(DeviceUISet *deviceUISet, QWidget* parent) :
|
||||
m_doApplySettings(true),
|
||||
m_forceSettings(true),
|
||||
m_settings(),
|
||||
m_fileName("./test.sdriq"),
|
||||
m_deviceSampleSink(0),
|
||||
m_sampleRate(0),
|
||||
m_generation(false),
|
||||
@ -60,7 +59,7 @@ FileOutputGui::FileOutputGui(DeviceUISet *deviceUISet, QWidget* parent) :
|
||||
ui->sampleRate->setColorMapper(ColorMapper(ColorMapper::GrayGreenYellow));
|
||||
ui->sampleRate->setValueRange(8, 32000U, 90000000U);
|
||||
|
||||
ui->fileNameText->setText(m_fileName);
|
||||
ui->fileNameText->setText(m_settings.m_fileName);
|
||||
|
||||
connect(&(m_deviceUISet->m_deviceAPI->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick()));
|
||||
connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware()));
|
||||
@ -186,6 +185,7 @@ void FileOutputGui::displaySettings()
|
||||
{
|
||||
ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000);
|
||||
ui->sampleRate->setValue(m_settings.m_sampleRate);
|
||||
ui->fileNameText->setText(m_settings.m_fileName);
|
||||
}
|
||||
|
||||
void FileOutputGui::sendSettings()
|
||||
@ -273,16 +273,16 @@ void FileOutputGui::on_showFileDialog_clicked(bool checked)
|
||||
|
||||
if (fileName != "")
|
||||
{
|
||||
m_fileName = fileName;
|
||||
ui->fileNameText->setText(m_fileName);
|
||||
m_settings.m_fileName = fileName;
|
||||
ui->fileNameText->setText(m_settings.m_fileName);
|
||||
configureFileName();
|
||||
}
|
||||
}
|
||||
|
||||
void FileOutputGui::configureFileName()
|
||||
{
|
||||
qDebug() << "FileOutputGui::configureFileName: " << m_fileName.toStdString().c_str();
|
||||
FileOutput::MsgConfigureFileOutputName* message = FileOutput::MsgConfigureFileOutputName::create(m_fileName);
|
||||
qDebug() << "FileOutputGui::configureFileName: " << m_settings.m_fileName.toStdString().c_str();
|
||||
FileOutput::MsgConfigureFileOutputName* message = FileOutput::MsgConfigureFileOutputName::create(m_settings.m_fileName);
|
||||
m_deviceSampleSink->getInputMessageQueue()->push(message);
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,6 @@ private:
|
||||
bool m_doApplySettings;
|
||||
bool m_forceSettings;
|
||||
FileOutputSettings m_settings;
|
||||
QString m_fileName;
|
||||
QTimer m_updateTimer;
|
||||
QTimer m_statusTimer;
|
||||
DeviceSampleSink* m_deviceSampleSink;
|
||||
|
@ -28,6 +28,11 @@ void FileOutputSettings::resetToDefaults()
|
||||
m_centerFrequency = 435000*1000;
|
||||
m_sampleRate = 48000;
|
||||
m_log2Interp = 0;
|
||||
m_fileName = "./test.sdriq";
|
||||
m_useReverseAPI = false;
|
||||
m_reverseAPIAddress = "127.0.0.1";
|
||||
m_reverseAPIPort = 8888;
|
||||
m_reverseAPIDeviceIndex = 0;
|
||||
}
|
||||
|
||||
QByteArray FileOutputSettings::serialize() const
|
||||
@ -36,6 +41,11 @@ QByteArray FileOutputSettings::serialize() const
|
||||
|
||||
s.writeU64(1, m_sampleRate);
|
||||
s.writeU32(2, m_log2Interp);
|
||||
s.writeString(3, m_fileName);
|
||||
s.writeBool(4, m_useReverseAPI);
|
||||
s.writeString(5, m_reverseAPIAddress);
|
||||
s.writeU32(6, m_reverseAPIPort);
|
||||
s.writeU32(7, m_reverseAPIDeviceIndex);
|
||||
|
||||
return s.final();
|
||||
}
|
||||
@ -52,8 +62,24 @@ bool FileOutputSettings::deserialize(const QByteArray& data)
|
||||
|
||||
if (d.getVersion() == 1)
|
||||
{
|
||||
unsigned int uintval;
|
||||
|
||||
d.readU64(1, &m_sampleRate, 48000);
|
||||
d.readU32(2, &m_log2Interp, 0);
|
||||
d.readString(3, &m_fileName, "./test.sdriq");
|
||||
d.readBool(4, &m_useReverseAPI, false);
|
||||
d.readString(5, &m_reverseAPIAddress, "127.0.0.1");
|
||||
d.readU32(6, &uintval, 0);
|
||||
|
||||
if ((uintval > 1023) && (uintval < 65535)) {
|
||||
m_reverseAPIPort = uintval;
|
||||
} else {
|
||||
m_reverseAPIPort = 8888;
|
||||
}
|
||||
|
||||
d.readU32(7, &uintval, 0);
|
||||
m_reverseAPIDeviceIndex = uintval > 99 ? 99 : uintval;
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
|
@ -24,6 +24,11 @@ struct FileOutputSettings {
|
||||
quint64 m_centerFrequency;
|
||||
quint64 m_sampleRate;
|
||||
quint32 m_log2Interp;
|
||||
QString m_fileName;
|
||||
bool m_useReverseAPI;
|
||||
QString m_reverseAPIAddress;
|
||||
uint16_t m_reverseAPIPort;
|
||||
uint16_t m_reverseAPIDeviceIndex;
|
||||
|
||||
FileOutputSettings();
|
||||
void resetToDefaults();
|
||||
|
52
plugins/samplesink/fileoutput/fileoutputwebapiadapter.cpp
Normal file
52
plugins/samplesink/fileoutput/fileoutputwebapiadapter.cpp
Normal file
@ -0,0 +1,52 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (C) 2019 Edouard Griffiths, F4EXB //
|
||||
// //
|
||||
// Implementation of static web API adapters used for preset serialization and //
|
||||
// deserialization //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation as version 3 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License V3 for more details. //
|
||||
// //
|
||||
// You should have received a copy of the GNU General Public License //
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "SWGDeviceSettings.h"
|
||||
#include "fileoutput.h"
|
||||
#include "fileoutputwebapiadapter.h"
|
||||
|
||||
FileOutputWebAPIAdapter::FileOutputWebAPIAdapter()
|
||||
{}
|
||||
|
||||
FileOutputWebAPIAdapter::~FileOutputWebAPIAdapter()
|
||||
{}
|
||||
|
||||
int FileOutputWebAPIAdapter::webapiSettingsGet(
|
||||
SWGSDRangel::SWGDeviceSettings& response,
|
||||
QString& errorMessage)
|
||||
{
|
||||
(void) errorMessage;
|
||||
response.setFileOutputSettings(new SWGSDRangel::SWGFileOutputSettings());
|
||||
response.getFileOutputSettings()->init();
|
||||
FileOutput::webapiFormatDeviceSettings(response, m_settings);
|
||||
return 200;
|
||||
}
|
||||
|
||||
int FileOutputWebAPIAdapter::webapiSettingsPutPatch(
|
||||
bool force,
|
||||
const QStringList& deviceSettingsKeys,
|
||||
SWGSDRangel::SWGDeviceSettings& response, // query + response
|
||||
QString& errorMessage)
|
||||
{
|
||||
(void) force; // no action
|
||||
(void) errorMessage;
|
||||
FileOutput::webapiUpdateDeviceSettings(m_settings, deviceSettingsKeys, response);
|
||||
return 200;
|
||||
}
|
44
plugins/samplesink/fileoutput/fileoutputwebapiadapter.h
Normal file
44
plugins/samplesink/fileoutput/fileoutputwebapiadapter.h
Normal file
@ -0,0 +1,44 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (C) 2019 Edouard Griffiths, F4EXB //
|
||||
// //
|
||||
// Implementation of static web API adapters used for preset serialization and //
|
||||
// deserialization //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation as version 3 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License V3 for more details. //
|
||||
// //
|
||||
// You should have received a copy of the GNU General Public License //
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "device/devicewebapiadapter.h"
|
||||
#include "fileoutputsettings.h"
|
||||
|
||||
class FileOutputWebAPIAdapter : public DeviceWebAPIAdapter
|
||||
{
|
||||
public:
|
||||
FileOutputWebAPIAdapter();
|
||||
virtual ~FileOutputWebAPIAdapter();
|
||||
virtual QByteArray serialize() { return m_settings.serialize(); }
|
||||
virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); }
|
||||
|
||||
virtual int webapiSettingsGet(
|
||||
SWGSDRangel::SWGDeviceSettings& response,
|
||||
QString& errorMessage);
|
||||
|
||||
virtual int webapiSettingsPutPatch(
|
||||
bool force,
|
||||
const QStringList& deviceSettingsKeys,
|
||||
SWGSDRangel::SWGDeviceSettings& response, // query + response
|
||||
QString& errorMessage);
|
||||
|
||||
private:
|
||||
FileOutputSettings m_settings;
|
||||
};
|
@ -6,6 +6,9 @@
|
||||
<file>webapi/doc/swagger/include/AFC.yaml</file>
|
||||
<file>webapi/doc/swagger/include/Airspy.yaml</file>
|
||||
<file>webapi/doc/swagger/include/AirspyHF.yaml</file>
|
||||
<file>webapi/doc/swagger/include/AIS.yaml</file>
|
||||
<file>webapi/doc/swagger/include/AISDemod.yaml</file>
|
||||
<file>webapi/doc/swagger/include/AISMod.yaml</file>
|
||||
<file>webapi/doc/swagger/include/AMDemod.yaml</file>
|
||||
<file>webapi/doc/swagger/include/AMMod.yaml</file>
|
||||
<file>webapi/doc/swagger/include/ATVDemod.yaml</file>
|
||||
@ -39,6 +42,7 @@
|
||||
<file>webapi/doc/swagger/include/FileSink.yaml</file>
|
||||
<file>webapi/doc/swagger/include/FileSource.yaml</file>
|
||||
<file>webapi/doc/swagger/include/FileInput.yaml</file>
|
||||
<file>webapi/doc/swagger/include/FileOutput.yaml</file>
|
||||
<file>webapi/doc/swagger/include/FreeDVDemod.yaml</file>
|
||||
<file>webapi/doc/swagger/include/FreeDVMod.yaml</file>
|
||||
<file>webapi/doc/swagger/include/FreqTracker.yaml</file>
|
||||
@ -70,6 +74,7 @@
|
||||
<file>webapi/doc/swagger/include/RemoteOutput.yaml</file>
|
||||
<file>webapi/doc/swagger/include/RigCtlServer.yaml</file>
|
||||
<file>webapi/doc/swagger/include/SDRPlay.yaml</file>
|
||||
<file>webapi/doc/swagger/include/SDRPlayV3.yaml</file>
|
||||
<file>webapi/doc/swagger/include/SigMFFileInput.yaml</file>
|
||||
<file>webapi/doc/swagger/include/SigMFFileSink.yaml</file>
|
||||
<file>webapi/doc/swagger/include/SimplePTT.yaml</file>
|
||||
|
@ -861,6 +861,276 @@ margin-bottom: 20px;
|
||||
}
|
||||
},
|
||||
"description" : "AFC settings"
|
||||
};
|
||||
defs.AISDemodReport = {
|
||||
"properties" : {
|
||||
"channelPowerDB" : {
|
||||
"type" : "number",
|
||||
"format" : "float",
|
||||
"description" : "power received in channel (dB)"
|
||||
},
|
||||
"channelSampleRate" : {
|
||||
"type" : "integer"
|
||||
}
|
||||
},
|
||||
"description" : "AISDemod"
|
||||
};
|
||||
defs.AISDemodSettings = {
|
||||
"properties" : {
|
||||
"inputFrequencyOffset" : {
|
||||
"type" : "integer",
|
||||
"format" : "int64"
|
||||
},
|
||||
"rfBandwidth" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"fmDeviation" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"correlationThreshold" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"udpEnabled" : {
|
||||
"type" : "integer",
|
||||
"description" : "Whether to forward received messages to specified UDP port"
|
||||
},
|
||||
"udpAddress" : {
|
||||
"type" : "string",
|
||||
"description" : "UDP address to forward received messages to"
|
||||
},
|
||||
"udpPort" : {
|
||||
"type" : "integer",
|
||||
"description" : "UDP port to forward received messages to"
|
||||
},
|
||||
"udpFormat" : {
|
||||
"type" : "integer",
|
||||
"description" : "0 for binary, 1 for NMEA"
|
||||
},
|
||||
"rgbColor" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"title" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"streamIndex" : {
|
||||
"type" : "integer",
|
||||
"description" : "MIMO channel. Not relevant when connected to SI (single Rx)."
|
||||
},
|
||||
"useReverseAPI" : {
|
||||
"type" : "integer",
|
||||
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
|
||||
},
|
||||
"reverseAPIAddress" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"reverseAPIPort" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIDeviceIndex" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIChannelIndex" : {
|
||||
"type" : "integer"
|
||||
}
|
||||
},
|
||||
"description" : "AISDemod"
|
||||
};
|
||||
defs.AISModActions = {
|
||||
"properties" : {
|
||||
"tx" : {
|
||||
"$ref" : "#/definitions/AISModActions_tx"
|
||||
}
|
||||
},
|
||||
"description" : "AISMod"
|
||||
};
|
||||
defs.AISModActions_tx = {
|
||||
"properties" : {
|
||||
"data" : {
|
||||
"type" : "string"
|
||||
}
|
||||
},
|
||||
"description" : "Transmit a message\n"
|
||||
};
|
||||
defs.AISModReport = {
|
||||
"properties" : {
|
||||
"channelPowerDB" : {
|
||||
"type" : "number",
|
||||
"format" : "float",
|
||||
"description" : "power transmitted in channel (dB)"
|
||||
},
|
||||
"channelSampleRate" : {
|
||||
"type" : "integer"
|
||||
}
|
||||
},
|
||||
"description" : "AISMod"
|
||||
};
|
||||
defs.AISModSettings = {
|
||||
"properties" : {
|
||||
"inputFrequencyOffset" : {
|
||||
"type" : "integer",
|
||||
"format" : "int64",
|
||||
"description" : "channel center frequency shift from baseband center in Hz"
|
||||
},
|
||||
"baud" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"rfBandwidth" : {
|
||||
"type" : "number",
|
||||
"format" : "float",
|
||||
"description" : "channel RF bandwidth in Hz"
|
||||
},
|
||||
"fmDeviation" : {
|
||||
"type" : "integer",
|
||||
"description" : "frequency deviation in Hz"
|
||||
},
|
||||
"gain" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"channelMute" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"repeat" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"repeatDelay" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"repeatCount" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"rampUpBits" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"rampDownBits" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"rampRange" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"lpfTaps" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"rfNoise" : {
|
||||
"type" : "integer",
|
||||
"description" : "Boolean\n * 0 - off\n * 1 - on\n"
|
||||
},
|
||||
"writeToFile" : {
|
||||
"type" : "integer",
|
||||
"description" : "Boolean\n * 0 - off\n * 1 - on\n"
|
||||
},
|
||||
"spectrumRate" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"msgId" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"mmsi" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"status" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"latitude" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"longitude" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"course" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"speed" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"heading" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"data" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"bt" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"symbolSpan" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"rgbColor" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"title" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"streamIndex" : {
|
||||
"type" : "integer",
|
||||
"description" : "MIMO channel. Not relevant when connected to SI (single Rx)."
|
||||
},
|
||||
"useReverseAPI" : {
|
||||
"type" : "integer",
|
||||
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
|
||||
},
|
||||
"reverseAPIAddress" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"reverseAPIPort" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIDeviceIndex" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIChannelIndex" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"udpEnabled" : {
|
||||
"type" : "integer",
|
||||
"description" : "Whether to receive messages to transmit on specified UDP port"
|
||||
},
|
||||
"udpAddress" : {
|
||||
"type" : "string",
|
||||
"description" : "UDP address to receive messages to transmit via"
|
||||
},
|
||||
"udpPort" : {
|
||||
"type" : "integer",
|
||||
"description" : "UDP port to receive messages to transmit via"
|
||||
}
|
||||
},
|
||||
"description" : "AISMod"
|
||||
};
|
||||
defs.AISSettings = {
|
||||
"properties" : {
|
||||
"title" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"rgbColor" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"useReverseAPI" : {
|
||||
"type" : "integer",
|
||||
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
|
||||
},
|
||||
"reverseAPIAddress" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"reverseAPIPort" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIDeviceIndex" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIChannelIndex" : {
|
||||
"type" : "integer"
|
||||
}
|
||||
},
|
||||
"description" : "AIS settings"
|
||||
};
|
||||
defs.AMBEDevice = {
|
||||
"properties" : {
|
||||
@ -2532,6 +2802,9 @@ margin-bottom: 20px;
|
||||
"type" : "integer",
|
||||
"description" : "Optional for reverse API. This is the channel index from where the message comes from."
|
||||
},
|
||||
"AISModActions" : {
|
||||
"$ref" : "#/definitions/AISModActions"
|
||||
},
|
||||
"APTDemodActions" : {
|
||||
"$ref" : "#/definitions/APTDemodActions"
|
||||
},
|
||||
@ -2689,6 +2962,12 @@ margin-bottom: 20px;
|
||||
"ADSBDemodReport" : {
|
||||
"$ref" : "#/definitions/ADSBDemodReport"
|
||||
},
|
||||
"AISDemodReport" : {
|
||||
"$ref" : "#/definitions/AISDemodReport"
|
||||
},
|
||||
"AISModReport" : {
|
||||
"$ref" : "#/definitions/AISModReport"
|
||||
},
|
||||
"AMDemodReport" : {
|
||||
"$ref" : "#/definitions/AMDemodReport"
|
||||
},
|
||||
@ -2796,6 +3075,12 @@ margin-bottom: 20px;
|
||||
"ADSBDemodSettings" : {
|
||||
"$ref" : "#/definitions/ADSBDemodSettings"
|
||||
},
|
||||
"AISDemodSettings" : {
|
||||
"$ref" : "#/definitions/AISDemodSettings"
|
||||
},
|
||||
"AISModSettings" : {
|
||||
"$ref" : "#/definitions/AISModSettings"
|
||||
},
|
||||
"AMDemodSettings" : {
|
||||
"$ref" : "#/definitions/AMDemodSettings"
|
||||
},
|
||||
@ -4110,6 +4395,9 @@ margin-bottom: 20px;
|
||||
"fileInputSettings" : {
|
||||
"$ref" : "#/definitions/FileInputSettings"
|
||||
},
|
||||
"fileOutputSettings" : {
|
||||
"$ref" : "#/definitions/FileOutputSettings"
|
||||
},
|
||||
"hackRFInputSettings" : {
|
||||
"$ref" : "#/definitions/HackRFInputSettings"
|
||||
},
|
||||
@ -4539,6 +4827,9 @@ margin-bottom: 20px;
|
||||
"AFCSettings" : {
|
||||
"$ref" : "#/definitions/AFCSettings"
|
||||
},
|
||||
"AISSettings" : {
|
||||
"$ref" : "#/definitions/AISSettings"
|
||||
},
|
||||
"APRSSettings" : {
|
||||
"$ref" : "#/definitions/APRSSettings"
|
||||
},
|
||||
@ -4629,6 +4920,39 @@ margin-bottom: 20px;
|
||||
}
|
||||
},
|
||||
"description" : "FileInput"
|
||||
};
|
||||
defs.FileOutputSettings = {
|
||||
"properties" : {
|
||||
"fileName" : {
|
||||
"type" : "string",
|
||||
"description" : "The name (path) of the file being read"
|
||||
},
|
||||
"centerFrequency" : {
|
||||
"type" : "integer",
|
||||
"format" : "int64"
|
||||
},
|
||||
"sampleRate" : {
|
||||
"type" : "integer",
|
||||
"format" : "int64"
|
||||
},
|
||||
"log2Interp" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"useReverseAPI" : {
|
||||
"type" : "integer",
|
||||
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
|
||||
},
|
||||
"reverseAPIAddress" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"reverseAPIPort" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIDeviceIndex" : {
|
||||
"type" : "integer"
|
||||
}
|
||||
},
|
||||
"description" : "FileInput"
|
||||
};
|
||||
defs.FileSinkActions = {
|
||||
"properties" : {
|
||||
@ -7922,6 +8246,19 @@ margin-bottom: 20px;
|
||||
},
|
||||
"tx1AntennaPath" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"useReverseAPI" : {
|
||||
"type" : "integer",
|
||||
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
|
||||
},
|
||||
"reverseAPIAddress" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"reverseAPIPort" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIDeviceIndex" : {
|
||||
"type" : "integer"
|
||||
}
|
||||
},
|
||||
"description" : "PlutoSDR"
|
||||
@ -46268,7 +46605,7 @@ except ApiException as e:
|
||||
</div>
|
||||
<div id="generator">
|
||||
<div class="content">
|
||||
Generated 2021-04-29T21:19:02.297+02:00
|
||||
Generated 2021-05-18T01:26:07.311+02:00
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
18
sdrbase/resources/webapi/doc/swagger/include/AIS.yaml
Normal file
18
sdrbase/resources/webapi/doc/swagger/include/AIS.yaml
Normal file
@ -0,0 +1,18 @@
|
||||
AISSettings:
|
||||
description: "AIS settings"
|
||||
properties:
|
||||
title:
|
||||
type: string
|
||||
rgbColor:
|
||||
type: integer
|
||||
useReverseAPI:
|
||||
description: Synchronize with reverse API (1 for yes, 0 for no)
|
||||
type: integer
|
||||
reverseAPIAddress:
|
||||
type: string
|
||||
reverseAPIPort:
|
||||
type: integer
|
||||
reverseAPIDeviceIndex:
|
||||
type: integer
|
||||
reverseAPIChannelIndex:
|
||||
type: integer
|
55
sdrbase/resources/webapi/doc/swagger/include/AISDemod.yaml
Normal file
55
sdrbase/resources/webapi/doc/swagger/include/AISDemod.yaml
Normal file
@ -0,0 +1,55 @@
|
||||
AISDemodSettings:
|
||||
description: AISDemod
|
||||
properties:
|
||||
inputFrequencyOffset:
|
||||
type: integer
|
||||
format: int64
|
||||
rfBandwidth:
|
||||
type: number
|
||||
format: float
|
||||
fmDeviation:
|
||||
type: number
|
||||
format: float
|
||||
correlationThreshold:
|
||||
type: number
|
||||
format: float
|
||||
udpEnabled:
|
||||
description: "Whether to forward received messages to specified UDP port"
|
||||
type: integer
|
||||
udpAddress:
|
||||
description: "UDP address to forward received messages to"
|
||||
type: string
|
||||
udpPort:
|
||||
description: "UDP port to forward received messages to"
|
||||
type: integer
|
||||
udpFormat:
|
||||
description: "0 for binary, 1 for NMEA"
|
||||
type: integer
|
||||
rgbColor:
|
||||
type: integer
|
||||
title:
|
||||
type: string
|
||||
streamIndex:
|
||||
description: MIMO channel. Not relevant when connected to SI (single Rx).
|
||||
type: integer
|
||||
useReverseAPI:
|
||||
description: Synchronize with reverse API (1 for yes, 0 for no)
|
||||
type: integer
|
||||
reverseAPIAddress:
|
||||
type: string
|
||||
reverseAPIPort:
|
||||
type: integer
|
||||
reverseAPIDeviceIndex:
|
||||
type: integer
|
||||
reverseAPIChannelIndex:
|
||||
type: integer
|
||||
|
||||
AISDemodReport:
|
||||
description: AISDemod
|
||||
properties:
|
||||
channelPowerDB:
|
||||
description: power received in channel (dB)
|
||||
type: number
|
||||
format: float
|
||||
channelSampleRate:
|
||||
type: integer
|
125
sdrbase/resources/webapi/doc/swagger/include/AISMod.yaml
Normal file
125
sdrbase/resources/webapi/doc/swagger/include/AISMod.yaml
Normal file
@ -0,0 +1,125 @@
|
||||
AISModSettings:
|
||||
description: AISMod
|
||||
properties:
|
||||
inputFrequencyOffset:
|
||||
description: channel center frequency shift from baseband center in Hz
|
||||
type: integer
|
||||
format: int64
|
||||
baud:
|
||||
type: integer
|
||||
rfBandwidth:
|
||||
description: channel RF bandwidth in Hz
|
||||
type: number
|
||||
format: float
|
||||
fmDeviation:
|
||||
description: frequency deviation in Hz
|
||||
type: integer
|
||||
gain:
|
||||
type: number
|
||||
format: float
|
||||
channelMute:
|
||||
type: integer
|
||||
repeat:
|
||||
type: integer
|
||||
repeatDelay:
|
||||
type: number
|
||||
format: float
|
||||
repeatCount:
|
||||
type: integer
|
||||
rampUpBits:
|
||||
type: integer
|
||||
rampDownBits:
|
||||
type: integer
|
||||
rampRange:
|
||||
type: integer
|
||||
lpfTaps:
|
||||
type: integer
|
||||
rfNoise:
|
||||
type: integer
|
||||
description: >
|
||||
Boolean
|
||||
* 0 - off
|
||||
* 1 - on
|
||||
writeToFile:
|
||||
type: integer
|
||||
description: >
|
||||
Boolean
|
||||
* 0 - off
|
||||
* 1 - on
|
||||
spectrumRate:
|
||||
type: integer
|
||||
msgId:
|
||||
type: integer
|
||||
mmsi:
|
||||
type: string
|
||||
status:
|
||||
type: integer
|
||||
latitude:
|
||||
type: number
|
||||
format: float
|
||||
longitude:
|
||||
type: number
|
||||
format: float
|
||||
course:
|
||||
type: number
|
||||
format: float
|
||||
speed:
|
||||
type: number
|
||||
format: float
|
||||
heading:
|
||||
type: integer
|
||||
data:
|
||||
type: string
|
||||
bt:
|
||||
type: number
|
||||
format: float
|
||||
symbolSpan:
|
||||
type: integer
|
||||
rgbColor:
|
||||
type: integer
|
||||
title:
|
||||
type: string
|
||||
streamIndex:
|
||||
description: MIMO channel. Not relevant when connected to SI (single Rx).
|
||||
type: integer
|
||||
useReverseAPI:
|
||||
description: Synchronize with reverse API (1 for yes, 0 for no)
|
||||
type: integer
|
||||
reverseAPIAddress:
|
||||
type: string
|
||||
reverseAPIPort:
|
||||
type: integer
|
||||
reverseAPIDeviceIndex:
|
||||
type: integer
|
||||
reverseAPIChannelIndex:
|
||||
type: integer
|
||||
udpEnabled:
|
||||
description: "Whether to receive messages to transmit on specified UDP port"
|
||||
type: integer
|
||||
udpAddress:
|
||||
description: "UDP address to receive messages to transmit via"
|
||||
type: string
|
||||
udpPort:
|
||||
description: "UDP port to receive messages to transmit via"
|
||||
type: integer
|
||||
|
||||
AISModReport:
|
||||
description: AISMod
|
||||
properties:
|
||||
channelPowerDB:
|
||||
description: power transmitted in channel (dB)
|
||||
type: number
|
||||
format: float
|
||||
channelSampleRate:
|
||||
type: integer
|
||||
|
||||
AISModActions:
|
||||
description: AISMod
|
||||
properties:
|
||||
tx:
|
||||
type: object
|
||||
properties:
|
||||
data:
|
||||
type: string
|
||||
description: >
|
||||
Transmit a message
|
@ -17,6 +17,8 @@ ChannelActions:
|
||||
originatorChannelIndex:
|
||||
description: Optional for reverse API. This is the channel index from where the message comes from.
|
||||
type: integer
|
||||
AISModActions:
|
||||
$ref: "/doc/swagger/include/AISMod.yaml#/AISModActions"
|
||||
APTDemodActions:
|
||||
$ref: "/doc/swagger/include/APTDemod.yaml#/APTDemodActions"
|
||||
FileSinkActions:
|
||||
|
@ -13,6 +13,10 @@ ChannelReport:
|
||||
type: integer
|
||||
ADSBDemodReport:
|
||||
$ref: "/doc/swagger/include/ADSBDemod.yaml#/ADSBDemodReport"
|
||||
AISDemodReport:
|
||||
$ref: "/doc/swagger/include/AISDemod.yaml#/AISDemodReport"
|
||||
AISModReport:
|
||||
$ref: "/doc/swagger/include/AISMod.yaml#/AISModReport"
|
||||
AMDemodReport:
|
||||
$ref: "/doc/swagger/include/AMDemod.yaml#/AMDemodReport"
|
||||
AMModReport:
|
||||
|
@ -19,6 +19,10 @@ ChannelSettings:
|
||||
type: integer
|
||||
ADSBDemodSettings:
|
||||
$ref: "/doc/swagger/include/ADSBDemod.yaml#/ADSBDemodSettings"
|
||||
AISDemodSettings:
|
||||
$ref: "/doc/swagger/include/AISDemod.yaml#/AISDemodSettings"
|
||||
AISModSettings:
|
||||
$ref: "/doc/swagger/include/AISMod.yaml#/AISModSettings"
|
||||
AMDemodSettings:
|
||||
$ref: "/doc/swagger/include/AMDemod.yaml#/AMDemodSettings"
|
||||
AMModSettings:
|
||||
|
@ -38,6 +38,8 @@ DeviceSettings:
|
||||
$ref: "/doc/swagger/include/FCDProPlus.yaml#/FCDProPlusSettings"
|
||||
fileInputSettings:
|
||||
$ref: "/doc/swagger/include/FileInput.yaml#/FileInputSettings"
|
||||
fileOutputSettings:
|
||||
$ref: "/doc/swagger/include/FileOutput.yaml#/FileOutputSettings"
|
||||
hackRFInputSettings:
|
||||
$ref: "/doc/swagger/include/HackRF.yaml#/HackRFInputSettings"
|
||||
hackRFOutputSettings:
|
||||
|
@ -15,6 +15,8 @@ FeatureSettings:
|
||||
type: integer
|
||||
AFCSettings:
|
||||
$ref: "/doc/swagger/include/AFC.yaml#/AFCSettings"
|
||||
AISSettings:
|
||||
$ref: "/doc/swagger/include/AIS.yaml#/AISSettings"
|
||||
APRSSettings:
|
||||
$ref: "/doc/swagger/include/APRS.yaml#/APRSSettings"
|
||||
DemodAnalyzerSettings:
|
||||
|
23
sdrbase/resources/webapi/doc/swagger/include/FileOutput.yaml
Normal file
23
sdrbase/resources/webapi/doc/swagger/include/FileOutput.yaml
Normal file
@ -0,0 +1,23 @@
|
||||
FileOutputSettings:
|
||||
description: FileInput
|
||||
properties:
|
||||
fileName:
|
||||
description: The name (path) of the file being read
|
||||
type: string
|
||||
centerFrequency:
|
||||
type: integer
|
||||
format: int64
|
||||
sampleRate:
|
||||
type: integer
|
||||
format: int64
|
||||
log2Interp:
|
||||
type: integer
|
||||
useReverseAPI:
|
||||
description: Synchronize with reverse API (1 for yes, 0 for no)
|
||||
type: integer
|
||||
reverseAPIAddress:
|
||||
type: string
|
||||
reverseAPIPort:
|
||||
type: integer
|
||||
reverseAPIDeviceIndex:
|
||||
type: integer
|
@ -4195,6 +4195,11 @@ bool WebAPIRequestMapper::getDeviceSettings(
|
||||
deviceSettings->setFileInputSettings(new SWGSDRangel::SWGFileInputSettings());
|
||||
deviceSettings->getFileInputSettings()->fromJsonObject(settingsJsonObject);
|
||||
}
|
||||
else if (deviceSettingsKey == "fileOutputSettings")
|
||||
{
|
||||
deviceSettings->setFileOutputSettings(new SWGSDRangel::SWGFileOutputSettings());
|
||||
deviceSettings->getFileOutputSettings()->fromJsonObject(settingsJsonObject);
|
||||
}
|
||||
else if (deviceSettingsKey == "hackRFInputSettings")
|
||||
{
|
||||
deviceSettings->setHackRfInputSettings(new SWGSDRangel::SWGHackRFInputSettings());
|
||||
@ -4565,6 +4570,7 @@ void WebAPIRequestMapper::resetDeviceSettings(SWGSDRangel::SWGDeviceSettings& de
|
||||
deviceSettings.setFcdProPlusSettings(nullptr);
|
||||
deviceSettings.setFcdProSettings(nullptr);
|
||||
deviceSettings.setFileInputSettings(nullptr);
|
||||
deviceSettings.setFileOutputSettings(nullptr);
|
||||
deviceSettings.setHackRfInputSettings(nullptr);
|
||||
deviceSettings.setHackRfOutputSettings(nullptr);
|
||||
deviceSettings.setLimeSdrInputSettings(nullptr);
|
||||
|
@ -229,6 +229,7 @@ const QMap<QString, QString> WebAPIUtils::m_sinkDeviceHwIdToSettingsKey = {
|
||||
{"AudioOutput", "audioOutputSettings"},
|
||||
{"BladeRF1", "bladeRF1OutputSettings"},
|
||||
{"BladeRF2", "bladeRF2OutputSettings"},
|
||||
{"FileOutput", "fileOutputSettings"},
|
||||
{"HackRF", "hackRFOutputSettings"},
|
||||
{"LimeSDR", "limeSdrOutputSettings"},
|
||||
{"LocalOutput", "localOutputSettings"},
|
||||
|
@ -38,6 +38,8 @@ DeviceSettings:
|
||||
$ref: "http://swgserver:8081/api/swagger/include/FCDProPlus.yaml#/FCDProPlusSettings"
|
||||
fileInputSettings:
|
||||
$ref: "http://swgserver:8081/api/swagger/include/FileInput.yaml#/FileInputSettings"
|
||||
fileOutputSettings:
|
||||
$ref: "http://swgserver:8081/api/swagger/include/FileOutput.yaml#/FileOutputSettings"
|
||||
hackRFInputSettings:
|
||||
$ref: "http://swgserver:8081/api/swagger/include/HackRF.yaml#/HackRFInputSettings"
|
||||
hackRFOutputSettings:
|
||||
|
23
swagger/sdrangel/api/swagger/include/FileOutput.yaml
Normal file
23
swagger/sdrangel/api/swagger/include/FileOutput.yaml
Normal file
@ -0,0 +1,23 @@
|
||||
FileOutputSettings:
|
||||
description: FileInput
|
||||
properties:
|
||||
fileName:
|
||||
description: The name (path) of the file being read
|
||||
type: string
|
||||
centerFrequency:
|
||||
type: integer
|
||||
format: int64
|
||||
sampleRate:
|
||||
type: integer
|
||||
format: int64
|
||||
log2Interp:
|
||||
type: integer
|
||||
useReverseAPI:
|
||||
description: Synchronize with reverse API (1 for yes, 0 for no)
|
||||
type: integer
|
||||
reverseAPIAddress:
|
||||
type: string
|
||||
reverseAPIPort:
|
||||
type: integer
|
||||
reverseAPIDeviceIndex:
|
||||
type: integer
|
@ -861,6 +861,276 @@ margin-bottom: 20px;
|
||||
}
|
||||
},
|
||||
"description" : "AFC settings"
|
||||
};
|
||||
defs.AISDemodReport = {
|
||||
"properties" : {
|
||||
"channelPowerDB" : {
|
||||
"type" : "number",
|
||||
"format" : "float",
|
||||
"description" : "power received in channel (dB)"
|
||||
},
|
||||
"channelSampleRate" : {
|
||||
"type" : "integer"
|
||||
}
|
||||
},
|
||||
"description" : "AISDemod"
|
||||
};
|
||||
defs.AISDemodSettings = {
|
||||
"properties" : {
|
||||
"inputFrequencyOffset" : {
|
||||
"type" : "integer",
|
||||
"format" : "int64"
|
||||
},
|
||||
"rfBandwidth" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"fmDeviation" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"correlationThreshold" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"udpEnabled" : {
|
||||
"type" : "integer",
|
||||
"description" : "Whether to forward received messages to specified UDP port"
|
||||
},
|
||||
"udpAddress" : {
|
||||
"type" : "string",
|
||||
"description" : "UDP address to forward received messages to"
|
||||
},
|
||||
"udpPort" : {
|
||||
"type" : "integer",
|
||||
"description" : "UDP port to forward received messages to"
|
||||
},
|
||||
"udpFormat" : {
|
||||
"type" : "integer",
|
||||
"description" : "0 for binary, 1 for NMEA"
|
||||
},
|
||||
"rgbColor" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"title" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"streamIndex" : {
|
||||
"type" : "integer",
|
||||
"description" : "MIMO channel. Not relevant when connected to SI (single Rx)."
|
||||
},
|
||||
"useReverseAPI" : {
|
||||
"type" : "integer",
|
||||
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
|
||||
},
|
||||
"reverseAPIAddress" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"reverseAPIPort" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIDeviceIndex" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIChannelIndex" : {
|
||||
"type" : "integer"
|
||||
}
|
||||
},
|
||||
"description" : "AISDemod"
|
||||
};
|
||||
defs.AISModActions = {
|
||||
"properties" : {
|
||||
"tx" : {
|
||||
"$ref" : "#/definitions/AISModActions_tx"
|
||||
}
|
||||
},
|
||||
"description" : "AISMod"
|
||||
};
|
||||
defs.AISModActions_tx = {
|
||||
"properties" : {
|
||||
"data" : {
|
||||
"type" : "string"
|
||||
}
|
||||
},
|
||||
"description" : "Transmit a message\n"
|
||||
};
|
||||
defs.AISModReport = {
|
||||
"properties" : {
|
||||
"channelPowerDB" : {
|
||||
"type" : "number",
|
||||
"format" : "float",
|
||||
"description" : "power transmitted in channel (dB)"
|
||||
},
|
||||
"channelSampleRate" : {
|
||||
"type" : "integer"
|
||||
}
|
||||
},
|
||||
"description" : "AISMod"
|
||||
};
|
||||
defs.AISModSettings = {
|
||||
"properties" : {
|
||||
"inputFrequencyOffset" : {
|
||||
"type" : "integer",
|
||||
"format" : "int64",
|
||||
"description" : "channel center frequency shift from baseband center in Hz"
|
||||
},
|
||||
"baud" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"rfBandwidth" : {
|
||||
"type" : "number",
|
||||
"format" : "float",
|
||||
"description" : "channel RF bandwidth in Hz"
|
||||
},
|
||||
"fmDeviation" : {
|
||||
"type" : "integer",
|
||||
"description" : "frequency deviation in Hz"
|
||||
},
|
||||
"gain" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"channelMute" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"repeat" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"repeatDelay" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"repeatCount" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"rampUpBits" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"rampDownBits" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"rampRange" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"lpfTaps" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"rfNoise" : {
|
||||
"type" : "integer",
|
||||
"description" : "Boolean\n * 0 - off\n * 1 - on\n"
|
||||
},
|
||||
"writeToFile" : {
|
||||
"type" : "integer",
|
||||
"description" : "Boolean\n * 0 - off\n * 1 - on\n"
|
||||
},
|
||||
"spectrumRate" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"msgId" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"mmsi" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"status" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"latitude" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"longitude" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"course" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"speed" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"heading" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"data" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"bt" : {
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"symbolSpan" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"rgbColor" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"title" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"streamIndex" : {
|
||||
"type" : "integer",
|
||||
"description" : "MIMO channel. Not relevant when connected to SI (single Rx)."
|
||||
},
|
||||
"useReverseAPI" : {
|
||||
"type" : "integer",
|
||||
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
|
||||
},
|
||||
"reverseAPIAddress" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"reverseAPIPort" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIDeviceIndex" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIChannelIndex" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"udpEnabled" : {
|
||||
"type" : "integer",
|
||||
"description" : "Whether to receive messages to transmit on specified UDP port"
|
||||
},
|
||||
"udpAddress" : {
|
||||
"type" : "string",
|
||||
"description" : "UDP address to receive messages to transmit via"
|
||||
},
|
||||
"udpPort" : {
|
||||
"type" : "integer",
|
||||
"description" : "UDP port to receive messages to transmit via"
|
||||
}
|
||||
},
|
||||
"description" : "AISMod"
|
||||
};
|
||||
defs.AISSettings = {
|
||||
"properties" : {
|
||||
"title" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"rgbColor" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"useReverseAPI" : {
|
||||
"type" : "integer",
|
||||
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
|
||||
},
|
||||
"reverseAPIAddress" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"reverseAPIPort" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIDeviceIndex" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIChannelIndex" : {
|
||||
"type" : "integer"
|
||||
}
|
||||
},
|
||||
"description" : "AIS settings"
|
||||
};
|
||||
defs.AMBEDevice = {
|
||||
"properties" : {
|
||||
@ -2532,6 +2802,9 @@ margin-bottom: 20px;
|
||||
"type" : "integer",
|
||||
"description" : "Optional for reverse API. This is the channel index from where the message comes from."
|
||||
},
|
||||
"AISModActions" : {
|
||||
"$ref" : "#/definitions/AISModActions"
|
||||
},
|
||||
"APTDemodActions" : {
|
||||
"$ref" : "#/definitions/APTDemodActions"
|
||||
},
|
||||
@ -2689,6 +2962,12 @@ margin-bottom: 20px;
|
||||
"ADSBDemodReport" : {
|
||||
"$ref" : "#/definitions/ADSBDemodReport"
|
||||
},
|
||||
"AISDemodReport" : {
|
||||
"$ref" : "#/definitions/AISDemodReport"
|
||||
},
|
||||
"AISModReport" : {
|
||||
"$ref" : "#/definitions/AISModReport"
|
||||
},
|
||||
"AMDemodReport" : {
|
||||
"$ref" : "#/definitions/AMDemodReport"
|
||||
},
|
||||
@ -2796,6 +3075,12 @@ margin-bottom: 20px;
|
||||
"ADSBDemodSettings" : {
|
||||
"$ref" : "#/definitions/ADSBDemodSettings"
|
||||
},
|
||||
"AISDemodSettings" : {
|
||||
"$ref" : "#/definitions/AISDemodSettings"
|
||||
},
|
||||
"AISModSettings" : {
|
||||
"$ref" : "#/definitions/AISModSettings"
|
||||
},
|
||||
"AMDemodSettings" : {
|
||||
"$ref" : "#/definitions/AMDemodSettings"
|
||||
},
|
||||
@ -4110,6 +4395,9 @@ margin-bottom: 20px;
|
||||
"fileInputSettings" : {
|
||||
"$ref" : "#/definitions/FileInputSettings"
|
||||
},
|
||||
"fileOutputSettings" : {
|
||||
"$ref" : "#/definitions/FileOutputSettings"
|
||||
},
|
||||
"hackRFInputSettings" : {
|
||||
"$ref" : "#/definitions/HackRFInputSettings"
|
||||
},
|
||||
@ -4539,6 +4827,9 @@ margin-bottom: 20px;
|
||||
"AFCSettings" : {
|
||||
"$ref" : "#/definitions/AFCSettings"
|
||||
},
|
||||
"AISSettings" : {
|
||||
"$ref" : "#/definitions/AISSettings"
|
||||
},
|
||||
"APRSSettings" : {
|
||||
"$ref" : "#/definitions/APRSSettings"
|
||||
},
|
||||
@ -4629,6 +4920,39 @@ margin-bottom: 20px;
|
||||
}
|
||||
},
|
||||
"description" : "FileInput"
|
||||
};
|
||||
defs.FileOutputSettings = {
|
||||
"properties" : {
|
||||
"fileName" : {
|
||||
"type" : "string",
|
||||
"description" : "The name (path) of the file being read"
|
||||
},
|
||||
"centerFrequency" : {
|
||||
"type" : "integer",
|
||||
"format" : "int64"
|
||||
},
|
||||
"sampleRate" : {
|
||||
"type" : "integer",
|
||||
"format" : "int64"
|
||||
},
|
||||
"log2Interp" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"useReverseAPI" : {
|
||||
"type" : "integer",
|
||||
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
|
||||
},
|
||||
"reverseAPIAddress" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"reverseAPIPort" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIDeviceIndex" : {
|
||||
"type" : "integer"
|
||||
}
|
||||
},
|
||||
"description" : "FileInput"
|
||||
};
|
||||
defs.FileSinkActions = {
|
||||
"properties" : {
|
||||
@ -7922,6 +8246,19 @@ margin-bottom: 20px;
|
||||
},
|
||||
"tx1AntennaPath" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"useReverseAPI" : {
|
||||
"type" : "integer",
|
||||
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
|
||||
},
|
||||
"reverseAPIAddress" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"reverseAPIPort" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"reverseAPIDeviceIndex" : {
|
||||
"type" : "integer"
|
||||
}
|
||||
},
|
||||
"description" : "PlutoSDR"
|
||||
@ -46268,7 +46605,7 @@ except ApiException as e:
|
||||
</div>
|
||||
<div id="generator">
|
||||
<div class="content">
|
||||
Generated 2021-04-29T21:19:02.297+02:00
|
||||
Generated 2021-05-18T01:26:07.311+02:00
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -58,6 +58,8 @@ SWGDeviceSettings::SWGDeviceSettings() {
|
||||
m_fcd_pro_plus_settings_isSet = false;
|
||||
file_input_settings = nullptr;
|
||||
m_file_input_settings_isSet = false;
|
||||
file_output_settings = nullptr;
|
||||
m_file_output_settings_isSet = false;
|
||||
hack_rf_input_settings = nullptr;
|
||||
m_hack_rf_input_settings_isSet = false;
|
||||
hack_rf_output_settings = nullptr;
|
||||
@ -154,6 +156,8 @@ SWGDeviceSettings::init() {
|
||||
m_fcd_pro_plus_settings_isSet = false;
|
||||
file_input_settings = new SWGFileInputSettings();
|
||||
m_file_input_settings_isSet = false;
|
||||
file_output_settings = new SWGFileOutputSettings();
|
||||
m_file_output_settings_isSet = false;
|
||||
hack_rf_input_settings = new SWGHackRFInputSettings();
|
||||
m_hack_rf_input_settings_isSet = false;
|
||||
hack_rf_output_settings = new SWGHackRFOutputSettings();
|
||||
@ -257,6 +261,9 @@ SWGDeviceSettings::cleanup() {
|
||||
if(file_input_settings != nullptr) {
|
||||
delete file_input_settings;
|
||||
}
|
||||
if(file_output_settings != nullptr) {
|
||||
delete file_output_settings;
|
||||
}
|
||||
if(hack_rf_input_settings != nullptr) {
|
||||
delete hack_rf_input_settings;
|
||||
}
|
||||
@ -387,6 +394,8 @@ SWGDeviceSettings::fromJsonObject(QJsonObject &pJson) {
|
||||
|
||||
::SWGSDRangel::setValue(&file_input_settings, pJson["fileInputSettings"], "SWGFileInputSettings", "SWGFileInputSettings");
|
||||
|
||||
::SWGSDRangel::setValue(&file_output_settings, pJson["fileOutputSettings"], "SWGFileOutputSettings", "SWGFileOutputSettings");
|
||||
|
||||
::SWGSDRangel::setValue(&hack_rf_input_settings, pJson["hackRFInputSettings"], "SWGHackRFInputSettings", "SWGHackRFInputSettings");
|
||||
|
||||
::SWGSDRangel::setValue(&hack_rf_output_settings, pJson["hackRFOutputSettings"], "SWGHackRFOutputSettings", "SWGHackRFOutputSettings");
|
||||
@ -506,6 +515,9 @@ SWGDeviceSettings::asJsonObject() {
|
||||
if((file_input_settings != nullptr) && (file_input_settings->isSet())){
|
||||
toJsonValue(QString("fileInputSettings"), file_input_settings, obj, QString("SWGFileInputSettings"));
|
||||
}
|
||||
if((file_output_settings != nullptr) && (file_output_settings->isSet())){
|
||||
toJsonValue(QString("fileOutputSettings"), file_output_settings, obj, QString("SWGFileOutputSettings"));
|
||||
}
|
||||
if((hack_rf_input_settings != nullptr) && (hack_rf_input_settings->isSet())){
|
||||
toJsonValue(QString("hackRFInputSettings"), hack_rf_input_settings, obj, QString("SWGHackRFInputSettings"));
|
||||
}
|
||||
@ -747,6 +759,16 @@ SWGDeviceSettings::setFileInputSettings(SWGFileInputSettings* file_input_setting
|
||||
this->m_file_input_settings_isSet = true;
|
||||
}
|
||||
|
||||
SWGFileOutputSettings*
|
||||
SWGDeviceSettings::getFileOutputSettings() {
|
||||
return file_output_settings;
|
||||
}
|
||||
void
|
||||
SWGDeviceSettings::setFileOutputSettings(SWGFileOutputSettings* file_output_settings) {
|
||||
this->file_output_settings = file_output_settings;
|
||||
this->m_file_output_settings_isSet = true;
|
||||
}
|
||||
|
||||
SWGHackRFInputSettings*
|
||||
SWGDeviceSettings::getHackRfInputSettings() {
|
||||
return hack_rf_input_settings;
|
||||
@ -1087,6 +1109,9 @@ SWGDeviceSettings::isSet(){
|
||||
if(file_input_settings && file_input_settings->isSet()){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
if(file_output_settings && file_output_settings->isSet()){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
if(hack_rf_input_settings && hack_rf_input_settings->isSet()){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "SWGFCDProPlusSettings.h"
|
||||
#include "SWGFCDProSettings.h"
|
||||
#include "SWGFileInputSettings.h"
|
||||
#include "SWGFileOutputSettings.h"
|
||||
#include "SWGHackRFInputSettings.h"
|
||||
#include "SWGHackRFOutputSettings.h"
|
||||
#include "SWGKiwiSDRSettings.h"
|
||||
@ -128,6 +129,9 @@ public:
|
||||
SWGFileInputSettings* getFileInputSettings();
|
||||
void setFileInputSettings(SWGFileInputSettings* file_input_settings);
|
||||
|
||||
SWGFileOutputSettings* getFileOutputSettings();
|
||||
void setFileOutputSettings(SWGFileOutputSettings* file_output_settings);
|
||||
|
||||
SWGHackRFInputSettings* getHackRfInputSettings();
|
||||
void setHackRfInputSettings(SWGHackRFInputSettings* hack_rf_input_settings);
|
||||
|
||||
@ -264,6 +268,9 @@ private:
|
||||
SWGFileInputSettings* file_input_settings;
|
||||
bool m_file_input_settings_isSet;
|
||||
|
||||
SWGFileOutputSettings* file_output_settings;
|
||||
bool m_file_output_settings_isSet;
|
||||
|
||||
SWGHackRFInputSettings* hack_rf_input_settings;
|
||||
bool m_hack_rf_input_settings_isSet;
|
||||
|
||||
|
273
swagger/sdrangel/code/qt5/client/SWGFileOutputSettings.cpp
Normal file
273
swagger/sdrangel/code/qt5/client/SWGFileOutputSettings.cpp
Normal file
@ -0,0 +1,273 @@
|
||||
/**
|
||||
* SDRangel
|
||||
* This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time ---
|
||||
*
|
||||
* OpenAPI spec version: 6.0.0
|
||||
* Contact: f4exb06@gmail.com
|
||||
*
|
||||
* NOTE: This class is auto generated by the swagger code generator program.
|
||||
* https://github.com/swagger-api/swagger-codegen.git
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
|
||||
#include "SWGFileOutputSettings.h"
|
||||
|
||||
#include "SWGHelpers.h"
|
||||
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonArray>
|
||||
#include <QObject>
|
||||
#include <QDebug>
|
||||
|
||||
namespace SWGSDRangel {
|
||||
|
||||
SWGFileOutputSettings::SWGFileOutputSettings(QString* json) {
|
||||
init();
|
||||
this->fromJson(*json);
|
||||
}
|
||||
|
||||
SWGFileOutputSettings::SWGFileOutputSettings() {
|
||||
file_name = nullptr;
|
||||
m_file_name_isSet = false;
|
||||
center_frequency = 0L;
|
||||
m_center_frequency_isSet = false;
|
||||
sample_rate = 0L;
|
||||
m_sample_rate_isSet = false;
|
||||
log2_interp = 0;
|
||||
m_log2_interp_isSet = false;
|
||||
use_reverse_api = 0;
|
||||
m_use_reverse_api_isSet = false;
|
||||
reverse_api_address = nullptr;
|
||||
m_reverse_api_address_isSet = false;
|
||||
reverse_api_port = 0;
|
||||
m_reverse_api_port_isSet = false;
|
||||
reverse_api_device_index = 0;
|
||||
m_reverse_api_device_index_isSet = false;
|
||||
}
|
||||
|
||||
SWGFileOutputSettings::~SWGFileOutputSettings() {
|
||||
this->cleanup();
|
||||
}
|
||||
|
||||
void
|
||||
SWGFileOutputSettings::init() {
|
||||
file_name = new QString("");
|
||||
m_file_name_isSet = false;
|
||||
center_frequency = 0L;
|
||||
m_center_frequency_isSet = false;
|
||||
sample_rate = 0L;
|
||||
m_sample_rate_isSet = false;
|
||||
log2_interp = 0;
|
||||
m_log2_interp_isSet = false;
|
||||
use_reverse_api = 0;
|
||||
m_use_reverse_api_isSet = false;
|
||||
reverse_api_address = new QString("");
|
||||
m_reverse_api_address_isSet = false;
|
||||
reverse_api_port = 0;
|
||||
m_reverse_api_port_isSet = false;
|
||||
reverse_api_device_index = 0;
|
||||
m_reverse_api_device_index_isSet = false;
|
||||
}
|
||||
|
||||
void
|
||||
SWGFileOutputSettings::cleanup() {
|
||||
if(file_name != nullptr) {
|
||||
delete file_name;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if(reverse_api_address != nullptr) {
|
||||
delete reverse_api_address;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
SWGFileOutputSettings*
|
||||
SWGFileOutputSettings::fromJson(QString &json) {
|
||||
QByteArray array (json.toStdString().c_str());
|
||||
QJsonDocument doc = QJsonDocument::fromJson(array);
|
||||
QJsonObject jsonObject = doc.object();
|
||||
this->fromJsonObject(jsonObject);
|
||||
return this;
|
||||
}
|
||||
|
||||
void
|
||||
SWGFileOutputSettings::fromJsonObject(QJsonObject &pJson) {
|
||||
::SWGSDRangel::setValue(&file_name, pJson["fileName"], "QString", "QString");
|
||||
|
||||
::SWGSDRangel::setValue(¢er_frequency, pJson["centerFrequency"], "qint64", "");
|
||||
|
||||
::SWGSDRangel::setValue(&sample_rate, pJson["sampleRate"], "qint64", "");
|
||||
|
||||
::SWGSDRangel::setValue(&log2_interp, pJson["log2Interp"], "qint32", "");
|
||||
|
||||
::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", "");
|
||||
|
||||
::SWGSDRangel::setValue(&reverse_api_address, pJson["reverseAPIAddress"], "QString", "QString");
|
||||
|
||||
::SWGSDRangel::setValue(&reverse_api_port, pJson["reverseAPIPort"], "qint32", "");
|
||||
|
||||
::SWGSDRangel::setValue(&reverse_api_device_index, pJson["reverseAPIDeviceIndex"], "qint32", "");
|
||||
|
||||
}
|
||||
|
||||
QString
|
||||
SWGFileOutputSettings::asJson ()
|
||||
{
|
||||
QJsonObject* obj = this->asJsonObject();
|
||||
|
||||
QJsonDocument doc(*obj);
|
||||
QByteArray bytes = doc.toJson();
|
||||
delete obj;
|
||||
return QString(bytes);
|
||||
}
|
||||
|
||||
QJsonObject*
|
||||
SWGFileOutputSettings::asJsonObject() {
|
||||
QJsonObject* obj = new QJsonObject();
|
||||
if(file_name != nullptr && *file_name != QString("")){
|
||||
toJsonValue(QString("fileName"), file_name, obj, QString("QString"));
|
||||
}
|
||||
if(m_center_frequency_isSet){
|
||||
obj->insert("centerFrequency", QJsonValue(center_frequency));
|
||||
}
|
||||
if(m_sample_rate_isSet){
|
||||
obj->insert("sampleRate", QJsonValue(sample_rate));
|
||||
}
|
||||
if(m_log2_interp_isSet){
|
||||
obj->insert("log2Interp", QJsonValue(log2_interp));
|
||||
}
|
||||
if(m_use_reverse_api_isSet){
|
||||
obj->insert("useReverseAPI", QJsonValue(use_reverse_api));
|
||||
}
|
||||
if(reverse_api_address != nullptr && *reverse_api_address != QString("")){
|
||||
toJsonValue(QString("reverseAPIAddress"), reverse_api_address, obj, QString("QString"));
|
||||
}
|
||||
if(m_reverse_api_port_isSet){
|
||||
obj->insert("reverseAPIPort", QJsonValue(reverse_api_port));
|
||||
}
|
||||
if(m_reverse_api_device_index_isSet){
|
||||
obj->insert("reverseAPIDeviceIndex", QJsonValue(reverse_api_device_index));
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
QString*
|
||||
SWGFileOutputSettings::getFileName() {
|
||||
return file_name;
|
||||
}
|
||||
void
|
||||
SWGFileOutputSettings::setFileName(QString* file_name) {
|
||||
this->file_name = file_name;
|
||||
this->m_file_name_isSet = true;
|
||||
}
|
||||
|
||||
qint64
|
||||
SWGFileOutputSettings::getCenterFrequency() {
|
||||
return center_frequency;
|
||||
}
|
||||
void
|
||||
SWGFileOutputSettings::setCenterFrequency(qint64 center_frequency) {
|
||||
this->center_frequency = center_frequency;
|
||||
this->m_center_frequency_isSet = true;
|
||||
}
|
||||
|
||||
qint64
|
||||
SWGFileOutputSettings::getSampleRate() {
|
||||
return sample_rate;
|
||||
}
|
||||
void
|
||||
SWGFileOutputSettings::setSampleRate(qint64 sample_rate) {
|
||||
this->sample_rate = sample_rate;
|
||||
this->m_sample_rate_isSet = true;
|
||||
}
|
||||
|
||||
qint32
|
||||
SWGFileOutputSettings::getLog2Interp() {
|
||||
return log2_interp;
|
||||
}
|
||||
void
|
||||
SWGFileOutputSettings::setLog2Interp(qint32 log2_interp) {
|
||||
this->log2_interp = log2_interp;
|
||||
this->m_log2_interp_isSet = true;
|
||||
}
|
||||
|
||||
qint32
|
||||
SWGFileOutputSettings::getUseReverseApi() {
|
||||
return use_reverse_api;
|
||||
}
|
||||
void
|
||||
SWGFileOutputSettings::setUseReverseApi(qint32 use_reverse_api) {
|
||||
this->use_reverse_api = use_reverse_api;
|
||||
this->m_use_reverse_api_isSet = true;
|
||||
}
|
||||
|
||||
QString*
|
||||
SWGFileOutputSettings::getReverseApiAddress() {
|
||||
return reverse_api_address;
|
||||
}
|
||||
void
|
||||
SWGFileOutputSettings::setReverseApiAddress(QString* reverse_api_address) {
|
||||
this->reverse_api_address = reverse_api_address;
|
||||
this->m_reverse_api_address_isSet = true;
|
||||
}
|
||||
|
||||
qint32
|
||||
SWGFileOutputSettings::getReverseApiPort() {
|
||||
return reverse_api_port;
|
||||
}
|
||||
void
|
||||
SWGFileOutputSettings::setReverseApiPort(qint32 reverse_api_port) {
|
||||
this->reverse_api_port = reverse_api_port;
|
||||
this->m_reverse_api_port_isSet = true;
|
||||
}
|
||||
|
||||
qint32
|
||||
SWGFileOutputSettings::getReverseApiDeviceIndex() {
|
||||
return reverse_api_device_index;
|
||||
}
|
||||
void
|
||||
SWGFileOutputSettings::setReverseApiDeviceIndex(qint32 reverse_api_device_index) {
|
||||
this->reverse_api_device_index = reverse_api_device_index;
|
||||
this->m_reverse_api_device_index_isSet = true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
SWGFileOutputSettings::isSet(){
|
||||
bool isObjectUpdated = false;
|
||||
do{
|
||||
if(file_name && *file_name != QString("")){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
if(m_center_frequency_isSet){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
if(m_sample_rate_isSet){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
if(m_log2_interp_isSet){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
if(m_use_reverse_api_isSet){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
if(reverse_api_address && *reverse_api_address != QString("")){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
if(m_reverse_api_port_isSet){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
if(m_reverse_api_device_index_isSet){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
}while(false);
|
||||
return isObjectUpdated;
|
||||
}
|
||||
}
|
||||
|
101
swagger/sdrangel/code/qt5/client/SWGFileOutputSettings.h
Normal file
101
swagger/sdrangel/code/qt5/client/SWGFileOutputSettings.h
Normal file
@ -0,0 +1,101 @@
|
||||
/**
|
||||
* SDRangel
|
||||
* This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time ---
|
||||
*
|
||||
* OpenAPI spec version: 6.0.0
|
||||
* Contact: f4exb06@gmail.com
|
||||
*
|
||||
* NOTE: This class is auto generated by the swagger code generator program.
|
||||
* https://github.com/swagger-api/swagger-codegen.git
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SWGFileOutputSettings.h
|
||||
*
|
||||
* FileInput
|
||||
*/
|
||||
|
||||
#ifndef SWGFileOutputSettings_H_
|
||||
#define SWGFileOutputSettings_H_
|
||||
|
||||
#include <QJsonObject>
|
||||
|
||||
|
||||
#include <QString>
|
||||
|
||||
#include "SWGObject.h"
|
||||
#include "export.h"
|
||||
|
||||
namespace SWGSDRangel {
|
||||
|
||||
class SWG_API SWGFileOutputSettings: public SWGObject {
|
||||
public:
|
||||
SWGFileOutputSettings();
|
||||
SWGFileOutputSettings(QString* json);
|
||||
virtual ~SWGFileOutputSettings();
|
||||
void init();
|
||||
void cleanup();
|
||||
|
||||
virtual QString asJson () override;
|
||||
virtual QJsonObject* asJsonObject() override;
|
||||
virtual void fromJsonObject(QJsonObject &json) override;
|
||||
virtual SWGFileOutputSettings* fromJson(QString &jsonString) override;
|
||||
|
||||
QString* getFileName();
|
||||
void setFileName(QString* file_name);
|
||||
|
||||
qint64 getCenterFrequency();
|
||||
void setCenterFrequency(qint64 center_frequency);
|
||||
|
||||
qint64 getSampleRate();
|
||||
void setSampleRate(qint64 sample_rate);
|
||||
|
||||
qint32 getLog2Interp();
|
||||
void setLog2Interp(qint32 log2_interp);
|
||||
|
||||
qint32 getUseReverseApi();
|
||||
void setUseReverseApi(qint32 use_reverse_api);
|
||||
|
||||
QString* getReverseApiAddress();
|
||||
void setReverseApiAddress(QString* reverse_api_address);
|
||||
|
||||
qint32 getReverseApiPort();
|
||||
void setReverseApiPort(qint32 reverse_api_port);
|
||||
|
||||
qint32 getReverseApiDeviceIndex();
|
||||
void setReverseApiDeviceIndex(qint32 reverse_api_device_index);
|
||||
|
||||
|
||||
virtual bool isSet() override;
|
||||
|
||||
private:
|
||||
QString* file_name;
|
||||
bool m_file_name_isSet;
|
||||
|
||||
qint64 center_frequency;
|
||||
bool m_center_frequency_isSet;
|
||||
|
||||
qint64 sample_rate;
|
||||
bool m_sample_rate_isSet;
|
||||
|
||||
qint32 log2_interp;
|
||||
bool m_log2_interp_isSet;
|
||||
|
||||
qint32 use_reverse_api;
|
||||
bool m_use_reverse_api_isSet;
|
||||
|
||||
QString* reverse_api_address;
|
||||
bool m_reverse_api_address_isSet;
|
||||
|
||||
qint32 reverse_api_port;
|
||||
bool m_reverse_api_port_isSet;
|
||||
|
||||
qint32 reverse_api_device_index;
|
||||
bool m_reverse_api_device_index_isSet;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif /* SWGFileOutputSettings_H_ */
|
@ -109,6 +109,7 @@
|
||||
#include "SWGFeatureSettings.h"
|
||||
#include "SWGFileInputReport.h"
|
||||
#include "SWGFileInputSettings.h"
|
||||
#include "SWGFileOutputSettings.h"
|
||||
#include "SWGFileSinkActions.h"
|
||||
#include "SWGFileSinkReport.h"
|
||||
#include "SWGFileSinkSettings.h"
|
||||
@ -557,6 +558,9 @@ namespace SWGSDRangel {
|
||||
if(QString("SWGFileInputSettings").compare(type) == 0) {
|
||||
return new SWGFileInputSettings();
|
||||
}
|
||||
if(QString("SWGFileOutputSettings").compare(type) == 0) {
|
||||
return new SWGFileOutputSettings();
|
||||
}
|
||||
if(QString("SWGFileSinkActions").compare(type) == 0) {
|
||||
return new SWGFileSinkActions();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user