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:
parent
3daddcb3cb
commit
b14647c028
@ -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,
|
||||
|
@ -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));
|
||||
|
||||
}
|
||||
|
||||
|
@ -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">
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user