1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-21 23:55:13 -05:00

BladerRF2 input support (1)

This commit is contained in:
f4exb 2018-09-22 10:39:09 +02:00
parent 57ef3a0567
commit d808f049f6
33 changed files with 1828 additions and 29 deletions

View File

@ -10,8 +10,6 @@
SDRangel is a near real time application that is demanding on CPU power and clock speeds for low latency. Recent (2015 or later) Core i7 class CPU is recommended preferably with 4 HT CPU cores (8 logical CPUs or more) with nominal clock over 2 GHz and at least 8 GB RAM. Modern Intel processors will include a GPU suitable for proper OpenGL support. On the other hand SDRangel is not as demanding as recent computer games for graphics and CPU integrated graphics are perfectly fine. USB-3 ports are also preferable for high speed, low latency USB communication.
⚠ The "server mode version" sdrangelsrv will not run on any ARM machine in particular the Raspberry Pi. It will work only on x86_64 architecture and you will need a server based on Intel Xeon E5 series or better.
<h1>Source code</h1>
<h2>Repository branches</h2>

View File

@ -27,7 +27,7 @@ endif (BUILD_DEBIAN)
#add_definitions(-DQT_SHARED)
add_library(bladerf2device SHARED
${bladerf1device_SOURCES}
${bladerf2device_SOURCES}
)
if (BUILD_DEBIAN)

View File

@ -14,34 +14,47 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
///////////////////////////////////////////////////////////////////////////////////
#include "devicebladerf2.h"
#include <QtGlobal>
#include <cstdio>
#include <cstring>
bool DeviceBladeRF2::open_bladerf(struct bladerf **dev, const char *serial)
#include <QtGlobal>
#include "devicebladerf2.h"
DeviceBladeRF2::DeviceBladeRF2() :
m_dev(0)
{}
DeviceBladeRF2::~DeviceBladeRF2()
{
if (m_dev)
{
bladerf_close(m_dev);
m_dev = 0;
}
}
bool DeviceBladeRF2::open(const char *serial)
{
int fpga_loaded;
if ((*dev = open_bladerf_from_serial(serial)) == 0)
if ((m_dev = open_bladerf_from_serial(serial)) == 0)
{
qCritical("DeviceBladeRF2::open_bladerf: could not open BladeRF");
qCritical("DeviceBladeRF2::open: could not open BladeRF");
return false;
}
fpga_loaded = bladerf_is_fpga_configured(*dev);
fpga_loaded = bladerf_is_fpga_configured(m_dev);
if (fpga_loaded < 0)
{
qCritical("DeviceBladeRF2::open_bladerf: failed to check FPGA state: %s",
qCritical("DeviceBladeRF2::open: failed to check FPGA state: %s",
bladerf_strerror(fpga_loaded));
return false;
}
else if (fpga_loaded == 0)
{
qCritical("DeviceBladeRF2::start: the device's FPGA is not loaded.");
qCritical("DeviceBladeRF2::open: the device's FPGA is not loaded.");
return false;
}
@ -87,4 +100,187 @@ struct bladerf *DeviceBladeRF2::open_bladerf_from_serial(const char *serial)
}
}
void DeviceBladeRF2::getFrequencyRangeRx(int& min, int& max, int& step)
{
if (m_dev)
{
const struct bladerf_range *range;
int status;
status = bladerf_get_frequency_range(m_dev, BLADERF_CHANNEL_RX(0), &range);
if (status < 0)
{
qCritical("DeviceBladeRF2::getFrequencyRangeRx: Failed to get Rx frequency range: %s",
bladerf_strerror(status));
}
else
{
min = range->min;
max = range->max;
step = range->step;
}
}
}
void DeviceBladeRF2::getFrequencyRangeTx(int& min, int& max, int& step)
{
if (m_dev)
{
const struct bladerf_range *range;
int status;
status = bladerf_get_frequency_range(m_dev, BLADERF_CHANNEL_TX(0), &range);
if (status < 0)
{
qCritical("DeviceBladeRF2::getFrequencyRangeTx: Failed to get Tx frequency range: %s",
bladerf_strerror(status));
}
else
{
min = range->min;
max = range->max;
step = range->step;
}
}
}
void DeviceBladeRF2::getSampleRateRangeRx(int& min, int& max, int& step)
{
if (m_dev)
{
const struct bladerf_range *range;
int status;
status = bladerf_get_sample_rate_range(m_dev, BLADERF_CHANNEL_RX(0), &range);
if (status < 0)
{
qCritical("DeviceBladeRF2::getSampleRateRangeRx: Failed to get Rx sample rate range: %s",
bladerf_strerror(status));
}
else
{
min = range->min;
max = range->max;
step = range->step;
}
}
}
void DeviceBladeRF2::getSampleRateRangeTx(int& min, int& max, int& step)
{
if (m_dev)
{
const struct bladerf_range *range;
int status;
status = bladerf_get_sample_rate_range(m_dev, BLADERF_CHANNEL_TX(0), &range);
if (status < 0)
{
qCritical("DeviceBladeRF2::getSampleRateRangeTx: Failed to get Tx sample rate range: %s",
bladerf_strerror(status));
}
else
{
min = range->min;
max = range->max;
step = range->step;
}
}
}
void DeviceBladeRF2::getBandwidthRangeRx(int& min, int& max, int& step)
{
if (m_dev)
{
const struct bladerf_range *range;
int status;
status = bladerf_get_bandwidth_range(m_dev, BLADERF_CHANNEL_RX(0), &range);
if (status < 0)
{
qCritical("DeviceBladeRF2::getBandwidthRangeRx: Failed to get Rx bandwidth range: %s",
bladerf_strerror(status));
}
else
{
min = range->min;
max = range->max;
step = range->step;
}
}
}
void DeviceBladeRF2::getBandwidthRangeTx(int& min, int& max, int& step)
{
if (m_dev)
{
const struct bladerf_range *range;
int status;
status = bladerf_get_bandwidth_range(m_dev, BLADERF_CHANNEL_TX(0), &range);
if (status < 0)
{
qCritical("DeviceBladeRF2::getBandwidthRangeTx: Failed to get Tx bandwidth range: %s",
bladerf_strerror(status));
}
else
{
min = range->min;
max = range->max;
step = range->step;
}
}
}
void DeviceBladeRF2::getGlobalGainRangeRx(int& min, int& max, int& step)
{
if (m_dev)
{
const struct bladerf_range *range;
int status;
status = bladerf_get_gain_range(m_dev, BLADERF_CHANNEL_RX(0), &range);
if (status < 0)
{
qCritical("DeviceBladeRF2::getGlobalGainRangeRx: Failed to get Rx global gain range: %s",
bladerf_strerror(status));
}
else
{
min = range->min;
max = range->max;
step = range->step;
}
}
}
void DeviceBladeRF2::getGlobalGainRangeTx(int& min, int& max, int& step)
{
if (m_dev)
{
const struct bladerf_range *range;
int status;
status = bladerf_get_gain_range(m_dev, BLADERF_CHANNEL_TX(0), &range);
if (status < 0)
{
qCritical("DeviceBladeRF2::getGlobalGainRangeTx: Failed to get Tx global gain range: %s",
bladerf_strerror(status));
}
else
{
min = range->min;
max = range->max;
step = range->step;
}
}
}

View File

@ -17,6 +17,7 @@
#ifndef DEVICES_BLADERF2_DEVICEBLADERF2_H_
#define DEVICES_BLADERF2_DEVICEBLADERF2_H_
#include <stdint.h>
#include <libbladeRF.h>
#include "export.h"
@ -24,9 +25,23 @@
class DEVICES_API DeviceBladeRF2
{
public:
static bool open_bladerf(struct bladerf **dev, const char *serial);
DeviceBladeRF2();
~DeviceBladeRF2();
bool open(const char *serial);
void close();
void getFrequencyRangeRx(int& min, int& max, int& step);
void getFrequencyRangeTx(int& min, int& max, int& step);
void getSampleRateRangeRx(int& min, int& max, int& step);
void getSampleRateRangeTx(int& min, int& max, int& step);
void getBandwidthRangeRx(int& min, int& max, int& step);
void getBandwidthRangeTx(int& min, int& max, int& step);
void getGlobalGainRangeRx(int& min, int& max, int& step);
void getGlobalGainRangeTx(int& min, int& max, int& step);
private:
bladerf *m_dev;
static struct bladerf *open_bladerf_from_serial(const char *serial);
};

View File

@ -0,0 +1,152 @@
///////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2018 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 //
// //
// 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 "bladerf2inputplugin.h"
#include <QtPlugin>
#include <libbladeRF.h>
#include "plugin/pluginapi.h"
#include "util/simpleserializer.h"
#include <device/devicesourceapi.h>
#ifdef SERVER_MODE
#include "bladerf2input.h"
#else
#include "bladerf2inputgui.h"
#endif
const PluginDescriptor Blderf2InputPlugin::m_pluginDescriptor = {
QString("BladeRF2 Input"),
QString("4.2.0"),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,
QString("https://github.com/f4exb/sdrangel")
};
const QString Blderf2InputPlugin::m_hardwareID = "BladeRF2";
const QString Blderf2InputPlugin::m_deviceTypeID = BLADERF2INPUT_DEVICE_TYPE_ID;
Blderf2InputPlugin::Blderf2InputPlugin(QObject* parent) :
QObject(parent)
{
}
const PluginDescriptor& Blderf2InputPlugin::getPluginDescriptor() const
{
return m_pluginDescriptor;
}
void Blderf2InputPlugin::initPlugin(PluginAPI* pluginAPI)
{
pluginAPI->registerSampleSource(m_deviceTypeID, this);
}
PluginInterface::SamplingDevices Blderf2InputPlugin::enumSampleSources()
{
SamplingDevices result;
struct bladerf_devinfo *devinfo = 0;
int count = bladerf_get_device_list(&devinfo);
if (devinfo)
{
for(int i = 0; i < count; i++)
{
struct bladerf *dev;
int status = bladerf_open_with_devinfo(&dev, &devinfo[i]);
if (status == BLADERF_ERR_NODEV)
{
qCritical("Blderf2InputPlugin::enumSampleSources: No device at index %d", i);
continue;
}
else if (status != 0)
{
qCritical("Blderf2InputPlugin::enumSampleSources: Failed to open device at index %d", i);
continue;
}
const char *boardName = bladerf_get_board_name(dev);
if (strcmp(boardName, "bladerf2") == 0)
{
QString displayedName(QString("BladeRF2[%1] %2").arg(devinfo[i].instance).arg(devinfo[i].serial));
result.append(SamplingDevice(displayedName,
m_hardwareID,
m_deviceTypeID,
QString(devinfo[i].serial),
i,
PluginInterface::SamplingDevice::PhysicalDevice,
true,
1,
0));
}
bladerf_close(dev);
}
bladerf_free_device_list(devinfo); // Valgrind memcheck
}
return result;
}
#ifdef SERVER_MODE
PluginInstanceGUI* Blderf2InputPlugin::createSampleSourcePluginInstanceGUI(
const QString& sourceId __attribute__((unused)),
QWidget **widget __attribute__((unused)),
DeviceUISet *deviceUISet __attribute__((unused)))
{
return 0;
}
#else
PluginInstanceGUI* Blderf2InputPlugin::createSampleSourcePluginInstanceGUI(
const QString& sourceId,
QWidget **widget,
DeviceUISet *deviceUISet)
{
if(sourceId == m_deviceTypeID)
{
Bladerf2InputGui* gui = new Bladerf2InputGui(deviceUISet);
*widget = gui;
return gui;
}
else
{
return 0;
}
}
#endif
DeviceSampleSource *Blderf2InputPlugin::createSampleSourcePluginInstanceInput(const QString& sourceId, DeviceSourceAPI *deviceAPI)
{
if (sourceId == m_deviceTypeID)
{
Bladerf2Input *input = new Bladerf2Input(deviceAPI);
return input;
}
else
{
return 0;
}
}

View File

@ -0,0 +1,57 @@
///////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2018 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 //
// //
// 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 PLUGINS_SAMPLESOURCE_BLADERF2INPUT_BLADERF2INPUTPLUGIN_H_
#define PLUGINS_SAMPLESOURCE_BLADERF2INPUT_BLADERF2INPUTPLUGIN_H_
#include <QObject>
#include "plugin/plugininterface.h"
class PluginAPI;
class DeviceSourceAPI;
class DeviceUISet;
#define BLADERF2INPUT_DEVICE_TYPE_ID "sdrangel.samplesource.bladerf2input"
class Blderf2InputPlugin : public QObject, public PluginInterface {
Q_OBJECT
Q_INTERFACES(PluginInterface)
Q_PLUGIN_METADATA(IID BLADERF2INPUT_DEVICE_TYPE_ID)
public:
explicit Blderf2InputPlugin(QObject* parent = 0);
const PluginDescriptor& getPluginDescriptor() const;
void initPlugin(PluginAPI* pluginAPI);
virtual SamplingDevices enumSampleSources();
virtual PluginInstanceGUI* createSampleSourcePluginInstanceGUI(
const QString& sourceId,
QWidget **widget,
DeviceUISet *deviceUISet);
virtual DeviceSampleSource* createSampleSourcePluginInstanceInput(const QString& sourceId, DeviceSourceAPI *deviceAPI);
static const QString m_hardwareID;
static const QString m_deviceTypeID;
private:
static const PluginDescriptor m_pluginDescriptor;
};
#endif /* PLUGINS_SAMPLESOURCE_BLADERF2INPUT_BLADERF2INPUTPLUGIN_H_ */

View File

@ -0,0 +1,92 @@
///////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2018 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 //
// //
// 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 "bladerf2inputsettings.h"
#include "util/simpleserializer.h"
BladeRF2InputSettings::BladeRF2InputSettings()
{
resetToDefaults();
}
void BladeRF2InputSettings::resetToDefaults()
{
m_centerFrequency = 435000*1000;
m_devSampleRate = 3072000;
m_bandwidth = 1500000;
m_gainMode = 0;
m_globalGain = 0;
m_biasTee = false;
m_log2Decim = 0;
m_fcPos = FC_POS_INFRA;
m_dcBlock = false;
m_iqCorrection = false;
m_fileRecordName = "";
}
QByteArray BladeRF2InputSettings::serialize() const
{
SimpleSerializer s(1);
s.writeS32(1, m_devSampleRate);
s.writeS32(2, m_bandwidth);
s.writeS32(3, m_gainMode);
s.writeS32(4, m_globalGain);
s.writeBool(5, m_biasTee);
s.writeU32(6, m_log2Decim);
s.writeS32(7, (int) m_fcPos);
s.writeBool(8, m_dcBlock);
s.writeBool(9, m_iqCorrection);
return s.final();
}
bool BladeRF2InputSettings::deserialize(const QByteArray& data)
{
SimpleDeserializer d(data);
if (!d.isValid())
{
resetToDefaults();
return false;
}
if (d.getVersion() == 1)
{
int intval;
d.readS32(1, &m_devSampleRate, 3072000);
d.readS32(2, &m_bandwidth);
d.readS32(3, &m_gainMode);
d.readS32(4, &m_globalGain);
d.readBool(5, &m_biasTee);
d.readU32(6, &m_log2Decim);
d.readS32(7, &intval);
m_fcPos = (fcPos_t) intval;
d.readBool(8, &m_dcBlock);
d.readBool(9, &m_iqCorrection);
return true;
}
else
{
resetToDefaults();
return false;
}
}

View File

@ -0,0 +1,52 @@
///////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2018 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 //
// //
// 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 PLUGINS_SAMPLESOURCE_BLADERF2INPUT_BLADERF2INPUTSETTINGS_H_
#define PLUGINS_SAMPLESOURCE_BLADERF2INPUT_BLADERF2INPUTSETTINGS_H_
#include <QtGlobal>
#include <QString>
#include <libbladeRF.h>
struct BladeRF2InputSettings {
typedef enum {
FC_POS_INFRA = 0,
FC_POS_SUPRA,
FC_POS_CENTER
} fcPos_t;
quint64 m_centerFrequency;
qint32 m_devSampleRate;
qint32 m_bandwidth;
int m_gainMode;
int m_globalGain;
bool m_biasTee;
quint32 m_log2Decim;
fcPos_t m_fcPos;
bool m_dcBlock;
bool m_iqCorrection;
QString m_fileRecordName;
BladeRF2InputSettings();
void resetToDefaults();
QByteArray serialize() const;
bool deserialize(const QByteArray& data);
};
#endif /* PLUGINS_SAMPLESOURCE_BLADERF2INPUT_BLADERF2INPUTSETTINGS_H_ */

View File

@ -27,7 +27,6 @@
class DeviceSourceAPI;
class LimeSDRInputThread;
struct DeviceLimeSDRParams;
class FileRecord;
class LimeSDRInput : public DeviceSampleSource

View File

@ -9,6 +9,7 @@
<file>webapi/doc/swagger/include/ATVMod.yaml</file>
<file>webapi/doc/swagger/include/BFMDemod.yaml</file>
<file>webapi/doc/swagger/include/BladeRF1.yaml</file>
<file>webapi/doc/swagger/include/BladeRF2.yaml</file>
<file>webapi/doc/swagger/include/CWKeyer.yaml</file>
<file>webapi/doc/swagger/include/DSDDemod.yaml</file>
<file>webapi/doc/swagger/include/FCDPro.yaml</file>

View File

@ -1267,7 +1267,7 @@ margin-bottom: 20px;
"type" : "string"
}
},
"description" : "BladeRF"
"description" : "BladeRF1"
};
defs.BladeRF1OutputSettings = {
"properties" : {
@ -1300,7 +1300,63 @@ margin-bottom: 20px;
"type" : "integer"
}
},
"description" : "BladeRF"
"description" : "BladeRF1"
};
defs.BladeRF2InputReport = {
"properties" : {
"frequencyRange" : {
"$ref" : "#/definitions/Range"
},
"sampleRateRange" : {
"$ref" : "#/definitions/Range"
},
"bandwidthRange" : {
"$ref" : "#/definitions/Range"
},
"globalGainRange" : {
"$ref" : "#/definitions/Range"
}
},
"description" : "BladeRF2"
};
defs.BladeRF2InputSettings = {
"properties" : {
"centerFrequency" : {
"type" : "integer",
"format" : "int64"
},
"devSampleRate" : {
"type" : "integer"
},
"bandwidth" : {
"type" : "integer"
},
"gainMode" : {
"type" : "integer"
},
"globalGain" : {
"type" : "integer"
},
"biasTee" : {
"type" : "integer"
},
"log2Decim" : {
"type" : "integer"
},
"fcPos" : {
"type" : "integer"
},
"dcBlock" : {
"type" : "integer"
},
"iqCorrection" : {
"type" : "integer"
},
"fileRecordName" : {
"type" : "string"
}
},
"description" : "BladeRF2"
};
defs.CWKeyerSettings = {
"properties" : {
@ -1838,6 +1894,9 @@ margin-bottom: 20px;
"airspyHFReport" : {
"$ref" : "#/definitions/AirspyHFReport"
},
"bladeRF2InputReport" : {
"$ref" : "#/definitions/BladeRF2InputReport"
},
"fileSourceReport" : {
"$ref" : "#/definitions/FileSourceReport"
},
@ -1932,6 +1991,9 @@ margin-bottom: 20px;
"bladeRF1InputSettings" : {
"$ref" : "#/definitions/BladeRF1InputSettings"
},
"bladeRF2InputSettings" : {
"$ref" : "#/definitions/BladeRF2InputSettings"
},
"bladeRF1OutputSettings" : {
"$ref" : "#/definitions/BladeRF1OutputSettings"
},
@ -3147,6 +3209,20 @@ margin-bottom: 20px;
"format" : "float"
}
}
};
defs.Range = {
"properties" : {
"min" : {
"type" : "integer"
},
"max" : {
"type" : "integer"
},
"step" : {
"type" : "integer"
}
},
"description" : "An arbitrary range of values"
};
defs.RtlSdrReport = {
"properties" : {
@ -23066,7 +23142,7 @@ except ApiException as e:
</div>
<div id="generator">
<div class="content">
Generated 2018-09-19T05:34:44.404+02:00
Generated 2018-09-22T10:27:51.856+02:00
</div>
</div>
</div>

View File

@ -1,5 +1,5 @@
BladeRF1InputSettings:
description: BladeRF
description: BladeRF1
properties:
centerFrequency:
type: integer
@ -32,7 +32,7 @@ BladeRF1InputSettings:
type: string
BladeRF1OutputSettings:
description: BladeRF
description: BladeRF1
properties:
centerFrequency:
type: integer

View File

@ -0,0 +1,39 @@
BladeRF2InputSettings:
description: BladeRF2
properties:
centerFrequency:
type: integer
format: int64
devSampleRate:
type: integer
bandwidth:
type: integer
gainMode:
type: integer
globalGain:
type: integer
biasTee:
type: integer
log2Decim:
type: integer
fcPos:
type: integer
dcBlock:
type: integer
iqCorrection:
type: integer
fileRecordName:
type: string
BladeRF2InputReport:
description: BladeRF2
properties:
frequencyRange:
$ref: "/doc/swagger/include/Structs.yaml#/Range"
sampleRateRange:
$ref: "/doc/swagger/include/Structs.yaml#/Range"
bandwidthRange:
$ref: "/doc/swagger/include/Structs.yaml#/Range"
globalGainRange:
$ref: "/doc/swagger/include/Structs.yaml#/Range"

View File

@ -31,4 +31,13 @@ Gain:
properties:
gainCB:
type: integer
Range:
description: An arbitrary range of values
properties:
min:
type: integer
max:
type: integer
step:
type: integer

View File

@ -1765,6 +1765,8 @@ definitions:
$ref: "/doc/swagger/include/AirspyHF.yaml#/AirspyHFSettings"
bladeRF1InputSettings:
$ref: "/doc/swagger/include/BladeRF1.yaml#/BladeRF1InputSettings"
bladeRF2InputSettings:
$ref: "/doc/swagger/include/BladeRF2.yaml#/BladeRF2InputSettings"
bladeRF1OutputSettings:
$ref: "/doc/swagger/include/BladeRF1.yaml#/BladeRF1OutputSettings"
fcdProSettings:
@ -1816,6 +1818,8 @@ definitions:
$ref: "/doc/swagger/include/Airspy.yaml#/AirspyReport"
airspyHFReport:
$ref: "/doc/swagger/include/AirspyHF.yaml#/AirspyHFReport"
bladeRF2InputReport:
$ref: "/doc/swagger/include/BladeRF2.yaml#/BladeRF2InputReport"
fileSourceReport:
$ref: "/doc/swagger/include/FileSource.yaml#/FileSourceReport"
limeSdrInputReport:

View File

@ -1,5 +1,5 @@
BladeRF1InputSettings:
description: BladeRF
description: BladeRF1
properties:
centerFrequency:
type: integer
@ -32,7 +32,7 @@ BladeRF1InputSettings:
type: string
BladeRF1OutputSettings:
description: BladeRF
description: BladeRF1
properties:
centerFrequency:
type: integer

View File

@ -0,0 +1,39 @@
BladeRF2InputSettings:
description: BladeRF2
properties:
centerFrequency:
type: integer
format: int64
devSampleRate:
type: integer
bandwidth:
type: integer
gainMode:
type: integer
globalGain:
type: integer
biasTee:
type: integer
log2Decim:
type: integer
fcPos:
type: integer
dcBlock:
type: integer
iqCorrection:
type: integer
fileRecordName:
type: string
BladeRF2InputReport:
description: BladeRF2
properties:
frequencyRange:
$ref: "http://localhost:8081/api/swagger/include/Structs.yaml#/Range"
sampleRateRange:
$ref: "http://localhost:8081/api/swagger/include/Structs.yaml#/Range"
bandwidthRange:
$ref: "http://localhost:8081/api/swagger/include/Structs.yaml#/Range"
globalGainRange:
$ref: "http://localhost:8081/api/swagger/include/Structs.yaml#/Range"

View File

@ -31,4 +31,13 @@ Gain:
properties:
gainCB:
type: integer
Range:
description: An arbitrary range of values
properties:
min:
type: integer
max:
type: integer
step:
type: integer

View File

@ -1765,6 +1765,8 @@ definitions:
$ref: "http://localhost:8081/api/swagger/include/AirspyHF.yaml#/AirspyHFSettings"
bladeRF1InputSettings:
$ref: "http://localhost:8081/api/swagger/include/BladeRF1.yaml#/BladeRF1InputSettings"
bladeRF2InputSettings:
$ref: "http://localhost:8081/api/swagger/include/BladeRF2.yaml#/BladeRF2InputSettings"
bladeRF1OutputSettings:
$ref: "http://localhost:8081/api/swagger/include/BladeRF1.yaml#/BladeRF1OutputSettings"
fcdProSettings:
@ -1816,6 +1818,8 @@ definitions:
$ref: "http://localhost:8081/api/swagger/include/Airspy.yaml#/AirspyReport"
airspyHFReport:
$ref: "http://localhost:8081/api/swagger/include/AirspyHF.yaml#/AirspyHFReport"
bladeRF2InputReport:
$ref: "http://localhost:8081/api/swagger/include/BladeRF2.yaml#/BladeRF2InputReport"
fileSourceReport:
$ref: "http://localhost:8081/api/swagger/include/FileSource.yaml#/FileSourceReport"
limeSdrInputReport:

View File

@ -1267,7 +1267,7 @@ margin-bottom: 20px;
"type" : "string"
}
},
"description" : "BladeRF"
"description" : "BladeRF1"
};
defs.BladeRF1OutputSettings = {
"properties" : {
@ -1300,7 +1300,63 @@ margin-bottom: 20px;
"type" : "integer"
}
},
"description" : "BladeRF"
"description" : "BladeRF1"
};
defs.BladeRF2InputReport = {
"properties" : {
"frequencyRange" : {
"$ref" : "#/definitions/Range"
},
"sampleRateRange" : {
"$ref" : "#/definitions/Range"
},
"bandwidthRange" : {
"$ref" : "#/definitions/Range"
},
"globalGainRange" : {
"$ref" : "#/definitions/Range"
}
},
"description" : "BladeRF2"
};
defs.BladeRF2InputSettings = {
"properties" : {
"centerFrequency" : {
"type" : "integer",
"format" : "int64"
},
"devSampleRate" : {
"type" : "integer"
},
"bandwidth" : {
"type" : "integer"
},
"gainMode" : {
"type" : "integer"
},
"globalGain" : {
"type" : "integer"
},
"biasTee" : {
"type" : "integer"
},
"log2Decim" : {
"type" : "integer"
},
"fcPos" : {
"type" : "integer"
},
"dcBlock" : {
"type" : "integer"
},
"iqCorrection" : {
"type" : "integer"
},
"fileRecordName" : {
"type" : "string"
}
},
"description" : "BladeRF2"
};
defs.CWKeyerSettings = {
"properties" : {
@ -1838,6 +1894,9 @@ margin-bottom: 20px;
"airspyHFReport" : {
"$ref" : "#/definitions/AirspyHFReport"
},
"bladeRF2InputReport" : {
"$ref" : "#/definitions/BladeRF2InputReport"
},
"fileSourceReport" : {
"$ref" : "#/definitions/FileSourceReport"
},
@ -1932,6 +1991,9 @@ margin-bottom: 20px;
"bladeRF1InputSettings" : {
"$ref" : "#/definitions/BladeRF1InputSettings"
},
"bladeRF2InputSettings" : {
"$ref" : "#/definitions/BladeRF2InputSettings"
},
"bladeRF1OutputSettings" : {
"$ref" : "#/definitions/BladeRF1OutputSettings"
},
@ -3147,6 +3209,20 @@ margin-bottom: 20px;
"format" : "float"
}
}
};
defs.Range = {
"properties" : {
"min" : {
"type" : "integer"
},
"max" : {
"type" : "integer"
},
"step" : {
"type" : "integer"
}
},
"description" : "An arbitrary range of values"
};
defs.RtlSdrReport = {
"properties" : {
@ -23066,7 +23142,7 @@ except ApiException as e:
</div>
<div id="generator">
<div class="content">
Generated 2018-09-19T05:34:44.404+02:00
Generated 2018-09-22T10:27:51.856+02:00
</div>
</div>
</div>

View File

@ -13,7 +13,7 @@
/*
* SWGBladeRF1InputSettings.h
*
* BladeRF
* BladeRF1
*/
#ifndef SWGBladeRF1InputSettings_H_

View File

@ -13,7 +13,7 @@
/*
* SWGBladeRF1OutputSettings.h
*
* BladeRF
* BladeRF1
*/
#ifndef SWGBladeRF1OutputSettings_H_

View File

@ -0,0 +1,177 @@
/**
* SDRangel
* This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time ---
*
* OpenAPI spec version: 4.2.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 "SWGBladeRF2InputReport.h"
#include "SWGHelpers.h"
#include <QJsonDocument>
#include <QJsonArray>
#include <QObject>
#include <QDebug>
namespace SWGSDRangel {
SWGBladeRF2InputReport::SWGBladeRF2InputReport(QString* json) {
init();
this->fromJson(*json);
}
SWGBladeRF2InputReport::SWGBladeRF2InputReport() {
frequency_range = nullptr;
m_frequency_range_isSet = false;
sample_rate_range = nullptr;
m_sample_rate_range_isSet = false;
bandwidth_range = nullptr;
m_bandwidth_range_isSet = false;
global_gain_range = nullptr;
m_global_gain_range_isSet = false;
}
SWGBladeRF2InputReport::~SWGBladeRF2InputReport() {
this->cleanup();
}
void
SWGBladeRF2InputReport::init() {
frequency_range = new SWGRange();
m_frequency_range_isSet = false;
sample_rate_range = new SWGRange();
m_sample_rate_range_isSet = false;
bandwidth_range = new SWGRange();
m_bandwidth_range_isSet = false;
global_gain_range = new SWGRange();
m_global_gain_range_isSet = false;
}
void
SWGBladeRF2InputReport::cleanup() {
if(frequency_range != nullptr) {
delete frequency_range;
}
if(sample_rate_range != nullptr) {
delete sample_rate_range;
}
if(bandwidth_range != nullptr) {
delete bandwidth_range;
}
if(global_gain_range != nullptr) {
delete global_gain_range;
}
}
SWGBladeRF2InputReport*
SWGBladeRF2InputReport::fromJson(QString &json) {
QByteArray array (json.toStdString().c_str());
QJsonDocument doc = QJsonDocument::fromJson(array);
QJsonObject jsonObject = doc.object();
this->fromJsonObject(jsonObject);
return this;
}
void
SWGBladeRF2InputReport::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&frequency_range, pJson["frequencyRange"], "SWGRange", "SWGRange");
::SWGSDRangel::setValue(&sample_rate_range, pJson["sampleRateRange"], "SWGRange", "SWGRange");
::SWGSDRangel::setValue(&bandwidth_range, pJson["bandwidthRange"], "SWGRange", "SWGRange");
::SWGSDRangel::setValue(&global_gain_range, pJson["globalGainRange"], "SWGRange", "SWGRange");
}
QString
SWGBladeRF2InputReport::asJson ()
{
QJsonObject* obj = this->asJsonObject();
QJsonDocument doc(*obj);
QByteArray bytes = doc.toJson();
delete obj;
return QString(bytes);
}
QJsonObject*
SWGBladeRF2InputReport::asJsonObject() {
QJsonObject* obj = new QJsonObject();
if((frequency_range != nullptr) && (frequency_range->isSet())){
toJsonValue(QString("frequencyRange"), frequency_range, obj, QString("SWGRange"));
}
if((sample_rate_range != nullptr) && (sample_rate_range->isSet())){
toJsonValue(QString("sampleRateRange"), sample_rate_range, obj, QString("SWGRange"));
}
if((bandwidth_range != nullptr) && (bandwidth_range->isSet())){
toJsonValue(QString("bandwidthRange"), bandwidth_range, obj, QString("SWGRange"));
}
if((global_gain_range != nullptr) && (global_gain_range->isSet())){
toJsonValue(QString("globalGainRange"), global_gain_range, obj, QString("SWGRange"));
}
return obj;
}
SWGRange*
SWGBladeRF2InputReport::getFrequencyRange() {
return frequency_range;
}
void
SWGBladeRF2InputReport::setFrequencyRange(SWGRange* frequency_range) {
this->frequency_range = frequency_range;
this->m_frequency_range_isSet = true;
}
SWGRange*
SWGBladeRF2InputReport::getSampleRateRange() {
return sample_rate_range;
}
void
SWGBladeRF2InputReport::setSampleRateRange(SWGRange* sample_rate_range) {
this->sample_rate_range = sample_rate_range;
this->m_sample_rate_range_isSet = true;
}
SWGRange*
SWGBladeRF2InputReport::getBandwidthRange() {
return bandwidth_range;
}
void
SWGBladeRF2InputReport::setBandwidthRange(SWGRange* bandwidth_range) {
this->bandwidth_range = bandwidth_range;
this->m_bandwidth_range_isSet = true;
}
SWGRange*
SWGBladeRF2InputReport::getGlobalGainRange() {
return global_gain_range;
}
void
SWGBladeRF2InputReport::setGlobalGainRange(SWGRange* global_gain_range) {
this->global_gain_range = global_gain_range;
this->m_global_gain_range_isSet = true;
}
bool
SWGBladeRF2InputReport::isSet(){
bool isObjectUpdated = false;
do{
if(frequency_range != nullptr && frequency_range->isSet()){ isObjectUpdated = true; break;}
if(sample_rate_range != nullptr && sample_rate_range->isSet()){ isObjectUpdated = true; break;}
if(bandwidth_range != nullptr && bandwidth_range->isSet()){ isObjectUpdated = true; break;}
if(global_gain_range != nullptr && global_gain_range->isSet()){ isObjectUpdated = true; break;}
}while(false);
return isObjectUpdated;
}
}

View File

@ -0,0 +1,77 @@
/**
* SDRangel
* This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time ---
*
* OpenAPI spec version: 4.2.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.
*/
/*
* SWGBladeRF2InputReport.h
*
* BladeRF2
*/
#ifndef SWGBladeRF2InputReport_H_
#define SWGBladeRF2InputReport_H_
#include <QJsonObject>
#include "SWGRange.h"
#include "SWGObject.h"
#include "export.h"
namespace SWGSDRangel {
class SWG_API SWGBladeRF2InputReport: public SWGObject {
public:
SWGBladeRF2InputReport();
SWGBladeRF2InputReport(QString* json);
virtual ~SWGBladeRF2InputReport();
void init();
void cleanup();
virtual QString asJson () override;
virtual QJsonObject* asJsonObject() override;
virtual void fromJsonObject(QJsonObject &json) override;
virtual SWGBladeRF2InputReport* fromJson(QString &jsonString) override;
SWGRange* getFrequencyRange();
void setFrequencyRange(SWGRange* frequency_range);
SWGRange* getSampleRateRange();
void setSampleRateRange(SWGRange* sample_rate_range);
SWGRange* getBandwidthRange();
void setBandwidthRange(SWGRange* bandwidth_range);
SWGRange* getGlobalGainRange();
void setGlobalGainRange(SWGRange* global_gain_range);
virtual bool isSet() override;
private:
SWGRange* frequency_range;
bool m_frequency_range_isSet;
SWGRange* sample_rate_range;
bool m_sample_rate_range_isSet;
SWGRange* bandwidth_range;
bool m_bandwidth_range_isSet;
SWGRange* global_gain_range;
bool m_global_gain_range_isSet;
};
}
#endif /* SWGBladeRF2InputReport_H_ */

View File

@ -0,0 +1,318 @@
/**
* SDRangel
* This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time ---
*
* OpenAPI spec version: 4.2.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 "SWGBladeRF2InputSettings.h"
#include "SWGHelpers.h"
#include <QJsonDocument>
#include <QJsonArray>
#include <QObject>
#include <QDebug>
namespace SWGSDRangel {
SWGBladeRF2InputSettings::SWGBladeRF2InputSettings(QString* json) {
init();
this->fromJson(*json);
}
SWGBladeRF2InputSettings::SWGBladeRF2InputSettings() {
center_frequency = 0L;
m_center_frequency_isSet = false;
dev_sample_rate = 0;
m_dev_sample_rate_isSet = false;
bandwidth = 0;
m_bandwidth_isSet = false;
gain_mode = 0;
m_gain_mode_isSet = false;
global_gain = 0;
m_global_gain_isSet = false;
bias_tee = 0;
m_bias_tee_isSet = false;
log2_decim = 0;
m_log2_decim_isSet = false;
fc_pos = 0;
m_fc_pos_isSet = false;
dc_block = 0;
m_dc_block_isSet = false;
iq_correction = 0;
m_iq_correction_isSet = false;
file_record_name = nullptr;
m_file_record_name_isSet = false;
}
SWGBladeRF2InputSettings::~SWGBladeRF2InputSettings() {
this->cleanup();
}
void
SWGBladeRF2InputSettings::init() {
center_frequency = 0L;
m_center_frequency_isSet = false;
dev_sample_rate = 0;
m_dev_sample_rate_isSet = false;
bandwidth = 0;
m_bandwidth_isSet = false;
gain_mode = 0;
m_gain_mode_isSet = false;
global_gain = 0;
m_global_gain_isSet = false;
bias_tee = 0;
m_bias_tee_isSet = false;
log2_decim = 0;
m_log2_decim_isSet = false;
fc_pos = 0;
m_fc_pos_isSet = false;
dc_block = 0;
m_dc_block_isSet = false;
iq_correction = 0;
m_iq_correction_isSet = false;
file_record_name = new QString("");
m_file_record_name_isSet = false;
}
void
SWGBladeRF2InputSettings::cleanup() {
if(file_record_name != nullptr) {
delete file_record_name;
}
}
SWGBladeRF2InputSettings*
SWGBladeRF2InputSettings::fromJson(QString &json) {
QByteArray array (json.toStdString().c_str());
QJsonDocument doc = QJsonDocument::fromJson(array);
QJsonObject jsonObject = doc.object();
this->fromJsonObject(jsonObject);
return this;
}
void
SWGBladeRF2InputSettings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&center_frequency, pJson["centerFrequency"], "qint64", "");
::SWGSDRangel::setValue(&dev_sample_rate, pJson["devSampleRate"], "qint32", "");
::SWGSDRangel::setValue(&bandwidth, pJson["bandwidth"], "qint32", "");
::SWGSDRangel::setValue(&gain_mode, pJson["gainMode"], "qint32", "");
::SWGSDRangel::setValue(&global_gain, pJson["globalGain"], "qint32", "");
::SWGSDRangel::setValue(&bias_tee, pJson["biasTee"], "qint32", "");
::SWGSDRangel::setValue(&log2_decim, pJson["log2Decim"], "qint32", "");
::SWGSDRangel::setValue(&fc_pos, pJson["fcPos"], "qint32", "");
::SWGSDRangel::setValue(&dc_block, pJson["dcBlock"], "qint32", "");
::SWGSDRangel::setValue(&iq_correction, pJson["iqCorrection"], "qint32", "");
::SWGSDRangel::setValue(&file_record_name, pJson["fileRecordName"], "QString", "QString");
}
QString
SWGBladeRF2InputSettings::asJson ()
{
QJsonObject* obj = this->asJsonObject();
QJsonDocument doc(*obj);
QByteArray bytes = doc.toJson();
delete obj;
return QString(bytes);
}
QJsonObject*
SWGBladeRF2InputSettings::asJsonObject() {
QJsonObject* obj = new QJsonObject();
if(m_center_frequency_isSet){
obj->insert("centerFrequency", QJsonValue(center_frequency));
}
if(m_dev_sample_rate_isSet){
obj->insert("devSampleRate", QJsonValue(dev_sample_rate));
}
if(m_bandwidth_isSet){
obj->insert("bandwidth", QJsonValue(bandwidth));
}
if(m_gain_mode_isSet){
obj->insert("gainMode", QJsonValue(gain_mode));
}
if(m_global_gain_isSet){
obj->insert("globalGain", QJsonValue(global_gain));
}
if(m_bias_tee_isSet){
obj->insert("biasTee", QJsonValue(bias_tee));
}
if(m_log2_decim_isSet){
obj->insert("log2Decim", QJsonValue(log2_decim));
}
if(m_fc_pos_isSet){
obj->insert("fcPos", QJsonValue(fc_pos));
}
if(m_dc_block_isSet){
obj->insert("dcBlock", QJsonValue(dc_block));
}
if(m_iq_correction_isSet){
obj->insert("iqCorrection", QJsonValue(iq_correction));
}
if(file_record_name != nullptr && *file_record_name != QString("")){
toJsonValue(QString("fileRecordName"), file_record_name, obj, QString("QString"));
}
return obj;
}
qint64
SWGBladeRF2InputSettings::getCenterFrequency() {
return center_frequency;
}
void
SWGBladeRF2InputSettings::setCenterFrequency(qint64 center_frequency) {
this->center_frequency = center_frequency;
this->m_center_frequency_isSet = true;
}
qint32
SWGBladeRF2InputSettings::getDevSampleRate() {
return dev_sample_rate;
}
void
SWGBladeRF2InputSettings::setDevSampleRate(qint32 dev_sample_rate) {
this->dev_sample_rate = dev_sample_rate;
this->m_dev_sample_rate_isSet = true;
}
qint32
SWGBladeRF2InputSettings::getBandwidth() {
return bandwidth;
}
void
SWGBladeRF2InputSettings::setBandwidth(qint32 bandwidth) {
this->bandwidth = bandwidth;
this->m_bandwidth_isSet = true;
}
qint32
SWGBladeRF2InputSettings::getGainMode() {
return gain_mode;
}
void
SWGBladeRF2InputSettings::setGainMode(qint32 gain_mode) {
this->gain_mode = gain_mode;
this->m_gain_mode_isSet = true;
}
qint32
SWGBladeRF2InputSettings::getGlobalGain() {
return global_gain;
}
void
SWGBladeRF2InputSettings::setGlobalGain(qint32 global_gain) {
this->global_gain = global_gain;
this->m_global_gain_isSet = true;
}
qint32
SWGBladeRF2InputSettings::getBiasTee() {
return bias_tee;
}
void
SWGBladeRF2InputSettings::setBiasTee(qint32 bias_tee) {
this->bias_tee = bias_tee;
this->m_bias_tee_isSet = true;
}
qint32
SWGBladeRF2InputSettings::getLog2Decim() {
return log2_decim;
}
void
SWGBladeRF2InputSettings::setLog2Decim(qint32 log2_decim) {
this->log2_decim = log2_decim;
this->m_log2_decim_isSet = true;
}
qint32
SWGBladeRF2InputSettings::getFcPos() {
return fc_pos;
}
void
SWGBladeRF2InputSettings::setFcPos(qint32 fc_pos) {
this->fc_pos = fc_pos;
this->m_fc_pos_isSet = true;
}
qint32
SWGBladeRF2InputSettings::getDcBlock() {
return dc_block;
}
void
SWGBladeRF2InputSettings::setDcBlock(qint32 dc_block) {
this->dc_block = dc_block;
this->m_dc_block_isSet = true;
}
qint32
SWGBladeRF2InputSettings::getIqCorrection() {
return iq_correction;
}
void
SWGBladeRF2InputSettings::setIqCorrection(qint32 iq_correction) {
this->iq_correction = iq_correction;
this->m_iq_correction_isSet = true;
}
QString*
SWGBladeRF2InputSettings::getFileRecordName() {
return file_record_name;
}
void
SWGBladeRF2InputSettings::setFileRecordName(QString* file_record_name) {
this->file_record_name = file_record_name;
this->m_file_record_name_isSet = true;
}
bool
SWGBladeRF2InputSettings::isSet(){
bool isObjectUpdated = false;
do{
if(m_center_frequency_isSet){ isObjectUpdated = true; break;}
if(m_dev_sample_rate_isSet){ isObjectUpdated = true; break;}
if(m_bandwidth_isSet){ isObjectUpdated = true; break;}
if(m_gain_mode_isSet){ isObjectUpdated = true; break;}
if(m_global_gain_isSet){ isObjectUpdated = true; break;}
if(m_bias_tee_isSet){ isObjectUpdated = true; break;}
if(m_log2_decim_isSet){ isObjectUpdated = true; break;}
if(m_fc_pos_isSet){ isObjectUpdated = true; break;}
if(m_dc_block_isSet){ isObjectUpdated = true; break;}
if(m_iq_correction_isSet){ isObjectUpdated = true; break;}
if(file_record_name != nullptr && *file_record_name != QString("")){ isObjectUpdated = true; break;}
}while(false);
return isObjectUpdated;
}
}

View File

@ -0,0 +1,119 @@
/**
* SDRangel
* This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time ---
*
* OpenAPI spec version: 4.2.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.
*/
/*
* SWGBladeRF2InputSettings.h
*
* BladeRF2
*/
#ifndef SWGBladeRF2InputSettings_H_
#define SWGBladeRF2InputSettings_H_
#include <QJsonObject>
#include <QString>
#include "SWGObject.h"
#include "export.h"
namespace SWGSDRangel {
class SWG_API SWGBladeRF2InputSettings: public SWGObject {
public:
SWGBladeRF2InputSettings();
SWGBladeRF2InputSettings(QString* json);
virtual ~SWGBladeRF2InputSettings();
void init();
void cleanup();
virtual QString asJson () override;
virtual QJsonObject* asJsonObject() override;
virtual void fromJsonObject(QJsonObject &json) override;
virtual SWGBladeRF2InputSettings* fromJson(QString &jsonString) override;
qint64 getCenterFrequency();
void setCenterFrequency(qint64 center_frequency);
qint32 getDevSampleRate();
void setDevSampleRate(qint32 dev_sample_rate);
qint32 getBandwidth();
void setBandwidth(qint32 bandwidth);
qint32 getGainMode();
void setGainMode(qint32 gain_mode);
qint32 getGlobalGain();
void setGlobalGain(qint32 global_gain);
qint32 getBiasTee();
void setBiasTee(qint32 bias_tee);
qint32 getLog2Decim();
void setLog2Decim(qint32 log2_decim);
qint32 getFcPos();
void setFcPos(qint32 fc_pos);
qint32 getDcBlock();
void setDcBlock(qint32 dc_block);
qint32 getIqCorrection();
void setIqCorrection(qint32 iq_correction);
QString* getFileRecordName();
void setFileRecordName(QString* file_record_name);
virtual bool isSet() override;
private:
qint64 center_frequency;
bool m_center_frequency_isSet;
qint32 dev_sample_rate;
bool m_dev_sample_rate_isSet;
qint32 bandwidth;
bool m_bandwidth_isSet;
qint32 gain_mode;
bool m_gain_mode_isSet;
qint32 global_gain;
bool m_global_gain_isSet;
qint32 bias_tee;
bool m_bias_tee_isSet;
qint32 log2_decim;
bool m_log2_decim_isSet;
qint32 fc_pos;
bool m_fc_pos_isSet;
qint32 dc_block;
bool m_dc_block_isSet;
qint32 iq_correction;
bool m_iq_correction_isSet;
QString* file_record_name;
bool m_file_record_name_isSet;
};
}
#endif /* SWGBladeRF2InputSettings_H_ */

View File

@ -36,6 +36,8 @@ SWGDeviceReport::SWGDeviceReport() {
m_airspy_report_isSet = false;
airspy_hf_report = nullptr;
m_airspy_hf_report_isSet = false;
blade_rf2_input_report = nullptr;
m_blade_rf2_input_report_isSet = false;
file_source_report = nullptr;
m_file_source_report_isSet = false;
lime_sdr_input_report = nullptr;
@ -72,6 +74,8 @@ SWGDeviceReport::init() {
m_airspy_report_isSet = false;
airspy_hf_report = new SWGAirspyHFReport();
m_airspy_hf_report_isSet = false;
blade_rf2_input_report = new SWGBladeRF2InputReport();
m_blade_rf2_input_report_isSet = false;
file_source_report = new SWGFileSourceReport();
m_file_source_report_isSet = false;
lime_sdr_input_report = new SWGLimeSdrInputReport();
@ -106,6 +110,9 @@ SWGDeviceReport::cleanup() {
if(airspy_hf_report != nullptr) {
delete airspy_hf_report;
}
if(blade_rf2_input_report != nullptr) {
delete blade_rf2_input_report;
}
if(file_source_report != nullptr) {
delete file_source_report;
}
@ -157,6 +164,8 @@ SWGDeviceReport::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&airspy_hf_report, pJson["airspyHFReport"], "SWGAirspyHFReport", "SWGAirspyHFReport");
::SWGSDRangel::setValue(&blade_rf2_input_report, pJson["bladeRF2InputReport"], "SWGBladeRF2InputReport", "SWGBladeRF2InputReport");
::SWGSDRangel::setValue(&file_source_report, pJson["fileSourceReport"], "SWGFileSourceReport", "SWGFileSourceReport");
::SWGSDRangel::setValue(&lime_sdr_input_report, pJson["limeSdrInputReport"], "SWGLimeSdrInputReport", "SWGLimeSdrInputReport");
@ -205,6 +214,9 @@ SWGDeviceReport::asJsonObject() {
if((airspy_hf_report != nullptr) && (airspy_hf_report->isSet())){
toJsonValue(QString("airspyHFReport"), airspy_hf_report, obj, QString("SWGAirspyHFReport"));
}
if((blade_rf2_input_report != nullptr) && (blade_rf2_input_report->isSet())){
toJsonValue(QString("bladeRF2InputReport"), blade_rf2_input_report, obj, QString("SWGBladeRF2InputReport"));
}
if((file_source_report != nullptr) && (file_source_report->isSet())){
toJsonValue(QString("fileSourceReport"), file_source_report, obj, QString("SWGFileSourceReport"));
}
@ -279,6 +291,16 @@ SWGDeviceReport::setAirspyHfReport(SWGAirspyHFReport* airspy_hf_report) {
this->m_airspy_hf_report_isSet = true;
}
SWGBladeRF2InputReport*
SWGDeviceReport::getBladeRf2InputReport() {
return blade_rf2_input_report;
}
void
SWGDeviceReport::setBladeRf2InputReport(SWGBladeRF2InputReport* blade_rf2_input_report) {
this->blade_rf2_input_report = blade_rf2_input_report;
this->m_blade_rf2_input_report_isSet = true;
}
SWGFileSourceReport*
SWGDeviceReport::getFileSourceReport() {
return file_source_report;
@ -388,6 +410,7 @@ SWGDeviceReport::isSet(){
if(m_tx_isSet){ isObjectUpdated = true; break;}
if(airspy_report != nullptr && airspy_report->isSet()){ isObjectUpdated = true; break;}
if(airspy_hf_report != nullptr && airspy_hf_report->isSet()){ isObjectUpdated = true; break;}
if(blade_rf2_input_report != nullptr && blade_rf2_input_report->isSet()){ isObjectUpdated = true; break;}
if(file_source_report != nullptr && file_source_report->isSet()){ isObjectUpdated = true; break;}
if(lime_sdr_input_report != nullptr && lime_sdr_input_report->isSet()){ isObjectUpdated = true; break;}
if(lime_sdr_output_report != nullptr && lime_sdr_output_report->isSet()){ isObjectUpdated = true; break;}

View File

@ -24,6 +24,7 @@
#include "SWGAirspyHFReport.h"
#include "SWGAirspyReport.h"
#include "SWGBladeRF2InputReport.h"
#include "SWGFileSourceReport.h"
#include "SWGLimeSdrInputReport.h"
#include "SWGLimeSdrOutputReport.h"
@ -66,6 +67,9 @@ public:
SWGAirspyHFReport* getAirspyHfReport();
void setAirspyHfReport(SWGAirspyHFReport* airspy_hf_report);
SWGBladeRF2InputReport* getBladeRf2InputReport();
void setBladeRf2InputReport(SWGBladeRF2InputReport* blade_rf2_input_report);
SWGFileSourceReport* getFileSourceReport();
void setFileSourceReport(SWGFileSourceReport* file_source_report);
@ -112,6 +116,9 @@ private:
SWGAirspyHFReport* airspy_hf_report;
bool m_airspy_hf_report_isSet;
SWGBladeRF2InputReport* blade_rf2_input_report;
bool m_blade_rf2_input_report_isSet;
SWGFileSourceReport* file_source_report;
bool m_file_source_report_isSet;

View File

@ -38,6 +38,8 @@ SWGDeviceSettings::SWGDeviceSettings() {
m_airspy_hf_settings_isSet = false;
blade_rf1_input_settings = nullptr;
m_blade_rf1_input_settings_isSet = false;
blade_rf2_input_settings = nullptr;
m_blade_rf2_input_settings_isSet = false;
blade_rf1_output_settings = nullptr;
m_blade_rf1_output_settings_isSet = false;
fcd_pro_settings = nullptr;
@ -88,6 +90,8 @@ SWGDeviceSettings::init() {
m_airspy_hf_settings_isSet = false;
blade_rf1_input_settings = new SWGBladeRF1InputSettings();
m_blade_rf1_input_settings_isSet = false;
blade_rf2_input_settings = new SWGBladeRF2InputSettings();
m_blade_rf2_input_settings_isSet = false;
blade_rf1_output_settings = new SWGBladeRF1OutputSettings();
m_blade_rf1_output_settings_isSet = false;
fcd_pro_settings = new SWGFCDProSettings();
@ -137,6 +141,9 @@ SWGDeviceSettings::cleanup() {
if(blade_rf1_input_settings != nullptr) {
delete blade_rf1_input_settings;
}
if(blade_rf2_input_settings != nullptr) {
delete blade_rf2_input_settings;
}
if(blade_rf1_output_settings != nullptr) {
delete blade_rf1_output_settings;
}
@ -208,6 +215,8 @@ SWGDeviceSettings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&blade_rf1_input_settings, pJson["bladeRF1InputSettings"], "SWGBladeRF1InputSettings", "SWGBladeRF1InputSettings");
::SWGSDRangel::setValue(&blade_rf2_input_settings, pJson["bladeRF2InputSettings"], "SWGBladeRF2InputSettings", "SWGBladeRF2InputSettings");
::SWGSDRangel::setValue(&blade_rf1_output_settings, pJson["bladeRF1OutputSettings"], "SWGBladeRF1OutputSettings", "SWGBladeRF1OutputSettings");
::SWGSDRangel::setValue(&fcd_pro_settings, pJson["fcdProSettings"], "SWGFCDProSettings", "SWGFCDProSettings");
@ -271,6 +280,9 @@ SWGDeviceSettings::asJsonObject() {
if((blade_rf1_input_settings != nullptr) && (blade_rf1_input_settings->isSet())){
toJsonValue(QString("bladeRF1InputSettings"), blade_rf1_input_settings, obj, QString("SWGBladeRF1InputSettings"));
}
if((blade_rf2_input_settings != nullptr) && (blade_rf2_input_settings->isSet())){
toJsonValue(QString("bladeRF2InputSettings"), blade_rf2_input_settings, obj, QString("SWGBladeRF2InputSettings"));
}
if((blade_rf1_output_settings != nullptr) && (blade_rf1_output_settings->isSet())){
toJsonValue(QString("bladeRF1OutputSettings"), blade_rf1_output_settings, obj, QString("SWGBladeRF1OutputSettings"));
}
@ -373,6 +385,16 @@ SWGDeviceSettings::setBladeRf1InputSettings(SWGBladeRF1InputSettings* blade_rf1_
this->m_blade_rf1_input_settings_isSet = true;
}
SWGBladeRF2InputSettings*
SWGDeviceSettings::getBladeRf2InputSettings() {
return blade_rf2_input_settings;
}
void
SWGDeviceSettings::setBladeRf2InputSettings(SWGBladeRF2InputSettings* blade_rf2_input_settings) {
this->blade_rf2_input_settings = blade_rf2_input_settings;
this->m_blade_rf2_input_settings_isSet = true;
}
SWGBladeRF1OutputSettings*
SWGDeviceSettings::getBladeRf1OutputSettings() {
return blade_rf1_output_settings;
@ -543,6 +565,7 @@ SWGDeviceSettings::isSet(){
if(airspy_settings != nullptr && airspy_settings->isSet()){ isObjectUpdated = true; break;}
if(airspy_hf_settings != nullptr && airspy_hf_settings->isSet()){ isObjectUpdated = true; break;}
if(blade_rf1_input_settings != nullptr && blade_rf1_input_settings->isSet()){ isObjectUpdated = true; break;}
if(blade_rf2_input_settings != nullptr && blade_rf2_input_settings->isSet()){ isObjectUpdated = true; break;}
if(blade_rf1_output_settings != nullptr && blade_rf1_output_settings->isSet()){ isObjectUpdated = true; break;}
if(fcd_pro_settings != nullptr && fcd_pro_settings->isSet()){ isObjectUpdated = true; break;}
if(fcd_pro_plus_settings != nullptr && fcd_pro_plus_settings->isSet()){ isObjectUpdated = true; break;}

View File

@ -26,6 +26,7 @@
#include "SWGAirspySettings.h"
#include "SWGBladeRF1InputSettings.h"
#include "SWGBladeRF1OutputSettings.h"
#include "SWGBladeRF2InputSettings.h"
#include "SWGFCDProPlusSettings.h"
#include "SWGFCDProSettings.h"
#include "SWGFileSourceSettings.h"
@ -76,6 +77,9 @@ public:
SWGBladeRF1InputSettings* getBladeRf1InputSettings();
void setBladeRf1InputSettings(SWGBladeRF1InputSettings* blade_rf1_input_settings);
SWGBladeRF2InputSettings* getBladeRf2InputSettings();
void setBladeRf2InputSettings(SWGBladeRF2InputSettings* blade_rf2_input_settings);
SWGBladeRF1OutputSettings* getBladeRf1OutputSettings();
void setBladeRf1OutputSettings(SWGBladeRF1OutputSettings* blade_rf1_output_settings);
@ -143,6 +147,9 @@ private:
SWGBladeRF1InputSettings* blade_rf1_input_settings;
bool m_blade_rf1_input_settings_isSet;
SWGBladeRF2InputSettings* blade_rf2_input_settings;
bool m_blade_rf2_input_settings_isSet;
SWGBladeRF1OutputSettings* blade_rf1_output_settings;
bool m_blade_rf1_output_settings_isSet;

View File

@ -32,6 +32,8 @@
#include "SWGBandwidth.h"
#include "SWGBladeRF1InputSettings.h"
#include "SWGBladeRF1OutputSettings.h"
#include "SWGBladeRF2InputReport.h"
#include "SWGBladeRF2InputSettings.h"
#include "SWGCWKeyerSettings.h"
#include "SWGChannel.h"
#include "SWGChannelListItem.h"
@ -89,6 +91,7 @@
#include "SWGPresets.h"
#include "SWGRDSReport.h"
#include "SWGRDSReport_altFrequencies.h"
#include "SWGRange.h"
#include "SWGRtlSdrReport.h"
#include "SWGRtlSdrSettings.h"
#include "SWGSDRPlayReport.h"
@ -171,6 +174,12 @@ namespace SWGSDRangel {
if(QString("SWGBladeRF1OutputSettings").compare(type) == 0) {
return new SWGBladeRF1OutputSettings();
}
if(QString("SWGBladeRF2InputReport").compare(type) == 0) {
return new SWGBladeRF2InputReport();
}
if(QString("SWGBladeRF2InputSettings").compare(type) == 0) {
return new SWGBladeRF2InputSettings();
}
if(QString("SWGCWKeyerSettings").compare(type) == 0) {
return new SWGCWKeyerSettings();
}
@ -342,6 +351,9 @@ namespace SWGSDRangel {
if(QString("SWGRDSReport_altFrequencies").compare(type) == 0) {
return new SWGRDSReport_altFrequencies();
}
if(QString("SWGRange").compare(type) == 0) {
return new SWGRange();
}
if(QString("SWGRtlSdrReport").compare(type) == 0) {
return new SWGRtlSdrReport();
}

View File

@ -0,0 +1,148 @@
/**
* SDRangel
* This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time ---
*
* OpenAPI spec version: 4.2.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 "SWGRange.h"
#include "SWGHelpers.h"
#include <QJsonDocument>
#include <QJsonArray>
#include <QObject>
#include <QDebug>
namespace SWGSDRangel {
SWGRange::SWGRange(QString* json) {
init();
this->fromJson(*json);
}
SWGRange::SWGRange() {
min = 0;
m_min_isSet = false;
max = 0;
m_max_isSet = false;
step = 0;
m_step_isSet = false;
}
SWGRange::~SWGRange() {
this->cleanup();
}
void
SWGRange::init() {
min = 0;
m_min_isSet = false;
max = 0;
m_max_isSet = false;
step = 0;
m_step_isSet = false;
}
void
SWGRange::cleanup() {
}
SWGRange*
SWGRange::fromJson(QString &json) {
QByteArray array (json.toStdString().c_str());
QJsonDocument doc = QJsonDocument::fromJson(array);
QJsonObject jsonObject = doc.object();
this->fromJsonObject(jsonObject);
return this;
}
void
SWGRange::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&min, pJson["min"], "qint32", "");
::SWGSDRangel::setValue(&max, pJson["max"], "qint32", "");
::SWGSDRangel::setValue(&step, pJson["step"], "qint32", "");
}
QString
SWGRange::asJson ()
{
QJsonObject* obj = this->asJsonObject();
QJsonDocument doc(*obj);
QByteArray bytes = doc.toJson();
delete obj;
return QString(bytes);
}
QJsonObject*
SWGRange::asJsonObject() {
QJsonObject* obj = new QJsonObject();
if(m_min_isSet){
obj->insert("min", QJsonValue(min));
}
if(m_max_isSet){
obj->insert("max", QJsonValue(max));
}
if(m_step_isSet){
obj->insert("step", QJsonValue(step));
}
return obj;
}
qint32
SWGRange::getMin() {
return min;
}
void
SWGRange::setMin(qint32 min) {
this->min = min;
this->m_min_isSet = true;
}
qint32
SWGRange::getMax() {
return max;
}
void
SWGRange::setMax(qint32 max) {
this->max = max;
this->m_max_isSet = true;
}
qint32
SWGRange::getStep() {
return step;
}
void
SWGRange::setStep(qint32 step) {
this->step = step;
this->m_step_isSet = true;
}
bool
SWGRange::isSet(){
bool isObjectUpdated = false;
do{
if(m_min_isSet){ isObjectUpdated = true; break;}
if(m_max_isSet){ isObjectUpdated = true; break;}
if(m_step_isSet){ isObjectUpdated = true; break;}
}while(false);
return isObjectUpdated;
}
}

View File

@ -0,0 +1,70 @@
/**
* SDRangel
* This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time ---
*
* OpenAPI spec version: 4.2.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.
*/
/*
* SWGRange.h
*
* An arbitrary range of values
*/
#ifndef SWGRange_H_
#define SWGRange_H_
#include <QJsonObject>
#include "SWGObject.h"
#include "export.h"
namespace SWGSDRangel {
class SWG_API SWGRange: public SWGObject {
public:
SWGRange();
SWGRange(QString* json);
virtual ~SWGRange();
void init();
void cleanup();
virtual QString asJson () override;
virtual QJsonObject* asJsonObject() override;
virtual void fromJsonObject(QJsonObject &json) override;
virtual SWGRange* fromJson(QString &jsonString) override;
qint32 getMin();
void setMin(qint32 min);
qint32 getMax();
void setMax(qint32 max);
qint32 getStep();
void setStep(qint32 step);
virtual bool isSet() override;
private:
qint32 min;
bool m_min_isSet;
qint32 max;
bool m_max_isSet;
qint32 step;
bool m_step_isSet;
};
}
#endif /* SWGRange_H_ */