Skip to content

Commit 045aeaa

Browse files
committed
adrv9009: fix some small bugs
Signed-off-by: IonutMuthi <Ionut.Muthi@analog.com>
1 parent 5c86aa6 commit 045aeaa

File tree

4 files changed

+70
-58
lines changed

4 files changed

+70
-58
lines changed

packages/adrv9009/plugins/adrv9009plugin/include/adrv9009plugin/advanced/bistwidget.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ private slots:
6464
// Helper methods for composite bist_tone attribute
6565
void writeBistToneToDevice(); // Write composite value to device
6666
void readBistToneFromDevice(); // Read and parse composite value
67+
68+
QMap<QString, QString> *m_prbOptions;
6769
};
6870

6971
} // namespace scopy::adrv9009

packages/adrv9009/plugins/adrv9009plugin/src/adrv9009advanced.cpp

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -263,40 +263,43 @@ void Adrv9009Advanced::createContentWidgets()
263263
if(m_clkSettings) {
264264
// Connect clock settings signals
265265
connect(this, &Adrv9009Advanced::readRequested, m_clkSettings, &ClkSettingsWidget::readRequested);
266-
if(m_calibrations != nullptr) {
267-
connect(this, &Adrv9009Advanced::readRequested, m_calibrations, &CalibrationWidget::readRequested);
268-
}
266+
if(m_calibrations != nullptr) {
267+
connect(this, &Adrv9009Advanced::readRequested, m_calibrations,
268+
&CalibrationWidget::readRequested);
269+
}
269270

270-
// Add all widgets to stacked widget
271-
m_centralWidget->addWidget(m_clkSettings);
272-
m_centralWidget->addWidget(m_calibrations);
273-
m_centralWidget->addWidget(m_txSettings);
274-
m_centralWidget->addWidget(m_rxSettings);
275-
m_centralWidget->addWidget(m_orxSettings);
276-
m_centralWidget->addWidget(m_fhmSetup);
277-
m_centralWidget->addWidget(m_paProtection);
278-
m_centralWidget->addWidget(m_gainSetup);
279-
m_centralWidget->addWidget(m_agcSetup);
280-
m_centralWidget->addWidget(m_gpioConfig);
281-
m_centralWidget->addWidget(m_auxDac);
282-
m_centralWidget->addWidget(m_jesd204Settings);
283-
m_centralWidget->addWidget(m_bist);
284-
285-
// Connect auxDac widget readRequested signal
286-
if(m_auxDac) {
287-
connect(this, &Adrv9009Advanced::readRequested, m_auxDac, &AuxDacWidget::readRequested);
288-
}
271+
// Add all widgets to stacked widget
272+
m_centralWidget->addWidget(m_clkSettings);
273+
m_centralWidget->addWidget(m_calibrations);
274+
m_centralWidget->addWidget(m_txSettings);
275+
m_centralWidget->addWidget(m_rxSettings);
276+
m_centralWidget->addWidget(m_orxSettings);
277+
m_centralWidget->addWidget(m_fhmSetup);
278+
m_centralWidget->addWidget(m_paProtection);
279+
m_centralWidget->addWidget(m_gainSetup);
280+
m_centralWidget->addWidget(m_agcSetup);
281+
m_centralWidget->addWidget(m_gpioConfig);
282+
m_centralWidget->addWidget(m_auxDac);
283+
m_centralWidget->addWidget(m_jesd204Settings);
284+
m_centralWidget->addWidget(m_bist);
285+
286+
// Connect auxDac widget readRequested signal
287+
if(m_auxDac) {
288+
connect(this, &Adrv9009Advanced::readRequested, m_auxDac, &AuxDacWidget::readRequested);
289+
}
289290

290-
// Set first widget as current (CLK Settings)
291-
m_centralWidget->setCurrentWidget(m_clkSettings);
292-
if(m_txSettings) {
293-
connect(this, &Adrv9009Advanced::readRequested, m_txSettings, &TxSettingsWidget::readRequested);
294-
}
295-
if(m_rxSettings) {
296-
connect(this, &Adrv9009Advanced::readRequested, m_rxSettings, &RxSettingsWidget::readRequested);
297-
}
298-
if(m_orxSettings) {
299-
connect(this, &Adrv9009Advanced::readRequested, m_orxSettings, &OrxSettingsWidget::readRequested);
291+
// Set first widget as current (CLK Settings)
292+
m_centralWidget->setCurrentWidget(m_clkSettings);
293+
if(m_txSettings) {
294+
connect(this, &Adrv9009Advanced::readRequested, m_txSettings, &TxSettingsWidget::readRequested);
295+
}
296+
if(m_rxSettings) {
297+
connect(this, &Adrv9009Advanced::readRequested, m_rxSettings, &RxSettingsWidget::readRequested);
298+
}
299+
if(m_orxSettings) {
300+
connect(this, &Adrv9009Advanced::readRequested, m_orxSettings,
301+
&OrxSettingsWidget::readRequested);
302+
}
300303
}
301304
}
302305

packages/adrv9009/plugins/adrv9009plugin/src/advanced/bistwidget.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ using namespace scopy::adrv9009;
4040
BistWidget::BistWidget(iio_device *device, QWidget *parent)
4141
: QWidget(parent)
4242
, m_device(device)
43+
, m_prbOptions(nullptr)
4344
{
4445
if(!m_device) {
4546
qWarning(CAT_BIST) << "No device provided to BIST widget";
@@ -49,7 +50,11 @@ BistWidget::BistWidget(iio_device *device, QWidget *parent)
4950
setupUi();
5051
}
5152

52-
BistWidget::~BistWidget() {}
53+
BistWidget::~BistWidget()
54+
{
55+
m_prbOptions = nullptr;
56+
delete m_prbOptions;
57+
}
5358

5459
void BistWidget::setupUi()
5560
{
@@ -121,8 +126,8 @@ QWidget *BistWidget::createTxNcoSection(QWidget *parent)
121126
layout->addWidget(m_tx1FreqSpinBox);
122127

123128
// TX2 Frequency - Custom spinbox (display in MHz, store in kHz like iio-oscilloscope)
124-
// MHz range for TX2 (much smaller range)
125-
m_tx2FreqSpinBox = new gui::MenuSpinbox("TX2 Tone (MHz)", 0, "", -16, 16, true, false, false, widget);
129+
// iio-oscilloscope glade range: -160 to 160 kHz -> displayed as MHz: -0.16 to 0.16
130+
m_tx2FreqSpinBox = new gui::MenuSpinbox("TX2 Tone (MHz)", 0, "", -0.16, 0.16, true, false, false, widget);
126131
m_tx2FreqSpinBox->setScalingEnabled(false);
127132
layout->addWidget(m_tx2FreqSpinBox);
128133

@@ -145,35 +150,30 @@ QWidget *BistWidget::createFramerPrbsSection(QWidget *parent)
145150
layout->setSpacing(15);
146151

147152
// Create PRBS options map (from glade file analysis: 11 options, values 0-8, 14-15)
148-
auto createPrbsOptionsMap = []() {
149-
QMap<QString, QString> *options = new QMap<QString, QString>();
150-
options->insert("0", "ADC_DATA");
151-
options->insert("1", "CHECKERBOARD");
152-
options->insert("2", "TOGGLE0_1");
153-
options->insert("3", "PRBS31");
154-
options->insert("4", "PRBS23");
155-
options->insert("5", "PRBS15");
156-
options->insert("6", "PRBS9");
157-
options->insert("7", "PRBS7");
158-
options->insert("8", "RAMP");
159-
options->insert("14", "PATTERN_REPEAT");
160-
options->insert("15", "PATTERN_ONCE");
161-
return options;
162-
};
153+
m_prbOptions = new QMap<QString, QString>();
154+
m_prbOptions->insert("0", "ADC_DATA");
155+
m_prbOptions->insert("1", "CHECKERBOARD");
156+
m_prbOptions->insert("2", "TOGGLE0_1");
157+
m_prbOptions->insert("3", "PRBS31");
158+
m_prbOptions->insert("4", "PRBS23");
159+
m_prbOptions->insert("5", "PRBS15");
160+
m_prbOptions->insert("6", "PRBS9");
161+
m_prbOptions->insert("7", "PRBS7");
162+
m_prbOptions->insert("8", "RAMP");
163+
m_prbOptions->insert("14", "PATTERN_REPEAT");
164+
m_prbOptions->insert("15", "PATTERN_ONCE");
163165

164166
// Framer A PRBS - Custom Combo Widget
165-
auto framerAPrbsOptions = createPrbsOptionsMap();
166167
auto framerAWidget = Adrv9009WidgetFactory::createCustomComboWidget(m_device, "bist_framer_a_prbs",
167-
framerAPrbsOptions, "Framer A PRBS");
168+
m_prbOptions, "Framer A PRBS");
168169
if(framerAWidget) {
169170
layout->addWidget(framerAWidget);
170171
connect(this, &BistWidget::readRequested, framerAWidget, &IIOWidget::readAsync);
171172
}
172173

173174
// Framer B PRBS - Custom Combo Widget
174-
auto framerBPrbsOptions = createPrbsOptionsMap();
175175
auto framerBWidget = Adrv9009WidgetFactory::createCustomComboWidget(m_device, "bist_framer_b_prbs",
176-
framerBPrbsOptions, "Framer B PRBS");
176+
m_prbOptions, "Framer B PRBS");
177177
if(framerBWidget) {
178178
layout->addWidget(framerBWidget);
179179
connect(this, &BistWidget::readRequested, framerBWidget, &IIOWidget::readAsync);

packages/adrv9009/plugins/adrv9009plugin/src/advanced/calibrationwidget.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ QWidget *CalibrationWidget::createCalibrationMaskGroup(QWidget *parent)
116116
m_txLolExternalCal->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
117117
m_rxQecCal = new MenuOnOffSwitch("RX QEC", widget);
118118
m_rxQecCal->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
119-
m_rxPhaseCorrectionCal = new MenuOnOffSwitch("RX Phase Coorrection", widget);
119+
m_rxPhaseCorrectionCal = new MenuOnOffSwitch("RX Phase Correction", widget);
120120
m_rxPhaseCorrectionCal->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
121121
m_fhmCal = new MenuOnOffSwitch("FHM", widget);
122122
m_fhmCal->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
@@ -200,8 +200,16 @@ void CalibrationWidget::writeCalibrationMaskToDevice()
200200
return;
201201
}
202202

203-
// Build calibration mask from UI checkboxes (specific bits: 8, 9, 10, 14, 15, 23)
203+
// Read-modify-write: preserve bits not managed by this UI (same as iio-oscilloscope CHECKBOX_MASK)
204204
long long mask = 0;
205+
int ret = iio_device_debug_attr_read_longlong(m_device, "adi,default-initial-calibrations-mask", &mask);
206+
if(ret < 0) {
207+
qWarning(CAT_CALIBRATION) << "Failed to read calibration mask before write, error:" << ret;
208+
return;
209+
}
210+
211+
// Clear only the 6 managed bits, then apply UI state
212+
mask &= ~((1LL << 8) | (1LL << 9) | (1LL << 10) | (1LL << 14) | (1LL << 15) | (1LL << 23));
205213

206214
if(m_txLoLeakageCal->onOffswitch()->isChecked())
207215
mask |= (1LL << 8); // Bit 8: TX LO Leakage
@@ -218,8 +226,7 @@ void CalibrationWidget::writeCalibrationMaskToDevice()
218226

219227
qDebug(CAT_CALIBRATION) << "Writing calibration mask to device:" << QString("0x%1").arg(mask, 0, 16);
220228

221-
// Write calibration mask to device
222-
int ret = iio_device_debug_attr_write_longlong(m_device, "adi,default-initial-calibrations-mask", mask);
229+
ret = iio_device_debug_attr_write_longlong(m_device, "adi,default-initial-calibrations-mask", mask);
223230
if(ret < 0) {
224231
qWarning(CAT_CALIBRATION) << "Failed to write calibration mask, error:" << ret;
225232
}

0 commit comments

Comments
 (0)