mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-09-03 05:37:50 -04:00
Presets for MIMO
This commit is contained in:
parent
d3176ef578
commit
500f5bc82c
@ -123,6 +123,8 @@ public:
|
|||||||
virtual quint64 getSinkCenterFrequency(int index) const { return 0; (void) index; }
|
virtual quint64 getSinkCenterFrequency(int index) const { return 0; (void) index; }
|
||||||
virtual void setSinkCenterFrequency(qint64 centerFrequency, int index) { (void) centerFrequency; (void) index; }
|
virtual void setSinkCenterFrequency(qint64 centerFrequency, int index) { (void) centerFrequency; (void) index; }
|
||||||
|
|
||||||
|
virtual quint64 getMIMOCenterFrequency() const { return getSourceCenterFrequency(0); }
|
||||||
|
|
||||||
virtual bool handleMessage(const Message& message);
|
virtual bool handleMessage(const Message& message);
|
||||||
|
|
||||||
virtual int webapiSettingsGet(
|
virtual int webapiSettingsGet(
|
||||||
|
@ -512,13 +512,13 @@ void DeviceAPI::loadSamplingDeviceSettings(const Preset* preset)
|
|||||||
{
|
{
|
||||||
if (m_deviceSourceEngine && (preset->isSourcePreset()))
|
if (m_deviceSourceEngine && (preset->isSourcePreset()))
|
||||||
{
|
{
|
||||||
qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading Rx preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
||||||
|
|
||||||
const QByteArray* sourceConfig = preset->findBestDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence);
|
const QByteArray* sourceConfig = preset->findBestDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence);
|
||||||
qint64 centerFrequency = preset->getCenterFrequency();
|
qint64 centerFrequency = preset->getCenterFrequency();
|
||||||
qDebug("DeviceAPI::loadSamplingDeviceSettings: center frequency: %llu Hz", centerFrequency);
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: source center frequency: %llu Hz", centerFrequency);
|
||||||
|
|
||||||
if (sourceConfig != 0)
|
if (sourceConfig)
|
||||||
{
|
{
|
||||||
qDebug("DeviceAPI::loadSamplingDeviceSettings: deserializing source %s[%d]: %s",
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: deserializing source %s[%d]: %s",
|
||||||
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
||||||
@ -556,15 +556,15 @@ void DeviceAPI::loadSamplingDeviceSettings(const Preset* preset)
|
|||||||
qDebug("DeviceAPI::loadSamplingDeviceSettings: no source");
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: no source");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m_deviceSinkEngine && (!preset->isSourcePreset())) // TODO: refine preset stream type
|
else if (m_deviceSinkEngine && preset->isSinkPreset())
|
||||||
{
|
{
|
||||||
qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading Tx preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
||||||
|
|
||||||
const QByteArray* sinkConfig = preset->findBestDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence);
|
const QByteArray* sinkConfig = preset->findBestDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence);
|
||||||
qint64 centerFrequency = preset->getCenterFrequency();
|
qint64 centerFrequency = preset->getCenterFrequency();
|
||||||
qDebug("DeviceAPI::loadSamplingDeviceSettings: center frequency: %llu Hz", centerFrequency);
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: sink center frequency: %llu Hz", centerFrequency);
|
||||||
|
|
||||||
if (sinkConfig != 0)
|
if (sinkConfig)
|
||||||
{
|
{
|
||||||
qDebug("DeviceAPI::loadSamplingDeviceSettings: deserializing sink %s[%d]: %s",
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: deserializing sink %s[%d]: %s",
|
||||||
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
||||||
@ -590,6 +590,40 @@ void DeviceAPI::loadSamplingDeviceSettings(const Preset* preset)
|
|||||||
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (m_deviceMIMOEngine && preset->isMIMOPreset())
|
||||||
|
{
|
||||||
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading MIMO preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
||||||
|
|
||||||
|
const QByteArray* mimoConfig = preset->findBestDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence);
|
||||||
|
qint64 centerFrequency = preset->getCenterFrequency();
|
||||||
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: MIMO center frequency: %llu Hz", centerFrequency);
|
||||||
|
|
||||||
|
if (mimoConfig)
|
||||||
|
{
|
||||||
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: deserializing MIMO %s[%d]: %s",
|
||||||
|
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
||||||
|
|
||||||
|
if (m_samplingDevicePluginInstanceUI != 0) // GUI flavor
|
||||||
|
{
|
||||||
|
m_samplingDevicePluginInstanceUI->deserialize(*mimoConfig);
|
||||||
|
m_samplingDevicePluginInstanceUI->setCenterFrequency(centerFrequency);
|
||||||
|
}
|
||||||
|
else if (m_deviceSinkEngine->getSink() != 0) // Server flavor
|
||||||
|
{
|
||||||
|
m_deviceSinkEngine->getSink()->deserialize(*mimoConfig);
|
||||||
|
m_deviceSinkEngine->getSink()->setCenterFrequency(centerFrequency);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: no MIMO");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: MIMO %s[%d]: %s not found",
|
||||||
|
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading preset [%s | %s] is not a suitable preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
qDebug("DeviceAPI::loadSamplingDeviceSettings: Loading preset [%s | %s] is not a suitable preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
||||||
@ -603,12 +637,12 @@ void DeviceAPI::saveSamplingDeviceSettings(Preset* preset)
|
|||||||
qDebug("DeviceAPI::saveSamplingDeviceSettings: serializing source %s[%d]: %s",
|
qDebug("DeviceAPI::saveSamplingDeviceSettings: serializing source %s[%d]: %s",
|
||||||
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
||||||
|
|
||||||
if (m_samplingDevicePluginInstanceUI != 0)
|
if (m_samplingDevicePluginInstanceUI) // GUI flavor
|
||||||
{
|
{
|
||||||
preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_samplingDevicePluginInstanceUI->serialize());
|
preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_samplingDevicePluginInstanceUI->serialize());
|
||||||
preset->setCenterFrequency(m_samplingDevicePluginInstanceUI->getCenterFrequency());
|
preset->setCenterFrequency(m_samplingDevicePluginInstanceUI->getCenterFrequency());
|
||||||
}
|
}
|
||||||
else if (m_deviceSourceEngine->getSource() != 0)
|
else if (m_deviceSourceEngine->getSource()) // Server flavor
|
||||||
{
|
{
|
||||||
preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceSourceEngine->getSource()->serialize());
|
preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceSourceEngine->getSource()->serialize());
|
||||||
preset->setCenterFrequency(m_deviceSourceEngine->getSource()->getCenterFrequency());
|
preset->setCenterFrequency(m_deviceSourceEngine->getSource()->getCenterFrequency());
|
||||||
@ -618,17 +652,17 @@ void DeviceAPI::saveSamplingDeviceSettings(Preset* preset)
|
|||||||
qDebug("DeviceAPI::saveSamplingDeviceSettings: no source");
|
qDebug("DeviceAPI::saveSamplingDeviceSettings: no source");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m_deviceSinkEngine && (!preset->isSourcePreset())) // TODO: refine preset stream type
|
else if (m_deviceSinkEngine && preset->isSinkPreset())
|
||||||
{
|
{
|
||||||
qDebug("DeviceAPI::saveSamplingDeviceSettings: serializing sink %s[%d]: %s",
|
qDebug("DeviceAPI::saveSamplingDeviceSettings: serializing sink %s[%d]: %s",
|
||||||
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
||||||
|
|
||||||
if (m_samplingDevicePluginInstanceUI != 0) // GUI flavor
|
if (m_samplingDevicePluginInstanceUI) // GUI flavor
|
||||||
{
|
{
|
||||||
preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceSinkEngine->getSink()->serialize());
|
preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceSinkEngine->getSink()->serialize());
|
||||||
preset->setCenterFrequency(m_deviceSinkEngine->getSink()->getCenterFrequency());
|
preset->setCenterFrequency(m_deviceSinkEngine->getSink()->getCenterFrequency());
|
||||||
}
|
}
|
||||||
else if (m_deviceSinkEngine->getSink() != 0) // Server flavor
|
else if (m_deviceSinkEngine->getSink()) // Server flavor
|
||||||
{
|
{
|
||||||
preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceSinkEngine->getSink()->serialize());
|
preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceSinkEngine->getSink()->serialize());
|
||||||
preset->setCenterFrequency(m_deviceSinkEngine->getSink()->getCenterFrequency());
|
preset->setCenterFrequency(m_deviceSinkEngine->getSink()->getCenterFrequency());
|
||||||
@ -638,6 +672,26 @@ void DeviceAPI::saveSamplingDeviceSettings(Preset* preset)
|
|||||||
qDebug("DeviceAPI::saveSamplingDeviceSettings: no sink");
|
qDebug("DeviceAPI::saveSamplingDeviceSettings: no sink");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (m_deviceMIMOEngine && preset->isMIMOPreset())
|
||||||
|
{
|
||||||
|
qDebug("DeviceAPI::saveSamplingDeviceSettings: serializing MIMO %s[%d]: %s",
|
||||||
|
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
|
||||||
|
|
||||||
|
if (m_samplingDevicePluginInstanceUI) // GUI flavor
|
||||||
|
{
|
||||||
|
preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceMIMOEngine->getMIMO()->serialize());
|
||||||
|
preset->setCenterFrequency(m_deviceMIMOEngine->getMIMO()->getMIMOCenterFrequency());
|
||||||
|
}
|
||||||
|
else if (m_deviceMIMOEngine->getMIMO()) // Server flavor
|
||||||
|
{
|
||||||
|
preset->addOrUpdateDeviceConfig(m_samplingDeviceId, m_samplingDeviceSerial, m_samplingDeviceSequence, m_deviceMIMOEngine->getMIMO()->serialize());
|
||||||
|
preset->setCenterFrequency(m_deviceMIMOEngine->getMIMO()->getMIMOCenterFrequency());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug("DeviceAPI::saveSamplingDeviceSettings: no MIMO");
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qDebug("DeviceAPI::saveSamplingDeviceSettings: not a suitable preset");
|
qDebug("DeviceAPI::saveSamplingDeviceSettings: not a suitable preset");
|
||||||
|
@ -74,6 +74,8 @@ public:
|
|||||||
virtual quint64 getSourceCenterFrequency(int index) const = 0; //!< Center frequency exposed by the source at index
|
virtual quint64 getSourceCenterFrequency(int index) const = 0; //!< Center frequency exposed by the source at index
|
||||||
virtual void setSourceCenterFrequency(qint64 centerFrequency, int index) = 0;
|
virtual void setSourceCenterFrequency(qint64 centerFrequency, int index) = 0;
|
||||||
|
|
||||||
|
virtual quint64 getMIMOCenterFrequency() const = 0; //!< Unique center frequency for preset identification or any unique reference
|
||||||
|
|
||||||
virtual bool handleMessage(const Message& message) = 0;
|
virtual bool handleMessage(const Message& message) = 0;
|
||||||
|
|
||||||
virtual int webapiSettingsGet(
|
virtual int webapiSettingsGet(
|
||||||
|
File diff suppressed because one or more lines are too long
@ -22,8 +22,8 @@ ChannelConfig:
|
|||||||
Preset:
|
Preset:
|
||||||
description: Represents a Preset object
|
description: Represents a Preset object
|
||||||
properties:
|
properties:
|
||||||
sourcePreset:
|
presetType:
|
||||||
description: boolean
|
description: See Preset::PresetType
|
||||||
type: integer
|
type: integer
|
||||||
group:
|
group:
|
||||||
type: string
|
type: string
|
||||||
|
@ -217,7 +217,9 @@ const Preset* MainSettings::getPreset(const QString& groupName, quint64 centerFr
|
|||||||
{
|
{
|
||||||
if (type == "R" && getPreset(i)->isSourcePreset()) {
|
if (type == "R" && getPreset(i)->isSourcePreset()) {
|
||||||
return getPreset(i);
|
return getPreset(i);
|
||||||
} else if (type == "T" && !getPreset(i)->isSourcePreset()) {
|
} else if (type == "T" && getPreset(i)->isSinkPreset()) {
|
||||||
|
return getPreset(i);
|
||||||
|
} else if (type == "M" && getPreset(i)->isMIMOPreset()) {
|
||||||
return getPreset(i);
|
return getPreset(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ Preset::Preset(const Preset& other) :
|
|||||||
|
|
||||||
void Preset::resetToDefaults()
|
void Preset::resetToDefaults()
|
||||||
{
|
{
|
||||||
m_sourcePreset = true;
|
m_presetType == PresetSource; // Rx
|
||||||
m_group = "default";
|
m_group = "default";
|
||||||
m_description = "no name";
|
m_description = "no name";
|
||||||
m_centerFrequency = 0;
|
m_centerFrequency = 0;
|
||||||
@ -67,7 +67,8 @@ QByteArray Preset::serialize() const
|
|||||||
s.writeU64(3, m_centerFrequency);
|
s.writeU64(3, m_centerFrequency);
|
||||||
s.writeBlob(4, m_layout);
|
s.writeBlob(4, m_layout);
|
||||||
s.writeBlob(5, m_spectrumConfig);
|
s.writeBlob(5, m_spectrumConfig);
|
||||||
s.writeBool(6, m_sourcePreset);
|
s.writeBool(6, m_presetType == PresetSource);
|
||||||
|
s.writeS32(7, (int) m_presetType);
|
||||||
|
|
||||||
s.writeS32(20, m_deviceConfigs.size());
|
s.writeS32(20, m_deviceConfigs.size());
|
||||||
|
|
||||||
@ -115,12 +116,21 @@ bool Preset::deserialize(const QByteArray& data)
|
|||||||
|
|
||||||
if (d.getVersion() == 1)
|
if (d.getVersion() == 1)
|
||||||
{
|
{
|
||||||
|
bool tmpBool;
|
||||||
|
int tmp;
|
||||||
|
|
||||||
d.readString(1, &m_group, "default");
|
d.readString(1, &m_group, "default");
|
||||||
d.readString(2, &m_description, "no name");
|
d.readString(2, &m_description, "no name");
|
||||||
d.readU64(3, &m_centerFrequency, 0);
|
d.readU64(3, &m_centerFrequency, 0);
|
||||||
d.readBlob(4, &m_layout);
|
d.readBlob(4, &m_layout);
|
||||||
d.readBlob(5, &m_spectrumConfig);
|
d.readBlob(5, &m_spectrumConfig);
|
||||||
d.readBool(6, &m_sourcePreset, true);
|
d.readBool(6, &tmpBool, true);
|
||||||
|
d.readS32(7, &tmp, PresetSource);
|
||||||
|
m_presetType = tmp < (int) PresetSource ? PresetSource : tmp > (int) PresetMIMO ? PresetMIMO : (PresetType) tmp;
|
||||||
|
|
||||||
|
if (m_presetType != PresetMIMO) {
|
||||||
|
m_presetType = tmpBool ? PresetSource : PresetSink;
|
||||||
|
}
|
||||||
|
|
||||||
// qDebug("Preset::deserialize: m_group: %s mode: %s m_description: %s m_centerFrequency: %llu",
|
// qDebug("Preset::deserialize: m_group: %s mode: %s m_description: %s m_centerFrequency: %llu",
|
||||||
// qPrintable(m_group),
|
// qPrintable(m_group),
|
||||||
@ -291,25 +301,25 @@ const QByteArray* Preset::findBestDeviceConfig(
|
|||||||
{
|
{
|
||||||
if (itMatchSequence != m_deviceConfigs.end()) // match sequence ?
|
if (itMatchSequence != m_deviceConfigs.end()) // match sequence ?
|
||||||
{
|
{
|
||||||
qDebug("Preset::findBestSourceConfig: sequence matched: id: %s ser: %s seq: %d",
|
qDebug("Preset::findBestDeviceConfig: sequence matched: id: %s ser: %s seq: %d",
|
||||||
qPrintable(itMatchSequence->m_deviceId), qPrintable(itMatchSequence->m_deviceSerial), itMatchSequence->m_deviceSequence);
|
qPrintable(itMatchSequence->m_deviceId), qPrintable(itMatchSequence->m_deviceSerial), itMatchSequence->m_deviceSequence);
|
||||||
return &(itMatchSequence->m_config);
|
return &(itMatchSequence->m_config);
|
||||||
}
|
}
|
||||||
else if (itFirstOfKind != m_deviceConfigs.end()) // match source type ?
|
else if (itFirstOfKind != m_deviceConfigs.end()) // match source type ?
|
||||||
{
|
{
|
||||||
qDebug("Preset::findBestSourceConfig: first of kind matched: id: %s ser: %s seq: %d",
|
qDebug("Preset::findBestDeviceConfig: first of kind matched: id: %s ser: %s seq: %d",
|
||||||
qPrintable(itFirstOfKind->m_deviceId), qPrintable(itFirstOfKind->m_deviceSerial), itFirstOfKind->m_deviceSequence);
|
qPrintable(itFirstOfKind->m_deviceId), qPrintable(itFirstOfKind->m_deviceSerial), itFirstOfKind->m_deviceSequence);
|
||||||
return &(itFirstOfKind->m_config);
|
return &(itFirstOfKind->m_config);
|
||||||
}
|
}
|
||||||
else // definitely not found !
|
else // definitely not found !
|
||||||
{
|
{
|
||||||
qDebug("Preset::findBestSourceConfig: no match");
|
qDebug("Preset::findBestDeviceConfig: no match");
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // exact match
|
else // exact match
|
||||||
{
|
{
|
||||||
qDebug("Preset::findBestSourceConfig: serial matched (exact): id: %s ser: %s",
|
qDebug("Preset::findBestDeviceConfig: serial matched (exact): id: %s ser: %s",
|
||||||
qPrintable(it->m_deviceId), qPrintable(it->m_deviceSerial));
|
qPrintable(it->m_deviceId), qPrintable(it->m_deviceSerial));
|
||||||
return &(it->m_config);
|
return &(it->m_config);
|
||||||
}
|
}
|
||||||
@ -364,7 +374,7 @@ const QByteArray* Preset::findBestDeviceConfigSoapy(const QString& sourceId, con
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qDebug("Preset::findBestSourceConfig: first of kind matched: id: %s ser: %s seq: %d",
|
qDebug("Preset::findBestDeviceConfigSoapy: first of kind matched: id: %s ser: %s seq: %d",
|
||||||
qPrintable(itFirstOfKind->m_deviceId), qPrintable(itFirstOfKind->m_deviceSerial), itFirstOfKind->m_deviceSequence);
|
qPrintable(itFirstOfKind->m_deviceId), qPrintable(itFirstOfKind->m_deviceSerial), itFirstOfKind->m_deviceSequence);
|
||||||
return &(itFirstOfKind->m_config);
|
return &(itFirstOfKind->m_config);
|
||||||
}
|
}
|
||||||
|
@ -57,13 +57,26 @@ public:
|
|||||||
};
|
};
|
||||||
typedef QList<DeviceConfig> DeviceeConfigs;
|
typedef QList<DeviceConfig> DeviceeConfigs;
|
||||||
|
|
||||||
|
enum PresetType
|
||||||
|
{
|
||||||
|
PresetSource, // Rx
|
||||||
|
PresetSink, // Tx
|
||||||
|
PresetMIMO // MIMO
|
||||||
|
};
|
||||||
|
|
||||||
Preset();
|
Preset();
|
||||||
Preset(const Preset& other);
|
Preset(const Preset& other);
|
||||||
|
|
||||||
void resetToDefaults();
|
void resetToDefaults();
|
||||||
|
|
||||||
void setSourcePreset(bool isSourcePreset) { m_sourcePreset = isSourcePreset; }
|
void setSourcePreset() { m_presetType = PresetSource; }
|
||||||
bool isSourcePreset() const { return m_sourcePreset; }
|
bool isSourcePreset() const { return m_presetType == PresetSource; }
|
||||||
|
void setSinkPreset() { m_presetType = PresetSink; }
|
||||||
|
bool isSinkPreset() const { return m_presetType == PresetSink; }
|
||||||
|
void setMIMOPreset() { m_presetType = PresetMIMO; }
|
||||||
|
bool isMIMOPreset() const { return m_presetType == PresetMIMO; }
|
||||||
|
PresetType getPresetType() const { return m_presetType; }
|
||||||
|
void setPresetType(PresetType presetType) { m_presetType = presetType; }
|
||||||
|
|
||||||
QByteArray serialize() const;
|
QByteArray serialize() const;
|
||||||
bool deserialize(const QByteArray& data);
|
bool deserialize(const QByteArray& data);
|
||||||
@ -130,7 +143,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool m_sourcePreset;
|
PresetType m_presetType;
|
||||||
|
|
||||||
// group and preset description
|
// group and preset description
|
||||||
QString m_group;
|
QString m_group;
|
||||||
|
@ -96,7 +96,7 @@ void WebAPIAdapterBase::webapiFormatPreset(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
apiPreset->init();
|
apiPreset->init();
|
||||||
apiPreset->setSourcePreset(preset.isSourcePreset() ? 1 : 0);
|
apiPreset->setPresetType(preset.getPresetType());
|
||||||
apiPreset->setGroup(new QString(preset.getGroup()));
|
apiPreset->setGroup(new QString(preset.getGroup()));
|
||||||
apiPreset->setDescription(new QString(preset.getDescription()));
|
apiPreset->setDescription(new QString(preset.getDescription()));
|
||||||
apiPreset->setCenterFrequency(preset.getCenterFrequency());
|
apiPreset->setCenterFrequency(preset.getCenterFrequency());
|
||||||
@ -195,8 +195,8 @@ void WebAPIAdapterBase::webapiUpdatePreset(
|
|||||||
if (presetKeys.m_keys.contains("iqImbalanceCorrection")) {
|
if (presetKeys.m_keys.contains("iqImbalanceCorrection")) {
|
||||||
preset->setIQImbalanceCorrection(apiPreset->getIqImbalanceCorrection() != 0);
|
preset->setIQImbalanceCorrection(apiPreset->getIqImbalanceCorrection() != 0);
|
||||||
}
|
}
|
||||||
if (presetKeys.m_keys.contains("sourcePreset")) {
|
if (presetKeys.m_keys.contains("presetType")) {
|
||||||
preset->setSourcePreset(apiPreset->getSourcePreset() != 0);
|
preset->setPresetType((Preset::PresetType) apiPreset->getPresetType());
|
||||||
}
|
}
|
||||||
if (presetKeys.m_keys.contains("description")) {
|
if (presetKeys.m_keys.contains("description")) {
|
||||||
preset->setDescription(*apiPreset->getDescription());
|
preset->setDescription(*apiPreset->getDescription());
|
||||||
|
@ -2325,8 +2325,8 @@ bool WebAPIRequestMapper::appendPresetKeys(
|
|||||||
}
|
}
|
||||||
if (presetJson.contains("iqImbalanceCorrection"))
|
if (presetJson.contains("iqImbalanceCorrection"))
|
||||||
{
|
{
|
||||||
preset->setSourcePreset(presetJson["sourcePreset"].toInt());
|
preset->setPresetType(presetJson["presetType"].toInt());
|
||||||
presetKeys.m_keys.append("sourcePreset");
|
presetKeys.m_keys.append("presetType");
|
||||||
}
|
}
|
||||||
if (presetJson.contains("description"))
|
if (presetJson.contains("description"))
|
||||||
{
|
{
|
||||||
|
@ -229,7 +229,7 @@ void DeviceUISet::saveRxChannelSettings(Preset *preset)
|
|||||||
|
|
||||||
for(int i = 0; i < m_channelInstanceRegistrations.count(); i++)
|
for(int i = 0; i < m_channelInstanceRegistrations.count(); i++)
|
||||||
{
|
{
|
||||||
qDebug("DeviceUISet::saveRxChannelSettings: channel [%s] saved", qPrintable(m_channelInstanceRegistrations[i].m_channelName));
|
qDebug("DeviceUISet::saveRxChannelSettings: saving channel [%s]", qPrintable(m_channelInstanceRegistrations[i].m_channelName));
|
||||||
preset->addChannel(m_channelInstanceRegistrations[i].m_channelName, m_channelInstanceRegistrations[i].m_gui->serialize());
|
preset->addChannel(m_channelInstanceRegistrations[i].m_channelName, m_channelInstanceRegistrations[i].m_gui->serialize());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -241,11 +241,7 @@ void DeviceUISet::saveRxChannelSettings(Preset *preset)
|
|||||||
|
|
||||||
void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI)
|
void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI)
|
||||||
{
|
{
|
||||||
if (preset->isSourcePreset())
|
if (preset->isSinkPreset())
|
||||||
{
|
|
||||||
qDebug("DeviceUISet::loadTxChannelSettings: Loading preset [%s | %s] not a sink preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
qDebug("DeviceUISet::loadTxChannelSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
qDebug("DeviceUISet::loadTxChannelSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
||||||
|
|
||||||
@ -296,24 +292,107 @@ void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginA
|
|||||||
|
|
||||||
renameChannelInstances();
|
renameChannelInstances();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug("DeviceUISet::loadTxChannelSettings: Loading preset [%s | %s] not a sink preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeviceUISet::saveTxChannelSettings(Preset *preset)
|
void DeviceUISet::saveTxChannelSettings(Preset *preset)
|
||||||
{
|
{
|
||||||
if (preset->isSourcePreset())
|
if (preset->isSinkPreset())
|
||||||
{
|
|
||||||
qDebug("DeviceUISet::saveTxChannelSettings: not a sink preset");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
qSort(m_channelInstanceRegistrations.begin(), m_channelInstanceRegistrations.end()); // sort by increasing delta frequency and type
|
qSort(m_channelInstanceRegistrations.begin(), m_channelInstanceRegistrations.end()); // sort by increasing delta frequency and type
|
||||||
|
|
||||||
for(int i = 0; i < m_channelInstanceRegistrations.count(); i++)
|
for(int i = 0; i < m_channelInstanceRegistrations.count(); i++)
|
||||||
{
|
{
|
||||||
qDebug("DeviceUISet::saveTxChannelSettings: channel [%s] saved", qPrintable(m_channelInstanceRegistrations[i].m_channelName));
|
qDebug("DeviceUISet::saveTxChannelSettings: saving channel [%s]", qPrintable(m_channelInstanceRegistrations[i].m_channelName));
|
||||||
preset->addChannel(m_channelInstanceRegistrations[i].m_channelName, m_channelInstanceRegistrations[i].m_gui->serialize());
|
preset->addChannel(m_channelInstanceRegistrations[i].m_channelName, m_channelInstanceRegistrations[i].m_gui->serialize());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug("DeviceUISet::saveTxChannelSettings: not a sink preset");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeviceUISet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *pluginAPI)
|
||||||
|
{
|
||||||
|
if (preset->isMIMOPreset())
|
||||||
|
{
|
||||||
|
qDebug("DeviceUISet::loadMIMOChannelSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
||||||
|
|
||||||
|
// Available channel plugins
|
||||||
|
PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getMIMOChannelRegistrations();
|
||||||
|
|
||||||
|
// copy currently open channels and clear list
|
||||||
|
ChannelInstanceRegistrations openChannels = m_channelInstanceRegistrations;
|
||||||
|
m_channelInstanceRegistrations.clear();
|
||||||
|
|
||||||
|
for(int i = 0; i < openChannels.count(); i++)
|
||||||
|
{
|
||||||
|
qDebug("DeviceUISet::loadMIMOChannelSettings: destroying old channel [%s]", qPrintable(openChannels[i].m_channelName));
|
||||||
|
openChannels[i].m_gui->destroy(); // FIXME: stop channel before
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug("DeviceUISet::loadMIMOChannelSettings: %d channel(s) in preset", preset->getChannelCount());
|
||||||
|
|
||||||
|
for (int i = 0; i < preset->getChannelCount(); i++)
|
||||||
|
{
|
||||||
|
const Preset::ChannelConfig& channelConfig = preset->getChannelConfig(i);
|
||||||
|
ChannelInstanceRegistration reg;
|
||||||
|
|
||||||
|
// create channel instance
|
||||||
|
|
||||||
|
for(int i = 0; i < channelRegistrations->count(); i++)
|
||||||
|
{
|
||||||
|
//if((*channelRegistrations)[i].m_channelIdURI == channelConfig.m_channelIdURI)
|
||||||
|
if (ChannelUtils::compareChannelURIs((*channelRegistrations)[i].m_channelIdURI, channelConfig.m_channelIdURI))
|
||||||
|
{
|
||||||
|
qDebug("DeviceUISet::loadMIMOChannelSettings: creating new channel [%s] from config [%s]",
|
||||||
|
qPrintable((*channelRegistrations)[i].m_channelIdURI),
|
||||||
|
qPrintable(channelConfig.m_channelIdURI));
|
||||||
|
MIMOChannel *mimoChannel =
|
||||||
|
(*channelRegistrations)[i].m_plugin->createMIMOChannelBS(m_deviceAPI);
|
||||||
|
PluginInstanceGUI *mimoChannelGUI =
|
||||||
|
(*channelRegistrations)[i].m_plugin->createMIMOChannelGUI(this, mimoChannel);
|
||||||
|
reg = ChannelInstanceRegistration(channelConfig.m_channelIdURI, mimoChannelGUI, 2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reg.m_gui != 0)
|
||||||
|
{
|
||||||
|
qDebug("DeviceUISet::loadMIMOChannelSettings: deserializing channel [%s]", qPrintable(channelConfig.m_channelIdURI));
|
||||||
|
reg.m_gui->deserialize(channelConfig.m_config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
renameChannelInstances();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug("DeviceUISet::loadMIMOChannelSettings: Loading preset [%s | %s] not a MIMO preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeviceUISet::saveMIMOChannelSettings(Preset *preset)
|
||||||
|
{
|
||||||
|
if (preset->isMIMOPreset())
|
||||||
|
{
|
||||||
|
qSort(m_channelInstanceRegistrations.begin(), m_channelInstanceRegistrations.end()); // sort by increasing delta frequency and type
|
||||||
|
|
||||||
|
for(int i = 0; i < m_channelInstanceRegistrations.count(); i++)
|
||||||
|
{
|
||||||
|
qDebug("DeviceUISet::saveMIMOChannelSettings: saving channel [%s]", qPrintable(m_channelInstanceRegistrations[i].m_channelName));
|
||||||
|
preset->addChannel(m_channelInstanceRegistrations[i].m_channelName, m_channelInstanceRegistrations[i].m_gui->serialize());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug("DeviceUISet::saveMIMOChannelSettings: not a MIMO preset");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeviceUISet::renameChannelInstances()
|
void DeviceUISet::renameChannelInstances()
|
||||||
|
@ -71,7 +71,8 @@ public:
|
|||||||
void saveRxChannelSettings(Preset* preset);
|
void saveRxChannelSettings(Preset* preset);
|
||||||
void loadTxChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
|
void loadTxChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
|
||||||
void saveTxChannelSettings(Preset* preset);
|
void saveTxChannelSettings(Preset* preset);
|
||||||
//TODO: load and save MIMO channel settings when preset has MIMO type defined
|
void loadMIMOChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
|
||||||
|
void saveMIMOChannelSettings(Preset* preset);
|
||||||
|
|
||||||
// These are the number of channel types available for selection
|
// These are the number of channel types available for selection
|
||||||
void setNumberOfAvailableRxChannels(int number) { m_nbAvailableRxChannels = number; }
|
void setNumberOfAvailableRxChannels(int number) { m_nbAvailableRxChannels = number; }
|
||||||
|
@ -737,6 +737,8 @@ void MainWindow::loadPresetSettings(const Preset* preset, int tabIndex)
|
|||||||
deviceUI->loadRxChannelSettings(preset, m_pluginManager->getPluginAPI());
|
deviceUI->loadRxChannelSettings(preset, m_pluginManager->getPluginAPI());
|
||||||
} else if (deviceUI->m_deviceSinkEngine) { // sink device
|
} else if (deviceUI->m_deviceSinkEngine) { // sink device
|
||||||
deviceUI->loadTxChannelSettings(preset, m_pluginManager->getPluginAPI());
|
deviceUI->loadTxChannelSettings(preset, m_pluginManager->getPluginAPI());
|
||||||
|
} else if (deviceUI->m_deviceMIMOEngine) { // MIMO device
|
||||||
|
deviceUI->loadMIMOChannelSettings(preset, m_pluginManager->getPluginAPI());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -763,6 +765,7 @@ void MainWindow::savePresetSettings(Preset* preset, int tabIndex)
|
|||||||
{
|
{
|
||||||
preset->setSpectrumConfig(deviceUI->m_spectrumGUI->serialize());
|
preset->setSpectrumConfig(deviceUI->m_spectrumGUI->serialize());
|
||||||
preset->clearChannels();
|
preset->clearChannels();
|
||||||
|
preset->setSourcePreset();
|
||||||
deviceUI->saveRxChannelSettings(preset);
|
deviceUI->saveRxChannelSettings(preset);
|
||||||
deviceUI->m_deviceAPI->saveSamplingDeviceSettings(preset);
|
deviceUI->m_deviceAPI->saveSamplingDeviceSettings(preset);
|
||||||
}
|
}
|
||||||
@ -770,10 +773,18 @@ void MainWindow::savePresetSettings(Preset* preset, int tabIndex)
|
|||||||
{
|
{
|
||||||
preset->setSpectrumConfig(deviceUI->m_spectrumGUI->serialize());
|
preset->setSpectrumConfig(deviceUI->m_spectrumGUI->serialize());
|
||||||
preset->clearChannels();
|
preset->clearChannels();
|
||||||
preset->setSourcePreset(false);
|
preset->setSinkPreset();
|
||||||
deviceUI->saveTxChannelSettings(preset);
|
deviceUI->saveTxChannelSettings(preset);
|
||||||
deviceUI->m_deviceAPI->saveSamplingDeviceSettings(preset);
|
deviceUI->m_deviceAPI->saveSamplingDeviceSettings(preset);
|
||||||
}
|
}
|
||||||
|
else if (deviceUI->m_deviceMIMOEngine) // MIMO device
|
||||||
|
{
|
||||||
|
preset->setSpectrumConfig(deviceUI->m_spectrumGUI->serialize());
|
||||||
|
preset->clearChannels();
|
||||||
|
preset->setMIMOPreset();
|
||||||
|
deviceUI->saveMIMOChannelSettings(preset);
|
||||||
|
deviceUI->m_deviceAPI->saveSamplingDeviceSettings(preset);
|
||||||
|
}
|
||||||
|
|
||||||
preset->setLayout(saveState());
|
preset->setLayout(saveState());
|
||||||
}
|
}
|
||||||
@ -854,7 +865,7 @@ QTreeWidgetItem* MainWindow::addPresetToTree(const Preset* preset)
|
|||||||
|
|
||||||
QStringList sl;
|
QStringList sl;
|
||||||
sl.append(QString("%1").arg(preset->getCenterFrequency() / 1e6f, 0, 'f', 3)); // frequency column
|
sl.append(QString("%1").arg(preset->getCenterFrequency() / 1e6f, 0, 'f', 3)); // frequency column
|
||||||
sl.append(QString("%1").arg(preset->isSourcePreset() ? 'R' : 'T')); // mode column
|
sl.append(QString("%1").arg(preset->isSourcePreset() ? 'R' : preset->isSinkPreset() ? 'T' : preset->isMIMOPreset() ? 'M' : 'X')); // mode column
|
||||||
sl.append(preset->getDescription()); // description column
|
sl.append(preset->getDescription()); // description column
|
||||||
PresetItem* item = new PresetItem(group, sl, preset->getCenterFrequency(), PItem);
|
PresetItem* item = new PresetItem(group, sl, preset->getCenterFrequency(), PItem);
|
||||||
item->setTextAlignment(0, Qt::AlignRight);
|
item->setTextAlignment(0, Qt::AlignRight);
|
||||||
@ -968,7 +979,7 @@ bool MainWindow::handleMessage(const Message& cmd)
|
|||||||
if ((preset->getGroup() == presetToDelete->getGroup()) &&
|
if ((preset->getGroup() == presetToDelete->getGroup()) &&
|
||||||
(preset->getCenterFrequency() == presetToDelete->getCenterFrequency()) &&
|
(preset->getCenterFrequency() == presetToDelete->getCenterFrequency()) &&
|
||||||
(preset->getDescription() == presetToDelete->getDescription()) &&
|
(preset->getDescription() == presetToDelete->getDescription()) &&
|
||||||
(preset->isSourcePreset() == presetToDelete->isSourcePreset()))
|
(preset->getPresetType() == presetToDelete->getPresetType()))
|
||||||
{
|
{
|
||||||
groupItem->takeChild(ip);
|
groupItem->takeChild(ip);
|
||||||
}
|
}
|
||||||
|
@ -853,7 +853,7 @@ int WebAPIAdapterGUI::instancePresetsGet(
|
|||||||
swgPresets->append(new SWGSDRangel::SWGPresetItem);
|
swgPresets->append(new SWGSDRangel::SWGPresetItem);
|
||||||
swgPresets->back()->init();
|
swgPresets->back()->init();
|
||||||
swgPresets->back()->setCenterFrequency(preset->getCenterFrequency());
|
swgPresets->back()->setCenterFrequency(preset->getCenterFrequency());
|
||||||
*swgPresets->back()->getType() = preset->isSourcePreset() ? "R" : "T";
|
*swgPresets->back()->getType() = preset->isSourcePreset() ? "R" : preset->isSinkPreset() ? "T" : preset->isMIMOPreset() ? "M" : "X";
|
||||||
*swgPresets->back()->getName() = preset->getDescription();
|
*swgPresets->back()->getName() = preset->getDescription();
|
||||||
nbPresetsThisGroup++;
|
nbPresetsThisGroup++;
|
||||||
}
|
}
|
||||||
@ -901,14 +901,21 @@ int WebAPIAdapterGUI::instancePresetPatch(
|
|||||||
if (deviceUI->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
|
if (deviceUI->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
|
||||||
{
|
{
|
||||||
error.init();
|
error.init();
|
||||||
*error.getMessage() = QString("Preset type (T) and device set type (Rx) mismatch");
|
*error.getMessage() = QString("Preset type and device set type (Rx) mismatch");
|
||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deviceUI->m_deviceSinkEngine && selectedPreset->isSourcePreset())
|
if (deviceUI->m_deviceSinkEngine && !selectedPreset->isSinkPreset())
|
||||||
{
|
{
|
||||||
error.init();
|
error.init();
|
||||||
*error.getMessage() = QString("Preset type (R) and device set type (Tx) mismatch");
|
*error.getMessage() = QString("Preset type and device set type (Tx) mismatch");
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deviceUI->m_deviceMIMOEngine && !selectedPreset->isMIMOPreset())
|
||||||
|
{
|
||||||
|
error.init();
|
||||||
|
*error.getMessage() = QString("Preset type and device set type (MIMO) mismatch");
|
||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -918,7 +925,7 @@ int WebAPIAdapterGUI::instancePresetPatch(
|
|||||||
response.init();
|
response.init();
|
||||||
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
||||||
*response.getGroupName() = selectedPreset->getGroup();
|
*response.getGroupName() = selectedPreset->getGroup();
|
||||||
*response.getType() = selectedPreset->isSourcePreset() ? "R" : "T";
|
*response.getType() = selectedPreset->isSourcePreset() ? "R" : selectedPreset->isSinkPreset() ? "T" : selectedPreset->isMIMOPreset() ? "M" : "X";
|
||||||
*response.getName() = selectedPreset->getDescription();
|
*response.getName() = selectedPreset->getDescription();
|
||||||
|
|
||||||
return 202;
|
return 202;
|
||||||
@ -962,14 +969,21 @@ int WebAPIAdapterGUI::instancePresetPut(
|
|||||||
if (deviceUI->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
|
if (deviceUI->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
|
||||||
{
|
{
|
||||||
error.init();
|
error.init();
|
||||||
*error.getMessage() = QString("Preset type (T) and device set type (Rx) mismatch");
|
*error.getMessage() = QString("Preset type and device set type (Rx) mismatch");
|
||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deviceUI->m_deviceSinkEngine && selectedPreset->isSourcePreset())
|
if (deviceUI->m_deviceSinkEngine && !selectedPreset->isSinkPreset())
|
||||||
{
|
{
|
||||||
error.init();
|
error.init();
|
||||||
*error.getMessage() = QString("Preset type (R) and device set type (Tx) mismatch");
|
*error.getMessage() = QString("Preset type and device set type (Tx) mismatch");
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deviceUI->m_deviceMIMOEngine && !selectedPreset->isMIMOPreset())
|
||||||
|
{
|
||||||
|
error.init();
|
||||||
|
*error.getMessage() = QString("Preset type and device set type (MIMO) mismatch");
|
||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -980,7 +994,7 @@ int WebAPIAdapterGUI::instancePresetPut(
|
|||||||
response.init();
|
response.init();
|
||||||
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
||||||
*response.getGroupName() = selectedPreset->getGroup();
|
*response.getGroupName() = selectedPreset->getGroup();
|
||||||
*response.getType() = selectedPreset->isSourcePreset() ? "R" : "T";
|
*response.getType() = selectedPreset->isSourcePreset() ? "R" : selectedPreset->isSinkPreset() ? "T": selectedPreset->isMIMOPreset() ? "M" : "X";
|
||||||
*response.getName() = selectedPreset->getDescription();
|
*response.getName() = selectedPreset->getDescription();
|
||||||
|
|
||||||
return 202;
|
return 202;
|
||||||
@ -1041,7 +1055,7 @@ int WebAPIAdapterGUI::instancePresetPost(
|
|||||||
response.init();
|
response.init();
|
||||||
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
||||||
*response.getGroupName() = selectedPreset->getGroup();
|
*response.getGroupName() = selectedPreset->getGroup();
|
||||||
*response.getType() = selectedPreset->isSourcePreset() ? "R" : "T";
|
*response.getType() = selectedPreset->isSourcePreset() ? "R" : selectedPreset->isSinkPreset() ? "T" : selectedPreset->isMIMOPreset() ? "M" : "X";
|
||||||
*response.getName() = selectedPreset->getDescription();
|
*response.getName() = selectedPreset->getDescription();
|
||||||
|
|
||||||
return 202;
|
return 202;
|
||||||
@ -1068,7 +1082,7 @@ int WebAPIAdapterGUI::instancePresetDelete(
|
|||||||
|
|
||||||
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
||||||
*response.getGroupName() = selectedPreset->getGroup();
|
*response.getGroupName() = selectedPreset->getGroup();
|
||||||
*response.getType() = selectedPreset->isSourcePreset() ? "R" : "T";
|
*response.getType() = selectedPreset->isSourcePreset() ? "R" : selectedPreset->isSinkPreset() ? "T" : selectedPreset->isMIMOPreset() ? "M" : "X";
|
||||||
*response.getName() = selectedPreset->getDescription();
|
*response.getName() = selectedPreset->getDescription();
|
||||||
|
|
||||||
MainWindow::MsgDeletePreset *msg = MainWindow::MsgDeletePreset::create(const_cast<Preset*>(selectedPreset));
|
MainWindow::MsgDeletePreset *msg = MainWindow::MsgDeletePreset::create(const_cast<Preset*>(selectedPreset));
|
||||||
|
@ -249,13 +249,9 @@ void DeviceSet::saveRxChannelSettings(Preset *preset)
|
|||||||
|
|
||||||
void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI)
|
void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI)
|
||||||
{
|
{
|
||||||
if (preset->isSourcePreset())
|
if (preset->isSinkPreset())
|
||||||
{
|
{
|
||||||
qDebug("DeviceSet::loadChannelSettings: Loading preset [%s | %s] not a sink preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
qDebug("DeviceSet::loadTxChannelSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
qDebug("DeviceSet::loadChannelSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
|
||||||
|
|
||||||
// Available channel plugins
|
// Available channel plugins
|
||||||
PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getTxChannelRegistrations();
|
PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getTxChannelRegistrations();
|
||||||
@ -264,7 +260,7 @@ void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI
|
|||||||
ChannelInstanceRegistrations openChannels = m_channelInstanceRegistrations;
|
ChannelInstanceRegistrations openChannels = m_channelInstanceRegistrations;
|
||||||
m_channelInstanceRegistrations.clear();
|
m_channelInstanceRegistrations.clear();
|
||||||
|
|
||||||
qDebug("DeviceSet::loadChannelSettings: %d channel(s) in preset", preset->getChannelCount());
|
qDebug("DeviceSet::loadTxChannelSettings: %d channel(s) in preset", preset->getChannelCount());
|
||||||
|
|
||||||
for (int i = 0; i < preset->getChannelCount(); i++)
|
for (int i = 0; i < preset->getChannelCount(); i++)
|
||||||
{
|
{
|
||||||
@ -275,11 +271,11 @@ void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI
|
|||||||
|
|
||||||
for (int i = 0; i < openChannels.count(); i++)
|
for (int i = 0; i < openChannels.count(); i++)
|
||||||
{
|
{
|
||||||
qDebug("DeviceSet::loadChannelSettings: channels compare [%s] vs [%s]", qPrintable(openChannels[i].m_channelName), qPrintable(channelConfig.m_channelIdURI));
|
qDebug("DeviceSet::loadTxChannelSettings: channels compare [%s] vs [%s]", qPrintable(openChannels[i].m_channelName), qPrintable(channelConfig.m_channelIdURI));
|
||||||
|
|
||||||
if (openChannels[i].m_channelName == channelConfig.m_channelIdURI)
|
if (openChannels[i].m_channelName == channelConfig.m_channelIdURI)
|
||||||
{
|
{
|
||||||
qDebug("DeviceSet::loadChannelSettings: channel [%s] found", qPrintable(openChannels[i].m_channelName));
|
qDebug("DeviceSet::loadTxChannelSettings: channel [%s] found", qPrintable(openChannels[i].m_channelName));
|
||||||
reg = openChannels.takeAt(i);
|
reg = openChannels.takeAt(i);
|
||||||
m_channelInstanceRegistrations.append(reg);
|
m_channelInstanceRegistrations.append(reg);
|
||||||
break;
|
break;
|
||||||
@ -294,7 +290,7 @@ void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI
|
|||||||
{
|
{
|
||||||
if ((*channelRegistrations)[i].m_channelIdURI == channelConfig.m_channelIdURI)
|
if ((*channelRegistrations)[i].m_channelIdURI == channelConfig.m_channelIdURI)
|
||||||
{
|
{
|
||||||
qDebug("DeviceSet::loadChannelSettings: creating new channel [%s]", qPrintable(channelConfig.m_channelIdURI));
|
qDebug("DeviceSet::loadTxChannelSettings: creating new channel [%s]", qPrintable(channelConfig.m_channelIdURI));
|
||||||
ChannelAPI *txChannel = (*channelRegistrations)[i].m_plugin->createTxChannelCS(m_deviceAPI);
|
ChannelAPI *txChannel = (*channelRegistrations)[i].m_plugin->createTxChannelCS(m_deviceAPI);
|
||||||
reg = ChannelInstanceRegistration(channelConfig.m_channelIdURI, txChannel);
|
reg = ChannelInstanceRegistration(channelConfig.m_channelIdURI, txChannel);
|
||||||
m_channelInstanceRegistrations.append(reg);
|
m_channelInstanceRegistrations.append(reg);
|
||||||
@ -305,7 +301,7 @@ void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI
|
|||||||
|
|
||||||
if (reg.m_channelAPI != nullptr)
|
if (reg.m_channelAPI != nullptr)
|
||||||
{
|
{
|
||||||
qDebug("DeviceSet::loadChannelSettings: deserializing channel [%s]", qPrintable(channelConfig.m_channelIdURI));
|
qDebug("DeviceSet::loadTxChannelSettings: deserializing channel [%s]", qPrintable(channelConfig.m_channelIdURI));
|
||||||
reg.m_channelAPI->deserialize(channelConfig.m_config);
|
reg.m_channelAPI->deserialize(channelConfig.m_config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -313,30 +309,131 @@ void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI
|
|||||||
// everything, that is still "available" is not needed anymore
|
// everything, that is still "available" is not needed anymore
|
||||||
for (int i = 0; i < openChannels.count(); i++)
|
for (int i = 0; i < openChannels.count(); i++)
|
||||||
{
|
{
|
||||||
qDebug("DeviceSet::loadChannelSettings: destroying spare channel [%s]", qPrintable(openChannels[i].m_channelName));
|
qDebug("DeviceSet::loadTxChannelSettings: destroying spare channel [%s]", qPrintable(openChannels[i].m_channelName));
|
||||||
openChannels[i].m_channelAPI->destroy();
|
openChannels[i].m_channelAPI->destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
renameChannelInstances();
|
renameChannelInstances();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug("DeviceSet::loadTxChannelSettings: Loading preset [%s | %s] not a sink preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeviceSet::saveTxChannelSettings(Preset *preset)
|
void DeviceSet::saveTxChannelSettings(Preset *preset)
|
||||||
{
|
{
|
||||||
if (preset->isSourcePreset())
|
if (preset->isSinkPreset())
|
||||||
{
|
|
||||||
qDebug("DeviceSet::saveChannelSettings: not a sink preset");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
qSort(m_channelInstanceRegistrations.begin(), m_channelInstanceRegistrations.end()); // sort by increasing delta frequency and type
|
qSort(m_channelInstanceRegistrations.begin(), m_channelInstanceRegistrations.end()); // sort by increasing delta frequency and type
|
||||||
|
|
||||||
for (int i = 0; i < m_channelInstanceRegistrations.count(); i++)
|
for (int i = 0; i < m_channelInstanceRegistrations.count(); i++)
|
||||||
{
|
{
|
||||||
qDebug("DeviceSet::saveChannelSettings: channel [%s] saved", qPrintable(m_channelInstanceRegistrations[i].m_channelName));
|
qDebug("DeviceSet::saveTxChannelSettings: channel [%s] saved", qPrintable(m_channelInstanceRegistrations[i].m_channelName));
|
||||||
preset->addChannel(m_channelInstanceRegistrations[i].m_channelName, m_channelInstanceRegistrations[i].m_channelAPI->serialize());
|
preset->addChannel(m_channelInstanceRegistrations[i].m_channelName, m_channelInstanceRegistrations[i].m_channelAPI->serialize());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug("DeviceSet::saveTxChannelSettings: not a sink preset");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeviceSet::loadMIMOChannelSettings(const Preset *preset, PluginAPI *pluginAPI)
|
||||||
|
{
|
||||||
|
if (preset->isMIMOPreset())
|
||||||
|
{
|
||||||
|
qDebug("DeviceSet::loadMIMOChannelSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
||||||
|
|
||||||
|
// Available channel plugins
|
||||||
|
PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getMIMOChannelRegistrations();
|
||||||
|
|
||||||
|
// copy currently open channels and clear list
|
||||||
|
ChannelInstanceRegistrations openChannels = m_channelInstanceRegistrations;
|
||||||
|
m_channelInstanceRegistrations.clear();
|
||||||
|
|
||||||
|
qDebug("DeviceSet::loadMIMOChannelSettings: %d channel(s) in preset", preset->getChannelCount());
|
||||||
|
|
||||||
|
for (int i = 0; i < preset->getChannelCount(); i++)
|
||||||
|
{
|
||||||
|
const Preset::ChannelConfig& channelConfig = preset->getChannelConfig(i);
|
||||||
|
ChannelInstanceRegistration reg;
|
||||||
|
|
||||||
|
// if we have one instance available already, use it
|
||||||
|
|
||||||
|
for (int i = 0; i < openChannels.count(); i++)
|
||||||
|
{
|
||||||
|
qDebug("DeviceSet::loadMIMOChannelSettings: channels compare [%s] vs [%s]", qPrintable(openChannels[i].m_channelName), qPrintable(channelConfig.m_channelIdURI));
|
||||||
|
|
||||||
|
//if(openChannels[i].m_channelName == channelConfig.m_channelIdURI)
|
||||||
|
if (ChannelUtils::compareChannelURIs(openChannels[i].m_channelName, channelConfig.m_channelIdURI))
|
||||||
|
{
|
||||||
|
qDebug("DeviceSet::loadMIMOChannelSettings: channel [%s] found", qPrintable(openChannels[i].m_channelName));
|
||||||
|
reg = openChannels.takeAt(i);
|
||||||
|
m_channelInstanceRegistrations.append(reg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we haven't one already, create one
|
||||||
|
|
||||||
|
if (reg.m_channelAPI == nullptr)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < channelRegistrations->count(); i++)
|
||||||
|
{
|
||||||
|
//if((*channelRegistrations)[i].m_channelIdURI == channelConfig.m_channelIdURI)
|
||||||
|
if (ChannelUtils::compareChannelURIs((*channelRegistrations)[i].m_channelIdURI, channelConfig.m_channelIdURI))
|
||||||
|
{
|
||||||
|
qDebug("DeviceSet::loadMIMOChannelSettings: creating new channel [%s] from config [%s]",
|
||||||
|
qPrintable((*channelRegistrations)[i].m_channelIdURI),
|
||||||
|
qPrintable(channelConfig.m_channelIdURI));
|
||||||
|
ChannelAPI *mimoChannel = (*channelRegistrations)[i].m_plugin->createMIMOChannelCS(m_deviceAPI);
|
||||||
|
reg = ChannelInstanceRegistration(channelConfig.m_channelIdURI, mimoChannel);
|
||||||
|
m_channelInstanceRegistrations.append(reg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reg.m_channelAPI != nullptr)
|
||||||
|
{
|
||||||
|
qDebug("DeviceSet::loadMIMOChannelSettings: deserializing channel [%s]", qPrintable(channelConfig.m_channelIdURI));
|
||||||
|
reg.m_channelAPI->deserialize(channelConfig.m_config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// everything, that is still "available" is not needed anymore
|
||||||
|
for (int i = 0; i < openChannels.count(); i++)
|
||||||
|
{
|
||||||
|
qDebug("DeviceSet::loadMIMOChannelSettings: destroying spare channel [%s]", qPrintable(openChannels[i].m_channelName));
|
||||||
|
openChannels[i].m_channelAPI->destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
renameChannelInstances();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug("DeviceSet::loadChannelSettings: Loading preset [%s | %s] not a MIMO preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeviceSet::saveMIMOChannelSettings(Preset *preset)
|
||||||
|
{
|
||||||
|
if (preset->isMIMOPreset())
|
||||||
|
{
|
||||||
|
qSort(m_channelInstanceRegistrations.begin(), m_channelInstanceRegistrations.end()); // sort by increasing delta frequency and type
|
||||||
|
|
||||||
|
for (int i = 0; i < m_channelInstanceRegistrations.count(); i++)
|
||||||
|
{
|
||||||
|
qDebug("DeviceSet::saveMIMOChannelSettings: channel [%s] saved", qPrintable(m_channelInstanceRegistrations[i].m_channelName));
|
||||||
|
preset->addChannel(m_channelInstanceRegistrations[i].m_channelName, m_channelInstanceRegistrations[i].m_channelAPI->serialize());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug("DeviceSet::saveMIMOChannelSettings: not a MIMO preset");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeviceSet::renameChannelInstances()
|
void DeviceSet::renameChannelInstances()
|
||||||
|
@ -55,6 +55,8 @@ public:
|
|||||||
void saveRxChannelSettings(Preset* preset);
|
void saveRxChannelSettings(Preset* preset);
|
||||||
void loadTxChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
|
void loadTxChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
|
||||||
void saveTxChannelSettings(Preset* preset);
|
void saveTxChannelSettings(Preset* preset);
|
||||||
|
void loadMIMOChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
|
||||||
|
void saveMIMOChannelSettings(Preset* preset);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct ChannelInstanceRegistration
|
struct ChannelInstanceRegistration
|
||||||
|
@ -574,16 +574,14 @@ void MainCore::loadPresetSettings(const Preset* preset, int tabIndex)
|
|||||||
if (tabIndex >= 0)
|
if (tabIndex >= 0)
|
||||||
{
|
{
|
||||||
DeviceSet *deviceSet = m_deviceSets[tabIndex];
|
DeviceSet *deviceSet = m_deviceSets[tabIndex];
|
||||||
|
deviceSet->m_deviceAPI->loadSamplingDeviceSettings(preset);
|
||||||
|
|
||||||
if (deviceSet->m_deviceSourceEngine) // source device
|
if (deviceSet->m_deviceSourceEngine) { // source device
|
||||||
{
|
|
||||||
deviceSet->m_deviceAPI->loadSamplingDeviceSettings(preset);
|
|
||||||
deviceSet->loadRxChannelSettings(preset, m_pluginManager->getPluginAPI());
|
deviceSet->loadRxChannelSettings(preset, m_pluginManager->getPluginAPI());
|
||||||
}
|
} else if (deviceSet->m_deviceSinkEngine) { // sink device
|
||||||
else if (deviceSet->m_deviceSinkEngine) // sink device
|
|
||||||
{
|
|
||||||
deviceSet->m_deviceAPI->loadSamplingDeviceSettings(preset);
|
|
||||||
deviceSet->loadTxChannelSettings(preset, m_pluginManager->getPluginAPI());
|
deviceSet->loadTxChannelSettings(preset, m_pluginManager->getPluginAPI());
|
||||||
|
} else if (deviceSet->m_deviceMIMOEngine) { // MIMO device
|
||||||
|
deviceSet->loadMIMOChannelSettings(preset, m_pluginManager->getPluginAPI());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -601,15 +599,23 @@ void MainCore::savePresetSettings(Preset* preset, int tabIndex)
|
|||||||
if (deviceSet->m_deviceSourceEngine) // source device
|
if (deviceSet->m_deviceSourceEngine) // source device
|
||||||
{
|
{
|
||||||
preset->clearChannels();
|
preset->clearChannels();
|
||||||
|
preset->setSourcePreset();
|
||||||
deviceSet->saveRxChannelSettings(preset);
|
deviceSet->saveRxChannelSettings(preset);
|
||||||
deviceSet->m_deviceAPI->saveSamplingDeviceSettings(preset);
|
deviceSet->m_deviceAPI->saveSamplingDeviceSettings(preset);
|
||||||
}
|
}
|
||||||
else if (deviceSet->m_deviceSinkEngine) // sink device
|
else if (deviceSet->m_deviceSinkEngine) // sink device
|
||||||
{
|
{
|
||||||
preset->clearChannels();
|
preset->clearChannels();
|
||||||
preset->setSourcePreset(false);
|
preset->setSinkPreset();
|
||||||
deviceSet->saveTxChannelSettings(preset);
|
deviceSet->saveTxChannelSettings(preset);
|
||||||
deviceSet->m_deviceAPI->saveSamplingDeviceSettings(preset);
|
deviceSet->m_deviceAPI->saveSamplingDeviceSettings(preset);
|
||||||
}
|
}
|
||||||
|
else if (deviceSet->m_deviceMIMOEngine) // MIMO device
|
||||||
|
{
|
||||||
|
preset->clearChannels();
|
||||||
|
preset->setMIMOPreset();
|
||||||
|
deviceSet->saveMIMOChannelSettings(preset);
|
||||||
|
deviceSet->m_deviceAPI->saveSamplingDeviceSettings(preset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,8 +51,10 @@
|
|||||||
#include "device/deviceenumerator.h"
|
#include "device/deviceenumerator.h"
|
||||||
#include "dsp/devicesamplesink.h"
|
#include "dsp/devicesamplesink.h"
|
||||||
#include "dsp/devicesamplesource.h"
|
#include "dsp/devicesamplesource.h"
|
||||||
|
#include "dsp/devicesamplemimo.h"
|
||||||
#include "dsp/dspdevicesourceengine.h"
|
#include "dsp/dspdevicesourceengine.h"
|
||||||
#include "dsp/dspdevicesinkengine.h"
|
#include "dsp/dspdevicesinkengine.h"
|
||||||
|
#include "dsp/dspdevicemimoengine.h"
|
||||||
#include "dsp/dspengine.h"
|
#include "dsp/dspengine.h"
|
||||||
#include "channel/channelapi.h"
|
#include "channel/channelapi.h"
|
||||||
#include "plugin/pluginapi.h"
|
#include "plugin/pluginapi.h"
|
||||||
@ -833,7 +835,7 @@ int WebAPIAdapterSrv::instancePresetFilePut(
|
|||||||
response.init();
|
response.init();
|
||||||
response.setCenterFrequency(preset->getCenterFrequency());
|
response.setCenterFrequency(preset->getCenterFrequency());
|
||||||
*response.getGroupName() = preset->getGroup();
|
*response.getGroupName() = preset->getGroup();
|
||||||
*response.getType() = preset->isSourcePreset() ? "R" : "T";
|
*response.getType() = preset->isSourcePreset() ? "R" : preset->isSinkPreset() ? "T" : preset->isMIMOPreset() ? "M" : "X";
|
||||||
*response.getName() = preset->getDescription();
|
*response.getName() = preset->getDescription();
|
||||||
|
|
||||||
return 200;
|
return 200;
|
||||||
@ -898,7 +900,7 @@ int WebAPIAdapterSrv::instancePresetFilePost(
|
|||||||
response.init();
|
response.init();
|
||||||
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
||||||
*response.getGroupName() = selectedPreset->getGroup();
|
*response.getGroupName() = selectedPreset->getGroup();
|
||||||
*response.getType() = selectedPreset->isSourcePreset() ? "R" : "T";
|
*response.getType() = selectedPreset->isSourcePreset() ? "R" : selectedPreset->isSinkPreset() ? "T" : selectedPreset->isMIMOPreset() ? "M" : "X";
|
||||||
*response.getName() = selectedPreset->getDescription();
|
*response.getName() = selectedPreset->getDescription();
|
||||||
|
|
||||||
return 200;
|
return 200;
|
||||||
@ -952,7 +954,7 @@ int WebAPIAdapterSrv::instancePresetsGet(
|
|||||||
swgPresets->append(new SWGSDRangel::SWGPresetItem);
|
swgPresets->append(new SWGSDRangel::SWGPresetItem);
|
||||||
swgPresets->back()->init();
|
swgPresets->back()->init();
|
||||||
swgPresets->back()->setCenterFrequency(preset->getCenterFrequency());
|
swgPresets->back()->setCenterFrequency(preset->getCenterFrequency());
|
||||||
*swgPresets->back()->getType() = preset->isSourcePreset() ? "R" : "T";
|
*swgPresets->back()->getType() = preset->isSourcePreset() ? "R" : preset->isSinkPreset() ? "T" : preset->isMIMOPreset() ? "M" : "X";
|
||||||
*swgPresets->back()->getName() = preset->getDescription();
|
*swgPresets->back()->getName() = preset->getDescription();
|
||||||
nbPresetsThisGroup++;
|
nbPresetsThisGroup++;
|
||||||
}
|
}
|
||||||
@ -1000,14 +1002,21 @@ int WebAPIAdapterSrv::instancePresetPatch(
|
|||||||
if (deviceSet->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
|
if (deviceSet->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
|
||||||
{
|
{
|
||||||
error.init();
|
error.init();
|
||||||
*error.getMessage() = QString("Preset type (T) and device set type (Rx) mismatch");
|
*error.getMessage() = QString("Preset type and device set type (Rx) mismatch");
|
||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deviceSet->m_deviceSinkEngine && selectedPreset->isSourcePreset())
|
if (deviceSet->m_deviceSinkEngine && !selectedPreset->isSinkPreset())
|
||||||
{
|
{
|
||||||
error.init();
|
error.init();
|
||||||
*error.getMessage() = QString("Preset type (R) and device set type (Tx) mismatch");
|
*error.getMessage() = QString("Preset type and device set type (Tx) mismatch");
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deviceSet->m_deviceMIMOEngine && !selectedPreset->isMIMOPreset())
|
||||||
|
{
|
||||||
|
error.init();
|
||||||
|
*error.getMessage() = QString("Preset type and device set type (MIMO) mismatch");
|
||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1017,7 +1026,7 @@ int WebAPIAdapterSrv::instancePresetPatch(
|
|||||||
response.init();
|
response.init();
|
||||||
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
||||||
*response.getGroupName() = selectedPreset->getGroup();
|
*response.getGroupName() = selectedPreset->getGroup();
|
||||||
*response.getType() = selectedPreset->isSourcePreset() ? "R" : "T";
|
*response.getType() = selectedPreset->isSourcePreset() ? "R" : selectedPreset->isSinkPreset() ? "T" : selectedPreset->isMIMOPreset() ? "M" : "X";
|
||||||
*response.getName() = selectedPreset->getDescription();
|
*response.getName() = selectedPreset->getDescription();
|
||||||
|
|
||||||
return 202;
|
return 202;
|
||||||
@ -1061,14 +1070,21 @@ int WebAPIAdapterSrv::instancePresetPut(
|
|||||||
if (deviceSet->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
|
if (deviceSet->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
|
||||||
{
|
{
|
||||||
error.init();
|
error.init();
|
||||||
*error.getMessage() = QString("Preset type (T) and device set type (Rx) mismatch");
|
*error.getMessage() = QString("Preset type and device set type (Rx) mismatch");
|
||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deviceSet->m_deviceSinkEngine && selectedPreset->isSourcePreset())
|
if (deviceSet->m_deviceSinkEngine && !selectedPreset->isSinkPreset())
|
||||||
{
|
{
|
||||||
error.init();
|
error.init();
|
||||||
*error.getMessage() = QString("Preset type (R) and device set type (Tx) mismatch");
|
*error.getMessage() = QString("Preset type and device set type (Tx) mismatch");
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deviceSet->m_deviceSinkEngine && !selectedPreset->isMIMOPreset())
|
||||||
|
{
|
||||||
|
error.init();
|
||||||
|
*error.getMessage() = QString("Preset type and device set type (MIMO) mismatch");
|
||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1079,7 +1095,7 @@ int WebAPIAdapterSrv::instancePresetPut(
|
|||||||
response.init();
|
response.init();
|
||||||
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
||||||
*response.getGroupName() = selectedPreset->getGroup();
|
*response.getGroupName() = selectedPreset->getGroup();
|
||||||
*response.getType() = selectedPreset->isSourcePreset() ? "R" : "T";
|
*response.getType() = selectedPreset->isSourcePreset() ? "R" : selectedPreset->isSinkPreset() ? "T": selectedPreset->isMIMOPreset() ? "M" : "X";
|
||||||
*response.getName() = selectedPreset->getDescription();
|
*response.getName() = selectedPreset->getDescription();
|
||||||
|
|
||||||
return 202;
|
return 202;
|
||||||
@ -1103,14 +1119,17 @@ int WebAPIAdapterSrv::instancePresetPost(
|
|||||||
|
|
||||||
DeviceSet *deviceSet = m_mainCore.m_deviceSets[deviceSetIndex];
|
DeviceSet *deviceSet = m_mainCore.m_deviceSets[deviceSetIndex];
|
||||||
int deviceCenterFrequency = 0;
|
int deviceCenterFrequency = 0;
|
||||||
bool isSourcePreset;
|
int presetTypeCode;
|
||||||
|
|
||||||
if (deviceSet->m_deviceSourceEngine) { // Rx
|
if (deviceSet->m_deviceSourceEngine) { // Rx
|
||||||
deviceCenterFrequency = deviceSet->m_deviceSourceEngine->getSource()->getCenterFrequency();
|
deviceCenterFrequency = deviceSet->m_deviceSourceEngine->getSource()->getCenterFrequency();
|
||||||
isSourcePreset = true;
|
presetTypeCode = 0;
|
||||||
} else if (deviceSet->m_deviceSinkEngine) { // Tx
|
} else if (deviceSet->m_deviceSinkEngine) { // Tx
|
||||||
deviceCenterFrequency = deviceSet->m_deviceSinkEngine->getSink()->getCenterFrequency();
|
deviceCenterFrequency = deviceSet->m_deviceSinkEngine->getSink()->getCenterFrequency();
|
||||||
isSourcePreset = false;
|
presetTypeCode = 1;
|
||||||
|
} else if (deviceSet->m_deviceMIMOEngine) { // MIMO
|
||||||
|
deviceCenterFrequency = deviceSet->m_deviceMIMOEngine->getMIMO()->getMIMOCenterFrequency();
|
||||||
|
presetTypeCode = 2;
|
||||||
} else {
|
} else {
|
||||||
error.init();
|
error.init();
|
||||||
*error.getMessage() = QString("Device set error");
|
*error.getMessage() = QString("Device set error");
|
||||||
@ -1143,7 +1162,7 @@ int WebAPIAdapterSrv::instancePresetPost(
|
|||||||
response.init();
|
response.init();
|
||||||
response.setCenterFrequency(deviceCenterFrequency);
|
response.setCenterFrequency(deviceCenterFrequency);
|
||||||
*response.getGroupName() = selectedPreset->getGroup();
|
*response.getGroupName() = selectedPreset->getGroup();
|
||||||
*response.getType() = isSourcePreset ? "R" : "T";
|
*response.getType() = presetTypeCode == 0 ? "R" : presetTypeCode == 1 ? "T" : presetTypeCode == 2 ? "M" : "X";
|
||||||
*response.getName() = selectedPreset->getDescription();
|
*response.getName() = selectedPreset->getDescription();
|
||||||
|
|
||||||
return 202;
|
return 202;
|
||||||
@ -1171,7 +1190,7 @@ int WebAPIAdapterSrv::instancePresetDelete(
|
|||||||
|
|
||||||
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
response.setCenterFrequency(selectedPreset->getCenterFrequency());
|
||||||
*response.getGroupName() = selectedPreset->getGroup();
|
*response.getGroupName() = selectedPreset->getGroup();
|
||||||
*response.getType() = selectedPreset->isSourcePreset() ? "R" : "T";
|
*response.getType() = selectedPreset->isSourcePreset() ? "R" : selectedPreset->isSinkPreset() ? "T" : selectedPreset->isMIMOPreset() ? "M" : "X";
|
||||||
*response.getName() = selectedPreset->getDescription();
|
*response.getName() = selectedPreset->getDescription();
|
||||||
|
|
||||||
MainCore::MsgDeletePreset *msg = MainCore::MsgDeletePreset::create(const_cast<Preset*>(selectedPreset));
|
MainCore::MsgDeletePreset *msg = MainCore::MsgDeletePreset::create(const_cast<Preset*>(selectedPreset));
|
||||||
|
@ -22,8 +22,8 @@ ChannelConfig:
|
|||||||
Preset:
|
Preset:
|
||||||
description: Represents a Preset object
|
description: Represents a Preset object
|
||||||
properties:
|
properties:
|
||||||
sourcePreset:
|
presetType:
|
||||||
description: boolean
|
description: See Preset::PresetType
|
||||||
type: integer
|
type: integer
|
||||||
group:
|
group:
|
||||||
type: string
|
type: string
|
||||||
|
File diff suppressed because one or more lines are too long
@ -28,8 +28,8 @@ SWGPreset::SWGPreset(QString* json) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SWGPreset::SWGPreset() {
|
SWGPreset::SWGPreset() {
|
||||||
source_preset = 0;
|
preset_type = 0;
|
||||||
m_source_preset_isSet = false;
|
m_preset_type_isSet = false;
|
||||||
group = nullptr;
|
group = nullptr;
|
||||||
m_group_isSet = false;
|
m_group_isSet = false;
|
||||||
description = nullptr;
|
description = nullptr;
|
||||||
@ -56,8 +56,8 @@ SWGPreset::~SWGPreset() {
|
|||||||
|
|
||||||
void
|
void
|
||||||
SWGPreset::init() {
|
SWGPreset::init() {
|
||||||
source_preset = 0;
|
preset_type = 0;
|
||||||
m_source_preset_isSet = false;
|
m_preset_type_isSet = false;
|
||||||
group = new QString("");
|
group = new QString("");
|
||||||
m_group_isSet = false;
|
m_group_isSet = false;
|
||||||
description = new QString("");
|
description = new QString("");
|
||||||
@ -123,7 +123,7 @@ SWGPreset::fromJson(QString &json) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
SWGPreset::fromJsonObject(QJsonObject &pJson) {
|
SWGPreset::fromJsonObject(QJsonObject &pJson) {
|
||||||
::SWGSDRangel::setValue(&source_preset, pJson["sourcePreset"], "qint32", "");
|
::SWGSDRangel::setValue(&preset_type, pJson["presetType"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&group, pJson["group"], "QString", "QString");
|
::SWGSDRangel::setValue(&group, pJson["group"], "QString", "QString");
|
||||||
|
|
||||||
@ -159,8 +159,8 @@ SWGPreset::asJson ()
|
|||||||
QJsonObject*
|
QJsonObject*
|
||||||
SWGPreset::asJsonObject() {
|
SWGPreset::asJsonObject() {
|
||||||
QJsonObject* obj = new QJsonObject();
|
QJsonObject* obj = new QJsonObject();
|
||||||
if(m_source_preset_isSet){
|
if(m_preset_type_isSet){
|
||||||
obj->insert("sourcePreset", QJsonValue(source_preset));
|
obj->insert("presetType", QJsonValue(preset_type));
|
||||||
}
|
}
|
||||||
if(group != nullptr && *group != QString("")){
|
if(group != nullptr && *group != QString("")){
|
||||||
toJsonValue(QString("group"), group, obj, QString("QString"));
|
toJsonValue(QString("group"), group, obj, QString("QString"));
|
||||||
@ -194,13 +194,13 @@ SWGPreset::asJsonObject() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGPreset::getSourcePreset() {
|
SWGPreset::getPresetType() {
|
||||||
return source_preset;
|
return preset_type;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGPreset::setSourcePreset(qint32 source_preset) {
|
SWGPreset::setPresetType(qint32 preset_type) {
|
||||||
this->source_preset = source_preset;
|
this->preset_type = preset_type;
|
||||||
this->m_source_preset_isSet = true;
|
this->m_preset_type_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString*
|
QString*
|
||||||
@ -298,7 +298,7 @@ bool
|
|||||||
SWGPreset::isSet(){
|
SWGPreset::isSet(){
|
||||||
bool isObjectUpdated = false;
|
bool isObjectUpdated = false;
|
||||||
do{
|
do{
|
||||||
if(m_source_preset_isSet){
|
if(m_preset_type_isSet){
|
||||||
isObjectUpdated = true; break;
|
isObjectUpdated = true; break;
|
||||||
}
|
}
|
||||||
if(group && *group != QString("")){
|
if(group && *group != QString("")){
|
||||||
|
@ -46,8 +46,8 @@ public:
|
|||||||
virtual void fromJsonObject(QJsonObject &json) override;
|
virtual void fromJsonObject(QJsonObject &json) override;
|
||||||
virtual SWGPreset* fromJson(QString &jsonString) override;
|
virtual SWGPreset* fromJson(QString &jsonString) override;
|
||||||
|
|
||||||
qint32 getSourcePreset();
|
qint32 getPresetType();
|
||||||
void setSourcePreset(qint32 source_preset);
|
void setPresetType(qint32 preset_type);
|
||||||
|
|
||||||
QString* getGroup();
|
QString* getGroup();
|
||||||
void setGroup(QString* group);
|
void setGroup(QString* group);
|
||||||
@ -80,8 +80,8 @@ public:
|
|||||||
virtual bool isSet() override;
|
virtual bool isSet() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
qint32 source_preset;
|
qint32 preset_type;
|
||||||
bool m_source_preset_isSet;
|
bool m_preset_type_isSet;
|
||||||
|
|
||||||
QString* group;
|
QString* group;
|
||||||
bool m_group_isSet;
|
bool m_group_isSet;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user