DSD demod: implemeted WEB API

This commit is contained in:
f4exb 2018-05-24 12:17:29 +02:00
parent 8d7b581879
commit 128ac7ea1f
25 changed files with 2306 additions and 168 deletions

View File

@ -38,6 +38,7 @@ else (BUILD_DEBIAN)
include_directories(
.
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client
${LIBDSDCC_INCLUDE_DIR}
${LIBMBE_INCLUDE_DIR}
)

View File

@ -21,12 +21,19 @@
#include <stdio.h>
#include <complex.h>
#include "SWGChannelSettings.h"
#include "SWGDSDDemodSettings.h"
#include "SWGChannelReport.h"
#include "SWGDSDDemodReport.h"
#include "SWGRDSReport.h"
#include "audio/audiooutput.h"
#include "dsp/dspengine.h"
#include "dsp/threadedbasebandsamplesink.h"
#include "dsp/downchannelizer.h"
#include "dsp/dspcommands.h"
#include "device/devicesourceapi.h"
#include "util/db.h"
#include "dsddemod.h"
@ -56,6 +63,7 @@ DSDDemod::DSDDemod(DeviceSourceAPI *deviceAPI) :
m_scopeXY(0),
m_scopeEnabled(true),
m_dsdDecoder(),
m_signalFormat(signalFormatNone),
m_settingsMutex(QMutex::Recursive)
{
setObjectName(m_channelId);
@ -467,8 +475,6 @@ void DSDDemod::applySettings(const DSDDemodSettings& settings, bool force)
<< " m_slot2On: " << m_settings.m_slot2On
<< " m_tdmaStereo: " << m_settings.m_tdmaStereo
<< " m_pllLock: " << m_settings.m_pllLock
<< " m_udpAddress: " << m_settings.m_udpAddress
<< " m_udpPort: " << m_settings.m_udpPort
<< " m_highPassFilter: "<< m_settings.m_highPassFilter
<< " m_audioDeviceName: " << settings.m_audioDeviceName
<< " force: " << force;
@ -568,3 +574,326 @@ bool DSDDemod::deserialize(const QByteArray& data)
return false;
}
}
const char *DSDDemod::updateAndGetStatusText()
{
formatStatusText();
return m_formatStatusText;
}
void DSDDemod::formatStatusText()
{
switch (getDecoder().getSyncType())
{
case DSDcc::DSDDecoder::DSDSyncDMRDataMS:
case DSDcc::DSDDecoder::DSDSyncDMRDataP:
case DSDcc::DSDDecoder::DSDSyncDMRVoiceMS:
case DSDcc::DSDDecoder::DSDSyncDMRVoiceP:
if (m_signalFormat != signalFormatDMR)
{
strcpy(m_formatStatusText, "Sta: __ S1: __________________________ S2: __________________________");
}
switch (getDecoder().getStationType())
{
case DSDcc::DSDDecoder::DSDBaseStation:
memcpy(&m_formatStatusText[5], "BS ", 3);
break;
case DSDcc::DSDDecoder::DSDMobileStation:
memcpy(&m_formatStatusText[5], "MS ", 3);
break;
default:
memcpy(&m_formatStatusText[5], "NA ", 3);
break;
}
memcpy(&m_formatStatusText[12], getDecoder().getDMRDecoder().getSlot0Text(), 26);
memcpy(&m_formatStatusText[43], getDecoder().getDMRDecoder().getSlot1Text(), 26);
m_signalFormat = signalFormatDMR;
break;
case DSDcc::DSDDecoder::DSDSyncDStarHeaderN:
case DSDcc::DSDDecoder::DSDSyncDStarHeaderP:
case DSDcc::DSDDecoder::DSDSyncDStarN:
case DSDcc::DSDDecoder::DSDSyncDStarP:
if (m_signalFormat != signalFormatDStar)
{
// 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8
// 0....5....0....5....0....5....0....5....0....5....0....5....0....5....0....5....0..
strcpy(m_formatStatusText, "________/____>________|________>________|____________________|______:___/_____._");
// MY UR RPT1 RPT2 Info Loc Target
}
{
const std::string& rpt1 = getDecoder().getDStarDecoder().getRpt1();
const std::string& rpt2 = getDecoder().getDStarDecoder().getRpt2();
const std::string& mySign = getDecoder().getDStarDecoder().getMySign();
const std::string& yrSign = getDecoder().getDStarDecoder().getYourSign();
if (rpt1.length() > 0) { // 0 or 8
memcpy(&m_formatStatusText[23], rpt1.c_str(), 8);
}
if (rpt2.length() > 0) { // 0 or 8
memcpy(&m_formatStatusText[32], rpt2.c_str(), 8);
}
if (yrSign.length() > 0) { // 0 or 8
memcpy(&m_formatStatusText[14], yrSign.c_str(), 8);
}
if (mySign.length() > 0) { // 0 or 13
memcpy(&m_formatStatusText[0], mySign.c_str(), 13);
}
memcpy(&m_formatStatusText[41], getDecoder().getDStarDecoder().getInfoText(), 20);
memcpy(&m_formatStatusText[62], getDecoder().getDStarDecoder().getLocator(), 6);
snprintf(&m_formatStatusText[69], 82-69, "%03d/%07.1f",
getDecoder().getDStarDecoder().getBearing(),
getDecoder().getDStarDecoder().getDistance());
}
m_formatStatusText[82] = '\0';
m_signalFormat = signalFormatDStar;
break;
case DSDcc::DSDDecoder::DSDSyncDPMR:
snprintf(m_formatStatusText, 82, "%s CC: %04d OI: %08d CI: %08d",
DSDcc::DSDdPMR::dpmrFrameTypes[(int) getDecoder().getDPMRDecoder().getFrameType()],
getDecoder().getDPMRDecoder().getColorCode(),
getDecoder().getDPMRDecoder().getOwnId(),
getDecoder().getDPMRDecoder().getCalledId());
m_signalFormat = signalFormatDPMR;
break;
case DSDcc::DSDDecoder::DSDSyncYSF:
// 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8
// 0....5....0....5....0....5....0....5....0....5....0....5....0....5....0....5....0..
// C V2 RI 0:7 WL000|ssssssssss>dddddddddd |UUUUUUUUUU>DDDDDDDDDD|44444
if (getDecoder().getYSFDecoder().getFICHError() == DSDcc::DSDYSF::FICHNoError)
{
snprintf(m_formatStatusText, 82, "%s ", DSDcc::DSDYSF::ysfChannelTypeText[(int) getDecoder().getYSFDecoder().getFICH().getFrameInformation()]);
}
else
{
snprintf(m_formatStatusText, 82, "%d ", (int) getDecoder().getYSFDecoder().getFICHError());
}
snprintf(&m_formatStatusText[2], 80, "%s %s %d:%d %c%c",
DSDcc::DSDYSF::ysfDataTypeText[(int) getDecoder().getYSFDecoder().getFICH().getDataType()],
DSDcc::DSDYSF::ysfCallModeText[(int) getDecoder().getYSFDecoder().getFICH().getCallMode()],
getDecoder().getYSFDecoder().getFICH().getBlockTotal(),
getDecoder().getYSFDecoder().getFICH().getFrameTotal(),
(getDecoder().getYSFDecoder().getFICH().isNarrowMode() ? 'N' : 'W'),
(getDecoder().getYSFDecoder().getFICH().isInternetPath() ? 'I' : 'L'));
if (getDecoder().getYSFDecoder().getFICH().isSquelchCodeEnabled())
{
snprintf(&m_formatStatusText[14], 82-14, "%03d", getDecoder().getYSFDecoder().getFICH().getSquelchCode());
}
else
{
strncpy(&m_formatStatusText[14], "---", 82-14);
}
char dest[13];
if (getDecoder().getYSFDecoder().radioIdMode())
{
snprintf(dest, 12, "%-5s:%-5s",
getDecoder().getYSFDecoder().getDestId(),
getDecoder().getYSFDecoder().getSrcId());
}
else
{
snprintf(dest, 11, "%-10s", getDecoder().getYSFDecoder().getDest());
}
snprintf(&m_formatStatusText[17], 82-17, "|%-10s>%s|%-10s>%-10s|%-5s",
getDecoder().getYSFDecoder().getSrc(),
dest,
getDecoder().getYSFDecoder().getUplink(),
getDecoder().getYSFDecoder().getDownlink(),
getDecoder().getYSFDecoder().getRem4());
m_signalFormat = signalFormatYSF;
break;
default:
m_signalFormat = signalFormatNone;
m_formatStatusText[0] = '\0';
break;
}
m_formatStatusText[82] = '\0'; // guard
}
int DSDDemod::webapiSettingsGet(
SWGSDRangel::SWGChannelSettings& response,
QString& errorMessage __attribute__((unused)))
{
response.setDsdDemodSettings(new SWGSDRangel::SWGDSDDemodSettings());
response.getDsdDemodSettings()->init();
webapiFormatChannelSettings(response, m_settings);
return 200;
}
int DSDDemod::webapiSettingsPutPatch(
bool force,
const QStringList& channelSettingsKeys,
SWGSDRangel::SWGChannelSettings& response,
QString& errorMessage __attribute__((unused)))
{
DSDDemodSettings settings = m_settings;
bool frequencyOffsetChanged = false;
if (channelSettingsKeys.contains("inputFrequencyOffset"))
{
settings.m_inputFrequencyOffset = response.getDsdDemodSettings()->getInputFrequencyOffset();
frequencyOffsetChanged = true;
}
if (channelSettingsKeys.contains("rfBandwidth")) {
settings.m_rfBandwidth = response.getDsdDemodSettings()->getRfBandwidth();
}
if (channelSettingsKeys.contains("fmDeviation")) {
settings.m_fmDeviation = response.getDsdDemodSettings()->getFmDeviation();
}
if (channelSettingsKeys.contains("demodGain")) {
settings.m_demodGain = response.getDsdDemodSettings()->getDemodGain();
}
if (channelSettingsKeys.contains("volume")) {
settings.m_volume = response.getDsdDemodSettings()->getVolume();
}
if (channelSettingsKeys.contains("baudRate")) {
settings.m_baudRate = response.getDsdDemodSettings()->getBaudRate();
}
if (channelSettingsKeys.contains("squelchGate")) {
settings.m_squelchGate = response.getDsdDemodSettings()->getSquelchGate();
}
if (channelSettingsKeys.contains("squelch")) {
settings.m_squelch = response.getDsdDemodSettings()->getSquelch();
}
if (channelSettingsKeys.contains("audioMute")) {
settings.m_audioMute = response.getDsdDemodSettings()->getAudioMute() != 0;
}
if (channelSettingsKeys.contains("enableCosineFiltering")) {
settings.m_enableCosineFiltering = response.getDsdDemodSettings()->getEnableCosineFiltering() != 0;
}
if (channelSettingsKeys.contains("syncOrConstellation")) {
settings.m_syncOrConstellation = response.getDsdDemodSettings()->getSyncOrConstellation() != 0;
}
if (channelSettingsKeys.contains("slot1On")) {
settings.m_slot1On = response.getDsdDemodSettings()->getSlot1On() != 0;
}
if (channelSettingsKeys.contains("slot2On")) {
settings.m_slot2On = response.getDsdDemodSettings()->getSlot2On() != 0;
}
if (channelSettingsKeys.contains("tdmaStereo")) {
settings.m_tdmaStereo = response.getDsdDemodSettings()->getTdmaStereo() != 0;
}
if (channelSettingsKeys.contains("pllLock")) {
settings.m_pllLock = response.getDsdDemodSettings()->getPllLock() != 0;
}
if (channelSettingsKeys.contains("rgbColor")) {
settings.m_rgbColor = response.getAmDemodSettings()->getRgbColor();
}
if (channelSettingsKeys.contains("title")) {
settings.m_title = *response.getAmDemodSettings()->getTitle();
}
if (channelSettingsKeys.contains("audioDeviceName")) {
settings.m_audioDeviceName = *response.getAmDemodSettings()->getAudioDeviceName();
}
if (channelSettingsKeys.contains("highPassFilter")) {
settings.m_highPassFilter = response.getDsdDemodSettings()->getHighPassFilter() != 0;
}
if (channelSettingsKeys.contains("traceLengthMutliplier")) {
settings.m_traceLengthMutliplier = response.getDsdDemodSettings()->getTraceLengthMutliplier();
}
if (channelSettingsKeys.contains("traceStroke")) {
settings.m_traceStroke = response.getDsdDemodSettings()->getTraceStroke();
}
if (channelSettingsKeys.contains("traceDecay")) {
settings.m_traceDecay = response.getDsdDemodSettings()->getTraceDecay();
}
if (frequencyOffsetChanged)
{
MsgConfigureChannelizer* channelConfigMsg = MsgConfigureChannelizer::create(
m_audioSampleRate, settings.m_inputFrequencyOffset);
m_inputMessageQueue.push(channelConfigMsg);
}
MsgConfigureDSDDemod *msg = MsgConfigureDSDDemod::create(settings, force);
m_inputMessageQueue.push(msg);
qDebug("DSDDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue);
if (m_guiMessageQueue) // forward to GUI if any
{
MsgConfigureDSDDemod *msgToGUI = MsgConfigureDSDDemod::create(settings, force);
m_guiMessageQueue->push(msgToGUI);
}
webapiFormatChannelSettings(response, settings);
return 200;
}
int DSDDemod::webapiReportGet(
SWGSDRangel::SWGChannelReport& response,
QString& errorMessage __attribute__((unused)))
{
response.setDsdDemodReport(new SWGSDRangel::SWGDSDDemodReport());
response.getDsdDemodReport()->init();
webapiFormatChannelReport(response);
return 200;
}
void DSDDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const DSDDemodSettings& settings)
{
response.getDsdDemodSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset);
response.getDsdDemodSettings()->setRfBandwidth(settings.m_rfBandwidth);
response.getDsdDemodSettings()->setFmDeviation(settings.m_fmDeviation);
response.getDsdDemodSettings()->setDemodGain(settings.m_demodGain);
response.getDsdDemodSettings()->setVolume(settings.m_volume);
response.getDsdDemodSettings()->setBaudRate(settings.m_baudRate);
response.getDsdDemodSettings()->setSquelchGate(settings.m_squelchGate);
response.getDsdDemodSettings()->setSquelch(settings.m_squelch);
response.getDsdDemodSettings()->setAudioMute(settings.m_audioMute ? 1 : 0);
response.getDsdDemodSettings()->setEnableCosineFiltering(settings.m_enableCosineFiltering ? 1 : 0);
response.getDsdDemodSettings()->setSyncOrConstellation(settings.m_syncOrConstellation ? 1 : 0);
response.getDsdDemodSettings()->setSlot1On(settings.m_slot1On ? 1 : 0);
response.getDsdDemodSettings()->setSlot2On(settings.m_slot2On ? 1 : 0);
response.getDsdDemodSettings()->setTdmaStereo(settings.m_tdmaStereo ? 1 : 0);
response.getDsdDemodSettings()->setPllLock(settings.m_pllLock ? 1 : 0);
response.getDsdDemodSettings()->setRgbColor(settings.m_rgbColor);
if (response.getDsdDemodSettings()->getTitle()) {
*response.getDsdDemodSettings()->getTitle() = settings.m_title;
} else {
response.getDsdDemodSettings()->setTitle(new QString(settings.m_title));
}
if (response.getDsdDemodSettings()->getAudioDeviceName()) {
*response.getDsdDemodSettings()->getAudioDeviceName() = settings.m_audioDeviceName;
} else {
response.getDsdDemodSettings()->setAudioDeviceName(new QString(settings.m_audioDeviceName));
}
response.getDsdDemodSettings()->setHighPassFilter(settings.m_highPassFilter ? 1 : 0);
response.getDsdDemodSettings()->setTraceLengthMutliplier(settings.m_traceLengthMutliplier);
response.getDsdDemodSettings()->setTraceStroke(settings.m_traceStroke);
response.getDsdDemodSettings()->setTraceDecay(settings.m_traceDecay);
}
void DSDDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response)
{
double magsqAvg, magsqPeak;
int nbMagsqSamples;
getMagSqLevels(magsqAvg, magsqPeak, nbMagsqSamples);
response.getDsdDemodReport()->setChannelPowerDb(CalcDb::dbPower(magsqAvg));
response.getDsdDemodReport()->setAudioSampleRate(m_audioSampleRate);
response.getDsdDemodReport()->setChannelSampleRate(m_inputSampleRate);
response.getDsdDemodReport()->setSquelch(m_squelchOpen ? 1 : 0);
response.getDsdDemodReport()->setPllLocked(getDecoder().getSymbolPLLLocked() ? 1 : 0);
response.getDsdDemodReport()->setSlot1On(getDecoder().getVoice1On() ? 1 : 0);
response.getDsdDemodReport()->setSlot2On(getDecoder().getVoice2On() ? 1 : 0);
response.getDsdDemodReport()->setSyncType(new QString(getDecoder().getFrameTypeText()));
response.getDsdDemodReport()->setInLevel(getDecoder().getInLevel());
response.getDsdDemodReport()->setCarierPosition(getDecoder().getCarrierPos());
response.getDsdDemodReport()->setZeroCrossingPosition(getDecoder().getZeroCrossingPos());
response.getDsdDemodReport()->setSyncRate(getDecoder().getSymbolSyncQuality());
response.getDsdDemodReport()->setStatusText(new QString(updateAndGetStatusText()));
}

View File

@ -126,10 +126,35 @@ public:
m_magsqCount = 0;
}
const char *updateAndGetStatusText();
virtual int webapiSettingsGet(
SWGSDRangel::SWGChannelSettings& response,
QString& errorMessage);
virtual int webapiSettingsPutPatch(
bool force,
const QStringList& channelSettingsKeys,
SWGSDRangel::SWGChannelSettings& response,
QString& errorMessage);
virtual int webapiReportGet(
SWGSDRangel::SWGChannelReport& response,
QString& errorMessage);
static const QString m_channelIdURI;
static const QString m_channelId;
private:
typedef enum
{
signalFormatNone,
signalFormatDMR,
signalFormatDStar,
signalFormatDPMR,
signalFormatYSF
} SignalFormat; //!< Used for status text formatting
class MsgConfigureMyPosition : public Message {
MESSAGE_CLASS_DECLARATION
@ -196,15 +221,22 @@ private:
bool m_scopeEnabled;
DSDDecoder m_dsdDecoder;
QMutex m_settingsMutex;
char m_formatStatusText[82+1]; //!< Fixed signal format dependent status text
SignalFormat m_signalFormat; //!< Used to keep formatting during successive calls for the same standard type
PhaseDiscriminators m_phaseDiscri;
QMutex m_settingsMutex;
static const int m_udpBlockSize;
void applyAudioSampleRate(int sampleRate);
void applyChannelSettings(int inputSampleRate, int inputFrequencyOffset, bool force = false);
void applySettings(const DSDDemodSettings& settings, bool force = false);
void formatStatusText();
void webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const DSDDemodSettings& settings);
void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response);
};
#endif // INCLUDE_DSDDEMOD_H

View File

@ -242,10 +242,6 @@ void DSDDemodGUI::on_symbolPLLLock_toggled(bool checked)
void DSDDemodGUI::onWidgetRolled(QWidget* widget __attribute__((unused)), bool rollDown __attribute__((unused)))
{
/*
if((widget == ui->spectrumContainer) && (DSDDemodGUI != NULL))
m_dsdDemod->setSpectrum(m_threadedSampleSink->getMessageQueue(), rollDown);
*/
}
void DSDDemodGUI::onMenuDialogCalled(const QPoint &p)
@ -278,7 +274,6 @@ DSDDemodGUI::DSDDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
m_deviceUISet(deviceUISet),
m_channelMarker(this),
m_doApplySettings(true),
m_signalFormat(signalFormatNone),
m_enableCosineFiltering(false),
m_syncOrConstellation(false),
m_slot1On(false),
@ -460,145 +455,6 @@ void DSDDemodGUI::blockApplySettings(bool block)
m_doApplySettings = !block;
}
void DSDDemodGUI::formatStatusText()
{
switch (m_dsdDemod->getDecoder().getSyncType())
{
case DSDcc::DSDDecoder::DSDSyncDMRDataMS:
case DSDcc::DSDDecoder::DSDSyncDMRDataP:
case DSDcc::DSDDecoder::DSDSyncDMRVoiceMS:
case DSDcc::DSDDecoder::DSDSyncDMRVoiceP:
if (m_signalFormat != signalFormatDMR)
{
strcpy(m_formatStatusText, "Sta: __ S1: __________________________ S2: __________________________");
}
switch (m_dsdDemod->getDecoder().getStationType())
{
case DSDcc::DSDDecoder::DSDBaseStation:
memcpy(&m_formatStatusText[5], "BS ", 3);
break;
case DSDcc::DSDDecoder::DSDMobileStation:
memcpy(&m_formatStatusText[5], "MS ", 3);
break;
default:
memcpy(&m_formatStatusText[5], "NA ", 3);
break;
}
memcpy(&m_formatStatusText[12], m_dsdDemod->getDecoder().getDMRDecoder().getSlot0Text(), 26);
memcpy(&m_formatStatusText[43], m_dsdDemod->getDecoder().getDMRDecoder().getSlot1Text(), 26);
m_signalFormat = signalFormatDMR;
break;
case DSDcc::DSDDecoder::DSDSyncDStarHeaderN:
case DSDcc::DSDDecoder::DSDSyncDStarHeaderP:
case DSDcc::DSDDecoder::DSDSyncDStarN:
case DSDcc::DSDDecoder::DSDSyncDStarP:
if (m_signalFormat != signalFormatDStar)
{
// 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8
// 0....5....0....5....0....5....0....5....0....5....0....5....0....5....0....5....0..
strcpy(m_formatStatusText, "________/____>________|________>________|____________________|______:___/_____._");
// MY UR RPT1 RPT2 Info Loc Target
}
{
const std::string& rpt1 = m_dsdDemod->getDecoder().getDStarDecoder().getRpt1();
const std::string& rpt2 = m_dsdDemod->getDecoder().getDStarDecoder().getRpt2();
const std::string& mySign = m_dsdDemod->getDecoder().getDStarDecoder().getMySign();
const std::string& yrSign = m_dsdDemod->getDecoder().getDStarDecoder().getYourSign();
if (rpt1.length() > 0) { // 0 or 8
memcpy(&m_formatStatusText[23], rpt1.c_str(), 8);
}
if (rpt2.length() > 0) { // 0 or 8
memcpy(&m_formatStatusText[32], rpt2.c_str(), 8);
}
if (yrSign.length() > 0) { // 0 or 8
memcpy(&m_formatStatusText[14], yrSign.c_str(), 8);
}
if (mySign.length() > 0) { // 0 or 13
memcpy(&m_formatStatusText[0], mySign.c_str(), 13);
}
memcpy(&m_formatStatusText[41], m_dsdDemod->getDecoder().getDStarDecoder().getInfoText(), 20);
memcpy(&m_formatStatusText[62], m_dsdDemod->getDecoder().getDStarDecoder().getLocator(), 6);
snprintf(&m_formatStatusText[69], 82-69, "%03d/%07.1f",
m_dsdDemod->getDecoder().getDStarDecoder().getBearing(),
m_dsdDemod->getDecoder().getDStarDecoder().getDistance());
}
m_formatStatusText[82] = '\0';
m_signalFormat = signalFormatDStar;
break;
case DSDcc::DSDDecoder::DSDSyncDPMR:
snprintf(m_formatStatusText, 82, "%s CC: %04d OI: %08d CI: %08d",
DSDcc::DSDdPMR::dpmrFrameTypes[(int) m_dsdDemod->getDecoder().getDPMRDecoder().getFrameType()],
m_dsdDemod->getDecoder().getDPMRDecoder().getColorCode(),
m_dsdDemod->getDecoder().getDPMRDecoder().getOwnId(),
m_dsdDemod->getDecoder().getDPMRDecoder().getCalledId());
m_signalFormat = signalFormatDPMR;
break;
case DSDcc::DSDDecoder::DSDSyncYSF:
// 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8
// 0....5....0....5....0....5....0....5....0....5....0....5....0....5....0....5....0..
// C V2 RI 0:7 WL000|ssssssssss>dddddddddd |UUUUUUUUUU>DDDDDDDDDD|44444
if (m_dsdDemod->getDecoder().getYSFDecoder().getFICHError() == DSDcc::DSDYSF::FICHNoError)
{
snprintf(m_formatStatusText, 82, "%s ", DSDcc::DSDYSF::ysfChannelTypeText[(int) m_dsdDemod->getDecoder().getYSFDecoder().getFICH().getFrameInformation()]);
}
else
{
snprintf(m_formatStatusText, 82, "%d ", (int) m_dsdDemod->getDecoder().getYSFDecoder().getFICHError());
}
snprintf(&m_formatStatusText[2], 80, "%s %s %d:%d %c%c",
DSDcc::DSDYSF::ysfDataTypeText[(int) m_dsdDemod->getDecoder().getYSFDecoder().getFICH().getDataType()],
DSDcc::DSDYSF::ysfCallModeText[(int) m_dsdDemod->getDecoder().getYSFDecoder().getFICH().getCallMode()],
m_dsdDemod->getDecoder().getYSFDecoder().getFICH().getBlockTotal(),
m_dsdDemod->getDecoder().getYSFDecoder().getFICH().getFrameTotal(),
(m_dsdDemod->getDecoder().getYSFDecoder().getFICH().isNarrowMode() ? 'N' : 'W'),
(m_dsdDemod->getDecoder().getYSFDecoder().getFICH().isInternetPath() ? 'I' : 'L'));
if (m_dsdDemod->getDecoder().getYSFDecoder().getFICH().isSquelchCodeEnabled())
{
snprintf(&m_formatStatusText[14], 82-14, "%03d", m_dsdDemod->getDecoder().getYSFDecoder().getFICH().getSquelchCode());
}
else
{
strncpy(&m_formatStatusText[14], "---", 82-14);
}
char dest[13];
if ( m_dsdDemod->getDecoder().getYSFDecoder().radioIdMode())
{
snprintf(dest, 12, "%-5s:%-5s",
m_dsdDemod->getDecoder().getYSFDecoder().getDestId(),
m_dsdDemod->getDecoder().getYSFDecoder().getSrcId());
}
else
{
snprintf(dest, 11, "%-10s", m_dsdDemod->getDecoder().getYSFDecoder().getDest());
}
snprintf(&m_formatStatusText[17], 82-17, "|%-10s>%s|%-10s>%-10s|%-5s",
m_dsdDemod->getDecoder().getYSFDecoder().getSrc(),
dest,
m_dsdDemod->getDecoder().getYSFDecoder().getUplink(),
m_dsdDemod->getDecoder().getYSFDecoder().getDownlink(),
m_dsdDemod->getDecoder().getYSFDecoder().getRem4());
m_signalFormat = signalFormatYSF;
break;
default:
m_signalFormat = signalFormatNone;
m_formatStatusText[0] = '\0';
break;
}
m_formatStatusText[82] = '\0'; // guard
}
void DSDDemodGUI::channelMarkerChangedByCursor()
{
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
@ -685,14 +541,14 @@ void DSDDemodGUI::tick()
ui->syncText->setText(QString(frameTypeText));
formatStatusText();
ui->formatStatusText->setText(QString(m_formatStatusText));
const char *formatStatusText = m_dsdDemod->updateAndGetStatusText();
ui->formatStatusText->setText(QString(formatStatusText));
if (ui->activateStatusLog->isChecked()) {
m_dsdStatusTextDialog.addLine(QString(m_formatStatusText));
m_dsdStatusTextDialog.addLine(QString(formatStatusText));
}
if (m_formatStatusText[0] == '\0') {
if (formatStatusText[0] == '\0') {
ui->formatStatusText->setStyleSheet("QLabel { background:rgb(53,53,53); }"); // turn off background
} else {
ui->formatStatusText->setStyleSheet("QLabel { background:rgb(37,53,39); }"); // turn on background

View File

@ -64,14 +64,14 @@ public slots:
void channelMarkerHighlightedByCursor();
private:
typedef enum
{
signalFormatNone,
signalFormatDMR,
signalFormatDStar,
signalFormatDPMR,
signalFormatYSF
} SignalFormat;
// typedef enum
// {
// signalFormatNone,
// signalFormatDMR,
// signalFormatDStar,
// signalFormatDPMR,
// signalFormatYSF
// } SignalFormat;
Ui::DSDDemodGUI* ui;
PluginAPI* m_pluginAPI;
@ -79,8 +79,6 @@ private:
ChannelMarker m_channelMarker;
DSDDemodSettings m_settings;
bool m_doApplySettings;
char m_formatStatusText[82+1]; //!< Fixed signal format dependent status text
SignalFormat m_signalFormat;
ScopeVisXY* m_scopeVisXY;
@ -113,7 +111,6 @@ private:
void enterEvent(QEvent*);
private slots:
void formatStatusText();
void on_deltaFrequency_changed(qint64 value);
void on_rfBW_valueChanged(int index);
void on_demodGain_valueChanged(int value);

View File

@ -45,8 +45,6 @@ void DSDDemodSettings::resetToDefaults()
m_slot2On = false;
m_tdmaStereo = false;
m_pllLock = true;
m_udpAddress = "127.0.0.1";
m_udpPort = 9999;
m_rgbColor = QColor(0, 255, 255).rgb();
m_title = "DSD Demodulator";
m_highPassFilter = false;

View File

@ -38,8 +38,6 @@ struct DSDDemodSettings
bool m_slot2On;
bool m_tdmaStereo;
bool m_pllLock;
QString m_udpAddress;
quint16 m_udpPort;
quint32 m_rgbColor;
QString m_title;
bool m_highPassFilter;

View File

@ -12,6 +12,7 @@
<file>webapi/doc/swagger/include/AMMod.yaml</file>
<file>webapi/doc/swagger/include/ATVMod.yaml</file>
<file>webapi/doc/swagger/include/BFMDemod.yaml</file>
<file>webapi/doc/swagger/include/DSDDemod.yaml</file>
<file>webapi/doc/swagger/include/NFMDemod.yaml</file>
<file>webapi/doc/swagger/include/NFMMod.yaml</file>
<file>webapi/doc/swagger/include/SSBMod.yaml</file>

View File

@ -1307,6 +1307,9 @@ margin-bottom: 20px;
"BFMDemodReport" : {
"$ref" : "#/definitions/BFMDemodReport"
},
"DSDDemodReport" : {
"$ref" : "#/definitions/DSDDemodReport"
},
"NFMDemodReport" : {
"$ref" : "#/definitions/NFMDemodReport"
},
@ -1349,6 +1352,9 @@ margin-bottom: 20px;
"BFMDemodSettings" : {
"$ref" : "#/definitions/BFMDemodSettings"
},
"DSDDemodSettings" : {
"$ref" : "#/definitions/DSDDemodSettings"
},
"NFMDemodSettings" : {
"$ref" : "#/definitions/NFMDemodSettings"
},
@ -1383,6 +1389,142 @@ margin-bottom: 20px;
}
},
"description" : "All channels detailed information"
};
defs.DSDDemodReport = {
"properties" : {
"channelPowerDB" : {
"type" : "number",
"format" : "float",
"description" : "power transmitted in channel (dB)"
},
"audioSampleRate" : {
"type" : "integer"
},
"channelSampleRate" : {
"type" : "integer"
},
"squelch" : {
"type" : "integer",
"description" : "squelch status (1 if open else 0)"
},
"pllLocked" : {
"type" : "integer",
"description" : "symbol PLL status (1 if locked else 0)"
},
"slot1On" : {
"type" : "integer",
"description" : "slot 1 status (1 if active else 0)"
},
"slot2On" : {
"type" : "integer",
"description" : "slot 2 status (1 if active else 0)"
},
"syncType" : {
"type" : "string",
"description" : "type of frame synchronized"
},
"inLevel" : {
"type" : "integer",
"description" : "decoder input level after discriminator. Percent of mid scale (aim 100)."
},
"carierPosition" : {
"type" : "integer",
"description" : "position of carrier relative to discriminator center. Percent of scale (aim 0)."
},
"zeroCrossingPosition" : {
"type" : "integer",
"description" : "position of symbol synchronizer zero crossing in number of samples (aim 0)."
},
"syncRate" : {
"type" : "integer",
"description" : "successful synchronization rate. Percent of expected symbols (aim 100)."
},
"statusText" : {
"type" : "string",
"description" : "mode dependent status messages (ref UI documentation)"
}
},
"description" : "DSDDemod"
};
defs.DSDDemodSettings = {
"properties" : {
"inputFrequencyOffset" : {
"type" : "integer",
"format" : "int64"
},
"rfBandwidth" : {
"type" : "number",
"format" : "float"
},
"fmDeviation" : {
"type" : "number",
"format" : "float"
},
"demodGain" : {
"type" : "number",
"format" : "float"
},
"volume" : {
"type" : "number",
"format" : "float"
},
"baudRate" : {
"type" : "integer"
},
"squelchGate" : {
"type" : "integer"
},
"squelch" : {
"type" : "number",
"format" : "float"
},
"audioMute" : {
"type" : "integer"
},
"enableCosineFiltering" : {
"type" : "integer"
},
"syncOrConstellation" : {
"type" : "integer"
},
"slot1On" : {
"type" : "integer"
},
"slot2On" : {
"type" : "integer"
},
"tdmaStereo" : {
"type" : "integer"
},
"pllLock" : {
"type" : "integer"
},
"rgbColor" : {
"type" : "integer"
},
"title" : {
"type" : "string"
},
"audioDeviceName" : {
"type" : "string"
},
"highPassFilter" : {
"type" : "integer"
},
"traceLengthMutliplier" : {
"type" : "integer",
"description" : "multiply by 50ms"
},
"traceStroke" : {
"type" : "integer",
"description" : "0 to 255"
},
"traceDecay" : {
"type" : "integer",
"description" : "0 to 255"
}
},
"description" : "DSDDemod"
};
defs.DVSeralDevices = {
"required" : [ "nbDevices" ],
@ -20811,7 +20953,7 @@ except ApiException as e:
</div>
<div id="generator">
<div class="content">
Generated 2018-05-23T14:44:33.513+02:00
Generated 2018-05-24T10:19:21.195+02:00
</div>
</div>
</div>

View File

@ -0,0 +1,100 @@
DSDDemodSettings:
description: DSDDemod
properties:
inputFrequencyOffset:
type: integer
format: int64
rfBandwidth:
type: number
format: float
fmDeviation:
type: number
format: float
demodGain:
type: number
format: float
volume:
type: number
format: float
baudRate:
type: integer
squelchGate:
type: integer
squelch:
type: number
format: float
audioMute:
type: integer
enableCosineFiltering:
type: integer
syncOrConstellation:
type: integer
slot1On:
type: integer
slot2On:
type: integer
tdmaStereo:
type: integer
pllLock:
type: integer
rgbColor:
type: integer
title:
type: string
audioDeviceName:
type: string
highPassFilter:
type: integer
traceLengthMutliplier:
description: multiply by 50ms
type: integer
traceStroke:
description: 0 to 255
type: integer
traceDecay:
description: 0 to 255
type: integer
DSDDemodReport:
description: DSDDemod
properties:
channelPowerDB:
description: power transmitted in channel (dB)
type: number
format: float
audioSampleRate:
type: integer
channelSampleRate:
type: integer
squelch:
description: squelch status (1 if open else 0)
type: integer
pllLocked:
description: symbol PLL status (1 if locked else 0)
type: integer
slot1On:
description: slot 1 status (1 if active else 0)
type: integer
slot2On:
description: slot 2 status (1 if active else 0)
type: integer
syncType:
description: type of frame synchronized
type: string
inLevel:
description: decoder input level after discriminator. Percent of mid scale (aim 100).
type: integer
carierPosition:
description: position of carrier relative to discriminator center. Percent of scale (aim 0).
type: integer
zeroCrossingPosition:
description: position of symbol synchronizer zero crossing in number of samples (aim 0).
type: integer
syncRate:
description: successful synchronization rate. Percent of expected symbols (aim 100).
type: integer
statusText:
description: mode dependent status messages (ref UI documentation)
type: string

View File

@ -1753,6 +1753,8 @@ definitions:
$ref: "/doc/swagger/include/ATVMod.yaml#/ATVModSettings"
BFMDemodSettings:
$ref: "/doc/swagger/include/BFMDemod.yaml#/BFMDemodSettings"
DSDDemodSettings:
$ref: "/doc/swagger/include/DSDDemod.yaml#/DSDDemodSettings"
NFMDemodSettings:
$ref: "/doc/swagger/include/NFMDemod.yaml#/NFMDemodSettings"
NFMModSettings:
@ -1782,6 +1784,8 @@ definitions:
$ref: "/doc/swagger/include/ATVMod.yaml#/ATVModReport"
BFMDemodReport:
$ref: "/doc/swagger/include/BFMDemod.yaml#/BFMDemodReport"
DSDDemodReport:
$ref: "/doc/swagger/include/DSDDemod.yaml#/DSDDemodReport"
NFMDemodReport:
$ref: "/doc/swagger/include/NFMDemod.yaml#/NFMDemodReport"
NFMModReport:

View File

@ -0,0 +1,100 @@
DSDDemodSettings:
description: DSDDemod
properties:
inputFrequencyOffset:
type: integer
format: int64
rfBandwidth:
type: number
format: float
fmDeviation:
type: number
format: float
demodGain:
type: number
format: float
volume:
type: number
format: float
baudRate:
type: integer
squelchGate:
type: integer
squelch:
type: number
format: float
audioMute:
type: integer
enableCosineFiltering:
type: integer
syncOrConstellation:
type: integer
slot1On:
type: integer
slot2On:
type: integer
tdmaStereo:
type: integer
pllLock:
type: integer
rgbColor:
type: integer
title:
type: string
audioDeviceName:
type: string
highPassFilter:
type: integer
traceLengthMutliplier:
description: multiply by 50ms
type: integer
traceStroke:
description: 0 to 255
type: integer
traceDecay:
description: 0 to 255
type: integer
DSDDemodReport:
description: DSDDemod
properties:
channelPowerDB:
description: power transmitted in channel (dB)
type: number
format: float
audioSampleRate:
type: integer
channelSampleRate:
type: integer
squelch:
description: squelch status (1 if open else 0)
type: integer
pllLocked:
description: symbol PLL status (1 if locked else 0)
type: integer
slot1On:
description: slot 1 status (1 if voice active else 0)
type: integer
slot2On:
description: slot 2 status (1 if voice active else 0)
type: integer
syncType:
description: type of frame synchronized
type: string
inLevel:
description: decoder input level after discriminator. Percent of mid scale (aim 100).
type: integer
carierPosition:
description: position of carrier relative to discriminator center. Percent of scale (aim 0).
type: integer
zeroCrossingPosition:
description: position of symbol synchronizer zero crossing in number of samples (aim 0).
type: integer
syncRate:
description: successful synchronization rate. Percent of expected symbols (aim 100).
type: integer
statusText:
description: mode dependent status messages (ref UI documentation)
type: string

View File

@ -1753,6 +1753,8 @@ definitions:
$ref: "http://localhost:8081/api/swagger/include/ATVMod.yaml#/ATVModSettings"
BFMDemodSettings:
$ref: "http://localhost:8081/api/swagger/include/BFMDemod.yaml#/BFMDemodSettings"
DSDDemodSettings:
$ref: "http://localhost:8081/api/swagger/include/DSDDemod.yaml#/DSDDemodSettings"
NFMDemodSettings:
$ref: "http://localhost:8081/api/swagger/include/NFMDemod.yaml#/NFMDemodSettings"
NFMModSettings:
@ -1782,6 +1784,8 @@ definitions:
$ref: "http://localhost:8081/api/swagger/include/ATVMod.yaml#/ATVModReport"
BFMDemodReport:
$ref: "http://localhost:8081/api/swagger/include/BFMDemod.yaml#/BFMDemodReport"
DSDDemodReport:
$ref: "http://localhost:8081/api/swagger/include/DSDDemod.yaml#/DSDDemodReport"
NFMDemodReport:
$ref: "http://localhost:8081/api/swagger/include/NFMDemod.yaml#/NFMDemodReport"
NFMModReport:

View File

@ -1307,6 +1307,9 @@ margin-bottom: 20px;
"BFMDemodReport" : {
"$ref" : "#/definitions/BFMDemodReport"
},
"DSDDemodReport" : {
"$ref" : "#/definitions/DSDDemodReport"
},
"NFMDemodReport" : {
"$ref" : "#/definitions/NFMDemodReport"
},
@ -1349,6 +1352,9 @@ margin-bottom: 20px;
"BFMDemodSettings" : {
"$ref" : "#/definitions/BFMDemodSettings"
},
"DSDDemodSettings" : {
"$ref" : "#/definitions/DSDDemodSettings"
},
"NFMDemodSettings" : {
"$ref" : "#/definitions/NFMDemodSettings"
},
@ -1383,6 +1389,142 @@ margin-bottom: 20px;
}
},
"description" : "All channels detailed information"
};
defs.DSDDemodReport = {
"properties" : {
"channelPowerDB" : {
"type" : "number",
"format" : "float",
"description" : "power transmitted in channel (dB)"
},
"audioSampleRate" : {
"type" : "integer"
},
"channelSampleRate" : {
"type" : "integer"
},
"squelch" : {
"type" : "integer",
"description" : "squelch status (1 if open else 0)"
},
"pllLocked" : {
"type" : "integer",
"description" : "symbol PLL status (1 if locked else 0)"
},
"slot1On" : {
"type" : "integer",
"description" : "slot 1 status (1 if active else 0)"
},
"slot2On" : {
"type" : "integer",
"description" : "slot 2 status (1 if active else 0)"
},
"syncType" : {
"type" : "string",
"description" : "type of frame synchronized"
},
"inLevel" : {
"type" : "integer",
"description" : "decoder input level after discriminator. Percent of mid scale (aim 100)."
},
"carierPosition" : {
"type" : "integer",
"description" : "position of carrier relative to discriminator center. Percent of scale (aim 0)."
},
"zeroCrossingPosition" : {
"type" : "integer",
"description" : "position of symbol synchronizer zero crossing in number of samples (aim 0)."
},
"syncRate" : {
"type" : "integer",
"description" : "successful synchronization rate. Percent of expected symbols (aim 100)."
},
"statusText" : {
"type" : "string",
"description" : "mode dependent status messages (ref UI documentation)"
}
},
"description" : "DSDDemod"
};
defs.DSDDemodSettings = {
"properties" : {
"inputFrequencyOffset" : {
"type" : "integer",
"format" : "int64"
},
"rfBandwidth" : {
"type" : "number",
"format" : "float"
},
"fmDeviation" : {
"type" : "number",
"format" : "float"
},
"demodGain" : {
"type" : "number",
"format" : "float"
},
"volume" : {
"type" : "number",
"format" : "float"
},
"baudRate" : {
"type" : "integer"
},
"squelchGate" : {
"type" : "integer"
},
"squelch" : {
"type" : "number",
"format" : "float"
},
"audioMute" : {
"type" : "integer"
},
"enableCosineFiltering" : {
"type" : "integer"
},
"syncOrConstellation" : {
"type" : "integer"
},
"slot1On" : {
"type" : "integer"
},
"slot2On" : {
"type" : "integer"
},
"tdmaStereo" : {
"type" : "integer"
},
"pllLock" : {
"type" : "integer"
},
"rgbColor" : {
"type" : "integer"
},
"title" : {
"type" : "string"
},
"audioDeviceName" : {
"type" : "string"
},
"highPassFilter" : {
"type" : "integer"
},
"traceLengthMutliplier" : {
"type" : "integer",
"description" : "multiply by 50ms"
},
"traceStroke" : {
"type" : "integer",
"description" : "0 to 255"
},
"traceDecay" : {
"type" : "integer",
"description" : "0 to 255"
}
},
"description" : "DSDDemod"
};
defs.DVSeralDevices = {
"required" : [ "nbDevices" ],
@ -20811,7 +20953,7 @@ except ApiException as e:
</div>
<div id="generator">
<div class="content">
Generated 2018-05-23T14:44:33.513+02:00
Generated 2018-05-24T10:19:21.195+02:00
</div>
</div>
</div>

View File

@ -40,6 +40,8 @@ SWGChannelReport::SWGChannelReport() {
m_atv_mod_report_isSet = false;
bfm_demod_report = nullptr;
m_bfm_demod_report_isSet = false;
dsd_demod_report = nullptr;
m_dsd_demod_report_isSet = false;
nfm_demod_report = nullptr;
m_nfm_demod_report_isSet = false;
nfm_mod_report = nullptr;
@ -70,6 +72,8 @@ SWGChannelReport::init() {
m_atv_mod_report_isSet = false;
bfm_demod_report = new SWGBFMDemodReport();
m_bfm_demod_report_isSet = false;
dsd_demod_report = new SWGDSDDemodReport();
m_dsd_demod_report_isSet = false;
nfm_demod_report = new SWGNFMDemodReport();
m_nfm_demod_report_isSet = false;
nfm_mod_report = new SWGNFMModReport();
@ -100,6 +104,9 @@ SWGChannelReport::cleanup() {
if(bfm_demod_report != nullptr) {
delete bfm_demod_report;
}
if(dsd_demod_report != nullptr) {
delete dsd_demod_report;
}
if(nfm_demod_report != nullptr) {
delete nfm_demod_report;
}
@ -140,6 +147,8 @@ SWGChannelReport::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&bfm_demod_report, pJson["BFMDemodReport"], "SWGBFMDemodReport", "SWGBFMDemodReport");
::SWGSDRangel::setValue(&dsd_demod_report, pJson["DSDDemodReport"], "SWGDSDDemodReport", "SWGDSDDemodReport");
::SWGSDRangel::setValue(&nfm_demod_report, pJson["NFMDemodReport"], "SWGNFMDemodReport", "SWGNFMDemodReport");
::SWGSDRangel::setValue(&nfm_mod_report, pJson["NFMModReport"], "SWGNFMModReport", "SWGNFMModReport");
@ -184,6 +193,9 @@ SWGChannelReport::asJsonObject() {
if((bfm_demod_report != nullptr) && (bfm_demod_report->isSet())){
toJsonValue(QString("BFMDemodReport"), bfm_demod_report, obj, QString("SWGBFMDemodReport"));
}
if((dsd_demod_report != nullptr) && (dsd_demod_report->isSet())){
toJsonValue(QString("DSDDemodReport"), dsd_demod_report, obj, QString("SWGDSDDemodReport"));
}
if((nfm_demod_report != nullptr) && (nfm_demod_report->isSet())){
toJsonValue(QString("NFMDemodReport"), nfm_demod_report, obj, QString("SWGNFMDemodReport"));
}
@ -263,6 +275,16 @@ SWGChannelReport::setBfmDemodReport(SWGBFMDemodReport* bfm_demod_report) {
this->m_bfm_demod_report_isSet = true;
}
SWGDSDDemodReport*
SWGChannelReport::getDsdDemodReport() {
return dsd_demod_report;
}
void
SWGChannelReport::setDsdDemodReport(SWGDSDDemodReport* dsd_demod_report) {
this->dsd_demod_report = dsd_demod_report;
this->m_dsd_demod_report_isSet = true;
}
SWGNFMDemodReport*
SWGChannelReport::getNfmDemodReport() {
return nfm_demod_report;
@ -324,6 +346,7 @@ SWGChannelReport::isSet(){
if(am_mod_report != nullptr && am_mod_report->isSet()){ isObjectUpdated = true; break;}
if(atv_mod_report != nullptr && atv_mod_report->isSet()){ isObjectUpdated = true; break;}
if(bfm_demod_report != nullptr && bfm_demod_report->isSet()){ isObjectUpdated = true; break;}
if(dsd_demod_report != nullptr && dsd_demod_report->isSet()){ isObjectUpdated = true; break;}
if(nfm_demod_report != nullptr && nfm_demod_report->isSet()){ isObjectUpdated = true; break;}
if(nfm_mod_report != nullptr && nfm_mod_report->isSet()){ isObjectUpdated = true; break;}
if(ssb_mod_report != nullptr && ssb_mod_report->isSet()){ isObjectUpdated = true; break;}

View File

@ -26,6 +26,7 @@
#include "SWGAMModReport.h"
#include "SWGATVModReport.h"
#include "SWGBFMDemodReport.h"
#include "SWGDSDDemodReport.h"
#include "SWGNFMDemodReport.h"
#include "SWGNFMModReport.h"
#include "SWGSSBModReport.h"
@ -69,6 +70,9 @@ public:
SWGBFMDemodReport* getBfmDemodReport();
void setBfmDemodReport(SWGBFMDemodReport* bfm_demod_report);
SWGDSDDemodReport* getDsdDemodReport();
void setDsdDemodReport(SWGDSDDemodReport* dsd_demod_report);
SWGNFMDemodReport* getNfmDemodReport();
void setNfmDemodReport(SWGNFMDemodReport* nfm_demod_report);
@ -106,6 +110,9 @@ private:
SWGBFMDemodReport* bfm_demod_report;
bool m_bfm_demod_report_isSet;
SWGDSDDemodReport* dsd_demod_report;
bool m_dsd_demod_report_isSet;
SWGNFMDemodReport* nfm_demod_report;
bool m_nfm_demod_report_isSet;

View File

@ -40,6 +40,8 @@ SWGChannelSettings::SWGChannelSettings() {
m_atv_mod_settings_isSet = false;
bfm_demod_settings = nullptr;
m_bfm_demod_settings_isSet = false;
dsd_demod_settings = nullptr;
m_dsd_demod_settings_isSet = false;
nfm_demod_settings = nullptr;
m_nfm_demod_settings_isSet = false;
nfm_mod_settings = nullptr;
@ -70,6 +72,8 @@ SWGChannelSettings::init() {
m_atv_mod_settings_isSet = false;
bfm_demod_settings = new SWGBFMDemodSettings();
m_bfm_demod_settings_isSet = false;
dsd_demod_settings = new SWGDSDDemodSettings();
m_dsd_demod_settings_isSet = false;
nfm_demod_settings = new SWGNFMDemodSettings();
m_nfm_demod_settings_isSet = false;
nfm_mod_settings = new SWGNFMModSettings();
@ -100,6 +104,9 @@ SWGChannelSettings::cleanup() {
if(bfm_demod_settings != nullptr) {
delete bfm_demod_settings;
}
if(dsd_demod_settings != nullptr) {
delete dsd_demod_settings;
}
if(nfm_demod_settings != nullptr) {
delete nfm_demod_settings;
}
@ -140,6 +147,8 @@ SWGChannelSettings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&bfm_demod_settings, pJson["BFMDemodSettings"], "SWGBFMDemodSettings", "SWGBFMDemodSettings");
::SWGSDRangel::setValue(&dsd_demod_settings, pJson["DSDDemodSettings"], "SWGDSDDemodSettings", "SWGDSDDemodSettings");
::SWGSDRangel::setValue(&nfm_demod_settings, pJson["NFMDemodSettings"], "SWGNFMDemodSettings", "SWGNFMDemodSettings");
::SWGSDRangel::setValue(&nfm_mod_settings, pJson["NFMModSettings"], "SWGNFMModSettings", "SWGNFMModSettings");
@ -184,6 +193,9 @@ SWGChannelSettings::asJsonObject() {
if((bfm_demod_settings != nullptr) && (bfm_demod_settings->isSet())){
toJsonValue(QString("BFMDemodSettings"), bfm_demod_settings, obj, QString("SWGBFMDemodSettings"));
}
if((dsd_demod_settings != nullptr) && (dsd_demod_settings->isSet())){
toJsonValue(QString("DSDDemodSettings"), dsd_demod_settings, obj, QString("SWGDSDDemodSettings"));
}
if((nfm_demod_settings != nullptr) && (nfm_demod_settings->isSet())){
toJsonValue(QString("NFMDemodSettings"), nfm_demod_settings, obj, QString("SWGNFMDemodSettings"));
}
@ -263,6 +275,16 @@ SWGChannelSettings::setBfmDemodSettings(SWGBFMDemodSettings* bfm_demod_settings)
this->m_bfm_demod_settings_isSet = true;
}
SWGDSDDemodSettings*
SWGChannelSettings::getDsdDemodSettings() {
return dsd_demod_settings;
}
void
SWGChannelSettings::setDsdDemodSettings(SWGDSDDemodSettings* dsd_demod_settings) {
this->dsd_demod_settings = dsd_demod_settings;
this->m_dsd_demod_settings_isSet = true;
}
SWGNFMDemodSettings*
SWGChannelSettings::getNfmDemodSettings() {
return nfm_demod_settings;
@ -324,6 +346,7 @@ SWGChannelSettings::isSet(){
if(am_mod_settings != nullptr && am_mod_settings->isSet()){ isObjectUpdated = true; break;}
if(atv_mod_settings != nullptr && atv_mod_settings->isSet()){ isObjectUpdated = true; break;}
if(bfm_demod_settings != nullptr && bfm_demod_settings->isSet()){ isObjectUpdated = true; break;}
if(dsd_demod_settings != nullptr && dsd_demod_settings->isSet()){ isObjectUpdated = true; break;}
if(nfm_demod_settings != nullptr && nfm_demod_settings->isSet()){ isObjectUpdated = true; break;}
if(nfm_mod_settings != nullptr && nfm_mod_settings->isSet()){ isObjectUpdated = true; break;}
if(ssb_mod_settings != nullptr && ssb_mod_settings->isSet()){ isObjectUpdated = true; break;}

View File

@ -26,6 +26,7 @@
#include "SWGAMModSettings.h"
#include "SWGATVModSettings.h"
#include "SWGBFMDemodSettings.h"
#include "SWGDSDDemodSettings.h"
#include "SWGNFMDemodSettings.h"
#include "SWGNFMModSettings.h"
#include "SWGSSBModSettings.h"
@ -69,6 +70,9 @@ public:
SWGBFMDemodSettings* getBfmDemodSettings();
void setBfmDemodSettings(SWGBFMDemodSettings* bfm_demod_settings);
SWGDSDDemodSettings* getDsdDemodSettings();
void setDsdDemodSettings(SWGDSDDemodSettings* dsd_demod_settings);
SWGNFMDemodSettings* getNfmDemodSettings();
void setNfmDemodSettings(SWGNFMDemodSettings* nfm_demod_settings);
@ -106,6 +110,9 @@ private:
SWGBFMDemodSettings* bfm_demod_settings;
bool m_bfm_demod_settings_isSet;
SWGDSDDemodSettings* dsd_demod_settings;
bool m_dsd_demod_settings_isSet;
SWGNFMDemodSettings* nfm_demod_settings;
bool m_nfm_demod_settings_isSet;

View File

@ -0,0 +1,85 @@
/**
* 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. * Stopping instance i.e. /sdrangel with DELETE method is a server only feature. It allows stopping the instance nicely. * 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 demodulator, Channel Analyzer, Channel Analyzer NG, LoRa demodulator, TCP source * The content type returned is always application/json except in the following cases: * An incorrect URL was specified: this document is returned as text/html with a status 400 ---
*
* OpenAPI spec version: 4.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 "SWGDSDDemod.h"
#include "SWGHelpers.h"
#include <QJsonDocument>
#include <QJsonArray>
#include <QObject>
#include <QDebug>
namespace SWGSDRangel {
SWGDSDDemod::SWGDSDDemod(QString* json) {
init();
this->fromJson(*json);
}
SWGDSDDemod::SWGDSDDemod() {
}
SWGDSDDemod::~SWGDSDDemod() {
this->cleanup();
}
void
SWGDSDDemod::init() {
}
void
SWGDSDDemod::cleanup() {
}
SWGDSDDemod*
SWGDSDDemod::fromJson(QString &json) {
QByteArray array (json.toStdString().c_str());
QJsonDocument doc = QJsonDocument::fromJson(array);
QJsonObject jsonObject = doc.object();
this->fromJsonObject(jsonObject);
return this;
}
void
SWGDSDDemod::fromJsonObject(QJsonObject &pJson) {
}
QString
SWGDSDDemod::asJson ()
{
QJsonObject* obj = this->asJsonObject();
QJsonDocument doc(*obj);
QByteArray bytes = doc.toJson();
delete obj;
return QString(bytes);
}
QJsonObject*
SWGDSDDemod::asJsonObject() {
QJsonObject* obj = new QJsonObject();
return obj;
}
bool
SWGDSDDemod::isSet(){
bool isObjectUpdated = false;
do{
}while(false);
return isObjectUpdated;
}
}

View File

@ -0,0 +1,52 @@
/**
* 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. * Stopping instance i.e. /sdrangel with DELETE method is a server only feature. It allows stopping the instance nicely. * 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 demodulator, Channel Analyzer, Channel Analyzer NG, LoRa demodulator, TCP source * The content type returned is always application/json except in the following cases: * An incorrect URL was specified: this document is returned as text/html with a status 400 ---
*
* OpenAPI spec version: 4.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.
*/
/*
* SWGDSDDemod.h
*
*
*/
#ifndef SWGDSDDemod_H_
#define SWGDSDDemod_H_
#include <QJsonObject>
#include "SWGObject.h"
#include "export.h"
namespace SWGSDRangel {
class SWG_API SWGDSDDemod: public SWGObject {
public:
SWGDSDDemod();
SWGDSDDemod(QString* json);
virtual ~SWGDSDDemod();
void init();
void cleanup();
virtual QString asJson () override;
virtual QJsonObject* asJsonObject() override;
virtual void fromJsonObject(QJsonObject &json) override;
virtual SWGDSDDemod* fromJson(QString &jsonString) override;
virtual bool isSet() override;
private:
};
}
#endif /* SWGDSDDemod_H_ */

View File

@ -0,0 +1,362 @@
/**
* 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. * Stopping instance i.e. /sdrangel with DELETE method is a server only feature. It allows stopping the instance nicely. * 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 demodulator, Channel Analyzer, Channel Analyzer NG, LoRa demodulator, TCP source * The content type returned is always application/json except in the following cases: * An incorrect URL was specified: this document is returned as text/html with a status 400 ---
*
* OpenAPI spec version: 4.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 "SWGDSDDemodReport.h"
#include "SWGHelpers.h"
#include <QJsonDocument>
#include <QJsonArray>
#include <QObject>
#include <QDebug>
namespace SWGSDRangel {
SWGDSDDemodReport::SWGDSDDemodReport(QString* json) {
init();
this->fromJson(*json);
}
SWGDSDDemodReport::SWGDSDDemodReport() {
channel_power_db = 0.0f;
m_channel_power_db_isSet = false;
audio_sample_rate = 0;
m_audio_sample_rate_isSet = false;
channel_sample_rate = 0;
m_channel_sample_rate_isSet = false;
squelch = 0;
m_squelch_isSet = false;
pll_locked = 0;
m_pll_locked_isSet = false;
slot1_on = 0;
m_slot1_on_isSet = false;
slot2_on = 0;
m_slot2_on_isSet = false;
sync_type = nullptr;
m_sync_type_isSet = false;
in_level = 0;
m_in_level_isSet = false;
carier_position = 0;
m_carier_position_isSet = false;
zero_crossing_position = 0;
m_zero_crossing_position_isSet = false;
sync_rate = 0;
m_sync_rate_isSet = false;
status_text = nullptr;
m_status_text_isSet = false;
}
SWGDSDDemodReport::~SWGDSDDemodReport() {
this->cleanup();
}
void
SWGDSDDemodReport::init() {
channel_power_db = 0.0f;
m_channel_power_db_isSet = false;
audio_sample_rate = 0;
m_audio_sample_rate_isSet = false;
channel_sample_rate = 0;
m_channel_sample_rate_isSet = false;
squelch = 0;
m_squelch_isSet = false;
pll_locked = 0;
m_pll_locked_isSet = false;
slot1_on = 0;
m_slot1_on_isSet = false;
slot2_on = 0;
m_slot2_on_isSet = false;
sync_type = new QString("");
m_sync_type_isSet = false;
in_level = 0;
m_in_level_isSet = false;
carier_position = 0;
m_carier_position_isSet = false;
zero_crossing_position = 0;
m_zero_crossing_position_isSet = false;
sync_rate = 0;
m_sync_rate_isSet = false;
status_text = new QString("");
m_status_text_isSet = false;
}
void
SWGDSDDemodReport::cleanup() {
if(sync_type != nullptr) {
delete sync_type;
}
if(status_text != nullptr) {
delete status_text;
}
}
SWGDSDDemodReport*
SWGDSDDemodReport::fromJson(QString &json) {
QByteArray array (json.toStdString().c_str());
QJsonDocument doc = QJsonDocument::fromJson(array);
QJsonObject jsonObject = doc.object();
this->fromJsonObject(jsonObject);
return this;
}
void
SWGDSDDemodReport::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&channel_power_db, pJson["channelPowerDB"], "float", "");
::SWGSDRangel::setValue(&audio_sample_rate, pJson["audioSampleRate"], "qint32", "");
::SWGSDRangel::setValue(&channel_sample_rate, pJson["channelSampleRate"], "qint32", "");
::SWGSDRangel::setValue(&squelch, pJson["squelch"], "qint32", "");
::SWGSDRangel::setValue(&pll_locked, pJson["pllLocked"], "qint32", "");
::SWGSDRangel::setValue(&slot1_on, pJson["slot1On"], "qint32", "");
::SWGSDRangel::setValue(&slot2_on, pJson["slot2On"], "qint32", "");
::SWGSDRangel::setValue(&sync_type, pJson["syncType"], "QString", "QString");
::SWGSDRangel::setValue(&in_level, pJson["inLevel"], "qint32", "");
::SWGSDRangel::setValue(&carier_position, pJson["carierPosition"], "qint32", "");
::SWGSDRangel::setValue(&zero_crossing_position, pJson["zeroCrossingPosition"], "qint32", "");
::SWGSDRangel::setValue(&sync_rate, pJson["syncRate"], "qint32", "");
::SWGSDRangel::setValue(&status_text, pJson["statusText"], "QString", "QString");
}
QString
SWGDSDDemodReport::asJson ()
{
QJsonObject* obj = this->asJsonObject();
QJsonDocument doc(*obj);
QByteArray bytes = doc.toJson();
delete obj;
return QString(bytes);
}
QJsonObject*
SWGDSDDemodReport::asJsonObject() {
QJsonObject* obj = new QJsonObject();
if(m_channel_power_db_isSet){
obj->insert("channelPowerDB", QJsonValue(channel_power_db));
}
if(m_audio_sample_rate_isSet){
obj->insert("audioSampleRate", QJsonValue(audio_sample_rate));
}
if(m_channel_sample_rate_isSet){
obj->insert("channelSampleRate", QJsonValue(channel_sample_rate));
}
if(m_squelch_isSet){
obj->insert("squelch", QJsonValue(squelch));
}
if(m_pll_locked_isSet){
obj->insert("pllLocked", QJsonValue(pll_locked));
}
if(m_slot1_on_isSet){
obj->insert("slot1On", QJsonValue(slot1_on));
}
if(m_slot2_on_isSet){
obj->insert("slot2On", QJsonValue(slot2_on));
}
if(sync_type != nullptr && *sync_type != QString("")){
toJsonValue(QString("syncType"), sync_type, obj, QString("QString"));
}
if(m_in_level_isSet){
obj->insert("inLevel", QJsonValue(in_level));
}
if(m_carier_position_isSet){
obj->insert("carierPosition", QJsonValue(carier_position));
}
if(m_zero_crossing_position_isSet){
obj->insert("zeroCrossingPosition", QJsonValue(zero_crossing_position));
}
if(m_sync_rate_isSet){
obj->insert("syncRate", QJsonValue(sync_rate));
}
if(status_text != nullptr && *status_text != QString("")){
toJsonValue(QString("statusText"), status_text, obj, QString("QString"));
}
return obj;
}
float
SWGDSDDemodReport::getChannelPowerDb() {
return channel_power_db;
}
void
SWGDSDDemodReport::setChannelPowerDb(float channel_power_db) {
this->channel_power_db = channel_power_db;
this->m_channel_power_db_isSet = true;
}
qint32
SWGDSDDemodReport::getAudioSampleRate() {
return audio_sample_rate;
}
void
SWGDSDDemodReport::setAudioSampleRate(qint32 audio_sample_rate) {
this->audio_sample_rate = audio_sample_rate;
this->m_audio_sample_rate_isSet = true;
}
qint32
SWGDSDDemodReport::getChannelSampleRate() {
return channel_sample_rate;
}
void
SWGDSDDemodReport::setChannelSampleRate(qint32 channel_sample_rate) {
this->channel_sample_rate = channel_sample_rate;
this->m_channel_sample_rate_isSet = true;
}
qint32
SWGDSDDemodReport::getSquelch() {
return squelch;
}
void
SWGDSDDemodReport::setSquelch(qint32 squelch) {
this->squelch = squelch;
this->m_squelch_isSet = true;
}
qint32
SWGDSDDemodReport::getPllLocked() {
return pll_locked;
}
void
SWGDSDDemodReport::setPllLocked(qint32 pll_locked) {
this->pll_locked = pll_locked;
this->m_pll_locked_isSet = true;
}
qint32
SWGDSDDemodReport::getSlot1On() {
return slot1_on;
}
void
SWGDSDDemodReport::setSlot1On(qint32 slot1_on) {
this->slot1_on = slot1_on;
this->m_slot1_on_isSet = true;
}
qint32
SWGDSDDemodReport::getSlot2On() {
return slot2_on;
}
void
SWGDSDDemodReport::setSlot2On(qint32 slot2_on) {
this->slot2_on = slot2_on;
this->m_slot2_on_isSet = true;
}
QString*
SWGDSDDemodReport::getSyncType() {
return sync_type;
}
void
SWGDSDDemodReport::setSyncType(QString* sync_type) {
this->sync_type = sync_type;
this->m_sync_type_isSet = true;
}
qint32
SWGDSDDemodReport::getInLevel() {
return in_level;
}
void
SWGDSDDemodReport::setInLevel(qint32 in_level) {
this->in_level = in_level;
this->m_in_level_isSet = true;
}
qint32
SWGDSDDemodReport::getCarierPosition() {
return carier_position;
}
void
SWGDSDDemodReport::setCarierPosition(qint32 carier_position) {
this->carier_position = carier_position;
this->m_carier_position_isSet = true;
}
qint32
SWGDSDDemodReport::getZeroCrossingPosition() {
return zero_crossing_position;
}
void
SWGDSDDemodReport::setZeroCrossingPosition(qint32 zero_crossing_position) {
this->zero_crossing_position = zero_crossing_position;
this->m_zero_crossing_position_isSet = true;
}
qint32
SWGDSDDemodReport::getSyncRate() {
return sync_rate;
}
void
SWGDSDDemodReport::setSyncRate(qint32 sync_rate) {
this->sync_rate = sync_rate;
this->m_sync_rate_isSet = true;
}
QString*
SWGDSDDemodReport::getStatusText() {
return status_text;
}
void
SWGDSDDemodReport::setStatusText(QString* status_text) {
this->status_text = status_text;
this->m_status_text_isSet = true;
}
bool
SWGDSDDemodReport::isSet(){
bool isObjectUpdated = false;
do{
if(m_channel_power_db_isSet){ isObjectUpdated = true; break;}
if(m_audio_sample_rate_isSet){ isObjectUpdated = true; break;}
if(m_channel_sample_rate_isSet){ isObjectUpdated = true; break;}
if(m_squelch_isSet){ isObjectUpdated = true; break;}
if(m_pll_locked_isSet){ isObjectUpdated = true; break;}
if(m_slot1_on_isSet){ isObjectUpdated = true; break;}
if(m_slot2_on_isSet){ isObjectUpdated = true; break;}
if(sync_type != nullptr && *sync_type != QString("")){ isObjectUpdated = true; break;}
if(m_in_level_isSet){ isObjectUpdated = true; break;}
if(m_carier_position_isSet){ isObjectUpdated = true; break;}
if(m_zero_crossing_position_isSet){ isObjectUpdated = true; break;}
if(m_sync_rate_isSet){ isObjectUpdated = true; break;}
if(status_text != nullptr && *status_text != QString("")){ isObjectUpdated = true; break;}
}while(false);
return isObjectUpdated;
}
}

View File

@ -0,0 +1,131 @@
/**
* 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. * Stopping instance i.e. /sdrangel with DELETE method is a server only feature. It allows stopping the instance nicely. * 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 demodulator, Channel Analyzer, Channel Analyzer NG, LoRa demodulator, TCP source * The content type returned is always application/json except in the following cases: * An incorrect URL was specified: this document is returned as text/html with a status 400 ---
*
* OpenAPI spec version: 4.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.
*/
/*
* SWGDSDDemodReport.h
*
* DSDDemod
*/
#ifndef SWGDSDDemodReport_H_
#define SWGDSDDemodReport_H_
#include <QJsonObject>
#include <QString>
#include "SWGObject.h"
#include "export.h"
namespace SWGSDRangel {
class SWG_API SWGDSDDemodReport: public SWGObject {
public:
SWGDSDDemodReport();
SWGDSDDemodReport(QString* json);
virtual ~SWGDSDDemodReport();
void init();
void cleanup();
virtual QString asJson () override;
virtual QJsonObject* asJsonObject() override;
virtual void fromJsonObject(QJsonObject &json) override;
virtual SWGDSDDemodReport* fromJson(QString &jsonString) override;
float getChannelPowerDb();
void setChannelPowerDb(float channel_power_db);
qint32 getAudioSampleRate();
void setAudioSampleRate(qint32 audio_sample_rate);
qint32 getChannelSampleRate();
void setChannelSampleRate(qint32 channel_sample_rate);
qint32 getSquelch();
void setSquelch(qint32 squelch);
qint32 getPllLocked();
void setPllLocked(qint32 pll_locked);
qint32 getSlot1On();
void setSlot1On(qint32 slot1_on);
qint32 getSlot2On();
void setSlot2On(qint32 slot2_on);
QString* getSyncType();
void setSyncType(QString* sync_type);
qint32 getInLevel();
void setInLevel(qint32 in_level);
qint32 getCarierPosition();
void setCarierPosition(qint32 carier_position);
qint32 getZeroCrossingPosition();
void setZeroCrossingPosition(qint32 zero_crossing_position);
qint32 getSyncRate();
void setSyncRate(qint32 sync_rate);
QString* getStatusText();
void setStatusText(QString* status_text);
virtual bool isSet() override;
private:
float channel_power_db;
bool m_channel_power_db_isSet;
qint32 audio_sample_rate;
bool m_audio_sample_rate_isSet;
qint32 channel_sample_rate;
bool m_channel_sample_rate_isSet;
qint32 squelch;
bool m_squelch_isSet;
qint32 pll_locked;
bool m_pll_locked_isSet;
qint32 slot1_on;
bool m_slot1_on_isSet;
qint32 slot2_on;
bool m_slot2_on_isSet;
QString* sync_type;
bool m_sync_type_isSet;
qint32 in_level;
bool m_in_level_isSet;
qint32 carier_position;
bool m_carier_position_isSet;
qint32 zero_crossing_position;
bool m_zero_crossing_position_isSet;
qint32 sync_rate;
bool m_sync_rate_isSet;
QString* status_text;
bool m_status_text_isSet;
};
}
#endif /* SWGDSDDemodReport_H_ */

View File

@ -0,0 +1,551 @@
/**
* 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. * Stopping instance i.e. /sdrangel with DELETE method is a server only feature. It allows stopping the instance nicely. * 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 demodulator, Channel Analyzer, Channel Analyzer NG, LoRa demodulator, TCP source * The content type returned is always application/json except in the following cases: * An incorrect URL was specified: this document is returned as text/html with a status 400 ---
*
* OpenAPI spec version: 4.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 "SWGDSDDemodSettings.h"
#include "SWGHelpers.h"
#include <QJsonDocument>
#include <QJsonArray>
#include <QObject>
#include <QDebug>
namespace SWGSDRangel {
SWGDSDDemodSettings::SWGDSDDemodSettings(QString* json) {
init();
this->fromJson(*json);
}
SWGDSDDemodSettings::SWGDSDDemodSettings() {
input_frequency_offset = 0L;
m_input_frequency_offset_isSet = false;
rf_bandwidth = 0.0f;
m_rf_bandwidth_isSet = false;
fm_deviation = 0.0f;
m_fm_deviation_isSet = false;
demod_gain = 0.0f;
m_demod_gain_isSet = false;
volume = 0.0f;
m_volume_isSet = false;
baud_rate = 0;
m_baud_rate_isSet = false;
squelch_gate = 0;
m_squelch_gate_isSet = false;
squelch = 0.0f;
m_squelch_isSet = false;
audio_mute = 0;
m_audio_mute_isSet = false;
enable_cosine_filtering = 0;
m_enable_cosine_filtering_isSet = false;
sync_or_constellation = 0;
m_sync_or_constellation_isSet = false;
slot1_on = 0;
m_slot1_on_isSet = false;
slot2_on = 0;
m_slot2_on_isSet = false;
tdma_stereo = 0;
m_tdma_stereo_isSet = false;
pll_lock = 0;
m_pll_lock_isSet = false;
rgb_color = 0;
m_rgb_color_isSet = false;
title = nullptr;
m_title_isSet = false;
audio_device_name = nullptr;
m_audio_device_name_isSet = false;
high_pass_filter = 0;
m_high_pass_filter_isSet = false;
trace_length_mutliplier = 0;
m_trace_length_mutliplier_isSet = false;
trace_stroke = 0;
m_trace_stroke_isSet = false;
trace_decay = 0;
m_trace_decay_isSet = false;
}
SWGDSDDemodSettings::~SWGDSDDemodSettings() {
this->cleanup();
}
void
SWGDSDDemodSettings::init() {
input_frequency_offset = 0L;
m_input_frequency_offset_isSet = false;
rf_bandwidth = 0.0f;
m_rf_bandwidth_isSet = false;
fm_deviation = 0.0f;
m_fm_deviation_isSet = false;
demod_gain = 0.0f;
m_demod_gain_isSet = false;
volume = 0.0f;
m_volume_isSet = false;
baud_rate = 0;
m_baud_rate_isSet = false;
squelch_gate = 0;
m_squelch_gate_isSet = false;
squelch = 0.0f;
m_squelch_isSet = false;
audio_mute = 0;
m_audio_mute_isSet = false;
enable_cosine_filtering = 0;
m_enable_cosine_filtering_isSet = false;
sync_or_constellation = 0;
m_sync_or_constellation_isSet = false;
slot1_on = 0;
m_slot1_on_isSet = false;
slot2_on = 0;
m_slot2_on_isSet = false;
tdma_stereo = 0;
m_tdma_stereo_isSet = false;
pll_lock = 0;
m_pll_lock_isSet = false;
rgb_color = 0;
m_rgb_color_isSet = false;
title = new QString("");
m_title_isSet = false;
audio_device_name = new QString("");
m_audio_device_name_isSet = false;
high_pass_filter = 0;
m_high_pass_filter_isSet = false;
trace_length_mutliplier = 0;
m_trace_length_mutliplier_isSet = false;
trace_stroke = 0;
m_trace_stroke_isSet = false;
trace_decay = 0;
m_trace_decay_isSet = false;
}
void
SWGDSDDemodSettings::cleanup() {
if(title != nullptr) {
delete title;
}
if(audio_device_name != nullptr) {
delete audio_device_name;
}
}
SWGDSDDemodSettings*
SWGDSDDemodSettings::fromJson(QString &json) {
QByteArray array (json.toStdString().c_str());
QJsonDocument doc = QJsonDocument::fromJson(array);
QJsonObject jsonObject = doc.object();
this->fromJsonObject(jsonObject);
return this;
}
void
SWGDSDDemodSettings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&input_frequency_offset, pJson["inputFrequencyOffset"], "qint64", "");
::SWGSDRangel::setValue(&rf_bandwidth, pJson["rfBandwidth"], "float", "");
::SWGSDRangel::setValue(&fm_deviation, pJson["fmDeviation"], "float", "");
::SWGSDRangel::setValue(&demod_gain, pJson["demodGain"], "float", "");
::SWGSDRangel::setValue(&volume, pJson["volume"], "float", "");
::SWGSDRangel::setValue(&baud_rate, pJson["baudRate"], "qint32", "");
::SWGSDRangel::setValue(&squelch_gate, pJson["squelchGate"], "qint32", "");
::SWGSDRangel::setValue(&squelch, pJson["squelch"], "float", "");
::SWGSDRangel::setValue(&audio_mute, pJson["audioMute"], "qint32", "");
::SWGSDRangel::setValue(&enable_cosine_filtering, pJson["enableCosineFiltering"], "qint32", "");
::SWGSDRangel::setValue(&sync_or_constellation, pJson["syncOrConstellation"], "qint32", "");
::SWGSDRangel::setValue(&slot1_on, pJson["slot1On"], "qint32", "");
::SWGSDRangel::setValue(&slot2_on, pJson["slot2On"], "qint32", "");
::SWGSDRangel::setValue(&tdma_stereo, pJson["tdmaStereo"], "qint32", "");
::SWGSDRangel::setValue(&pll_lock, pJson["pllLock"], "qint32", "");
::SWGSDRangel::setValue(&rgb_color, pJson["rgbColor"], "qint32", "");
::SWGSDRangel::setValue(&title, pJson["title"], "QString", "QString");
::SWGSDRangel::setValue(&audio_device_name, pJson["audioDeviceName"], "QString", "QString");
::SWGSDRangel::setValue(&high_pass_filter, pJson["highPassFilter"], "qint32", "");
::SWGSDRangel::setValue(&trace_length_mutliplier, pJson["traceLengthMutliplier"], "qint32", "");
::SWGSDRangel::setValue(&trace_stroke, pJson["traceStroke"], "qint32", "");
::SWGSDRangel::setValue(&trace_decay, pJson["traceDecay"], "qint32", "");
}
QString
SWGDSDDemodSettings::asJson ()
{
QJsonObject* obj = this->asJsonObject();
QJsonDocument doc(*obj);
QByteArray bytes = doc.toJson();
delete obj;
return QString(bytes);
}
QJsonObject*
SWGDSDDemodSettings::asJsonObject() {
QJsonObject* obj = new QJsonObject();
if(m_input_frequency_offset_isSet){
obj->insert("inputFrequencyOffset", QJsonValue(input_frequency_offset));
}
if(m_rf_bandwidth_isSet){
obj->insert("rfBandwidth", QJsonValue(rf_bandwidth));
}
if(m_fm_deviation_isSet){
obj->insert("fmDeviation", QJsonValue(fm_deviation));
}
if(m_demod_gain_isSet){
obj->insert("demodGain", QJsonValue(demod_gain));
}
if(m_volume_isSet){
obj->insert("volume", QJsonValue(volume));
}
if(m_baud_rate_isSet){
obj->insert("baudRate", QJsonValue(baud_rate));
}
if(m_squelch_gate_isSet){
obj->insert("squelchGate", QJsonValue(squelch_gate));
}
if(m_squelch_isSet){
obj->insert("squelch", QJsonValue(squelch));
}
if(m_audio_mute_isSet){
obj->insert("audioMute", QJsonValue(audio_mute));
}
if(m_enable_cosine_filtering_isSet){
obj->insert("enableCosineFiltering", QJsonValue(enable_cosine_filtering));
}
if(m_sync_or_constellation_isSet){
obj->insert("syncOrConstellation", QJsonValue(sync_or_constellation));
}
if(m_slot1_on_isSet){
obj->insert("slot1On", QJsonValue(slot1_on));
}
if(m_slot2_on_isSet){
obj->insert("slot2On", QJsonValue(slot2_on));
}
if(m_tdma_stereo_isSet){
obj->insert("tdmaStereo", QJsonValue(tdma_stereo));
}
if(m_pll_lock_isSet){
obj->insert("pllLock", QJsonValue(pll_lock));
}
if(m_rgb_color_isSet){
obj->insert("rgbColor", QJsonValue(rgb_color));
}
if(title != nullptr && *title != QString("")){
toJsonValue(QString("title"), title, obj, QString("QString"));
}
if(audio_device_name != nullptr && *audio_device_name != QString("")){
toJsonValue(QString("audioDeviceName"), audio_device_name, obj, QString("QString"));
}
if(m_high_pass_filter_isSet){
obj->insert("highPassFilter", QJsonValue(high_pass_filter));
}
if(m_trace_length_mutliplier_isSet){
obj->insert("traceLengthMutliplier", QJsonValue(trace_length_mutliplier));
}
if(m_trace_stroke_isSet){
obj->insert("traceStroke", QJsonValue(trace_stroke));
}
if(m_trace_decay_isSet){
obj->insert("traceDecay", QJsonValue(trace_decay));
}
return obj;
}
qint64
SWGDSDDemodSettings::getInputFrequencyOffset() {
return input_frequency_offset;
}
void
SWGDSDDemodSettings::setInputFrequencyOffset(qint64 input_frequency_offset) {
this->input_frequency_offset = input_frequency_offset;
this->m_input_frequency_offset_isSet = true;
}
float
SWGDSDDemodSettings::getRfBandwidth() {
return rf_bandwidth;
}
void
SWGDSDDemodSettings::setRfBandwidth(float rf_bandwidth) {
this->rf_bandwidth = rf_bandwidth;
this->m_rf_bandwidth_isSet = true;
}
float
SWGDSDDemodSettings::getFmDeviation() {
return fm_deviation;
}
void
SWGDSDDemodSettings::setFmDeviation(float fm_deviation) {
this->fm_deviation = fm_deviation;
this->m_fm_deviation_isSet = true;
}
float
SWGDSDDemodSettings::getDemodGain() {
return demod_gain;
}
void
SWGDSDDemodSettings::setDemodGain(float demod_gain) {
this->demod_gain = demod_gain;
this->m_demod_gain_isSet = true;
}
float
SWGDSDDemodSettings::getVolume() {
return volume;
}
void
SWGDSDDemodSettings::setVolume(float volume) {
this->volume = volume;
this->m_volume_isSet = true;
}
qint32
SWGDSDDemodSettings::getBaudRate() {
return baud_rate;
}
void
SWGDSDDemodSettings::setBaudRate(qint32 baud_rate) {
this->baud_rate = baud_rate;
this->m_baud_rate_isSet = true;
}
qint32
SWGDSDDemodSettings::getSquelchGate() {
return squelch_gate;
}
void
SWGDSDDemodSettings::setSquelchGate(qint32 squelch_gate) {
this->squelch_gate = squelch_gate;
this->m_squelch_gate_isSet = true;
}
float
SWGDSDDemodSettings::getSquelch() {
return squelch;
}
void
SWGDSDDemodSettings::setSquelch(float squelch) {
this->squelch = squelch;
this->m_squelch_isSet = true;
}
qint32
SWGDSDDemodSettings::getAudioMute() {
return audio_mute;
}
void
SWGDSDDemodSettings::setAudioMute(qint32 audio_mute) {
this->audio_mute = audio_mute;
this->m_audio_mute_isSet = true;
}
qint32
SWGDSDDemodSettings::getEnableCosineFiltering() {
return enable_cosine_filtering;
}
void
SWGDSDDemodSettings::setEnableCosineFiltering(qint32 enable_cosine_filtering) {
this->enable_cosine_filtering = enable_cosine_filtering;
this->m_enable_cosine_filtering_isSet = true;
}
qint32
SWGDSDDemodSettings::getSyncOrConstellation() {
return sync_or_constellation;
}
void
SWGDSDDemodSettings::setSyncOrConstellation(qint32 sync_or_constellation) {
this->sync_or_constellation = sync_or_constellation;
this->m_sync_or_constellation_isSet = true;
}
qint32
SWGDSDDemodSettings::getSlot1On() {
return slot1_on;
}
void
SWGDSDDemodSettings::setSlot1On(qint32 slot1_on) {
this->slot1_on = slot1_on;
this->m_slot1_on_isSet = true;
}
qint32
SWGDSDDemodSettings::getSlot2On() {
return slot2_on;
}
void
SWGDSDDemodSettings::setSlot2On(qint32 slot2_on) {
this->slot2_on = slot2_on;
this->m_slot2_on_isSet = true;
}
qint32
SWGDSDDemodSettings::getTdmaStereo() {
return tdma_stereo;
}
void
SWGDSDDemodSettings::setTdmaStereo(qint32 tdma_stereo) {
this->tdma_stereo = tdma_stereo;
this->m_tdma_stereo_isSet = true;
}
qint32
SWGDSDDemodSettings::getPllLock() {
return pll_lock;
}
void
SWGDSDDemodSettings::setPllLock(qint32 pll_lock) {
this->pll_lock = pll_lock;
this->m_pll_lock_isSet = true;
}
qint32
SWGDSDDemodSettings::getRgbColor() {
return rgb_color;
}
void
SWGDSDDemodSettings::setRgbColor(qint32 rgb_color) {
this->rgb_color = rgb_color;
this->m_rgb_color_isSet = true;
}
QString*
SWGDSDDemodSettings::getTitle() {
return title;
}
void
SWGDSDDemodSettings::setTitle(QString* title) {
this->title = title;
this->m_title_isSet = true;
}
QString*
SWGDSDDemodSettings::getAudioDeviceName() {
return audio_device_name;
}
void
SWGDSDDemodSettings::setAudioDeviceName(QString* audio_device_name) {
this->audio_device_name = audio_device_name;
this->m_audio_device_name_isSet = true;
}
qint32
SWGDSDDemodSettings::getHighPassFilter() {
return high_pass_filter;
}
void
SWGDSDDemodSettings::setHighPassFilter(qint32 high_pass_filter) {
this->high_pass_filter = high_pass_filter;
this->m_high_pass_filter_isSet = true;
}
qint32
SWGDSDDemodSettings::getTraceLengthMutliplier() {
return trace_length_mutliplier;
}
void
SWGDSDDemodSettings::setTraceLengthMutliplier(qint32 trace_length_mutliplier) {
this->trace_length_mutliplier = trace_length_mutliplier;
this->m_trace_length_mutliplier_isSet = true;
}
qint32
SWGDSDDemodSettings::getTraceStroke() {
return trace_stroke;
}
void
SWGDSDDemodSettings::setTraceStroke(qint32 trace_stroke) {
this->trace_stroke = trace_stroke;
this->m_trace_stroke_isSet = true;
}
qint32
SWGDSDDemodSettings::getTraceDecay() {
return trace_decay;
}
void
SWGDSDDemodSettings::setTraceDecay(qint32 trace_decay) {
this->trace_decay = trace_decay;
this->m_trace_decay_isSet = true;
}
bool
SWGDSDDemodSettings::isSet(){
bool isObjectUpdated = false;
do{
if(m_input_frequency_offset_isSet){ isObjectUpdated = true; break;}
if(m_rf_bandwidth_isSet){ isObjectUpdated = true; break;}
if(m_fm_deviation_isSet){ isObjectUpdated = true; break;}
if(m_demod_gain_isSet){ isObjectUpdated = true; break;}
if(m_volume_isSet){ isObjectUpdated = true; break;}
if(m_baud_rate_isSet){ isObjectUpdated = true; break;}
if(m_squelch_gate_isSet){ isObjectUpdated = true; break;}
if(m_squelch_isSet){ isObjectUpdated = true; break;}
if(m_audio_mute_isSet){ isObjectUpdated = true; break;}
if(m_enable_cosine_filtering_isSet){ isObjectUpdated = true; break;}
if(m_sync_or_constellation_isSet){ isObjectUpdated = true; break;}
if(m_slot1_on_isSet){ isObjectUpdated = true; break;}
if(m_slot2_on_isSet){ isObjectUpdated = true; break;}
if(m_tdma_stereo_isSet){ isObjectUpdated = true; break;}
if(m_pll_lock_isSet){ isObjectUpdated = true; break;}
if(m_rgb_color_isSet){ isObjectUpdated = true; break;}
if(title != nullptr && *title != QString("")){ isObjectUpdated = true; break;}
if(audio_device_name != nullptr && *audio_device_name != QString("")){ isObjectUpdated = true; break;}
if(m_high_pass_filter_isSet){ isObjectUpdated = true; break;}
if(m_trace_length_mutliplier_isSet){ isObjectUpdated = true; break;}
if(m_trace_stroke_isSet){ isObjectUpdated = true; break;}
if(m_trace_decay_isSet){ isObjectUpdated = true; break;}
}while(false);
return isObjectUpdated;
}
}

View File

@ -0,0 +1,185 @@
/**
* 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. * Stopping instance i.e. /sdrangel with DELETE method is a server only feature. It allows stopping the instance nicely. * 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 demodulator, Channel Analyzer, Channel Analyzer NG, LoRa demodulator, TCP source * The content type returned is always application/json except in the following cases: * An incorrect URL was specified: this document is returned as text/html with a status 400 ---
*
* OpenAPI spec version: 4.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.
*/
/*
* SWGDSDDemodSettings.h
*
* DSDDemod
*/
#ifndef SWGDSDDemodSettings_H_
#define SWGDSDDemodSettings_H_
#include <QJsonObject>
#include <QString>
#include "SWGObject.h"
#include "export.h"
namespace SWGSDRangel {
class SWG_API SWGDSDDemodSettings: public SWGObject {
public:
SWGDSDDemodSettings();
SWGDSDDemodSettings(QString* json);
virtual ~SWGDSDDemodSettings();
void init();
void cleanup();
virtual QString asJson () override;
virtual QJsonObject* asJsonObject() override;
virtual void fromJsonObject(QJsonObject &json) override;
virtual SWGDSDDemodSettings* fromJson(QString &jsonString) override;
qint64 getInputFrequencyOffset();
void setInputFrequencyOffset(qint64 input_frequency_offset);
float getRfBandwidth();
void setRfBandwidth(float rf_bandwidth);
float getFmDeviation();
void setFmDeviation(float fm_deviation);
float getDemodGain();
void setDemodGain(float demod_gain);
float getVolume();
void setVolume(float volume);
qint32 getBaudRate();
void setBaudRate(qint32 baud_rate);
qint32 getSquelchGate();
void setSquelchGate(qint32 squelch_gate);
float getSquelch();
void setSquelch(float squelch);
qint32 getAudioMute();
void setAudioMute(qint32 audio_mute);
qint32 getEnableCosineFiltering();
void setEnableCosineFiltering(qint32 enable_cosine_filtering);
qint32 getSyncOrConstellation();
void setSyncOrConstellation(qint32 sync_or_constellation);
qint32 getSlot1On();
void setSlot1On(qint32 slot1_on);
qint32 getSlot2On();
void setSlot2On(qint32 slot2_on);
qint32 getTdmaStereo();
void setTdmaStereo(qint32 tdma_stereo);
qint32 getPllLock();
void setPllLock(qint32 pll_lock);
qint32 getRgbColor();
void setRgbColor(qint32 rgb_color);
QString* getTitle();
void setTitle(QString* title);
QString* getAudioDeviceName();
void setAudioDeviceName(QString* audio_device_name);
qint32 getHighPassFilter();
void setHighPassFilter(qint32 high_pass_filter);
qint32 getTraceLengthMutliplier();
void setTraceLengthMutliplier(qint32 trace_length_mutliplier);
qint32 getTraceStroke();
void setTraceStroke(qint32 trace_stroke);
qint32 getTraceDecay();
void setTraceDecay(qint32 trace_decay);
virtual bool isSet() override;
private:
qint64 input_frequency_offset;
bool m_input_frequency_offset_isSet;
float rf_bandwidth;
bool m_rf_bandwidth_isSet;
float fm_deviation;
bool m_fm_deviation_isSet;
float demod_gain;
bool m_demod_gain_isSet;
float volume;
bool m_volume_isSet;
qint32 baud_rate;
bool m_baud_rate_isSet;
qint32 squelch_gate;
bool m_squelch_gate_isSet;
float squelch;
bool m_squelch_isSet;
qint32 audio_mute;
bool m_audio_mute_isSet;
qint32 enable_cosine_filtering;
bool m_enable_cosine_filtering_isSet;
qint32 sync_or_constellation;
bool m_sync_or_constellation_isSet;
qint32 slot1_on;
bool m_slot1_on_isSet;
qint32 slot2_on;
bool m_slot2_on_isSet;
qint32 tdma_stereo;
bool m_tdma_stereo_isSet;
qint32 pll_lock;
bool m_pll_lock_isSet;
qint32 rgb_color;
bool m_rgb_color_isSet;
QString* title;
bool m_title_isSet;
QString* audio_device_name;
bool m_audio_device_name_isSet;
qint32 high_pass_filter;
bool m_high_pass_filter_isSet;
qint32 trace_length_mutliplier;
bool m_trace_length_mutliplier_isSet;
qint32 trace_stroke;
bool m_trace_stroke_isSet;
qint32 trace_decay;
bool m_trace_decay_isSet;
};
}
#endif /* SWGDSDDemodSettings_H_ */

View File

@ -34,6 +34,8 @@
#include "SWGChannelReport.h"
#include "SWGChannelSettings.h"
#include "SWGChannelsDetail.h"
#include "SWGDSDDemodReport.h"
#include "SWGDSDDemodSettings.h"
#include "SWGDVSeralDevices.h"
#include "SWGDVSerialDevice.h"
#include "SWGDeviceListItem.h"
@ -138,6 +140,12 @@ namespace SWGSDRangel {
if(QString("SWGChannelsDetail").compare(type) == 0) {
return new SWGChannelsDetail();
}
if(QString("SWGDSDDemodReport").compare(type) == 0) {
return new SWGDSDDemodReport();
}
if(QString("SWGDSDDemodSettings").compare(type) == 0) {
return new SWGDSDDemodSettings();
}
if(QString("SWGDVSeralDevices").compare(type) == 0) {
return new SWGDVSeralDevices();
}