From a9887bcdaac74b199c46bb414b4739f2b08e0ecd Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 14 Mar 2018 06:30:45 +0100 Subject: [PATCH] LimeSDR input GUI: NCO and baseband center frequency now show actual values --- devices/limesdr/devicelimesdr.cpp | 2 +- .../limesdrinput/limesdrinputgui.cpp | 54 ++++++++++++++----- .../limesdrinput/limesdrinputgui.h | 4 +- .../limesdrinput/limesdrinputgui.ui | 23 ++++---- 4 files changed, 56 insertions(+), 27 deletions(-) diff --git a/devices/limesdr/devicelimesdr.cpp b/devices/limesdr/devicelimesdr.cpp index c091dbc7b..4e10cab52 100644 --- a/devices/limesdr/devicelimesdr.cpp +++ b/devices/limesdr/devicelimesdr.cpp @@ -50,7 +50,7 @@ bool DeviceLimeSDR::setNCOFrequency(lms_device_t *device, bool dir_tx, std::size return false; } - if (LMS_SetNCOIndex(device, dir_tx, chan, 0, !positive) < 0) + if (LMS_SetNCOIndex(device, dir_tx, chan, 0, positive) < 0) { fprintf(stderr, "DeviceLimeSDR::setNCOFrequency: cannot set conversion direction %sfreq\n", positive ? "+" : "-"); return false; diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.cpp b/plugins/samplesource/limesdrinput/limesdrinputgui.cpp index b440ab69b..d8385b32b 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputgui.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinputgui.cpp @@ -298,7 +298,7 @@ void LimeSDRInputGUI::displaySettings() ui->extClock->setExternalClockFrequency(m_settings.m_extClockFreq); ui->extClock->setExternalClockActive(m_settings.m_extClock); - ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000); + setCenterFrequencyDisplay(); ui->sampleRate->setValue(m_settings.m_devSampleRate); ui->dcOffset->setChecked(m_settings.m_dcBlock); @@ -347,11 +347,41 @@ void LimeSDRInputGUI::displaySettings() void LimeSDRInputGUI::setNCODisplay() { int ncoHalfRange = (m_settings.m_devSampleRate * (1<<(m_settings.m_log2HardDecim)))/2; - int lowBoundary = std::max(0, (int) m_settings.m_centerFrequency - ncoHalfRange); - ui->ncoFrequency->setValueRange(7, - lowBoundary/1000, - (m_settings.m_centerFrequency + ncoHalfRange)/1000); // frequency dial is in kHz - ui->ncoFrequency->setValue((m_settings.m_centerFrequency + m_settings.m_ncoFrequency)/1000); + ui->ncoFrequency->setValueRange( + false, + 8, + -ncoHalfRange, + ncoHalfRange); // frequency dial is in kHz + + ui->ncoFrequency->blockSignals(true); + ui->ncoFrequency->setValue(m_settings.m_ncoFrequency); + ui->ncoFrequency->blockSignals(false); +} + +void LimeSDRInputGUI::setCenterFrequencyDisplay() +{ + int64_t centerFrequency = m_settings.m_centerFrequency; + ui->centerFrequency->setToolTip(QString("Main center frequency in kHz (LO: %1 kHz)").arg(centerFrequency/1000)); + + if (m_settings.m_ncoEnable) { + centerFrequency += m_settings.m_ncoFrequency; + } + + ui->centerFrequency->blockSignals(true); + ui->centerFrequency->setValue(centerFrequency < 0 ? 0 : (uint64_t) centerFrequency/1000); // kHz + ui->centerFrequency->blockSignals(false); +} + +void LimeSDRInputGUI::setCenterFrequencySetting(uint64_t kHzValue) +{ + int64_t centerFrequency = kHzValue*1000; + + if (m_settings.m_ncoEnable) { + centerFrequency -= m_settings.m_ncoFrequency; + } + + m_settings.m_centerFrequency = centerFrequency < 0 ? 0 : (uint64_t) centerFrequency; + ui->centerFrequency->setToolTip(QString("Main center frequency in kHz (LO: %1 kHz)").arg(centerFrequency/1000)); } void LimeSDRInputGUI::sendSettings() @@ -455,28 +485,28 @@ void LimeSDRInputGUI::on_record_toggled(bool checked) void LimeSDRInputGUI::on_centerFrequency_changed(quint64 value) { - m_settings.m_centerFrequency = value * 1000; - setNCODisplay(); + setCenterFrequencySetting(value); sendSettings(); } -void LimeSDRInputGUI::on_ncoFrequency_changed(quint64 value) +void LimeSDRInputGUI::on_ncoFrequency_changed(qint64 value) { - m_settings.m_ncoFrequency = (int64_t) value - (int64_t) m_settings.m_centerFrequency/1000; - m_settings.m_ncoFrequency *= 1000; + m_settings.m_ncoFrequency = value; + setCenterFrequencyDisplay(); sendSettings(); } void LimeSDRInputGUI::on_ncoEnable_toggled(bool checked) { m_settings.m_ncoEnable = checked; + setCenterFrequencyDisplay(); sendSettings(); } void LimeSDRInputGUI::on_ncoReset_clicked(bool checked __attribute__((unused))) { m_settings.m_ncoFrequency = 0; - ui->ncoFrequency->setValue(m_settings.m_centerFrequency/1000); + ui->ncoFrequency->setValue(0); sendSettings(); } diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.h b/plugins/samplesource/limesdrinput/limesdrinputgui.h index 2bc328dfe..b8966d5ba 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputgui.h +++ b/plugins/samplesource/limesdrinput/limesdrinputgui.h @@ -69,6 +69,8 @@ private: void displaySettings(); void setNCODisplay(); + void setCenterFrequencyDisplay(); + void setCenterFrequencySetting(uint64_t kHzValue); void sendSettings(); void updateSampleRateAndFrequency(); void updateADCRate(); @@ -79,7 +81,7 @@ private slots: void on_startStop_toggled(bool checked); void on_record_toggled(bool checked); void on_centerFrequency_changed(quint64 value); - void on_ncoFrequency_changed(quint64 value); + void on_ncoFrequency_changed(qint64 value); void on_ncoEnable_toggled(bool checked); void on_ncoReset_clicked(bool checked); void on_dcOffset_toggled(bool checked); diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.ui b/plugins/samplesource/limesdrinput/limesdrinputgui.ui index 80c5b34ef..8abb76250 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputgui.ui +++ b/plugins/samplesource/limesdrinput/limesdrinputgui.ui @@ -35,16 +35,7 @@ 3 - - 2 - - - 2 - - - 2 - - + 2 @@ -256,7 +247,7 @@ - + 0 @@ -281,14 +272,14 @@ PointingHandCursor - Center frequency with NCO engaged (kHz) + NCO frequency (Hz) - kHz + Hz @@ -1166,6 +1157,12 @@ QToolTip{background-color: white; color: black;} QToolButton
gui/externalclockbutton.h
+ + ValueDialZ + QWidget +
gui/valuedialz.h
+ 1 +