mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-04-10 05:29:06 -04:00
This commit is contained in:
parent
a1babc9706
commit
09599e145e
plugins/samplesource/rtlsdr
sdrbase
@ -100,6 +100,8 @@ bool RTLSDRInput::openDevice()
|
||||
return false;
|
||||
}
|
||||
|
||||
m_sampleFifo.setWrittenSignalRateDivider(32);
|
||||
|
||||
int device;
|
||||
|
||||
if ((device = rtlsdr_get_index_by_serial(qPrintable(m_deviceAPI->getSamplingDeviceSerial()))) < 0)
|
||||
|
@ -16,6 +16,7 @@
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "maincore.h"
|
||||
#include "samplesinkfifo.h"
|
||||
|
||||
//#define MIN(x, y) (((x) < (y)) ? (x) : (y))
|
||||
@ -42,6 +43,9 @@ void SampleSinkFifo::reset()
|
||||
SampleSinkFifo::SampleSinkFifo(QObject* parent) :
|
||||
QObject(parent),
|
||||
m_data(),
|
||||
m_total(0),
|
||||
m_writtenSignalCount(0),
|
||||
m_writtenSignalRateDivider(1),
|
||||
m_mutex(QMutex::Recursive)
|
||||
{
|
||||
m_suppressed = -1;
|
||||
@ -54,6 +58,9 @@ SampleSinkFifo::SampleSinkFifo(QObject* parent) :
|
||||
SampleSinkFifo::SampleSinkFifo(int size, QObject* parent) :
|
||||
QObject(parent),
|
||||
m_data(),
|
||||
m_total(0),
|
||||
m_writtenSignalCount(0),
|
||||
m_writtenSignalRateDivider(1),
|
||||
m_mutex(QMutex::Recursive)
|
||||
{
|
||||
m_suppressed = -1;
|
||||
@ -63,6 +70,9 @@ SampleSinkFifo::SampleSinkFifo(int size, QObject* parent) :
|
||||
SampleSinkFifo::SampleSinkFifo(const SampleSinkFifo& other) :
|
||||
QObject(other.parent()),
|
||||
m_data(other.m_data),
|
||||
m_total(0),
|
||||
m_writtenSignalCount(0),
|
||||
m_writtenSignalRateDivider(1),
|
||||
m_mutex(QMutex::Recursive)
|
||||
{
|
||||
m_suppressed = -1;
|
||||
@ -85,6 +95,12 @@ bool SampleSinkFifo::setSize(int size)
|
||||
return m_data.size() == (unsigned int)size;
|
||||
}
|
||||
|
||||
void SampleSinkFifo::setWrittenSignalRateDivider(unsigned int divider)
|
||||
{
|
||||
QMutexLocker mutexLocker(&m_mutex);
|
||||
m_writtenSignalRateDivider = divider;
|
||||
}
|
||||
|
||||
unsigned int SampleSinkFifo::write(const quint8* data, unsigned int count)
|
||||
{
|
||||
QMutexLocker mutexLocker(&m_mutex);
|
||||
@ -108,6 +124,7 @@ unsigned int SampleSinkFifo::write(const quint8* data, unsigned int count)
|
||||
m_suppressed = 0;
|
||||
m_msgRateTimer.start();
|
||||
qCritical("SampleSinkFifo::write: overflow - dropping %u samples", count - total);
|
||||
emit overflow(count - total);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -115,6 +132,7 @@ unsigned int SampleSinkFifo::write(const quint8* data, unsigned int count)
|
||||
{
|
||||
qCritical("SampleSinkFifo::write: %u messages dropped", m_suppressed);
|
||||
qCritical("SampleSinkFifo::write: overflow - dropping %u samples", count - total);
|
||||
emit overflow(count - total);
|
||||
m_suppressed = -1;
|
||||
}
|
||||
else
|
||||
@ -141,6 +159,15 @@ unsigned int SampleSinkFifo::write(const quint8* data, unsigned int count)
|
||||
emit dataReady();
|
||||
}
|
||||
|
||||
m_total += total;
|
||||
|
||||
if (++m_writtenSignalCount >= m_writtenSignalRateDivider)
|
||||
{
|
||||
emit written(m_total, MainCore::instance()->getElapsedNsecs());
|
||||
m_total = 0;
|
||||
m_writtenSignalCount = 0;
|
||||
}
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
@ -166,6 +193,7 @@ unsigned int SampleSinkFifo::write(SampleVector::const_iterator begin, SampleVec
|
||||
m_suppressed = 0;
|
||||
m_msgRateTimer.start();
|
||||
qCritical("SampleSinkFifo::write: overflow - dropping %u samples", count - total);
|
||||
emit overflow(count - total);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -173,6 +201,7 @@ unsigned int SampleSinkFifo::write(SampleVector::const_iterator begin, SampleVec
|
||||
{
|
||||
qCritical("SampleSinkFifo::write: %u messages dropped", m_suppressed);
|
||||
qCritical("SampleSinkFifo::write: overflow - dropping %u samples", count - total);
|
||||
emit overflow(count - total);
|
||||
m_suppressed = -1;
|
||||
}
|
||||
else
|
||||
@ -199,6 +228,15 @@ unsigned int SampleSinkFifo::write(SampleVector::const_iterator begin, SampleVec
|
||||
emit dataReady();
|
||||
}
|
||||
|
||||
m_total += total;
|
||||
|
||||
if (++m_writtenSignalCount >= m_writtenSignalRateDivider)
|
||||
{
|
||||
emit written(m_total, MainCore::instance()->getElapsedNsecs());
|
||||
m_total = 0;
|
||||
m_writtenSignalCount = 0;
|
||||
}
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
@ -217,8 +255,10 @@ unsigned int SampleSinkFifo::read(SampleVector::iterator begin, SampleVector::it
|
||||
|
||||
total = std::min(count, m_fill);
|
||||
|
||||
if (total < count) {
|
||||
if (total < count)
|
||||
{
|
||||
qCritical("SampleSinkFifo::read: underflow - missing %u samples", count - total);
|
||||
emit underflow(count - total);
|
||||
}
|
||||
|
||||
remaining = total;
|
||||
@ -254,8 +294,10 @@ unsigned int SampleSinkFifo::readBegin(unsigned int count,
|
||||
|
||||
total = std::min(count, m_fill);
|
||||
|
||||
if (total < count) {
|
||||
if (total < count)
|
||||
{
|
||||
qCritical("SampleSinkFifo::readBegin: underflow - missing %u samples", count - total);
|
||||
emit underflow(count - total);
|
||||
}
|
||||
|
||||
remaining = total;
|
||||
|
@ -32,6 +32,9 @@ private:
|
||||
QElapsedTimer m_msgRateTimer;
|
||||
int m_suppressed;
|
||||
SampleVector m_data;
|
||||
int m_total;
|
||||
unsigned int m_writtenSignalCount;
|
||||
unsigned int m_writtenSignalRateDivider;
|
||||
QMutex m_mutex;
|
||||
|
||||
unsigned int m_size;
|
||||
@ -49,6 +52,7 @@ public:
|
||||
|
||||
bool setSize(int size);
|
||||
void reset();
|
||||
void setWrittenSignalRateDivider(unsigned int divider);
|
||||
inline unsigned int size() { QMutexLocker mutexLocker(&m_mutex); unsigned int size = m_size; return size; }
|
||||
inline unsigned int fill() { QMutexLocker mutexLocker(&m_mutex); unsigned int fill = m_fill; return fill; }
|
||||
|
||||
@ -65,6 +69,9 @@ public:
|
||||
|
||||
signals:
|
||||
void dataReady();
|
||||
void written(int nsamples, qint64 timestamp);
|
||||
void overflow(int nsamples);
|
||||
void underflow(int nsamples);
|
||||
};
|
||||
|
||||
#endif // INCLUDE_SAMPLEFIFO_H
|
||||
|
@ -62,6 +62,8 @@ MainCore::MainCore()
|
||||
{
|
||||
m_masterTimer.setTimerType(Qt::PreciseTimer);
|
||||
m_masterTimer.start(50);
|
||||
m_startMsecsSinceEpoch = QDateTime::currentMSecsSinceEpoch();
|
||||
m_masterElapsedTimer.start();
|
||||
}
|
||||
|
||||
MainCore::~MainCore()
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include <QMap>
|
||||
#include <QTimer>
|
||||
#include <QElapsedTimer>
|
||||
#include <QDateTime>
|
||||
#include <QObject>
|
||||
|
||||
@ -706,6 +707,8 @@ public:
|
||||
static MainCore *instance();
|
||||
|
||||
const QTimer& getMasterTimer() const { return m_masterTimer; }
|
||||
qint64 getElapsedNsecs() const { return m_masterElapsedTimer.nsecsElapsed(); } //!< Elapsed nanoseconds since main core construction
|
||||
qint64 getStartMsecsSinceEpoch() const { return m_startMsecsSinceEpoch; } //!< Epoch timestamp in millisecodns close to elapsed timer start
|
||||
const MainSettings& getSettings() const { return m_settings; }
|
||||
MessageQueue *getMainMessageQueue() { return m_mainMessageQueue; }
|
||||
const PluginManager *getPluginManager() const { return m_pluginManager; }
|
||||
@ -760,6 +763,8 @@ private:
|
||||
MessageQueue *m_mainMessageQueue;
|
||||
int m_masterTabIndex;
|
||||
QTimer m_masterTimer;
|
||||
QElapsedTimer m_masterElapsedTimer;
|
||||
qint64 m_startMsecsSinceEpoch;
|
||||
std::vector<DeviceSet*> m_deviceSets;
|
||||
std::vector<FeatureSet*> m_featureSets;
|
||||
QMap<DeviceSet*, int> m_deviceSetsMap; //!< Device set instance to device set index map
|
||||
|
Loading…
Reference in New Issue
Block a user