From 4322a732befbc1da0c92e509e9b87f89f15b2f75 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 6 Sep 2017 00:57:27 +0200 Subject: [PATCH] LimeSDR input: open, close, suspend, resume --- .../plutosdrinput/plutosdrinput.cpp | 36 +++++++++++++++++-- .../plutosdrinput/plutosdrinput.h | 2 ++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp index 66b722f85..5af3e1b14 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp @@ -30,7 +30,8 @@ PlutoSDRInput::PlutoSDRInput(DeviceSourceAPI *deviceAPI) : m_deviceAPI(deviceAPI), m_fileSink(0), m_deviceDescription("PlutoSDR"), - m_running(false) + m_running(false), + m_plutoRxBuffer(0) { char recFileNameCStr[30]; sprintf(recFileNameCStr, "test_%d.sdriq", m_deviceAPI->getDeviceUID()); @@ -137,21 +138,50 @@ bool PlutoSDRInput::openDevice() // acquire the channel DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox(); plutoBox->openRx(); - - // TODO: get Rx buffer + m_plutoRxBuffer = plutoBox->createRxBuffer(1024*1024, false); } void PlutoSDRInput::closeDevice() { + if (m_deviceShared.m_deviceParams->getBox() == 0) { // was never open + return; + } + if (m_deviceAPI->getSinkBuddies().size() == 0) + { + m_deviceShared.m_deviceParams->close(); + delete m_deviceShared.m_deviceParams; + m_deviceShared.m_deviceParams = 0; + } } void PlutoSDRInput::suspendBuddies() { + // suspend Tx buddy's thread + for (unsigned int i = 0; i < m_deviceAPI->getSinkBuddies().size(); i++) + { + DeviceSinkAPI *buddy = m_deviceAPI->getSinkBuddies()[i]; + DevicePlutoSDRShared *buddyShared = (DevicePlutoSDRShared *) buddy->getBuddySharedPtr(); + + if (buddyShared->m_thread) { + buddyShared->m_thread->stopWork(); + } + } } void PlutoSDRInput::resumeBuddies() { + // resume Tx buddy's thread + + for (unsigned int i = 0; i < m_deviceAPI->getSinkBuddies().size(); i++) + { + DeviceSinkAPI *buddy = m_deviceAPI->getSinkBuddies()[i]; + DevicePlutoSDRShared *buddyShared = (DevicePlutoSDRShared *) buddy->getBuddySharedPtr(); + + if (buddyShared->m_thread) { + buddyShared->m_thread->startWork(); + } + } } diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.h b/plugins/samplesource/plutosdrinput/plutosdrinput.h index f3154dfe8..e5edd140f 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.h +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.h @@ -19,6 +19,7 @@ #include +#include "iio.h" #include #include "util/message.h" #include "plutosdr/deviceplutosdrshared.h" @@ -68,6 +69,7 @@ public: PlutoSDRInputSettings m_settings; bool m_running; DevicePlutoSDRShared m_deviceShared; + struct iio_buffer *m_plutoRxBuffer; QMutex m_mutex; bool openDevice();