From f4976485fc7ae3ed9be699cece653998ea8c9599 Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 2 Oct 2018 06:11:34 +0200 Subject: [PATCH] BladeRF2 output: tried to fix SO->MO and MO->SO cycle --- debian/changelog | 3 +- devices/bladerf2/devicebladerf2.cpp | 38 ++++++------------- .../bladerf2output/bladerf2output.cpp | 31 +++++++++------ 3 files changed, 33 insertions(+), 39 deletions(-) diff --git a/debian/changelog b/debian/changelog index 66bc4c1fa..c792b80cf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,9 @@ sdrangel (4.2.0-1) unstable; urgency=medium * LibbladeRF 2.0 support with BladeRF Micro + * Scope: corrected trace memory index position - -- Edouard Griffiths, F4EXB Sun, 14 Oct 2018 21:14:18 +0200 + -- Edouard Griffiths, F4EXB Sun, 7 Oct 2018 21:14:18 +0200 sdrangel (4.1.0-1) unstable; urgency=medium diff --git a/devices/bladerf2/devicebladerf2.cpp b/devices/bladerf2/devicebladerf2.cpp index fc93bd5b5..187bcb2d5 100644 --- a/devices/bladerf2/devicebladerf2.cpp +++ b/devices/bladerf2/devicebladerf2.cpp @@ -150,7 +150,7 @@ bool DeviceBladeRF2::openRx(int channel) if (status < 0) { - qCritical("DeviceBladeRF2::openRx: Failed to enable Rx channel %d: %s", + qCritical("DeviceBladeRF2::openRx: failed to enable Rx channel %d: %s", channel, bladerf_strerror(status)); return false; } @@ -163,8 +163,8 @@ bool DeviceBladeRF2::openRx(int channel) } else { - qCritical("DeviceBladeRF2::openRx: Rx channel %d already opened", channel); - return false; + qDebug("DeviceBladeRF2::openRx: Rx channel %d already opened", channel); + return true; } } @@ -201,8 +201,8 @@ bool DeviceBladeRF2::openTx(int channel) } else { - qCritical("DeviceBladeRF2::openTx: Tx channel %d already opened", channel); - return false; + qDebug("DeviceBladeRF2::openTx: Tx channel %d already opened", channel); + return true; } } @@ -220,26 +220,18 @@ void DeviceBladeRF2::closeRx(int channel) if (m_rxOpen[channel]) { - for (int i = 0; i < m_nbRxChannels; i++) - { - if ((i != channel) && (m_rxOpen[i])) - { - qDebug("DeviceBladeRF2::closeRx: not closing channel %d as %d is still open", channel, i); - } - } - int status = bladerf_enable_module(m_dev, BLADERF_CHANNEL_RX(channel), false); m_rxOpen[channel] = false; if (status < 0) { - qCritical("DeviceBladeRF2::closeRx: cannot close channel %d: %s", channel, bladerf_strerror(status)); + qCritical("DeviceBladeRF2::closeRx: failed to disable Rx channel %d: %s", channel, bladerf_strerror(status)); } else { - qDebug("DeviceBladeRF2::closeRx: channel %d closed", channel); + qDebug("DeviceBladeRF2::closeRx: Rx channel %d disabled", channel); } } else { - qCritical("DeviceBladeRF2::closeRx: Rx channel %d already closed", channel); + qDebug("DeviceBladeRF2::closeRx: Rx channel %d already closed", channel); } } @@ -257,26 +249,18 @@ void DeviceBladeRF2::closeTx(int channel) if (m_txOpen[channel]) { - for (int i = 0; i < m_nbTxChannels; i++) - { - if ((i != channel) && (m_txOpen[i])) - { - qDebug("DeviceBladeRF2::closeTx: not closing channel %d as %d is still open", channel, i); - } - } - int status = bladerf_enable_module(m_dev, BLADERF_CHANNEL_TX(channel), false); m_txOpen[channel] = false; if (status < 0) { - qCritical("DeviceBladeRF2::closeTx: cannot close channel %d: %s", channel, bladerf_strerror(status)); + qCritical("DeviceBladeRF2::closeTx: failed to disable Tx channel %d: %s", channel, bladerf_strerror(status)); } else { - qDebug("DeviceBladeRF2::closeTx: channel %d closed", channel); + qDebug("DeviceBladeRF2::closeTx: Tx channel %d disabled", channel); } } else { - qCritical("DeviceBladeRF2::closeTx: Rx channel %d already closed", channel); + qDebug("DeviceBladeRF2::closeTx: Rx channel %d already closed", channel); } } diff --git a/plugins/samplesink/bladerf2output/bladerf2output.cpp b/plugins/samplesink/bladerf2output/bladerf2output.cpp index 9e6926bfc..39aba7956 100644 --- a/plugins/samplesink/bladerf2output/bladerf2output.cpp +++ b/plugins/samplesink/bladerf2output/bladerf2output.cpp @@ -298,6 +298,11 @@ bool BladeRF2Output::start() ((DeviceBladeRF2Shared*) (*it)->getBuddySharedPtr())->m_sink->setThread(0); } + // close all channels + for (int i = bladeRF2OutputThread->getNbChannels()-1; i >= 0; i--) { + m_deviceShared.m_dev->closeTx(i); + } + needsStart = true; } else @@ -320,11 +325,9 @@ bool BladeRF2Output::start() if (needsStart) { - qDebug("BladeRF2Output::start: enabling channel(s) and (re)sart buddy thread"); + qDebug("BladeRF2Output::start: enabling channel(s) and (re)starting the thread"); - int nbChannels = bladeRF2OutputThread->getNbChannels(); - - for (int i = 0; i < nbChannels; i++) + for (unsigned int i = 0; i < bladeRF2OutputThread->getNbChannels(); i++) // open all channels { if (!m_deviceShared.m_dev->openTx(i)) { qCritical("BladeRF2Output::start: channel %u cannot be enabled", i); @@ -429,16 +432,22 @@ void BladeRF2Output::stop() ((DeviceBladeRF2Shared*) (*it)->getBuddySharedPtr())->m_sink->setThread(0); } - for (int i = 0; i < nbOriginalChannels-1; i++) // close all inactive channels - { - if (fifos[i] == 0) { - m_deviceShared.m_dev->closeTx(i); - } + // close all channels + for (int i = nbOriginalChannels-1; i >= 0; i--) { + m_deviceShared.m_dev->closeTx(i); } - m_deviceShared.m_dev->closeTx(requestedChannel); // close the last channel + if (stillActiveFIFO) + { + qDebug("BladeRF2Output::stop: enabling channel(s) and restarting the thread"); + + for (unsigned int i = 0; i < bladeRF2OutputThread->getNbChannels(); i++) // open all channels + { + if (!m_deviceShared.m_dev->openTx(i)) { + qCritical("BladeRF2Output::start: channel %u cannot be enabled", i); + } + } - if (stillActiveFIFO) { bladeRF2OutputThread->startWork(); } }