UDP source and sink: added dialogs to specify addresses and ports

This commit is contained in:
f4exb 2018-04-19 23:03:21 +02:00
parent befc08f2e1
commit 15f7c4d80e
10 changed files with 292 additions and 46 deletions

7
debian/changelog vendored
View File

@ -1,9 +1,12 @@
sdrangel (3.14.3-1) unstable; urgency=medium sdrangel (3.14.3-1) unstable; urgency=medium
* LimeSDR: compiled with LimeSuite commit 67dcef1 * LimeSDR: compiled with LimeSuite commit 67dcef1
* LimeSDR: implemented transverter dialog * LimeSDR: implemented transverter dialog (issue #157)
* UDP source and sink: make sure audio samples are always on 16 bits
* UDP source and sink: dialog elements for address and port
* Reviewed FFT destruction in many channel sources and sinks (issue #159)
-- Edouard Griffiths, F4EXB <f4exb06@gmail.com> Sat, 21 Apr 2018 18:14:18 +0200 -- Edouard Griffiths, F4EXB <f4exb06@gmail.com> Fri, 20 Apr 2018 20:14:18 +0200
sdrangel (3.14.2-1) unstable; urgency=medium sdrangel (3.14.2-1) unstable; urgency=medium

View File

@ -219,11 +219,17 @@ void UDPSrcGUI::displaySettings()
setTitleColor(m_settings.m_rgbColor); setTitleColor(m_settings.m_rgbColor);
setWindowTitle(m_channelMarker.getTitle()); setWindowTitle(m_channelMarker.getTitle());
blockApplySettings(true);
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
ui->sampleRate->setText(QString("%1").arg(m_settings.m_outputSampleRate, 0)); ui->sampleRate->setText(QString("%1").arg(m_settings.m_outputSampleRate, 0));
setSampleFormatIndex(m_settings.m_sampleFormat); setSampleFormatIndex(m_settings.m_sampleFormat);
ui->outputUDPAddress->setText(m_settings.m_udpAddress);
ui->outputUDPPort->setText(tr("%1").arg(m_settings.m_udpPort));
ui->inputUDPAudioPort->setText(tr("%1").arg(m_settings.m_audioPort));
ui->squelch->setValue(m_settings.m_squelchdB); ui->squelch->setValue(m_settings.m_squelchdB);
ui->squelchText->setText(tr("%1").arg(ui->squelch->value()*1.0, 0, 'f', 0)); ui->squelchText->setText(tr("%1").arg(ui->squelch->value()*1.0, 0, 'f', 0));
@ -244,6 +250,11 @@ void UDPSrcGUI::displaySettings()
ui->gain->setValue(m_settings.m_gain*10.0); ui->gain->setValue(m_settings.m_gain*10.0);
ui->gainText->setText(tr("%1").arg(ui->gain->value()/10.0, 0, 'f', 1)); ui->gainText->setText(tr("%1").arg(ui->gain->value()/10.0, 0, 'f', 1));
ui->applyBtn->setEnabled(false);
ui->applyBtn->setStyleSheet("QPushButton { background:rgb(79,79,79); }");
blockApplySettings(false);
ui->glSpectrum->setSampleRate(m_settings.m_outputSampleRate); ui->glSpectrum->setSampleRate(m_settings.m_outputSampleRate);
} }
@ -391,6 +402,45 @@ void UDPSrcGUI::on_sampleFormat_currentIndexChanged(int index)
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }"); ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
} }
void UDPSrcGUI::on_outputUDPAddress_editingFinished()
{
m_settings.m_udpAddress = ui->outputUDPAddress->text();
ui->applyBtn->setEnabled(true);
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
}
void UDPSrcGUI::on_outputUDPPort_editingFinished()
{
bool ok;
quint16 udpPort = ui->outputUDPPort->text().toInt(&ok);
if((!ok) || (udpPort < 1024)) {
udpPort = 9998;
}
m_settings.m_udpPort = udpPort;
ui->outputUDPPort->setText(tr("%1").arg(m_settings.m_udpPort));
ui->applyBtn->setEnabled(true);
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
}
void UDPSrcGUI::on_inputUDPAudioPort_editingFinished()
{
bool ok;
quint16 udpPort = ui->inputUDPAudioPort->text().toInt(&ok);
if((!ok) || (udpPort < 1024)) {
udpPort = 9997;
}
m_settings.m_audioPort = udpPort;
ui->inputUDPAudioPort->setText(tr("%1").arg(m_settings.m_audioPort));
ui->applyBtn->setEnabled(true);
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
}
void UDPSrcGUI::on_sampleRate_textEdited(const QString& arg1 __attribute__((unused))) void UDPSrcGUI::on_sampleRate_textEdited(const QString& arg1 __attribute__((unused)))
{ {
bool ok; bool ok;

View File

@ -94,6 +94,9 @@ private:
private slots: private slots:
void on_deltaFrequency_changed(qint64 value); void on_deltaFrequency_changed(qint64 value);
void on_sampleFormat_currentIndexChanged(int index); void on_sampleFormat_currentIndexChanged(int index);
void on_outputUDPAddress_editingFinished();
void on_outputUDPPort_editingFinished();
void on_inputUDPAudioPort_editingFinished();
void on_sampleRate_textEdited(const QString& arg1); void on_sampleRate_textEdited(const QString& arg1);
void on_rfBandwidth_textEdited(const QString& arg1); void on_rfBandwidth_textEdited(const QString& arg1);
void on_fmDeviation_textEdited(const QString& arg1); void on_fmDeviation_textEdited(const QString& arg1);

View File

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>354</width> <width>383</width>
<height>355</height> <height>355</height>
</rect> </rect>
</property> </property>
@ -39,13 +39,13 @@
<rect> <rect>
<x>2</x> <x>2</x>
<y>2</y> <y>2</y>
<width>350</width> <width>380</width>
<height>142</height> <height>142</height>
</rect> </rect>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>350</width> <width>380</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
@ -53,16 +53,7 @@
<string>Settings</string> <string>Settings</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<property name="leftMargin"> <property name="margin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="spacing"> <property name="spacing">
@ -331,7 +322,7 @@
<item row="1" column="0"> <item row="1" column="0">
<layout class="QHBoxLayout" name="AddressLayout"> <layout class="QHBoxLayout" name="AddressLayout">
<item> <item>
<widget class="QLabel" name="Addresslabel"> <widget class="QLabel" name="outputUDPAddressLabel">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>30</width> <width>30</width>
@ -339,23 +330,71 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>Addr</string> <string>Ad</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="addressText"> <widget class="QLineEdit" name="outputUDPAddress">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>170</width> <width>120</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="statusTip"> <property name="toolTip">
<string>UDP &lt;address&gt;:&lt;data port&gt;/&lt;audio port&gt;</string> <string>Destinationn UDP address</string>
</property>
<property name="inputMask">
<string>000.000.000.000; </string>
</property> </property>
<property name="text"> <property name="text">
<string>00.000.000.000:0000/0000</string> <string>127.0.0.1</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="outputUDPPortLabel">
<property name="text">
<string>P</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="outputUDPPort">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Destination UDP port</string>
</property>
<property name="inputMask">
<string>00000; </string>
</property>
<property name="text">
<string>9998</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -378,6 +417,18 @@
</item> </item>
<item> <item>
<widget class="QComboBox" name="sampleFormat"> <widget class="QComboBox" name="sampleFormat">
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip"> <property name="toolTip">
<string>Samples format</string> <string>Samples format</string>
</property> </property>
@ -441,6 +492,51 @@
</item> </item>
</widget> </widget>
</item> </item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="inputUDPAudioPortLabel">
<property name="text">
<string>Au</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="inputUDPAudioPort">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Audio input UDP port</string>
</property>
<property name="inputMask">
<string>00000; </string>
</property>
<property name="text">
<string>9997</string>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
<item row="6" column="0"> <item row="6" column="0">
@ -721,16 +817,7 @@
<property name="spacing"> <property name="spacing">
<number>3</number> <number>3</number>
</property> </property>
<property name="leftMargin"> <property name="margin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number> <number>2</number>
</property> </property>
<item> <item>

View File

@ -45,8 +45,8 @@ void UDPSrcSettings::resetToDefaults()
m_audioStereo = false; m_audioStereo = false;
m_volume = 20; m_volume = 20;
m_udpAddress = "127.0.0.1"; m_udpAddress = "127.0.0.1";
m_udpPort = 9999; m_udpPort = 9998;
m_audioPort = 9998; m_audioPort = 9997;
m_rgbColor = QColor(225, 25, 99).rgb(); m_rgbColor = QColor(225, 25, 99).rgb();
m_title = "UDP Sample Source"; m_title = "UDP Sample Source";
} }
@ -77,6 +77,9 @@ QByteArray UDPSrcSettings::serialize() const
s.writeS32(17, m_squelchGate); s.writeS32(17, m_squelchGate);
s.writeBool(18, m_agc); s.writeBool(18, m_agc);
s.writeString(19, m_title); s.writeString(19, m_title);
s.writeString(20, m_udpAddress);
s.writeU32(21, m_udpPort);
s.writeU32(22, m_audioPort);
return s.final(); return s.final();
@ -97,6 +100,7 @@ bool UDPSrcSettings::deserialize(const QByteArray& data)
QByteArray bytetmp; QByteArray bytetmp;
QString strtmp; QString strtmp;
int32_t s32tmp; int32_t s32tmp;
quint32 u32tmp;
if (m_channelMarker) { if (m_channelMarker) {
d.readBlob(6, &bytetmp); d.readBlob(6, &bytetmp);
@ -133,6 +137,23 @@ bool UDPSrcSettings::deserialize(const QByteArray& data)
d.readS32(17, &m_squelchGate, 5); d.readS32(17, &m_squelchGate, 5);
d.readBool(18, &m_agc, false); d.readBool(18, &m_agc, false);
d.readString(19, &m_title, "UDP Sample Source"); d.readString(19, &m_title, "UDP Sample Source");
d.readString(20, &m_udpAddress, "127.0.0.1");
d.readU32(21, &u32tmp, 9998);
if ((u32tmp > 1024) & (u32tmp < 65538)) {
m_udpPort = u32tmp;
} else {
m_udpPort = 9998;
}
d.readU32(22, &u32tmp, 9997);
if ((u32tmp > 1024) & (u32tmp < 65538)) {
m_audioPort = u32tmp;
} else {
m_audioPort = 9997;
}
return true; return true;
} }

View File

@ -243,7 +243,8 @@ void UDPSinkGUI::displaySettings()
ui->squelchGateText->setText(tr("%1").arg(roundf(m_settings.m_squelchGate * 1000.0), 0, 'f', 0)); ui->squelchGateText->setText(tr("%1").arg(roundf(m_settings.m_squelchGate * 1000.0), 0, 'f', 0));
ui->squelchGate->setValue(roundf(m_settings.m_squelchGate * 100.0)); ui->squelchGate->setValue(roundf(m_settings.m_squelchGate * 100.0));
ui->addressText->setText(tr("%1:%2").arg(m_settings.m_udpAddress).arg(m_settings.m_udpPort)); ui->localUDPAddress->setText(m_settings.m_udpAddress);
ui->localUDPPort->setText(tr("%1").arg(m_settings.m_udpPort));
ui->applyBtn->setEnabled(false); ui->applyBtn->setEnabled(false);
ui->applyBtn->setStyleSheet("QPushButton { background:rgb(79,79,79); }"); ui->applyBtn->setStyleSheet("QPushButton { background:rgb(79,79,79); }");
@ -285,6 +286,29 @@ void UDPSinkGUI::on_sampleFormat_currentIndexChanged(int index)
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }"); ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
} }
void UDPSinkGUI::on_localUDPAddress_editingFinished()
{
m_settings.m_udpAddress = ui->localUDPAddress->text();
ui->applyBtn->setEnabled(true);
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
}
void UDPSinkGUI::on_localUDPPort_editingFinished()
{
bool ok;
quint16 udpPort = ui->localUDPPort->text().toInt(&ok);
if((!ok) || (udpPort < 1024)) {
udpPort = 9998;
}
m_settings.m_udpPort = udpPort;
ui->localUDPPort->setText(tr("%1").arg(m_settings.m_udpPort));
ui->applyBtn->setEnabled(true);
ui->applyBtn->setStyleSheet("QPushButton { background-color : green; }");
}
void UDPSinkGUI::on_sampleRate_textEdited(const QString& arg1 __attribute__((unused))) void UDPSinkGUI::on_sampleRate_textEdited(const QString& arg1 __attribute__((unused)))
{ {
bool ok; bool ok;
@ -445,7 +469,6 @@ void UDPSinkGUI::onMenuDialogCalled(const QPoint &p)
setWindowTitle(m_channelMarker.getTitle()); setWindowTitle(m_channelMarker.getTitle());
setTitleColor(m_settings.m_rgbColor); setTitleColor(m_settings.m_rgbColor);
ui->addressText->setText(tr("%1:%2").arg(m_settings.m_udpAddress).arg(m_settings.m_udpPort));
applySettings(); applySettings();
} }

View File

@ -90,6 +90,8 @@ private slots:
void handleSourceMessages(); void handleSourceMessages();
void on_deltaFrequency_changed(qint64 value); void on_deltaFrequency_changed(qint64 value);
void on_sampleFormat_currentIndexChanged(int index); void on_sampleFormat_currentIndexChanged(int index);
void on_localUDPAddress_editingFinished();
void on_localUDPPort_editingFinished();
void on_sampleRate_textEdited(const QString& arg1); void on_sampleRate_textEdited(const QString& arg1);
void on_rfBandwidth_textEdited(const QString& arg1); void on_rfBandwidth_textEdited(const QString& arg1);
void on_fmDeviation_textEdited(const QString& arg1); void on_fmDeviation_textEdited(const QString& arg1);

View File

@ -770,7 +770,39 @@
<item row="2" column="0"> <item row="2" column="0">
<layout class="QHBoxLayout" name="AddressLayout"> <layout class="QHBoxLayout" name="AddressLayout">
<item> <item>
<widget class="QLabel" name="addresslabel"> <widget class="QLabel" name="localUDPAddressLabel">
<property name="text">
<string>A</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="localUDPAddress">
<property name="minimumSize">
<size>
<width>110</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>110</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Local UDP address</string>
</property>
<property name="inputMask">
<string>000.000.000.000; </string>
</property>
<property name="text">
<string>127.0.0.1</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="addressSeparator">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>35</width> <width>35</width>
@ -778,26 +810,51 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>Addr</string> <string>:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="addressText"> <widget class="QLineEdit" name="localUDPPort">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>150</width> <width>50</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="acceptDrops">
<bool>false</bool>
</property>
<property name="toolTip"> <property name="toolTip">
<string>Receiving UDP address and port</string> <string>Local UDP port</string>
</property>
<property name="inputMask">
<string>00000; </string>
</property> </property>
<property name="text"> <property name="text">
<string>000.000.000.000:00000</string> <string>9998</string>
</property> </property>
</widget> </widget>
</item> </item>
<item>
<spacer name="horizontalSpacer_4">
<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> </layout>
</item> </item>
<item row="4" column="0"> <item row="4" column="0">

View File

@ -145,12 +145,12 @@ bool UDPSinkSettings::deserialize(const QByteArray& data)
m_gainIn = s32tmp / 10.0; m_gainIn = s32tmp / 10.0;
d.readString(18, &m_udpAddress, "127.0.0.1"); d.readString(18, &m_udpAddress, "127.0.0.1");
d.readU32(19, &u32tmp, 10); d.readU32(19, &u32tmp, 9998);
if ((u32tmp > 1024) & (u32tmp < 65538)) { if ((u32tmp > 1024) & (u32tmp < 65538)) {
m_udpPort = u32tmp; m_udpPort = u32tmp;
} else { } else {
m_udpPort = 9999; m_udpPort = 9998;
} }
d.readString(20, &m_title, "UDP Sample Sink"); d.readString(20, &m_title, "UDP Sample Sink");

View File

@ -136,7 +136,7 @@
</size> </size>
</property> </property>
<property name="toolTip"> <property name="toolTip">
<string>UDP address</string> <string>Destination UDP address</string>
</property> </property>
<property name="inputMask"> <property name="inputMask">
<string>000.000.000.000; </string> <string>000.000.000.000; </string>
@ -162,7 +162,7 @@
</size> </size>
</property> </property>
<property name="toolTip"> <property name="toolTip">
<string>UDP port</string> <string>DestinationUDP port</string>
</property> </property>
<property name="inputMask"> <property name="inputMask">
<string>00000; </string> <string>00000; </string>