1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-06 16:05:13 -04:00

LimeRFE feature: Make settings assignments atomic. Part of #1329

This commit is contained in:
f4exb
2022-11-24 22:48:02 +01:00
parent e50d9dc78a
commit d5d2ae1ebd
6 changed files with 321 additions and 25 deletions
+64 -9
View File
@@ -71,6 +71,7 @@ bool LimeRFEGUI::deserialize(const QByteArray& data)
void LimeRFEGUI::setWorkspaceIndex(int index)
{
m_settings.m_workspaceIndex = index;
m_settingsKeys.append("workspaceIndex");
m_feature->setWorkspaceIndex(index);
}
@@ -109,6 +110,14 @@ void LimeRFEGUI::onMenuDialogCalled(const QPoint &p)
setTitle(m_settings.m_title);
setTitleColor(m_settings.m_rgbColor);
m_settingsKeys.append("title");
m_settingsKeys.append("rgbColor");
m_settingsKeys.append("useReverseAPI");
m_settingsKeys.append("reverseAPIAddress");
m_settingsKeys.append("reverseAPIPort");
m_settingsKeys.append("reverseAPIFeatureSetIndex");
m_settingsKeys.append("reverseAPIFeatureIndex");
applySettings();
}
@@ -164,9 +173,11 @@ void LimeRFEGUI::applySettings(bool force)
{
if (m_doApplySettings)
{
LimeRFE::MsgConfigureLimeRFE* message = LimeRFE::MsgConfigureLimeRFE::create( m_settings, force);
LimeRFE::MsgConfigureLimeRFE* message = LimeRFE::MsgConfigureLimeRFE::create( m_settings, m_settingsKeys, force);
m_limeRFE->getInputMessageQueue()->push(message);
}
m_settingsKeys.clear();
}
void LimeRFEGUI::displaySettings()
@@ -339,6 +350,7 @@ void LimeRFEGUI::setRxChannels()
ui->rxPort->addItem("TX/RX (J3)");
ui->rxPort->setEnabled(false);
m_settings.m_rxPort = LimeRFESettings::RxPortJ3;
m_settingsKeys.append("rxPort");
ui->rxPort->setCurrentIndex((int) m_settings.m_rxPort);
break;
default:
@@ -356,8 +368,10 @@ void LimeRFEGUI::setRxChannels()
ui->rxPort->addItem("TX/RX (J3)");
ui->rxPort->setEnabled(false);
m_settings.m_rxPort = LimeRFESettings::RxPortJ3;
m_settingsKeys.append("rxPort");
ui->rxPort->setCurrentIndex((int) m_settings.m_rxPort);
m_settings.m_txRxDriven = true;
m_settingsKeys.append("txRxDriven");
ui->txFollowsRx->setEnabled(false);
ui->txFollowsRx->setChecked(m_settings.m_txRxDriven);
}
@@ -408,6 +422,7 @@ void LimeRFEGUI::setTxChannels()
ui->txPort->addItem("TX/RX 30M (J5)");
ui->txPort->setEnabled(false);
m_settings.m_txPort = LimeRFESettings::TxPortJ5;
m_settingsKeys.append("txPort");
ui->txPort->setCurrentIndex((int) m_settings.m_txPort);
break;
case LimeRFESettings::HAM_144_146MHz:
@@ -436,6 +451,7 @@ void LimeRFEGUI::setTxChannels()
ui->txChannel->setCurrentIndex((int) m_settings.m_txCellularChannel);
ui->txPort->addItem("TX/RX (J3)");
m_settings.m_txPort = LimeRFESettings::TxPortJ3;
m_settingsKeys.append("txPort");
ui->txPort->setEnabled(false);
ui->txPort->setCurrentIndex((int) m_settings.m_txPort);
}
@@ -665,7 +681,7 @@ void LimeRFEGUI::on_deviceToGUI_clicked()
return;
}
m_limeRFE->stateToSettings(m_settings);
m_limeRFE->stateToSettings(m_settings, m_settingsKeys);
m_rxOn = m_limeRFE->getRx();
m_txOn = m_limeRFE->getTx();
displaySettings();
@@ -675,11 +691,13 @@ void LimeRFEGUI::on_deviceToGUI_clicked()
void LimeRFEGUI::on_rxChannelGroup_currentIndexChanged(int index)
{
m_settings.m_rxChannels = (LimeRFESettings::ChannelGroups) index;
m_settingsKeys.append("rxChannels");
setRxChannels();
if (m_settings.m_txRxDriven)
{
m_settings.m_txChannels = m_settings.m_rxChannels;
m_settingsKeys.append("txChannels");
ui->txChannelGroup->setCurrentIndex((int) m_settings.m_txChannels);
}
@@ -688,12 +706,20 @@ void LimeRFEGUI::on_rxChannelGroup_currentIndexChanged(int index)
void LimeRFEGUI::on_rxChannel_currentIndexChanged(int index)
{
if (m_settings.m_rxChannels == LimeRFESettings::ChannelsWideband) {
if (m_settings.m_rxChannels == LimeRFESettings::ChannelsWideband)
{
m_settings.m_rxWidebandChannel = (LimeRFESettings::WidebandChannel) index;
} else if (m_settings.m_rxChannels == LimeRFESettings::ChannelsHAM) {
m_settingsKeys.append("rxWidebandChannel");
}
else if (m_settings.m_rxChannels == LimeRFESettings::ChannelsHAM)
{
m_settings.m_rxHAMChannel = (LimeRFESettings::HAMChannel) index;
} else if (m_settings.m_rxChannels == LimeRFESettings::ChannelsCellular) {
m_settingsKeys.append("rxHAMChannel");
}
else if (m_settings.m_rxChannels == LimeRFESettings::ChannelsCellular)
{
m_settings.m_rxCellularChannel = (LimeRFESettings::CellularChannel) index;
m_settingsKeys.append("rxCellularChannel");
}
setRxChannels();
@@ -703,6 +729,9 @@ void LimeRFEGUI::on_rxChannel_currentIndexChanged(int index)
m_settings.m_txWidebandChannel = m_settings.m_rxWidebandChannel;
m_settings.m_txHAMChannel = m_settings.m_rxHAMChannel;
m_settings.m_txCellularChannel = m_settings.m_rxCellularChannel;
m_settingsKeys.append("txWidebandChannel");
m_settingsKeys.append("txHAMChannel");
m_settingsKeys.append("txCellularChannel");
setTxChannels();
}
@@ -712,6 +741,7 @@ void LimeRFEGUI::on_rxChannel_currentIndexChanged(int index)
void LimeRFEGUI::on_rxPort_currentIndexChanged(int index)
{
m_settings.m_rxPort = (LimeRFESettings::RxPort) index;
m_settingsKeys.append("rxPort");
highlightApplyButton(true);
}
@@ -725,6 +755,11 @@ void LimeRFEGUI::on_txFollowsRx_clicked()
m_settings.m_txWidebandChannel = m_settings.m_rxWidebandChannel;
m_settings.m_txHAMChannel = m_settings.m_rxHAMChannel;
m_settings.m_txCellularChannel = m_settings.m_rxCellularChannel;
m_settingsKeys.append("txRxDriven");
m_settingsKeys.append("txChannels");
m_settingsKeys.append("txWidebandChannel");
m_settingsKeys.append("txHAMChannel");
m_settingsKeys.append("txCellularChannel");
ui->txChannelGroup->setCurrentIndex((int) m_settings.m_txChannels);
if (checked) {
@@ -735,18 +770,27 @@ void LimeRFEGUI::on_txFollowsRx_clicked()
void LimeRFEGUI::on_txChannelGroup_currentIndexChanged(int index)
{
m_settings.m_txChannels = (LimeRFESettings::ChannelGroups) index;
m_settingsKeys.append("txChannels");
setTxChannels();
highlightApplyButton(true);
}
void LimeRFEGUI::on_txChannel_currentIndexChanged(int index)
{
if (m_settings.m_txChannels == LimeRFESettings::ChannelsWideband) {
if (m_settings.m_txChannels == LimeRFESettings::ChannelsWideband)
{
m_settings.m_txWidebandChannel = (LimeRFESettings::WidebandChannel) index;
} else if (m_settings.m_txChannels == LimeRFESettings::ChannelsHAM) {
m_settingsKeys.append("txWidebandChannel");
}
else if (m_settings.m_txChannels == LimeRFESettings::ChannelsHAM)
{
m_settings.m_txHAMChannel = (LimeRFESettings::HAMChannel) index;
} else if (m_settings.m_txChannels == LimeRFESettings::ChannelsCellular) {
m_settingsKeys.append("txHAMChannel");
}
else if (m_settings.m_txChannels == LimeRFESettings::ChannelsCellular)
{
m_settings.m_txCellularChannel = (LimeRFESettings::CellularChannel) index;
m_settingsKeys.append("txCellularChannel");
}
setTxChannels();
@@ -756,18 +800,21 @@ void LimeRFEGUI::on_txChannel_currentIndexChanged(int index)
void LimeRFEGUI::on_txPort_currentIndexChanged(int index)
{
m_settings.m_txPort = (LimeRFESettings::TxPort) index;
m_settingsKeys.append("txPort");
highlightApplyButton(true);
}
void LimeRFEGUI::on_powerEnable_clicked()
{
m_settings.m_swrEnable = ui->powerEnable->isChecked();
m_settingsKeys.append("swrEnable");
highlightApplyButton(true);
}
void LimeRFEGUI::on_powerSource_currentIndexChanged(int index)
{
m_settings.m_swrSource = (LimeRFESettings::SWRSource) index;
m_settingsKeys.append("swrSource");
highlightApplyButton(true);
}
@@ -951,12 +998,14 @@ void LimeRFEGUI::on_rxTxToggle_clicked()
void LimeRFEGUI::on_attenuation_currentIndexChanged(int index)
{
m_settings.m_attenuationFactor = index;
m_settingsKeys.append("attenuationFactor");
highlightApplyButton(true);
}
void LimeRFEGUI::on_amFmNotchFilter_clicked()
{
m_settings.m_amfmNotch = ui->amFmNotchFilter->isChecked();
m_settingsKeys.append("amfmNotch");
highlightApplyButton(true);
}
@@ -980,7 +1029,13 @@ bool LimeRFEGUI::handleMessage(const Message& message)
{
qDebug("LimeRFEGUI::handleMessage: LimeRFE::MsgConfigureLimeRFE");
const LimeRFE::MsgConfigureLimeRFE& cfg = (LimeRFE::MsgConfigureLimeRFE&) message;
m_settings = cfg.getSettings();
if (cfg.getForce()) {
m_settings = cfg.getSettings();
} else {
m_settings.applySettings(cfg.getSettingsKeys(), cfg.getSettings());
}
displaySettings();
highlightApplyButton(cfg.getForce());
return true;