mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-22 16:08:39 -05:00
Device MIMO engine fixes
This commit is contained in:
parent
c5062ac10b
commit
aca92c7d32
@ -301,13 +301,19 @@ void DSPDeviceMIMOEngine::workSampleSinkFifo(unsigned int sinkIndex)
|
|||||||
std::size_t count = sampleFifo->readBegin(sampleFifo->fill(), &part1begin, &part1end, &part2begin, &part2end);
|
std::size_t count = sampleFifo->readBegin(sampleFifo->fill(), &part1begin, &part1end, &part2begin, &part2end);
|
||||||
|
|
||||||
if (part1begin != part1end) { // first part of FIFO data
|
if (part1begin != part1end) { // first part of FIFO data
|
||||||
workSamplePart(part1begin, part1end, sinkIndex);
|
m_vectorBuffer.write(part1begin, part1end, false);
|
||||||
|
//workSamplePart(part1begin, part1end, sinkIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (part2begin != part2end) { // second part of FIFO data (used when block wraps around)
|
if (part2begin != part2end) { // second part of FIFO data (used when block wraps around)
|
||||||
workSamplePart(part2begin, part2end, sinkIndex);
|
m_vectorBuffer.append(part2begin, part2end);
|
||||||
|
//workSamplePart(part2begin, part2end, sinkIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SampleVector::iterator vbegin, vend;
|
||||||
|
m_vectorBuffer.read(vbegin, vend);
|
||||||
|
workSamplePart(vbegin, vend, sinkIndex);
|
||||||
|
|
||||||
sampleFifo->readCommit((unsigned int) count); // adjust FIFO pointers
|
sampleFifo->readCommit((unsigned int) count); // adjust FIFO pointers
|
||||||
samplesDone += count;
|
samplesDone += count;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <QThread>
|
#include <QThread>
|
||||||
|
|
||||||
#include "dsp/dsptypes.h"
|
#include "dsp/dsptypes.h"
|
||||||
|
#include "dsp/samplesinkvector.h"
|
||||||
#include "util/message.h"
|
#include "util/message.h"
|
||||||
#include "util/messagequeue.h"
|
#include "util/messagequeue.h"
|
||||||
#include "util/syncmessenger.h"
|
#include "util/syncmessenger.h"
|
||||||
@ -377,11 +378,13 @@ private:
|
|||||||
BasebandSampleSink *m_spectrumSink; //!< The spectrum sink
|
BasebandSampleSink *m_spectrumSink; //!< The spectrum sink
|
||||||
bool m_spectrumInputSourceElseSink; //!< Source else sink stream to be used as spectrum sink input
|
bool m_spectrumInputSourceElseSink; //!< Source else sink stream to be used as spectrum sink input
|
||||||
unsigned int m_spectrumInputIndex; //!< Index of the stream to be used as spectrum sink input
|
unsigned int m_spectrumInputIndex; //!< Index of the stream to be used as spectrum sink input
|
||||||
|
SampleSinkVector m_vectorBuffer;
|
||||||
|
|
||||||
void run();
|
void run();
|
||||||
void workSampleSinkFifo(unsigned int sinkIndex); //!< transfer samples of one sink (asynchronously)
|
void workSampleSinkFifo(unsigned int sinkIndex); //!< transfer samples of one sink (asynchronously)
|
||||||
void workSampleSinkVector(unsigned int sinkIndex); //!< same but sample sink vector flavor (TODO: remove if unused)
|
void workSampleSinkVector(unsigned int sinkIndex); //!< same but sample sink vector flavor (TODO: remove if unused)
|
||||||
void workSamplePart(const SampleVector::iterator& vbegin, const SampleVector::iterator& vend, unsigned int sinkIndex);
|
void workSamplePart(const SampleVector::iterator& vbegin, const SampleVector::iterator& vend, unsigned int sinkIndex);
|
||||||
|
void workSamplePart(int count);
|
||||||
|
|
||||||
State gotoIdle(); //!< Go to the idle state
|
State gotoIdle(); //!< Go to the idle state
|
||||||
State gotoInit(); //!< Go to the acquisition init state from idle
|
State gotoInit(); //!< Go to the acquisition init state from idle
|
||||||
|
@ -30,7 +30,7 @@ SampleSinkVector::SampleSinkVector(const SampleSinkVector& other) :
|
|||||||
SampleSinkVector::~SampleSinkVector()
|
SampleSinkVector::~SampleSinkVector()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void SampleSinkVector::write(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end)
|
void SampleSinkVector::write(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool signal)
|
||||||
{
|
{
|
||||||
if (end - begin > m_sampleVector.size()) {
|
if (end - begin > m_sampleVector.size()) {
|
||||||
m_sampleVector.resize(end - begin);
|
m_sampleVector.resize(end - begin);
|
||||||
@ -40,7 +40,22 @@ void SampleSinkVector::write(const SampleVector::const_iterator& begin, const Sa
|
|||||||
m_dataSize = end - begin;
|
m_dataSize = end - begin;
|
||||||
// m_begin = begin;
|
// m_begin = begin;
|
||||||
// m_end = end;
|
// m_end = end;
|
||||||
emit dataReady();
|
if (signal) {
|
||||||
|
emit dataReady();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SampleSinkVector::append(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool signal)
|
||||||
|
{
|
||||||
|
if ((end - begin) + m_dataSize > m_sampleVector.size()) {
|
||||||
|
m_sampleVector.resize((end - begin) + m_dataSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::copy(begin, end, m_sampleVector.begin() + m_dataSize);
|
||||||
|
m_dataSize += (end - begin);
|
||||||
|
if (signal) {
|
||||||
|
emit dataReady();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SampleSinkVector::read(SampleVector::iterator& begin, SampleVector::iterator& end)
|
void SampleSinkVector::read(SampleVector::iterator& begin, SampleVector::iterator& end)
|
||||||
|
@ -31,7 +31,8 @@ public:
|
|||||||
SampleSinkVector(const SampleSinkVector& other);
|
SampleSinkVector(const SampleSinkVector& other);
|
||||||
~SampleSinkVector();
|
~SampleSinkVector();
|
||||||
|
|
||||||
void write(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end);
|
void write(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool signal = true);
|
||||||
|
void append(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool signal = false);
|
||||||
void read(SampleVector::iterator& begin, SampleVector::iterator& end);
|
void read(SampleVector::iterator& begin, SampleVector::iterator& end);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
Loading…
Reference in New Issue
Block a user