mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-09-04 22:27:53 -04: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);
|
virtual bool handleMessage(const Message& cmd);
|
||||||
|
|
||||||
double getMagSq() const { return m_magsq; }
|
double getMagSq() const { return m_magsq; }
|
||||||
|
int32_t getBufferGauge() const { return m_udpHandler.getBufferGauge(); }
|
||||||
|
|
||||||
void configure(MessageQueue* messageQueue,
|
void configure(MessageQueue* messageQueue,
|
||||||
SampleFormat sampleFormat,
|
SampleFormat sampleFormat,
|
||||||
|
@ -492,5 +492,12 @@ void UDPSinkGUI::tick()
|
|||||||
double powDb = CalcDb::dbPower(m_udpSink->getMagSq());
|
double powDb = CalcDb::dbPower(m_udpSink->getMagSq());
|
||||||
m_channelPowerDbAvg.feed(powDb);
|
m_channelPowerDbAvg.feed(powDb);
|
||||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.average(), 0, 'f', 1));
|
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>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</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>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="spectrumBox" native="true">
|
<widget class="QWidget" name="spectrumBox" native="true">
|
||||||
|
@ -27,7 +27,8 @@ UDPSinkUDPHandler::UDPSinkUDPHandler() :
|
|||||||
m_udpReadBytes(0),
|
m_udpReadBytes(0),
|
||||||
m_writeIndex(0),
|
m_writeIndex(0),
|
||||||
m_readFrameIndex(m_nbUDPFrames/2),
|
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;
|
m_readIndex = 0;
|
||||||
|
|
||||||
if (m_readFrameIndex < m_nbUDPFrames - 1) {
|
if (m_readFrameIndex < m_nbUDPFrames - 1)
|
||||||
|
{
|
||||||
m_readFrameIndex++;
|
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;
|
m_readFrameIndex = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -155,5 +161,6 @@ void UDPSinkUDPHandler::configureUDPLink(const QString& address, quint16 port)
|
|||||||
void UDPSinkUDPHandler::resetReadIndex()
|
void UDPSinkUDPHandler::resetReadIndex()
|
||||||
{
|
{
|
||||||
m_readFrameIndex = (m_writeIndex + (m_nbUDPFrames/2)) % m_nbUDPFrames;
|
m_readFrameIndex = (m_writeIndex + (m_nbUDPFrames/2)) % m_nbUDPFrames;
|
||||||
|
m_rwDelta = m_nbUDPFrames/2;
|
||||||
m_readIndex = 0;
|
m_readIndex = 0;
|
||||||
}
|
}
|
||||||
|
@ -39,8 +39,18 @@ public:
|
|||||||
void readSample(Real &t);
|
void readSample(Real &t);
|
||||||
void readSample(Sample &s);
|
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_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:
|
public slots:
|
||||||
void dataReadyRead();
|
void dataReadyRead();
|
||||||
@ -60,6 +70,7 @@ private:
|
|||||||
int m_writeIndex;
|
int m_writeIndex;
|
||||||
int m_readFrameIndex;
|
int m_readFrameIndex;
|
||||||
int m_readIndex;
|
int m_readIndex;
|
||||||
|
int m_rwDelta;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user