1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-07-24 11:04:10 -04:00

AM demod: Web API: settings and report implementation. NFM demod: fixes

This commit is contained in:
f4exb
2018-04-06 00:54:18 +02:00
parent 376e0d9b1f
commit 0ba86c0d22
27 changed files with 1389 additions and 55 deletions
+174
View File
@@ -23,11 +23,16 @@
#include <stdio.h>
#include <complex.h>
#include "SWGChannelSettings.h"
#include "SWGChannelReport.h"
#include "SWGAMModReport.h"
#include "dsp/upchannelizer.h"
#include "dsp/dspengine.h"
#include "dsp/threadedbasebandsamplesource.h"
#include "dsp/dspcommands.h"
#include "device/devicesinkapi.h"
#include "util/db.h"
MESSAGE_CLASS_DEFINITION(AMMod::MsgConfigureAMMod, Message)
MESSAGE_CLASS_DEFINITION(AMMod::MsgConfigureChannelizer, Message)
@@ -505,3 +510,172 @@ bool AMMod::deserialize(const QByteArray& data)
return false;
}
}
int AMMod::webapiSettingsGet(
SWGSDRangel::SWGChannelSettings& response,
QString& errorMessage __attribute__((unused)))
{
response.setAmModSettings(new SWGSDRangel::SWGAMModSettings());
response.getAmModSettings()->init();
webapiFormatChannelSettings(response, m_settings);
return 200;
}
int AMMod::webapiSettingsPutPatch(
bool force,
const QStringList& channelSettingsKeys,
SWGSDRangel::SWGChannelSettings& response,
QString& errorMessage __attribute__((unused)))
{
AMModSettings settings;
bool frequencyOffsetChanged = false;
if (channelSettingsKeys.contains("channelMute")) {
settings.m_channelMute = response.getAmModSettings()->getChannelMute() != 0;
}
if (channelSettingsKeys.contains("inputFrequencyOffset"))
{
settings.m_inputFrequencyOffset = response.getAmModSettings()->getInputFrequencyOffset();
frequencyOffsetChanged = true;
}
if (channelSettingsKeys.contains("modAFInput")) {
settings.m_modAFInput = (AMModSettings::AMModInputAF) response.getAmModSettings()->getModAfInput();
}
if (channelSettingsKeys.contains("playLoop")) {
settings.m_playLoop = response.getAmModSettings()->getPlayLoop() != 0;
}
if (channelSettingsKeys.contains("rfBandwidth")) {
settings.m_rfBandwidth = response.getAmModSettings()->getRfBandwidth();
}
if (channelSettingsKeys.contains("rgbColor")) {
settings.m_rgbColor = response.getAmModSettings()->getRgbColor();
}
if (channelSettingsKeys.contains("title")) {
settings.m_title = *response.getAmModSettings()->getTitle();
}
if (channelSettingsKeys.contains("toneFrequency")) {
settings.m_toneFrequency = response.getAmModSettings()->getToneFrequency();
}
if (channelSettingsKeys.contains("volumeFactor")) {
settings.m_volumeFactor = response.getAmModSettings()->getVolumeFactor();
}
if (channelSettingsKeys.contains("modFactor")) {
settings.m_modFactor = response.getAmModSettings()->getModFactor();
}
if (channelSettingsKeys.contains("cwKeyer"))
{
SWGSDRangel::SWGCWKeyerSettings *apiCwKeyerSettings = response.getAmModSettings()->getCwKeyer();
CWKeyerSettings cwKeyerSettings = m_cwKeyer.getSettings();
if (channelSettingsKeys.contains("cwKeyer.loop")) {
cwKeyerSettings.m_loop = apiCwKeyerSettings->getLoop() != 0;
}
if (channelSettingsKeys.contains("cwKeyer.mode")) {
cwKeyerSettings.m_mode = (CWKeyerSettings::CWMode) apiCwKeyerSettings->getMode();
}
if (channelSettingsKeys.contains("cwKeyer.text")) {
cwKeyerSettings.m_text = *apiCwKeyerSettings->getText();
}
if (channelSettingsKeys.contains("cwKeyer.sampleRate")) {
cwKeyerSettings.m_sampleRate = apiCwKeyerSettings->getSampleRate();
}
if (channelSettingsKeys.contains("cwKeyer.wpm")) {
cwKeyerSettings.m_wpm = apiCwKeyerSettings->getWpm();
}
m_cwKeyer.setLoop(cwKeyerSettings.m_loop);
m_cwKeyer.setMode(cwKeyerSettings.m_mode);
m_cwKeyer.setSampleRate(cwKeyerSettings.m_sampleRate);
m_cwKeyer.setText(cwKeyerSettings.m_text);
m_cwKeyer.setWPM(cwKeyerSettings.m_wpm);
if (m_guiMessageQueue) // forward to GUI if any
{
CWKeyer::MsgConfigureCWKeyer *msgCwKeyer = CWKeyer::MsgConfigureCWKeyer::create(cwKeyerSettings, force);
m_guiMessageQueue->push(msgCwKeyer);
}
}
if (frequencyOffsetChanged)
{
AMMod::MsgConfigureChannelizer *msgChan = AMMod::MsgConfigureChannelizer::create(
m_audioSampleRate, settings.m_inputFrequencyOffset);
m_inputMessageQueue.push(msgChan);
}
MsgConfigureAMMod *msg = MsgConfigureAMMod::create(settings, force);
m_inputMessageQueue.push(msg);
if (m_guiMessageQueue) // forward to GUI if any
{
MsgConfigureAMMod *msgToGUI = MsgConfigureAMMod::create(settings, force);
m_guiMessageQueue->push(msgToGUI);
}
webapiFormatChannelSettings(response, settings);
return 200;
}
int AMMod::webapiReportGet(
SWGSDRangel::SWGChannelReport& response,
QString& errorMessage __attribute__((unused)))
{
response.setAmModReport(new SWGSDRangel::SWGAMModReport());
response.getAmModReport()->init();
webapiFormatChannelReport(response);
return 200;
}
void AMMod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const AMModSettings& settings)
{
response.getAmModSettings()->setChannelMute(settings.m_channelMute ? 1 : 0);
response.getAmModSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset);
response.getAmModSettings()->setModAfInput((int) settings.m_modAFInput);
response.getAmModSettings()->setPlayLoop(settings.m_playLoop ? 1 : 0);
response.getAmModSettings()->setRfBandwidth(settings.m_rfBandwidth);
response.getAmModSettings()->setModFactor(settings.m_modFactor);
response.getAmModSettings()->setRgbColor(settings.m_rgbColor);
if (response.getAmModSettings()->getTitle()) {
*response.getAmModSettings()->getTitle() = settings.m_title;
} else {
response.getAmModSettings()->setTitle(new QString(settings.m_title));
}
response.getAmModSettings()->setToneFrequency(settings.m_toneFrequency);
response.getAmModSettings()->setVolumeFactor(settings.m_volumeFactor);
if (!response.getAmModSettings()->getCwKeyer()) {
response.getAmModSettings()->setCwKeyer(new SWGSDRangel::SWGCWKeyerSettings);
}
SWGSDRangel::SWGCWKeyerSettings *apiCwKeyerSettings = response.getAmModSettings()->getCwKeyer();
const CWKeyerSettings& cwKeyerSettings = m_cwKeyer.getSettings();
apiCwKeyerSettings->setLoop(cwKeyerSettings.m_loop ? 1 : 0);
apiCwKeyerSettings->setMode((int) cwKeyerSettings.m_mode);
apiCwKeyerSettings->setSampleRate(cwKeyerSettings.m_sampleRate);
if (apiCwKeyerSettings->getText()) {
*apiCwKeyerSettings->getText() = cwKeyerSettings.m_text;
} else {
apiCwKeyerSettings->setText(new QString(cwKeyerSettings.m_text));
}
apiCwKeyerSettings->setWpm(cwKeyerSettings.m_wpm);
if (response.getAmModSettings()->getAudioDeviceName()) {
*response.getAmModSettings()->getAudioDeviceName() = settings.m_audioDeviceName;
} else {
response.getAmModSettings()->setAudioDeviceName(new QString(settings.m_audioDeviceName));
}
}
void AMMod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response)
{
response.getAmModReport()->setChannelPowerDb(CalcDb::dbPower(getMagSq()));
response.getAmModReport()->setAudioSampleRate(m_audioSampleRate);
response.getAmModReport()->setChannelSampleRate(m_outputSampleRate);
}