From 81ad05cb64d79a8a1bdeb538c59d36e97191b514 Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 25 Sep 2018 23:43:52 +0200 Subject: [PATCH] BladerRF2 input support. Global gain handling --- .../bladerf2input/bladerf2input.cpp | 15 ++++++- .../bladerf2input/bladerf2input.h | 25 +++++++++++ .../bladerf2input/bladerf2inputgui.cpp | 44 +++++++++++++++++++ 3 files changed, 82 insertions(+), 2 deletions(-) diff --git a/plugins/samplesource/bladerf2input/bladerf2input.cpp b/plugins/samplesource/bladerf2input/bladerf2input.cpp index 26512a1e1..564735988 100644 --- a/plugins/samplesource/bladerf2input/bladerf2input.cpp +++ b/plugins/samplesource/bladerf2input/bladerf2input.cpp @@ -39,6 +39,7 @@ MESSAGE_CLASS_DEFINITION(BladeRF2Input::MsgConfigureBladeRF2, Message) MESSAGE_CLASS_DEFINITION(BladeRF2Input::MsgFileRecord, Message) MESSAGE_CLASS_DEFINITION(BladeRF2Input::MsgStartStop, Message) +MESSAGE_CLASS_DEFINITION(BladeRF2Input::MsgReportGainRange, Message) BladeRF2Input::BladeRF2Input(DeviceSourceAPI *deviceAPI) : m_deviceAPI(deviceAPI), @@ -688,7 +689,6 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo bool forwardChangeTxBuddies = false; struct bladerf *dev = m_deviceShared.m_dev->getDev(); - qDebug() << "BladeRF2Input::applySettings: m_dev: " << dev; if ((m_settings.m_dcBlock != settings.m_dcBlock) || (m_settings.m_iqCorrection != settings.m_iqCorrection) || force) @@ -785,8 +785,18 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo if (status < 0) { qWarning("BladeRF2Input::applySettings: bladerf_set_frequency(%lld) failed: %s", settings.m_centerFrequency, bladerf_strerror(status)); - } else { + } + else + { qDebug("BladeRF2Input::applySettings: bladerf_set_frequency(%lld)", settings.m_centerFrequency); + + if (getMessageQueueToGUI()) + { + int min, max, step; + getGlobalGainRange(min, max, step); + MsgReportGainRange *msg = MsgReportGainRange::create(min, max, step); + getMessageQueueToGUI()->push(msg); + } } } } @@ -803,6 +813,7 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo if (dev) { +// qDebug("BladeRF2Input::applySettings: channel: %d gain: %d", m_deviceShared.m_channel, settings.m_globalGain); int status = bladerf_set_gain(dev, BLADERF_CHANNEL_RX(m_deviceShared.m_channel), settings.m_globalGain); if (status < 0) { diff --git a/plugins/samplesource/bladerf2input/bladerf2input.h b/plugins/samplesource/bladerf2input/bladerf2input.h index 0cd59b212..c9ee6caba 100644 --- a/plugins/samplesource/bladerf2input/bladerf2input.h +++ b/plugins/samplesource/bladerf2input/bladerf2input.h @@ -94,6 +94,31 @@ public: { } }; + class MsgReportGainRange : public Message { + MESSAGE_CLASS_DECLARATION + + public: + int getMin() const { return m_min; } + int getMax() const { return m_max; } + int getStep() const { return m_step; } + + static MsgReportGainRange* create(int min, int max, int step) { + return new MsgReportGainRange(min, max, step); + } + + protected: + int m_min; + int m_max; + int m_step; + + MsgReportGainRange(int min, int max, int step) : + Message(), + m_min(min), + m_max(max), + m_step(step) + {} + }; + BladeRF2Input(DeviceSourceAPI *deviceAPI); virtual ~BladeRF2Input(); virtual void destroy(); diff --git a/plugins/samplesource/bladerf2input/bladerf2inputgui.cpp b/plugins/samplesource/bladerf2input/bladerf2inputgui.cpp index 6307e3f78..4f9b33ce4 100644 --- a/plugins/samplesource/bladerf2input/bladerf2inputgui.cpp +++ b/plugins/samplesource/bladerf2input/bladerf2inputgui.cpp @@ -62,11 +62,21 @@ BladeRF2InputGui::BladeRF2InputGui(DeviceUISet *deviceUISet, QWidget* parent) : if (m_gainModes) { + ui->gainMode->blockSignals(true); + for (int i = 0; i < m_nbGainModes; i++) { ui->gainMode->addItem(tr("%1").arg(m_gainModes[i].name)); } + + ui->gainMode->blockSignals(false); } + m_sampleSource->getGlobalGainRange(min, max, step); + ui->gain->setMinimum(min); + ui->gain->setMaximum(max); + ui->gain->setPageStep(step); + ui->gain->setSingleStep(step); + connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware())); connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus())); m_statusTimer.start(500); @@ -143,8 +153,25 @@ bool BladeRF2InputGui::handleMessage(const Message& message) const BladeRF2Input::MsgConfigureBladeRF2& cfg = (BladeRF2Input::MsgConfigureBladeRF2&) message; m_settings = cfg.getSettings(); blockApplySettings(true); + int min, max, step; + m_sampleSource->getGlobalGainRange(min, max, step); + ui->gain->setMinimum(min); + ui->gain->setMaximum(max); + ui->gain->setPageStep(step); + ui->gain->setSingleStep(step); displaySettings(); blockApplySettings(false); + + return true; + } + else if (BladeRF2Input::MsgReportGainRange::match(message)) + { + const BladeRF2Input::MsgReportGainRange& cfg = (BladeRF2Input::MsgReportGainRange&) message; + ui->gain->setMinimum(cfg.getMin()); + ui->gain->setMaximum(cfg.getMax()); + ui->gain->setSingleStep(cfg.getStep()); + ui->gain->setPageStep(cfg.getStep()); + return true; } else if (BladeRF2Input::MsgStartStop::match(message)) @@ -211,6 +238,7 @@ void BladeRF2InputGui::displaySettings() ui->decim->setCurrentIndex(m_settings.m_log2Decim); ui->fcPos->setCurrentIndex((int) m_settings.m_fcPos); + ui->gainText->setText(tr("%1").arg(m_settings.m_globalGain)); ui->gain->setValue(m_settings.m_globalGain); blockApplySettings(false); @@ -274,6 +302,22 @@ void BladeRF2InputGui::on_fcPos_currentIndexChanged(int index) } } +void BladeRF2InputGui::on_gainMode_currentIndexChanged(int index) +{ + if (index < m_nbGainModes) + { + m_settings.m_gainMode = m_gainModes[index].mode; + sendSettings(); + } +} + +void BladeRF2InputGui::on_gain_valueChanged(int value) +{ + ui->gainText->setText(tr("%1").arg(value)); + m_settings.m_globalGain = value; + sendSettings(); +} + void BladeRF2InputGui::on_startStop_toggled(bool checked) { if (m_doApplySettings)