Skip to content

Commit

Permalink
adc: disconnect on run failure
Browse files Browse the repository at this point in the history
Signed-off-by: Adrian Suciu <[email protected]>
  • Loading branch information
adisuciu committed Sep 18, 2024
1 parent fe5fe23 commit 3edaa4f
Show file tree
Hide file tree
Showing 14 changed files with 48 additions and 9 deletions.
2 changes: 1 addition & 1 deletion gr-util/src/grtopblock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ GRTopBlock::GRTopBlock(QString name, QObject *parent)
QString topblockname = m_name + QString::number(topblockid);
topblockid++;
qInfo() << "building" << topblockname;
top = gr::make_top_block(topblockname.toStdString(), false);
top = gr::make_top_block(topblockname.toStdString(), true);
QObject::connect(this, SIGNAL(requestRebuild()), this, SLOT(rebuild()), Qt::QueuedConnection);
}

Expand Down
1 change: 1 addition & 0 deletions iioutil/include/iioutil/iiopingtask.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class SCOPY_IIOUTIL_EXPORT IIOPingTask : public PingTask
~IIOPingTask();
virtual void run() override;
virtual bool ping() override;
static bool pingCtx(iio_context *ctx);

protected:
iio_context *m_ctx;
Expand Down
7 changes: 6 additions & 1 deletion iioutil/src/iiopingtask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,12 @@ void IIOPingTask::run()

bool IIOPingTask::ping()
{
auto dev = iio_context_get_device(m_ctx, 0);
return pingCtx(m_ctx);
}

bool IIOPingTask::pingCtx(iio_context *ctx)
{
auto dev = iio_context_get_device(ctx, 0);
const iio_device *test_device = nullptr;

int ret = iio_device_get_trigger(dev, &test_device);
Expand Down
10 changes: 10 additions & 0 deletions plugins/adc/src/adcacquisitionmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,16 @@ GRTopBlock *GRTopBlockNode::src() const { return m_src; }

SyncController *GRTopBlockNode::sync() const { return m_sync; }

iio_context * GRTopBlockNode::ctx() const
{
return m_ctx;
}

void GRTopBlockNode::setCtx(iio_context *ctx)
{
m_ctx = ctx;
}

AcqTreeNode::AcqTreeNode(QString name, QObject *parent)
: QObject(parent)
{
Expand Down
3 changes: 3 additions & 0 deletions plugins/adc/src/adcacquisitionmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,13 @@ class SCOPY_ADC_EXPORT GRTopBlockNode : public AcqTreeNode
~GRTopBlockNode();
GRTopBlock *src() const;
SyncController *sync() const;
iio_context * ctx() const;
void setCtx(iio_context *ctx);

private:
GRTopBlock *m_src;
SyncController *m_sync;
iio_context* m_ctx;
};

class SCOPY_ADC_EXPORT GRIIODeviceSourceNode : public AcqTreeNode
Expand Down
5 changes: 4 additions & 1 deletion plugins/adc/src/adcinstrumentcontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,10 @@ void ADCInstrumentController::onStop()
void ADCInstrumentController::start()
{
ResourceManager::open("adc", this);
m_dataProvider->start();
bool ret = m_dataProvider->start();
if(!ret) {
Q_EMIT requestDisconnect();
}
}

void ADCInstrumentController::stop()
Expand Down
3 changes: 2 additions & 1 deletion plugins/adc/src/adcinstrumentcontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
#include "toolcomponent.h"
#include "scopy-adc_export.h"
#include "timeplotcomponent.h"
#include "timeplotmanagersettings.h"
#include "measurecomponent.h"
#include <QMap>
#include <pluginbase/resourcemanager.h>
#include <pluginbase/toolmenuentry.h>
#include "plotmanager.h"

namespace scopy {
namespace adc {
Expand Down Expand Up @@ -58,6 +58,7 @@ protected Q_SLOTS:
void requestStop();
void requestStartLater();
void requestStopLater();
void requestDisconnect();

protected:
void setupChannelMeasurement(PlotManager *c, ChannelComponent *ch);
Expand Down
5 changes: 5 additions & 0 deletions plugins/adc/src/adcplugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ void ADCPlugin::createGRIIOTreeNode(GRTopBlockNode *ctxNode, iio_context *ctx)
{
int devCount = iio_context_get_devices_count(ctx);
qDebug(CAT_ADCPLUGIN) << " Found " << devCount << "devices";
ctxNode->setCtx(ctx);
for(int i = 0; i < devCount; i++) {
iio_device *dev = iio_context_get_device(ctx, i);
QString dev_name = QString::fromLocal8Bit(iio_device_get_name(dev));
Expand Down Expand Up @@ -255,6 +256,8 @@ void ADCPlugin::newInstrument(ADCInstrumentType t, AcqTreeNode *root)
}
deleteInstrument(t);
});

connect(adc, &ADCInstrumentController::requestDisconnect, this, &ADCPlugin::disconnectDevice, Qt::QueuedConnection);
m_ctrls.append(adc);
} else if(t == FREQUENCY) {

Expand Down Expand Up @@ -286,6 +289,8 @@ void ADCPlugin::newInstrument(ADCInstrumentType t, AcqTreeNode *root)
}
deleteInstrument(t);
});

connect(adc, &ADCInstrumentController::requestDisconnect, this, &ADCPlugin::disconnectDevice, Qt::QueuedConnection);
m_ctrls.append(adc);
} else {
return;
Expand Down
1 change: 1 addition & 0 deletions plugins/adc/src/adctimeinstrumentcontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include "scopy-adc_export.h"
#include "adcinstrumentcontroller.h"
#include "timeplotmanagersettings.h"

namespace scopy {
namespace adc {
Expand Down
7 changes: 6 additions & 1 deletion plugins/adc/src/freq/grfftsinkcomponent.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "grfftsinkcomponent.h"
#include <gr-util/grsignalpath.h>
#include <QLoggingCategory>
#include "iioutil/iiopingtask.h"

Q_LOGGING_CATEGORY(CAT_GRFFTSINKCOMPONENT, "GRFFTSinkComponent")
using namespace scopy::adc;
Expand Down Expand Up @@ -144,14 +145,18 @@ void GRFFTSinkComponent::init()

void GRFFTSinkComponent::deinit() { qDebug(CAT_GRFFTSINKCOMPONENT) << "Deinit"; }

void GRFFTSinkComponent::start()
bool GRFFTSinkComponent::start()
{
iio_context_set_timeout(m_node->ctx(), 1000);
if(!IIOPingTask::pingCtx(m_node->ctx()))
return false;
m_sync->setBufferSize(this, m_samplingInfo.bufferSize);
m_sync->setSingleShot(this, m_singleShot);
m_top->setVLen(m_samplingInfo.bufferSize);
m_sync->arm(this);
m_top->build();
m_top->start();
return true;
}

void GRFFTSinkComponent::stop()
Expand Down
2 changes: 1 addition & 1 deletion plugins/adc/src/freq/grfftsinkcomponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public Q_SLOTS:
void init();
void deinit();

virtual void start() override;
virtual bool start() override;
virtual void stop() override;

virtual size_t updateData() override;
Expand Down
7 changes: 6 additions & 1 deletion plugins/adc/src/time/grtimesinkcomponent.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "grtimesinkcomponent.h"
#include <gr-util/grsignalpath.h>
#include <QLoggingCategory>
#include "iioutil/iiopingtask.h"

Q_LOGGING_CATEGORY(CAT_GRTIMESINKCOMPONENT, "GRTimeSinkComponent")
using namespace scopy::adc;
Expand Down Expand Up @@ -145,14 +146,18 @@ void GRTimeSinkComponent::init()

void GRTimeSinkComponent::deinit() { qDebug(CAT_GRTIMESINKCOMPONENT) << "Deinit"; }

void GRTimeSinkComponent::start()
bool GRTimeSinkComponent::start()
{
iio_context_set_timeout(m_node->ctx(), 1000);
if(!IIOPingTask::pingCtx(m_node->ctx()))
return false;
m_sync->setBufferSize(this, m_samplingInfo.bufferSize);
m_sync->setSingleShot(this, m_singleShot);
m_top->setVLen(m_samplingInfo.bufferSize);
m_sync->arm(this);
m_top->build();
m_top->start();
return true;
}

void GRTimeSinkComponent::stop()
Expand Down
2 changes: 1 addition & 1 deletion plugins/adc/src/time/grtimesinkcomponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public Q_SLOTS:
void init();
void deinit();

virtual void start() override;
virtual bool start() override;
virtual void stop() override;

virtual size_t updateData() override;
Expand Down
2 changes: 1 addition & 1 deletion plugins/adc/src/toolcomponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class SCOPY_ADC_EXPORT DataProvider
virtual size_t updateData() = 0;
virtual bool finished() = 0;
virtual void setData(bool copy = false) = 0;
virtual void start() = 0;
virtual bool start() = 0;
virtual void stop() = 0;
};

Expand Down

0 comments on commit 3edaa4f

Please sign in to comment.