Skip to content

Commit 14f386d

Browse files
author
root
committed
adrv9002: ui updates and applied range conversion where needed
Signed-off-by: IonutMuthi <[email protected]> Signed-off-by: root <[email protected]>
1 parent c99d4fc commit 14f386d

File tree

5 files changed

+56
-77
lines changed

5 files changed

+56
-77
lines changed

packages/adrv9002/plugins/adrv9002plugin/src/adrv9002.cpp

Lines changed: 37 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -265,26 +265,21 @@ QString Adrv9002::getDeviceDriverVersion()
265265
char api_version[16];
266266
auto ret = iio_device_debug_attr_read(m_iio_dev, "api_version", api_version, sizeof(api_version));
267267
if(ret < 0) {
268-
return "";
268+
return "Unable to read version ";
269269
} else {
270270
return QString(api_version);
271271
}
272272
}
273273

274-
return "";
274+
return "No version found";
275275
}
276276

277277
MenuSectionCollapseWidget *Adrv9002::createGlobalSettingsSection(QWidget *parent)
278278
{
279279
auto section = new MenuSectionCollapseWidget("ADRV9002 Global Settings", MenuCollapseSection::MHCW_ARROW,
280280
MenuCollapseSection::MHW_BASEWIDGET, parent);
281281

282-
// Profile Manager - handles profile_config and stream_config
283-
if(m_profileManager) {
284-
section->add(m_profileManager);
285-
connect(this, &Adrv9002::readRequested, m_profileManager, &ProfileManager::updateDeviceInfo);
286-
}
287-
282+
section->layout()->setMargin(0);
288283
QWidget *widget = new QWidget(section);
289284

290285
QHBoxLayout *layout = new QHBoxLayout(widget);
@@ -311,8 +306,6 @@ MenuSectionCollapseWidget *Adrv9002::createGlobalSettingsSection(QWidget *parent
311306
tempStrategy->setCriticalTemperature(
312307
80.0, "ADRV9002 temperature critical! Risk of thermal shutdown.");
313308
tempStrategy->setWarningOffset(5.0); // Warn at 75°C (80°C - 5°C)
314-
// Optional: Configure periodic updates (default is 5 seconds)
315-
// tempStrategy->setPeriodicUpdates(true, 5); // Update every 5 second
316309
}
317310

318311
connect(this, &Adrv9002::readRequested, tempWidget, &IIOWidget::readAsync);
@@ -330,6 +323,12 @@ MenuSectionCollapseWidget *Adrv9002::createGlobalSettingsSection(QWidget *parent
330323

331324
section->add(widget);
332325

326+
// Profile Manager - handles profile_config and stream_config
327+
if(m_profileManager) {
328+
section->add(m_profileManager);
329+
connect(this, &Adrv9002::readRequested, m_profileManager, &ProfileManager::updateDeviceInfo);
330+
}
331+
333332
return section;
334333
}
335334

@@ -358,6 +357,7 @@ MenuSectionCollapseWidget *Adrv9002::createReceiveChainSection(QWidget *parent)
358357

359358
// ORX Section below RX1/RX2
360359
QHBoxLayout *orxLayout = new QHBoxLayout();
360+
orxLayout->setMargin(0);
361361
orxLayout->addWidget(createOrxControls());
362362
containerLayout->addLayout(orxLayout);
363363

@@ -424,21 +424,7 @@ QWidget *Adrv9002::createRxChannelControls(const QString &title, int channel)
424424
layout->addWidget(createComboWidget(rxCh, "gain_control_mode", "gain_control_mode_available", "Gain Control"),
425425
2, 0);
426426
layout->addWidget(createComboWidget(rxCh, "ensm_mode", "ensm_mode_available", "ENSM"), 3, 0);
427-
IIOWidget *rxEn = createCheckboxWidget(rxCh, "en", "Powerdown");
428-
// logic needed to match functionality
429-
rxEn->setDataToUIConversion([](QString data) {
430-
if(data == "0") {
431-
return "1";
432-
}
433-
return "0";
434-
});
435-
rxEn->setUItoDataConversion([](QString data) {
436-
if(data == "0") {
437-
return "1";
438-
}
439-
return "0";
440-
});
441-
layout->addWidget(rxEn, 4, 0);
427+
layout->addWidget(createCheckboxWidget(rxCh, "en", "Enabled"), 4, 0);
442428

443429
layout->addWidget(createCheckboxWidget(rxCh, "bbdc_rejection_en", "BBDC Rejection"), 5, 0);
444430

@@ -451,8 +437,10 @@ QWidget *Adrv9002::createRxChannelControls(const QString &title, int channel)
451437

452438
layout->addWidget(createReadOnlyWidget(rxCh, "decimated_power", "Decimated Power (dB)"), 7, 0);
453439
IIOWidget *rfBandwidth = createReadOnlyWidget(rxCh, "rf_bandwidth", "Bandwidth (MHz)");
454-
rfBandwidth->setDataToUIConversion([](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 4); });
455-
rfBandwidth->setUItoDataConversion([](QString data) { return QString::number(data.toDouble() * 1e6, 'f', 4); });
440+
rfBandwidth->setDataToUIConversion([](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 6); });
441+
rfBandwidth->setRangeToUIConversion(
442+
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 6); });
443+
rfBandwidth->setUItoDataConversion([](QString data) { return QString::number(data.toDouble() * 1e6, 'f', 0); });
456444
layout->addWidget(rfBandwidth, 8, 0);
457445

458446
// Column 1 (Right) - from iio-oscilloscope column 4
@@ -484,9 +472,11 @@ QWidget *Adrv9002::createRxChannelControls(const QString &title, int channel)
484472

485473
// Add MHz ↔ Hz conversion
486474
loWidget->setDataToUIConversion(
487-
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 4); });
475+
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 6); });
476+
loWidget->setRangeToUIConversion(
477+
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 6); });
488478
loWidget->setUItoDataConversion(
489-
[](QString data) { return QString::number(data.toDouble() * 1e6, 'f', 4); });
479+
[](QString data) { return QString::number(data.toDouble() * 1e6, 'f', 0); });
490480

491481
layout->addWidget(loWidget, 6, 1);
492482
}
@@ -496,9 +486,11 @@ QWidget *Adrv9002::createRxChannelControls(const QString &title, int channel)
496486
IIOWidget *samplingFreq = createReadOnlyWidget(rxCh, "sampling_frequency", "Sampling Rate (MSPS)");
497487
// Add MSPS ↔ SPS conversion
498488
samplingFreq->setDataToUIConversion(
499-
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 4); });
489+
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 6); });
490+
samplingFreq->setRangeToUIConversion(
491+
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 6); });
500492
samplingFreq->setUItoDataConversion(
501-
[](QString data) { return QString::number(data.toDouble() * 1e6, 'f', 4); });
493+
[](QString data) { return QString::number(data.toDouble() * 1e6, 'f', 0); });
502494
layout->addWidget(samplingFreq, 8, 1);
503495

504496
// Tracking section at bottom spanning both columns
@@ -557,9 +549,11 @@ QWidget *Adrv9002::createTxChannelControls(const QString &title, int channel)
557549

558550
// Add MHz ↔ Hz conversion
559551
loWidget->setDataToUIConversion(
560-
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 4); });
552+
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 6); });
553+
loWidget->setRangeToUIConversion(
554+
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 6); });
561555
loWidget->setUItoDataConversion(
562-
[](QString data) { return QString::number(data.toDouble() * 1e6, 'f', 4); });
556+
[](QString data) { return QString::number(data.toDouble() * 1e6, 'f', 0); });
563557

564558
layout->addWidget(loWidget, 3, 0);
565559
}
@@ -574,35 +568,23 @@ QWidget *Adrv9002::createTxChannelControls(const QString &title, int channel)
574568
IIOWidget *rfBandwidth = createReadOnlyWidget(txCh, "rf_bandwidth", "Bandwidth (MHz)");
575569

576570
// Add MHz ↔ Hz conversion
577-
rfBandwidth->setDataToUIConversion([](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 4); });
578-
rfBandwidth->setUItoDataConversion([](QString data) { return QString::number(data.toDouble() * 1e6, 'f', 4); });
571+
rfBandwidth->setDataToUIConversion([](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 6); });
572+
rfBandwidth->setRangeToUIConversion(
573+
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 6); });
574+
rfBandwidth->setUItoDataConversion([](QString data) { return QString::number(data.toDouble() * 1e6, 'f', 0); });
579575
layout->addWidget(rfBandwidth, 5, 0);
580576

581577
// Column 1 (Right) - from iio-oscilloscope TX column 4
582578
layout->addWidget(createComboWidget(txCh, "port_en_mode", "port_en_mode_available", "Port Enable"), 1, 1);
583579
layout->addWidget(createComboWidget(txCh, "ensm_mode", "ensm_mode_available", "ENSM"), 2, 1);
584-
IIOWidget *txEn = createCheckboxWidget(txCh, "en", "Powerdown");
585-
// logic needed to match functionality
586-
txEn->setDataToUIConversion([](QString data) {
587-
if(data == "0") {
588-
return "1";
589-
}
590-
return "0";
591-
});
592-
txEn->setUItoDataConversion([](QString data) {
593-
if(data == "0") {
594-
return "1";
595-
}
596-
return "0";
597-
});
598-
layout->addWidget(txEn, 3, 1);
580+
layout->addWidget(createCheckboxWidget(txCh, "en", "Enable"), 3, 1);
599581
// Row+3 is empty in iio-oscilloscope
600582
IIOWidget *samplingFreq = createReadOnlyWidget(txCh, "sampling_frequency", "Sampling Rate (MSPS)");
601583
// Add MSPS ↔ SPS conversion
602584
samplingFreq->setDataToUIConversion(
603-
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 4); });
585+
[](QString data) { return QString::number(data.toDouble() / 1e6, 'f', 6); });
604586
samplingFreq->setUItoDataConversion(
605-
[](QString data) { return QString::number(data.toDouble() * 1e6, 'f', 4); });
587+
[](QString data) { return QString::number(data.toDouble() * 1e6, 'f', 0); });
606588
layout->addWidget(samplingFreq, 5, 1);
607589

608590
QLabel *trackingLabel = new QLabel("Tracking:");
@@ -623,6 +605,7 @@ QWidget *Adrv9002::createOrxControls()
623605
{
624606
QWidget *widget = new QWidget();
625607
QHBoxLayout *layout = new QHBoxLayout(widget);
608+
layout->setMargin(0);
626609
layout->setSpacing(15);
627610

628611
// ORX 1 Column
@@ -685,9 +668,9 @@ QWidget *Adrv9002::createOrxChannelControls(const QString &title, int channel)
685668
layout->addWidget(createRangeWidget(rxCh, "orx_hardwaregain", "[4 1 36]", "Hardware Gain (dB)"), 1, 0);
686669
layout->addWidget(createCheckboxWidget(rxCh, "orx_bbdc_rejection_en", "BBDC Rejection"), 1, 1);
687670

688-
// Row 2: Tracking (Left) and Powerdown (Right)
671+
// Row 2: Tracking (Left) and Enabled (Right)
689672
layout->addWidget(createCheckboxWidget(rxCh, "orx_quadrature_w_poly_tracking_en", "Quadrature Poly"), 2, 0);
690-
layout->addWidget(createCheckboxWidget(rxCh, "orx_en", "Powerdown"), 2, 1);
673+
layout->addWidget(createCheckboxWidget(rxCh, "orx_en", "Enabled"), 2, 1);
691674

692675
return widget;
693676
}
@@ -724,11 +707,6 @@ IIOWidget *Adrv9002::createRangeWidget(iio_channel *ch, const QString &attr, con
724707
.buildSingle();
725708

726709
if(widget) {
727-
// Apply stripUnits to ALL range widgets - safe for all values
728-
widget->setDataToUIConversion([](QString data) {
729-
return data.split(" ").first(); // Safe for all numeric attributes
730-
});
731-
732710
connect(this, &Adrv9002::readRequested, widget, &IIOWidget::readAsync);
733711
}
734712
return widget;

packages/adrv9002/plugins/adrv9002plugin/src/initialcalibrationswidget.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,17 @@ void InitialCalibrationsWidget::setupUI()
6161
Style::setStyle(this, style::properties::widget::border_interactive);
6262

6363
QVBoxLayout *mainLayout = new QVBoxLayout(this);
64-
mainLayout->setContentsMargins(15, 15, 15, 15);
64+
mainLayout->setContentsMargins(0, 0, 0, 0);
6565
mainLayout->setSpacing(10);
6666

6767
// Title
6868
m_titleLabel = new QLabel("Initial Calibrations", this);
69-
Style::setStyle(m_titleLabel, style::properties::label::menuBig);
69+
Style::setStyle(m_titleLabel, style::properties::label::menuMedium);
7070
mainLayout->addWidget(m_titleLabel);
7171

7272
// Controls layout (horizontal)
7373
QHBoxLayout *controlsLayout = new QHBoxLayout();
74+
controlsLayout->setMargin(0);
7475
controlsLayout->setSpacing(10);
7576

7677
// Calibrations Mode label

packages/adrv9002/plugins/adrv9002plugin/src/profileclimanager.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,9 +253,6 @@ void ProfileCliManager::loadProfileToDevice(const RadioConfig &config)
253253
return;
254254
}
255255

256-
// Write stream to device
257-
// int ret = iio_device_attr_write_raw(m_device, "profile_config", streamData, sizeof(streamData));
258-
259256
if(!writeDeviceAttribute("stream_config", streamData)) {
260257
Q_EMIT operationError("Failed to write stream image to device");
261258
cleanupTempFiles(tempFiles);

packages/adrv9002/plugins/adrv9002plugin/src/profilegeneratorwidget.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -183,13 +183,13 @@ void ProfileGeneratorWidget::setupUi()
183183
{
184184
QVBoxLayout *mainLayout = new QVBoxLayout(this);
185185
mainLayout->setSpacing(15);
186-
mainLayout->setContentsMargins(0, 0, 0, 0);
186+
mainLayout->setMargin(0);
187187

188188
// Create content widget (all controls go here)
189189
m_contentWidget = new QWidget(this);
190190
QVBoxLayout *contentLayout = new QVBoxLayout(m_contentWidget);
191191
contentLayout->setSpacing(15);
192-
contentLayout->setContentsMargins(0, 0, 0, 0);
192+
contentLayout->setMargin(0);
193193

194194
mainLayout->addWidget(generateDeviceDriverAPIWidget(this));
195195

@@ -225,8 +225,8 @@ MenuSectionCollapseWidget *ProfileGeneratorWidget::createProfileActionSection()
225225

226226
QWidget *actionBar = new QWidget();
227227
QHBoxLayout *layout = new QHBoxLayout(actionBar);
228-
layout->setContentsMargins(10, 10, 10, 10);
229228
layout->setSpacing(15);
229+
layout->setMargin(0);
230230

231231
// Preset dropdown with styling - matching iio-oscilloscope exactly
232232
QLabel *presetLabel = new QLabel("Preset:");
@@ -276,8 +276,8 @@ MenuSectionCollapseWidget *ProfileGeneratorWidget::createRadioConfigSection()
276276

277277
QWidget *radioConfigWidget = new QWidget();
278278
QGridLayout *layout = new QGridLayout(radioConfigWidget);
279-
layout->setSpacing(10);
280-
layout->setContentsMargins(10, 10, 10, 10);
279+
layout->setSpacing(15);
280+
layout->setMargin(0);
281281

282282
// SSI Interface - READ-ONLY LABEL like iio-oscilloscope (device-determined)
283283
layout->addWidget(new QLabel("SSI Interface:"), 0, 0);
@@ -303,7 +303,7 @@ MenuSectionCollapseWidget *ProfileGeneratorWidget::createChannelConfigSection()
303303
QWidget *channelConfigWidget = new QWidget();
304304
QGridLayout *layout = new QGridLayout(channelConfigWidget);
305305
layout->setSpacing(15);
306-
layout->setContentsMargins(10, 10, 10, 10);
306+
layout->setMargin(0);
307307

308308
// Create 2x2 grid: RX1, RX2, TX1, TX2
309309
QWidget *rx1Frame = createChannelConfigWidget("RX 1", CHANNEL_RX1);
@@ -375,7 +375,7 @@ MenuSectionCollapseWidget *ProfileGeneratorWidget::createOrxConfigSection()
375375
QWidget *orxConfigWidget = new QWidget();
376376
QHBoxLayout *layout = new QHBoxLayout(orxConfigWidget);
377377
layout->setSpacing(15);
378-
layout->setContentsMargins(10, 10, 10, 10);
378+
layout->setMargin(0);
379379

380380
// ORX 1
381381
layout->addWidget(createOrxWidget("ORX 1"));
@@ -393,8 +393,8 @@ QWidget *ProfileGeneratorWidget::createOrxWidget(const QString &title)
393393
Style::setStyle(widget, style::properties::widget::border_interactive);
394394

395395
QVBoxLayout *layout = new QVBoxLayout(widget);
396-
layout->setContentsMargins(10, 10, 10, 10);
397-
layout->setSpacing(10);
396+
layout->setSpacing(15);
397+
layout->setMargin(10);
398398

399399
QLabel *titleLabel = new QLabel(title);
400400
Style::setStyle(titleLabel, style::properties::label::menuBig);
@@ -423,8 +423,8 @@ MenuSectionCollapseWidget *ProfileGeneratorWidget::createDebugInfoSection()
423423
QWidget *debugInfoWidget = new QWidget();
424424
debugInfoWidget->setMinimumHeight(500);
425425
QVBoxLayout *layout = new QVBoxLayout(debugInfoWidget);
426-
layout->setContentsMargins(10, 10, 10, 10);
427-
layout->setSpacing(10);
426+
layout->setSpacing(15);
427+
layout->setMargin(0);
428428

429429
m_debugInfoText = new QTextEdit();
430430
m_debugInfoText->setReadOnly(true);

packages/adrv9002/plugins/adrv9002plugin/src/profilemanager.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,23 @@ ProfileManager::ProfileManager(iio_device *device, QWidget *parent)
4545
{
4646
// Create main layout with horizontal split like iio-oscilloscope
4747
QVBoxLayout *mainLayout = new QVBoxLayout(this);
48+
mainLayout->setMargin(0);
4849

4950
// Title
5051
m_title = new QLabel("Profile & Stream Configuration", this);
52+
Style::setStyle(m_title, style::properties::label::menuMedium);
5153
mainLayout->addWidget(m_title);
5254

5355
// Create horizontal layout for Profile controls (left) and Device Info (right)
5456
QHBoxLayout *contentLayout = new QHBoxLayout();
57+
contentLayout->setMargin(0);
58+
contentLayout->setSpacing(15);
5559
mainLayout->addLayout(contentLayout);
5660

5761
// Left side: Profile and Stream controls
5862
QWidget *profileControlsWidget = new QWidget();
5963
QVBoxLayout *leftLayout = new QVBoxLayout(profileControlsWidget);
60-
leftLayout->setContentsMargins(0, 0, 10, 0); // Add right margin for spacing
64+
leftLayout->setMargin(0);
6165

6266
// Get embedded resources directory
6367
QFileInfoList profiles = scopy::PkgManager::listFilesInfo(QStringList() << "adrv9002-profiles");
@@ -72,7 +76,6 @@ ProfileManager::ProfileManager(iio_device *device, QWidget *parent)
7276
QWidget *profileContainer = new QWidget();
7377
QVBoxLayout *profileLayout = new QVBoxLayout(profileContainer);
7478
profileLayout->setMargin(0);
75-
profileLayout->setSpacing(1);
7679

7780
m_profileFileBrowser = new scopy::FileBrowserWidget(scopy::FileBrowserWidget::OPEN_FILE, profileContainer);
7881
m_profileFileBrowser->setFilter("Profile files (*.json)");

0 commit comments

Comments
 (0)