Skip to content

Commit 49297c1

Browse files
committed
adrv9009: fix some small bugs
Signed-off-by: IonutMuthi <Ionut.Muthi@analog.com>
1 parent 17fd46f commit 49297c1

File tree

4 files changed

+72
-58
lines changed

4 files changed

+72
-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
@@ -264,40 +264,43 @@ void Adrv9009Advanced::createContentWidgets()
264264
if(m_clkSettings) {
265265
// Connect clock settings signals
266266
connect(this, &Adrv9009Advanced::readRequested, m_clkSettings, &ClkSettingsWidget::readRequested);
267-
if(m_calibrations != nullptr) {
268-
connect(this, &Adrv9009Advanced::readRequested, m_calibrations, &CalibrationWidget::readRequested);
269-
}
267+
if(m_calibrations != nullptr) {
268+
connect(this, &Adrv9009Advanced::readRequested, m_calibrations,
269+
&CalibrationWidget::readRequested);
270+
}
270271

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

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

303306
if(m_agcSetup) {

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

Lines changed: 24 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,13 @@ BistWidget::BistWidget(iio_device *device, QWidget *parent)
4950
setupUi();
5051
}
5152

52-
BistWidget::~BistWidget() {}
53+
BistWidget::~BistWidget()
54+
{
55+
if(m_prbOptions != nullptr) {
56+
m_prbOptions = nullptr;
57+
delete m_prbOptions;
58+
}
59+
}
5360

5461
void BistWidget::setupUi()
5562
{
@@ -121,8 +128,8 @@ QWidget *BistWidget::createTxNcoSection(QWidget *parent)
121128
layout->addWidget(m_tx1FreqSpinBox);
122129

123130
// 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);
131+
// iio-oscilloscope glade range: -160 to 160 kHz -> displayed as MHz: -0.16 to 0.16
132+
m_tx2FreqSpinBox = new gui::MenuSpinbox("TX2 Tone (MHz)", 0, "", -0.16, 0.16, true, false, false, widget);
126133
m_tx2FreqSpinBox->setScalingEnabled(false);
127134
layout->addWidget(m_tx2FreqSpinBox);
128135

@@ -145,35 +152,30 @@ QWidget *BistWidget::createFramerPrbsSection(QWidget *parent)
145152
layout->setSpacing(15);
146153

147154
// 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-
};
155+
m_prbOptions = new QMap<QString, QString>();
156+
m_prbOptions->insert("0", "ADC_DATA");
157+
m_prbOptions->insert("1", "CHECKERBOARD");
158+
m_prbOptions->insert("2", "TOGGLE0_1");
159+
m_prbOptions->insert("3", "PRBS31");
160+
m_prbOptions->insert("4", "PRBS23");
161+
m_prbOptions->insert("5", "PRBS15");
162+
m_prbOptions->insert("6", "PRBS9");
163+
m_prbOptions->insert("7", "PRBS7");
164+
m_prbOptions->insert("8", "RAMP");
165+
m_prbOptions->insert("14", "PATTERN_REPEAT");
166+
m_prbOptions->insert("15", "PATTERN_ONCE");
163167

164168
// Framer A PRBS - Custom Combo Widget
165-
auto framerAPrbsOptions = createPrbsOptionsMap();
166169
auto framerAWidget = Adrv9009WidgetFactory::createCustomComboWidget(m_device, "bist_framer_a_prbs",
167-
framerAPrbsOptions, "Framer A PRBS");
170+
m_prbOptions, "Framer A PRBS");
168171
if(framerAWidget) {
169172
layout->addWidget(framerAWidget);
170173
connect(this, &BistWidget::readRequested, framerAWidget, &IIOWidget::readAsync);
171174
}
172175

173176
// Framer B PRBS - Custom Combo Widget
174-
auto framerBPrbsOptions = createPrbsOptionsMap();
175177
auto framerBWidget = Adrv9009WidgetFactory::createCustomComboWidget(m_device, "bist_framer_b_prbs",
176-
framerBPrbsOptions, "Framer B PRBS");
178+
m_prbOptions, "Framer B PRBS");
177179
if(framerBWidget) {
178180
layout->addWidget(framerBWidget);
179181
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)