mirror of https://github.com/f4exb/sdrangel.git
REST API: config: added DATV demodulator
This commit is contained in:
parent
c914de4846
commit
9af9b0972e
|
@ -6,6 +6,7 @@ set(datv_SOURCES
|
|||
datvdemodgui.cpp
|
||||
datvdemodplugin.cpp
|
||||
datvdemodsettings.cpp
|
||||
datvdemodwebapiadapter.cpp
|
||||
datvideostream.cpp
|
||||
datvudpstream.cpp
|
||||
datvideorender.cpp
|
||||
|
@ -14,7 +15,6 @@ set(datv_SOURCES
|
|||
leansdr/framework.cpp
|
||||
leansdr/math.cpp
|
||||
leansdr/sdr.cpp
|
||||
|
||||
datvdemodgui.ui
|
||||
)
|
||||
|
||||
|
@ -23,6 +23,7 @@ set(datv_HEADERS
|
|||
datvdemodgui.h
|
||||
datvdemodplugin.h
|
||||
datvdemodsettings.h
|
||||
datvdemodwebapiadapter.h
|
||||
datvideostream.h
|
||||
datvudpstream.h
|
||||
datvideorender.h
|
||||
|
@ -42,6 +43,7 @@ include_directories(
|
|||
${AVUTIL_INCLUDE_DIRS}
|
||||
${SWSCALE_INCLUDE_DIRS}
|
||||
${SWRESAMPLE_INCLUDE_DIRS}
|
||||
${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client
|
||||
)
|
||||
|
||||
add_library(demoddatv SHARED
|
||||
|
|
|
@ -581,7 +581,7 @@
|
|||
<string>Symbol rate</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>100000</number>
|
||||
<number>1000</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>1024000000</number>
|
||||
|
|
|
@ -24,11 +24,12 @@
|
|||
|
||||
#include "datvdemodgui.h"
|
||||
#include "datvdemodplugin.h"
|
||||
#include "datvdemodwebapiadapter.h"
|
||||
|
||||
const PluginDescriptor DATVDemodPlugin::m_ptrPluginDescriptor =
|
||||
{
|
||||
QString("DATV Demodulator"),
|
||||
QString("4.11.4"),
|
||||
QString("4.11.6"),
|
||||
QString("(c) F4HKW for SDRAngel using LeanSDR framework (c) F4DAV"),
|
||||
QString("https://github.com/f4exb/sdrangel"),
|
||||
true,
|
||||
|
@ -70,3 +71,8 @@ ChannelAPI* DATVDemodPlugin::createRxChannelCS(DeviceAPI *deviceAPI) const
|
|||
{
|
||||
return new DATVDemod(deviceAPI);
|
||||
}
|
||||
|
||||
ChannelWebAPIAdapter* DATVDemodPlugin::createChannelWebAPIAdapter() const
|
||||
{
|
||||
return new DATVDemodWebAPIAdapter();
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ public:
|
|||
virtual PluginInstanceGUI* createRxChannelGUI(DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel) const;
|
||||
virtual BasebandSampleSink* createRxChannelBS(DeviceAPI *deviceAPI) const;
|
||||
virtual ChannelAPI* createRxChannelCS(DeviceAPI *deviceAPI) const;
|
||||
|
||||
virtual ChannelWebAPIAdapter* createChannelWebAPIAdapter() const;
|
||||
|
||||
private:
|
||||
static const PluginDescriptor m_ptrPluginDescriptor;
|
||||
|
|
|
@ -0,0 +1,153 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (C) 2019 Edouard Griffiths, F4EXB. //
|
||||
// //
|
||||
// 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 "SWGChannelSettings.h"
|
||||
#include "datvdemodwebapiadapter.h"
|
||||
|
||||
DATVDemodWebAPIAdapter::DATVDemodWebAPIAdapter()
|
||||
{}
|
||||
|
||||
DATVDemodWebAPIAdapter::~DATVDemodWebAPIAdapter()
|
||||
{}
|
||||
|
||||
int DATVDemodWebAPIAdapter::webapiSettingsGet(
|
||||
SWGSDRangel::SWGChannelSettings& response,
|
||||
QString& errorMessage)
|
||||
{
|
||||
(void) errorMessage;
|
||||
response.setDatvDemodSettings(new SWGSDRangel::SWGDATVDemodSettings());
|
||||
response.getDatvDemodSettings()->init();
|
||||
webapiFormatChannelSettings(response, m_settings);
|
||||
return 200;
|
||||
}
|
||||
|
||||
int DATVDemodWebAPIAdapter::webapiSettingsPutPatch(
|
||||
bool force,
|
||||
const QStringList& channelSettingsKeys,
|
||||
SWGSDRangel::SWGChannelSettings& response,
|
||||
QString& errorMessage)
|
||||
{
|
||||
(void) force;
|
||||
(void) errorMessage;
|
||||
webapiUpdateChannelSettings(m_settings, channelSettingsKeys, response);
|
||||
return 200;
|
||||
}
|
||||
|
||||
void DATVDemodWebAPIAdapter::webapiFormatChannelSettings(
|
||||
SWGSDRangel::SWGChannelSettings& response,
|
||||
const DATVDemodSettings& settings)
|
||||
{
|
||||
response.getDatvDemodSettings()->setAllowDrift(settings.m_allowDrift ? 1 : 0);
|
||||
response.getDatvDemodSettings()->setAudioDeviceName(new QString(settings.m_audioDeviceName));
|
||||
response.getDatvDemodSettings()->setAudioMute(settings.m_audioMute ? 1 : 0);
|
||||
response.getDatvDemodSettings()->setAudioVolume(settings.m_audioVolume);
|
||||
response.getDatvDemodSettings()->setCenterFrequency(settings.m_centerFrequency);
|
||||
response.getDatvDemodSettings()->setExcursion(settings.m_excursion);
|
||||
response.getDatvDemodSettings()->setFastLock(settings.m_fastLock ? 1 : 0);
|
||||
response.getDatvDemodSettings()->setFec((int) settings.m_fec);
|
||||
response.getDatvDemodSettings()->setFilter((int) settings.m_filter);
|
||||
response.getDatvDemodSettings()->setHardMetric(settings.m_hardMetric ? 1 : 0);
|
||||
response.getDatvDemodSettings()->setModulation((int) settings.m_modulation);
|
||||
response.getDatvDemodSettings()->setNotchFilters(settings.m_notchFilters);
|
||||
response.getDatvDemodSettings()->setRfBandwidth(settings.m_rfBandwidth);
|
||||
response.getDatvDemodSettings()->setRgbColor(settings.m_rgbColor);
|
||||
response.getDatvDemodSettings()->setRollOff(settings.m_rollOff);
|
||||
response.getDatvDemodSettings()->setStandard((int) settings.m_standard);
|
||||
response.getDatvDemodSettings()->setSymbolRate(settings.m_symbolRate);
|
||||
response.getDatvDemodSettings()->setTitle(new QString(settings.m_title));
|
||||
response.getDatvDemodSettings()->setUdpTs(settings.m_udpTS ? 1 : 0);
|
||||
response.getDatvDemodSettings()->setUdpTsAddress(new QString(settings.m_udpTSAddress));
|
||||
response.getDatvDemodSettings()->setUdpTsPort(settings.m_udpTSPort);
|
||||
response.getDatvDemodSettings()->setVideoMute(settings.m_videoMute ? 1 : 0);
|
||||
response.getDatvDemodSettings()->setViterbi(settings.m_viterbi ? 1 : 0);
|
||||
}
|
||||
|
||||
void DATVDemodWebAPIAdapter::webapiUpdateChannelSettings(
|
||||
DATVDemodSettings& settings,
|
||||
const QStringList& channelSettingsKeys,
|
||||
SWGSDRangel::SWGChannelSettings& response)
|
||||
{
|
||||
if (channelSettingsKeys.contains("allowDrift")) {
|
||||
settings.m_allowDrift = response.getDatvDemodSettings()->getAllowDrift() != 0;
|
||||
}
|
||||
if (channelSettingsKeys.contains("audioDeviceName")) {
|
||||
settings.m_audioDeviceName = *response.getDatvDemodSettings()->getAudioDeviceName();
|
||||
}
|
||||
if (channelSettingsKeys.contains("audioMute")) {
|
||||
settings.m_audioMute = response.getDatvDemodSettings()->getAudioMute() != 0;
|
||||
}
|
||||
if (channelSettingsKeys.contains("audioVolume")) {
|
||||
settings.m_audioVolume = response.getDatvDemodSettings()->getAudioVolume();
|
||||
}
|
||||
if (channelSettingsKeys.contains("centerFrequency")) {
|
||||
settings.m_centerFrequency = response.getDatvDemodSettings()->getCenterFrequency();
|
||||
}
|
||||
if (channelSettingsKeys.contains("excursion")) {
|
||||
settings.m_excursion = response.getDatvDemodSettings()->getExcursion();
|
||||
}
|
||||
if (channelSettingsKeys.contains("fastLock")) {
|
||||
settings.m_fastLock = response.getDatvDemodSettings()->getFastLock() != 0;
|
||||
}
|
||||
if (channelSettingsKeys.contains("fec")) {
|
||||
settings.m_fec = (DATVDemodSettings::DATVCodeRate) response.getDatvDemodSettings()->getFec();
|
||||
}
|
||||
if (channelSettingsKeys.contains("filter")) {
|
||||
settings.m_filter = (DATVDemodSettings::dvb_sampler) response.getDatvDemodSettings()->getFilter();
|
||||
}
|
||||
if (channelSettingsKeys.contains("hardMetric")) {
|
||||
settings.m_hardMetric = response.getDatvDemodSettings()->getHardMetric() != 0;
|
||||
}
|
||||
if (channelSettingsKeys.contains("modulation")) {
|
||||
settings.m_modulation = (DATVDemodSettings::DATVModulation) response.getDatvDemodSettings()->getModulation();
|
||||
}
|
||||
if (channelSettingsKeys.contains("notchFilters")) {
|
||||
settings.m_notchFilters = response.getDatvDemodSettings()->getNotchFilters();
|
||||
}
|
||||
if (channelSettingsKeys.contains("rfBandwidth")) {
|
||||
settings.m_rfBandwidth = response.getDatvDemodSettings()->getRfBandwidth();
|
||||
}
|
||||
if (channelSettingsKeys.contains("rgbColor")) {
|
||||
settings.m_rgbColor = response.getDatvDemodSettings()->getRgbColor();
|
||||
}
|
||||
if (channelSettingsKeys.contains("rollOff")) {
|
||||
settings.m_rollOff = response.getDatvDemodSettings()->getRollOff();
|
||||
}
|
||||
if (channelSettingsKeys.contains("standard")) {
|
||||
settings.m_standard = (DATVDemodSettings::dvb_version) response.getDatvDemodSettings()->getStandard();
|
||||
}
|
||||
if (channelSettingsKeys.contains("symbolRate")) {
|
||||
settings.m_symbolRate = response.getDatvDemodSettings()->getSymbolRate();
|
||||
}
|
||||
if (channelSettingsKeys.contains("title")) {
|
||||
settings.m_title = *response.getDatvDemodSettings()->getTitle();
|
||||
}
|
||||
if (channelSettingsKeys.contains("udpTS")) {
|
||||
settings.m_udpTS = response.getDatvDemodSettings()->getUdpTs() != 0;
|
||||
}
|
||||
if (channelSettingsKeys.contains("udpTSAddress")) {
|
||||
settings.m_udpTSAddress = *response.getDatvDemodSettings()->getUdpTsAddress();
|
||||
}
|
||||
if (channelSettingsKeys.contains("udpTSPort")) {
|
||||
settings.m_udpTSPort = response.getDatvDemodSettings()->getUdpTsPort();
|
||||
}
|
||||
if (channelSettingsKeys.contains("videoMute")) {
|
||||
settings.m_videoMute = response.getDatvDemodSettings()->getVideoMute() != 0;
|
||||
}
|
||||
if (channelSettingsKeys.contains("viterbi")) {
|
||||
settings.m_viterbi = response.getDatvDemodSettings()->getViterbi() != 0;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (C) 2019 Edouard Griffiths, F4EXB. //
|
||||
// //
|
||||
// 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/>. //
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef INCLUDE_DEMODDATV_WEBAPIADAPTER_H
|
||||
#define INCLUDE_DEMODDATV_WEBAPIADAPTER_H
|
||||
|
||||
#include "channel/channelwebapiadapter.h"
|
||||
#include "datvdemodsettings.h"
|
||||
|
||||
/**
|
||||
* Standalone API adapter only for the settings
|
||||
*/
|
||||
class DATVDemodWebAPIAdapter : public ChannelWebAPIAdapter {
|
||||
public:
|
||||
DATVDemodWebAPIAdapter();
|
||||
virtual ~DATVDemodWebAPIAdapter();
|
||||
|
||||
virtual QByteArray serialize() const { return m_settings.serialize(); }
|
||||
virtual bool deserialize(const QByteArray& data) { return m_settings.deserialize(data); }
|
||||
|
||||
virtual int webapiSettingsGet(
|
||||
SWGSDRangel::SWGChannelSettings& response,
|
||||
QString& errorMessage);
|
||||
|
||||
virtual int webapiSettingsPutPatch(
|
||||
bool force,
|
||||
const QStringList& channelSettingsKeys,
|
||||
SWGSDRangel::SWGChannelSettings& response,
|
||||
QString& errorMessage);
|
||||
|
||||
static void webapiFormatChannelSettings(
|
||||
SWGSDRangel::SWGChannelSettings& response,
|
||||
const DATVDemodSettings& settings);
|
||||
|
||||
static void webapiUpdateChannelSettings(
|
||||
DATVDemodSettings& settings,
|
||||
const QStringList& channelSettingsKeys,
|
||||
SWGSDRangel::SWGChannelSettings& response);
|
||||
|
||||
private:
|
||||
DATVDemodSettings m_settings;
|
||||
};
|
||||
|
||||
#endif // INCLUDE_DEMODDATV_WEBAPIADAPTER_H
|
|
@ -56,6 +56,7 @@ const QMap<QString, QString> WebAPIRequestMapper::m_channelURIToSettingsKey = {
|
|||
{"sdrangel.channel.chanalyzer", "ChannelAnalyzerSettings"},
|
||||
{"sdrangel.channel.chanalyzerng", "ChannelAnalyzerSettings"}, // remap
|
||||
{"sdrangel.channel.demodatv", "ATVDemodSettings"},
|
||||
{"sdrangel.channel.demoddatv", "DATVDemodSettings"},
|
||||
{"sdrangel.channel.dsddemod", "DSDDemodSettings"},
|
||||
{"sdrangel.channeltx.filesrc", "FileSourceSettings"},
|
||||
{"sdrangel.channel.freedvdemod", "FreeDVDemodSettings"},
|
||||
|
@ -122,6 +123,7 @@ const QMap<QString, QString> WebAPIRequestMapper::m_channelTypeToSettingsKey = {
|
|||
{"ATVMod", "ATVModSettings"},
|
||||
{"BFMDemod", "BFMDemodSettings"},
|
||||
{"ChannelAnalyzer", "ChannelAnalyzerSettings"},
|
||||
{"DATVDemod", "DATVDemodSettings"},
|
||||
{"DSDDemod", "DSDDemodSettings"},
|
||||
{"FileSource", "FileSourceSettings"},
|
||||
{"FreeDVDemod", "FreeDVDemodSettings"},
|
||||
|
@ -2450,6 +2452,11 @@ bool WebAPIRequestMapper::getChannel(
|
|||
{
|
||||
processChannelAnalyzerSettings(channelSettings, settingsJsonObject, channelSettingsKeys);
|
||||
}
|
||||
else if (channelSettingsKey == "DATVDemodSettings")
|
||||
{
|
||||
channelSettings->setDatvDemodSettings(new SWGSDRangel::SWGDATVDemodSettings());
|
||||
channelSettings->getDatvDemodSettings()->fromJsonObject(settingsJsonObject);
|
||||
}
|
||||
else if (channelSettingsKey == "DSDDemodSettings")
|
||||
{
|
||||
channelSettings->setDsdDemodSettings(new SWGSDRangel::SWGDSDDemodSettings());
|
||||
|
|
Loading…
Reference in New Issue