1
0
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:
f4exb 2019-09-13 13:40:31 +02:00
parent d3176ef578
commit 500f5bc82c
22 changed files with 954 additions and 642 deletions

View File

@ -123,6 +123,8 @@ public:
virtual quint64 getSinkCenterFrequency(int index) const { return 0; (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 int webapiSettingsGet(

View File

@ -512,13 +512,13 @@ void DeviceAPI::loadSamplingDeviceSettings(const Preset* preset)
{
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);
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",
qPrintable(m_samplingDeviceId), m_samplingDeviceSequence, qPrintable(m_samplingDeviceSerial));
@ -556,15 +556,15 @@ void DeviceAPI::loadSamplingDeviceSettings(const Preset* preset)
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);
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",
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));
}
}
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
{
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",
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->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->setCenterFrequency(m_deviceSourceEngine->getSource()->getCenterFrequency());
@ -618,17 +652,17 @@ void DeviceAPI::saveSamplingDeviceSettings(Preset* preset)
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",
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->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->setCenterFrequency(m_deviceSinkEngine->getSink()->getCenterFrequency());
@ -638,6 +672,26 @@ void DeviceAPI::saveSamplingDeviceSettings(Preset* preset)
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
{
qDebug("DeviceAPI::saveSamplingDeviceSettings: not a suitable preset");

View File

@ -74,6 +74,8 @@ public:
virtual quint64 getSourceCenterFrequency(int index) const = 0; //!< Center frequency exposed by the source at index
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 int webapiSettingsGet(

View File

@ -4714,9 +4714,9 @@ margin-bottom: 20px;
};
defs.Preset = {
"properties" : {
"sourcePreset" : {
"presetType" : {
"type" : "integer",
"description" : "boolean"
"description" : "See Preset::PresetType"
},
"group" : {
"type" : "string"

View File

@ -22,8 +22,8 @@ ChannelConfig:
Preset:
description: Represents a Preset object
properties:
sourcePreset:
description: boolean
presetType:
description: See Preset::PresetType
type: integer
group:
type: string

View File

@ -217,7 +217,9 @@ const Preset* MainSettings::getPreset(const QString& groupName, quint64 centerFr
{
if (type == "R" && getPreset(i)->isSourcePreset()) {
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);
}
}

View File

@ -41,7 +41,7 @@ Preset::Preset(const Preset& other) :
void Preset::resetToDefaults()
{
m_sourcePreset = true;
m_presetType == PresetSource; // Rx
m_group = "default";
m_description = "no name";
m_centerFrequency = 0;
@ -67,7 +67,8 @@ QByteArray Preset::serialize() const
s.writeU64(3, m_centerFrequency);
s.writeBlob(4, m_layout);
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());
@ -115,12 +116,21 @@ bool Preset::deserialize(const QByteArray& data)
if (d.getVersion() == 1)
{
bool tmpBool;
int tmp;
d.readString(1, &m_group, "default");
d.readString(2, &m_description, "no name");
d.readU64(3, &m_centerFrequency, 0);
d.readBlob(4, &m_layout);
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",
// qPrintable(m_group),
@ -291,25 +301,25 @@ const QByteArray* Preset::findBestDeviceConfig(
{
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);
return &(itMatchSequence->m_config);
}
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);
return &(itFirstOfKind->m_config);
}
else // definitely not found !
{
qDebug("Preset::findBestSourceConfig: no match");
return 0;
qDebug("Preset::findBestDeviceConfig: no match");
return nullptr;
}
}
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));
return &(it->m_config);
}
@ -364,7 +374,7 @@ const QByteArray* Preset::findBestDeviceConfigSoapy(const QString& sourceId, con
}
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);
return &(itFirstOfKind->m_config);
}

View File

@ -57,13 +57,26 @@ public:
};
typedef QList<DeviceConfig> DeviceeConfigs;
enum PresetType
{
PresetSource, // Rx
PresetSink, // Tx
PresetMIMO // MIMO
};
Preset();
Preset(const Preset& other);
void resetToDefaults();
void setSourcePreset(bool isSourcePreset) { m_sourcePreset = isSourcePreset; }
bool isSourcePreset() const { return m_sourcePreset; }
void setSourcePreset() { m_presetType = PresetSource; }
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;
bool deserialize(const QByteArray& data);
@ -130,7 +143,7 @@ public:
}
protected:
bool m_sourcePreset;
PresetType m_presetType;
// group and preset description
QString m_group;

View File

@ -96,7 +96,7 @@ void WebAPIAdapterBase::webapiFormatPreset(
)
{
apiPreset->init();
apiPreset->setSourcePreset(preset.isSourcePreset() ? 1 : 0);
apiPreset->setPresetType(preset.getPresetType());
apiPreset->setGroup(new QString(preset.getGroup()));
apiPreset->setDescription(new QString(preset.getDescription()));
apiPreset->setCenterFrequency(preset.getCenterFrequency());
@ -195,8 +195,8 @@ void WebAPIAdapterBase::webapiUpdatePreset(
if (presetKeys.m_keys.contains("iqImbalanceCorrection")) {
preset->setIQImbalanceCorrection(apiPreset->getIqImbalanceCorrection() != 0);
}
if (presetKeys.m_keys.contains("sourcePreset")) {
preset->setSourcePreset(apiPreset->getSourcePreset() != 0);
if (presetKeys.m_keys.contains("presetType")) {
preset->setPresetType((Preset::PresetType) apiPreset->getPresetType());
}
if (presetKeys.m_keys.contains("description")) {
preset->setDescription(*apiPreset->getDescription());

View File

@ -2325,8 +2325,8 @@ bool WebAPIRequestMapper::appendPresetKeys(
}
if (presetJson.contains("iqImbalanceCorrection"))
{
preset->setSourcePreset(presetJson["sourcePreset"].toInt());
presetKeys.m_keys.append("sourcePreset");
preset->setPresetType(presetJson["presetType"].toInt());
presetKeys.m_keys.append("presetType");
}
if (presetJson.contains("description"))
{

View File

@ -229,7 +229,7 @@ void DeviceUISet::saveRxChannelSettings(Preset *preset)
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());
}
}
@ -241,11 +241,7 @@ void DeviceUISet::saveRxChannelSettings(Preset *preset)
void DeviceUISet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI)
{
if (preset->isSourcePreset())
{
qDebug("DeviceUISet::loadTxChannelSettings: Loading preset [%s | %s] not a sink preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
}
else
if (preset->isSinkPreset())
{
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();
}
else
{
qDebug("DeviceUISet::loadTxChannelSettings: Loading preset [%s | %s] not a sink preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
}
}
void DeviceUISet::saveTxChannelSettings(Preset *preset)
{
if (preset->isSourcePreset())
{
qDebug("DeviceUISet::saveTxChannelSettings: not a sink preset");
}
else
if (preset->isSinkPreset())
{
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::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());
}
}
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()

View File

@ -71,7 +71,8 @@ public:
void saveRxChannelSettings(Preset* preset);
void loadTxChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
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
void setNumberOfAvailableRxChannels(int number) { m_nbAvailableRxChannels = number; }

View File

@ -737,6 +737,8 @@ void MainWindow::loadPresetSettings(const Preset* preset, int tabIndex)
deviceUI->loadRxChannelSettings(preset, m_pluginManager->getPluginAPI());
} else if (deviceUI->m_deviceSinkEngine) { // sink device
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->clearChannels();
preset->setSourcePreset();
deviceUI->saveRxChannelSettings(preset);
deviceUI->m_deviceAPI->saveSamplingDeviceSettings(preset);
}
@ -770,10 +773,18 @@ void MainWindow::savePresetSettings(Preset* preset, int tabIndex)
{
preset->setSpectrumConfig(deviceUI->m_spectrumGUI->serialize());
preset->clearChannels();
preset->setSourcePreset(false);
preset->setSinkPreset();
deviceUI->saveTxChannelSettings(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());
}
@ -854,7 +865,7 @@ QTreeWidgetItem* MainWindow::addPresetToTree(const Preset* preset)
QStringList sl;
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
PresetItem* item = new PresetItem(group, sl, preset->getCenterFrequency(), PItem);
item->setTextAlignment(0, Qt::AlignRight);
@ -968,7 +979,7 @@ bool MainWindow::handleMessage(const Message& cmd)
if ((preset->getGroup() == presetToDelete->getGroup()) &&
(preset->getCenterFrequency() == presetToDelete->getCenterFrequency()) &&
(preset->getDescription() == presetToDelete->getDescription()) &&
(preset->isSourcePreset() == presetToDelete->isSourcePreset()))
(preset->getPresetType() == presetToDelete->getPresetType()))
{
groupItem->takeChild(ip);
}

View File

@ -853,7 +853,7 @@ int WebAPIAdapterGUI::instancePresetsGet(
swgPresets->append(new SWGSDRangel::SWGPresetItem);
swgPresets->back()->init();
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();
nbPresetsThisGroup++;
}
@ -901,14 +901,21 @@ int WebAPIAdapterGUI::instancePresetPatch(
if (deviceUI->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
{
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;
}
if (deviceUI->m_deviceSinkEngine && selectedPreset->isSourcePreset())
if (deviceUI->m_deviceSinkEngine && !selectedPreset->isSinkPreset())
{
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;
}
@ -918,7 +925,7 @@ int WebAPIAdapterGUI::instancePresetPatch(
response.init();
response.setCenterFrequency(selectedPreset->getCenterFrequency());
*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();
return 202;
@ -962,14 +969,21 @@ int WebAPIAdapterGUI::instancePresetPut(
if (deviceUI->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
{
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;
}
if (deviceUI->m_deviceSinkEngine && selectedPreset->isSourcePreset())
if (deviceUI->m_deviceSinkEngine && !selectedPreset->isSinkPreset())
{
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;
}
}
@ -980,7 +994,7 @@ int WebAPIAdapterGUI::instancePresetPut(
response.init();
response.setCenterFrequency(selectedPreset->getCenterFrequency());
*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();
return 202;
@ -1041,7 +1055,7 @@ int WebAPIAdapterGUI::instancePresetPost(
response.init();
response.setCenterFrequency(selectedPreset->getCenterFrequency());
*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();
return 202;
@ -1068,7 +1082,7 @@ int WebAPIAdapterGUI::instancePresetDelete(
response.setCenterFrequency(selectedPreset->getCenterFrequency());
*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();
MainWindow::MsgDeletePreset *msg = MainWindow::MsgDeletePreset::create(const_cast<Preset*>(selectedPreset));

View File

@ -249,13 +249,9 @@ void DeviceSet::saveRxChannelSettings(Preset *preset)
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()));
}
else
{
qDebug("DeviceSet::loadChannelSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
qDebug("DeviceSet::loadTxChannelSettings: Loading preset [%s | %s]", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
// Available channel plugins
PluginAPI::ChannelRegistrations *channelRegistrations = pluginAPI->getTxChannelRegistrations();
@ -264,7 +260,7 @@ void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI
ChannelInstanceRegistrations openChannels = m_channelInstanceRegistrations;
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++)
{
@ -275,11 +271,11 @@ void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI
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)
{
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);
m_channelInstanceRegistrations.append(reg);
break;
@ -294,7 +290,7 @@ void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI
{
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);
reg = ChannelInstanceRegistration(channelConfig.m_channelIdURI, txChannel);
m_channelInstanceRegistrations.append(reg);
@ -305,7 +301,7 @@ void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI
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);
}
}
@ -313,30 +309,131 @@ void DeviceSet::loadTxChannelSettings(const Preset *preset, PluginAPI *pluginAPI
// everything, that is still "available" is not needed anymore
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();
}
renameChannelInstances();
}
else
{
qDebug("DeviceSet::loadTxChannelSettings: Loading preset [%s | %s] not a sink preset", qPrintable(preset->getGroup()), qPrintable(preset->getDescription()));
}
}
void DeviceSet::saveTxChannelSettings(Preset *preset)
{
if (preset->isSourcePreset())
{
qDebug("DeviceSet::saveChannelSettings: not a sink preset");
}
else
if (preset->isSinkPreset())
{
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::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());
}
}
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()

View File

@ -55,6 +55,8 @@ public:
void saveRxChannelSettings(Preset* preset);
void loadTxChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
void saveTxChannelSettings(Preset* preset);
void loadMIMOChannelSettings(const Preset* preset, PluginAPI *pluginAPI);
void saveMIMOChannelSettings(Preset* preset);
private:
struct ChannelInstanceRegistration

View File

@ -574,16 +574,14 @@ void MainCore::loadPresetSettings(const Preset* preset, int tabIndex)
if (tabIndex >= 0)
{
DeviceSet *deviceSet = m_deviceSets[tabIndex];
deviceSet->m_deviceAPI->loadSamplingDeviceSettings(preset);
if (deviceSet->m_deviceSourceEngine) // source device
{
deviceSet->m_deviceAPI->loadSamplingDeviceSettings(preset);
if (deviceSet->m_deviceSourceEngine) { // source device
deviceSet->loadRxChannelSettings(preset, m_pluginManager->getPluginAPI());
}
else if (deviceSet->m_deviceSinkEngine) // sink device
{
deviceSet->m_deviceAPI->loadSamplingDeviceSettings(preset);
} else if (deviceSet->m_deviceSinkEngine) { // sink device
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
{
preset->clearChannels();
preset->setSourcePreset();
deviceSet->saveRxChannelSettings(preset);
deviceSet->m_deviceAPI->saveSamplingDeviceSettings(preset);
}
else if (deviceSet->m_deviceSinkEngine) // sink device
{
preset->clearChannels();
preset->setSourcePreset(false);
preset->setSinkPreset();
deviceSet->saveTxChannelSettings(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);
}
}

View File

@ -51,8 +51,10 @@
#include "device/deviceenumerator.h"
#include "dsp/devicesamplesink.h"
#include "dsp/devicesamplesource.h"
#include "dsp/devicesamplemimo.h"
#include "dsp/dspdevicesourceengine.h"
#include "dsp/dspdevicesinkengine.h"
#include "dsp/dspdevicemimoengine.h"
#include "dsp/dspengine.h"
#include "channel/channelapi.h"
#include "plugin/pluginapi.h"
@ -833,7 +835,7 @@ int WebAPIAdapterSrv::instancePresetFilePut(
response.init();
response.setCenterFrequency(preset->getCenterFrequency());
*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();
return 200;
@ -898,7 +900,7 @@ int WebAPIAdapterSrv::instancePresetFilePost(
response.init();
response.setCenterFrequency(selectedPreset->getCenterFrequency());
*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();
return 200;
@ -952,7 +954,7 @@ int WebAPIAdapterSrv::instancePresetsGet(
swgPresets->append(new SWGSDRangel::SWGPresetItem);
swgPresets->back()->init();
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();
nbPresetsThisGroup++;
}
@ -1000,14 +1002,21 @@ int WebAPIAdapterSrv::instancePresetPatch(
if (deviceSet->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
{
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;
}
if (deviceSet->m_deviceSinkEngine && selectedPreset->isSourcePreset())
if (deviceSet->m_deviceSinkEngine && !selectedPreset->isSinkPreset())
{
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;
}
@ -1017,7 +1026,7 @@ int WebAPIAdapterSrv::instancePresetPatch(
response.init();
response.setCenterFrequency(selectedPreset->getCenterFrequency());
*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();
return 202;
@ -1061,14 +1070,21 @@ int WebAPIAdapterSrv::instancePresetPut(
if (deviceSet->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
{
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;
}
if (deviceSet->m_deviceSinkEngine && selectedPreset->isSourcePreset())
if (deviceSet->m_deviceSinkEngine && !selectedPreset->isSinkPreset())
{
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;
}
}
@ -1079,7 +1095,7 @@ int WebAPIAdapterSrv::instancePresetPut(
response.init();
response.setCenterFrequency(selectedPreset->getCenterFrequency());
*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();
return 202;
@ -1103,14 +1119,17 @@ int WebAPIAdapterSrv::instancePresetPost(
DeviceSet *deviceSet = m_mainCore.m_deviceSets[deviceSetIndex];
int deviceCenterFrequency = 0;
bool isSourcePreset;
int presetTypeCode;
if (deviceSet->m_deviceSourceEngine) { // Rx
deviceCenterFrequency = deviceSet->m_deviceSourceEngine->getSource()->getCenterFrequency();
isSourcePreset = true;
presetTypeCode = 0;
} else if (deviceSet->m_deviceSinkEngine) { // Tx
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 {
error.init();
*error.getMessage() = QString("Device set error");
@ -1143,7 +1162,7 @@ int WebAPIAdapterSrv::instancePresetPost(
response.init();
response.setCenterFrequency(deviceCenterFrequency);
*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();
return 202;
@ -1171,7 +1190,7 @@ int WebAPIAdapterSrv::instancePresetDelete(
response.setCenterFrequency(selectedPreset->getCenterFrequency());
*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();
MainCore::MsgDeletePreset *msg = MainCore::MsgDeletePreset::create(const_cast<Preset*>(selectedPreset));

View File

@ -22,8 +22,8 @@ ChannelConfig:
Preset:
description: Represents a Preset object
properties:
sourcePreset:
description: boolean
presetType:
description: See Preset::PresetType
type: integer
group:
type: string

View File

@ -4714,9 +4714,9 @@ margin-bottom: 20px;
};
defs.Preset = {
"properties" : {
"sourcePreset" : {
"presetType" : {
"type" : "integer",
"description" : "boolean"
"description" : "See Preset::PresetType"
},
"group" : {
"type" : "string"

View File

@ -28,8 +28,8 @@ SWGPreset::SWGPreset(QString* json) {
}
SWGPreset::SWGPreset() {
source_preset = 0;
m_source_preset_isSet = false;
preset_type = 0;
m_preset_type_isSet = false;
group = nullptr;
m_group_isSet = false;
description = nullptr;
@ -56,8 +56,8 @@ SWGPreset::~SWGPreset() {
void
SWGPreset::init() {
source_preset = 0;
m_source_preset_isSet = false;
preset_type = 0;
m_preset_type_isSet = false;
group = new QString("");
m_group_isSet = false;
description = new QString("");
@ -123,7 +123,7 @@ SWGPreset::fromJson(QString &json) {
void
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");
@ -159,8 +159,8 @@ SWGPreset::asJson ()
QJsonObject*
SWGPreset::asJsonObject() {
QJsonObject* obj = new QJsonObject();
if(m_source_preset_isSet){
obj->insert("sourcePreset", QJsonValue(source_preset));
if(m_preset_type_isSet){
obj->insert("presetType", QJsonValue(preset_type));
}
if(group != nullptr && *group != QString("")){
toJsonValue(QString("group"), group, obj, QString("QString"));
@ -194,13 +194,13 @@ SWGPreset::asJsonObject() {
}
qint32
SWGPreset::getSourcePreset() {
return source_preset;
SWGPreset::getPresetType() {
return preset_type;
}
void
SWGPreset::setSourcePreset(qint32 source_preset) {
this->source_preset = source_preset;
this->m_source_preset_isSet = true;
SWGPreset::setPresetType(qint32 preset_type) {
this->preset_type = preset_type;
this->m_preset_type_isSet = true;
}
QString*
@ -298,7 +298,7 @@ bool
SWGPreset::isSet(){
bool isObjectUpdated = false;
do{
if(m_source_preset_isSet){
if(m_preset_type_isSet){
isObjectUpdated = true; break;
}
if(group && *group != QString("")){

View File

@ -46,8 +46,8 @@ public:
virtual void fromJsonObject(QJsonObject &json) override;
virtual SWGPreset* fromJson(QString &jsonString) override;
qint32 getSourcePreset();
void setSourcePreset(qint32 source_preset);
qint32 getPresetType();
void setPresetType(qint32 preset_type);
QString* getGroup();
void setGroup(QString* group);
@ -80,8 +80,8 @@ public:
virtual bool isSet() override;
private:
qint32 source_preset;
bool m_source_preset_isSet;
qint32 preset_type;
bool m_preset_type_isSet;
QString* group;
bool m_group_isSet;