1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-02-03 09:44:01 -05:00

UDPSink plugin: implemented buffer gauge display

This commit is contained in:
f4exb 2017-08-16 03:33:05 +02:00
parent 3daddcb3cb
commit b14647c028
5 changed files with 134 additions and 5 deletions

View File

@ -55,6 +55,7 @@ public:
virtual bool handleMessage(const Message& cmd);
double getMagSq() const { return m_magsq; }
int32_t getBufferGauge() const { return m_udpHandler.getBufferGauge(); }
void configure(MessageQueue* messageQueue,
SampleFormat sampleFormat,

View File

@ -492,5 +492,12 @@ void UDPSinkGUI::tick()
double powDb = CalcDb::dbPower(m_udpSink->getMagSq());
m_channelPowerDbAvg.feed(powDb);
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.average(), 0, 'f', 1));
int32_t bufferGauge = m_udpSink->getBufferGauge();
ui->bufferGaugeNegative->setValue((bufferGauge < 0 ? -bufferGauge : 0));
ui->bufferGaugePositive->setValue((bufferGauge < 0 ? 0 : bufferGauge));
QString s = QString::number(bufferGauge, 'f', 0);
ui->bufferRWBalanceText->setText(tr("%1").arg(s));
}

View File

@ -505,6 +505,109 @@
</item>
</layout>
</item>
<item row="9" column="0">
<layout class="QHBoxLayout" name="BufferGaugeLayout">
<item>
<widget class="QProgressBar" name="bufferGaugeNegative">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>14</height>
</size>
</property>
<property name="toolTip">
<string>Main buffer read/write positions unbalance: write lags read leads</string>
</property>
<property name="maximum">
<number>50</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
<property name="invertedAppearance">
<bool>true</bool>
</property>
<property name="format">
<string>%v</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="bufferGaugeDot">
<property name="maximumSize">
<size>
<width>2</width>
<height>14</height>
</size>
</property>
<property name="text">
<string>.</string>
</property>
</widget>
</item>
<item>
<widget class="QProgressBar" name="bufferGaugePositive">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>14</height>
</size>
</property>
<property name="toolTip">
<string>Main buffer read/write positions unbalance: read lags write leads</string>
</property>
<property name="maximum">
<number>50</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="9" column="2">
<layout class="QHBoxLayout" name="bufferControlLayout">
<item>
<widget class="QLabel" name="bufferRWBalanceText">
<property name="minimumSize">
<size>
<width>22</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>R/W pointers offset from optimal (%)</string>
</property>
<property name="text">
<string>-00</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="spectrumBox" native="true">

View File

@ -27,7 +27,8 @@ UDPSinkUDPHandler::UDPSinkUDPHandler() :
m_udpReadBytes(0),
m_writeIndex(0),
m_readFrameIndex(m_nbUDPFrames/2),
m_readIndex(0)
m_readIndex(0),
m_rwDelta(m_nbUDPFrames/2)
{
}
@ -126,10 +127,15 @@ void UDPSinkUDPHandler::advanceReadPointer(int nbBytes)
{
m_readIndex = 0;
if (m_readFrameIndex < m_nbUDPFrames - 1) {
if (m_readFrameIndex < m_nbUDPFrames - 1)
{
m_readFrameIndex++;
} else {
qDebug("UDPSinkUDPHandler::advanceReadPointer: w: %02d", m_writeIndex);
}
else
{
m_rwDelta = m_writeIndex; // raw R/W delta estimate
float d = (m_rwDelta - (m_nbUDPFrames/2))/(float) m_nbUDPFrames;
qDebug("UDPSinkUDPHandler::advanceReadPointer: w: %02d d: %f", m_writeIndex, d);
m_readFrameIndex = 0;
}
}
@ -155,5 +161,6 @@ void UDPSinkUDPHandler::configureUDPLink(const QString& address, quint16 port)
void UDPSinkUDPHandler::resetReadIndex()
{
m_readFrameIndex = (m_writeIndex + (m_nbUDPFrames/2)) % m_nbUDPFrames;
m_rwDelta = m_nbUDPFrames/2;
m_readIndex = 0;
}

View File

@ -39,8 +39,18 @@ public:
void readSample(Real &t);
void readSample(Sample &s);
/** Get buffer gauge value in % of buffer size ([-50:50])
* [-50:0] : write leads or read lags
* [0:50] : read leads or write lags
*/
inline int32_t getBufferGauge() const
{
int32_t val = m_rwDelta - (m_nbUDPFrames/2);
return (100*val) / m_nbUDPFrames;
}
static const int m_udpBlockSize = 512; // UDP block size in number of bytes
static const int m_nbUDPFrames = 32; // number of frames of block size in the UDP buffer
static const int m_nbUDPFrames = 128; // number of frames of block size in the UDP buffer
public slots:
void dataReadyRead();
@ -60,6 +70,7 @@ private:
int m_writeIndex;
int m_readFrameIndex;
int m_readIndex;
int m_rwDelta;
};