mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-09-03 13:47:50 -04:00
SDRdaemonFEC: GUI refactoring (1)
This commit is contained in:
parent
27eae5e3b4
commit
ea5aa71ffc
@ -84,7 +84,6 @@ SDRdaemonFECGui::SDRdaemonFECGui(DeviceSourceAPI *deviceAPI, QWidget* parent) :
|
|||||||
ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
|
ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
|
||||||
ui->centerFrequency->setValueRange(7, 0, pow(10,7));
|
ui->centerFrequency->setValueRange(7, 0, pow(10,7));
|
||||||
|
|
||||||
//connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware())); does not exist in this class
|
|
||||||
connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus()));
|
connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus()));
|
||||||
m_statusTimer.start(500);
|
m_statusTimer.start(500);
|
||||||
connect(&(deviceAPI->getMainWindow()->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick()));
|
connect(&(deviceAPI->getMainWindow()->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick()));
|
||||||
@ -148,46 +147,6 @@ void SDRdaemonFECGui::resetToDefaults()
|
|||||||
QByteArray SDRdaemonFECGui::serialize() const
|
QByteArray SDRdaemonFECGui::serialize() const
|
||||||
{
|
{
|
||||||
return m_settings.serialize();
|
return m_settings.serialize();
|
||||||
// bool ok;
|
|
||||||
// SimpleSerializer s(1);
|
|
||||||
//
|
|
||||||
// s.writeString(1, ui->address->text());
|
|
||||||
// uint32_t uintval = ui->dataPort->text().toInt(&ok);
|
|
||||||
//
|
|
||||||
// if((!ok) || (uintval < 1024) || (uintval > 65535)) {
|
|
||||||
// uintval = 9090;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// s.writeU32(2, uintval);
|
|
||||||
// s.writeBool(3, m_dcBlock);
|
|
||||||
// s.writeBool(4, m_iqCorrection);
|
|
||||||
//
|
|
||||||
// uintval = ui->controlPort->text().toInt(&ok);
|
|
||||||
//
|
|
||||||
// if((!ok) || (uintval < 1024) || (uintval > 65535)) {
|
|
||||||
// uintval = 9091;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// s.writeU32(5, uintval);
|
|
||||||
//
|
|
||||||
// uint32_t confFrequency = ui->freq->text().toInt(&ok);
|
|
||||||
//
|
|
||||||
// if (ok) {
|
|
||||||
// s.writeU32(6, confFrequency);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// s.writeU32(7, ui->decim->currentIndex());
|
|
||||||
// s.writeU32(8, ui->fcPos->currentIndex());
|
|
||||||
//
|
|
||||||
// uint32_t sampleRate = ui->sampleRate->text().toInt(&ok);
|
|
||||||
//
|
|
||||||
// if (ok) {
|
|
||||||
// s.writeU32(9, sampleRate);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// s.writeString(10, ui->specificParms->text());
|
|
||||||
//
|
|
||||||
// return s.final();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SDRdaemonFECGui::deserialize(const QByteArray& data)
|
bool SDRdaemonFECGui::deserialize(const QByteArray& data)
|
||||||
@ -209,80 +168,6 @@ bool SDRdaemonFECGui::deserialize(const QByteArray& data)
|
|||||||
blockApplySettings(false);
|
blockApplySettings(false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// SimpleDeserializer d(data);
|
|
||||||
// QString address;
|
|
||||||
// quint16 dataPort;
|
|
||||||
// bool dcBlock;
|
|
||||||
// bool iqCorrection;
|
|
||||||
// uint32_t confFrequency;
|
|
||||||
// uint32_t confSampleRate;
|
|
||||||
// uint32_t confDecim;
|
|
||||||
// uint32_t confFcPos;
|
|
||||||
// QString confSpecificParms;
|
|
||||||
//
|
|
||||||
// if (!d.isValid())
|
|
||||||
// {
|
|
||||||
// resetToDefaults();
|
|
||||||
// displaySettings();
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (d.getVersion() == 1)
|
|
||||||
// {
|
|
||||||
// uint32_t uintval;
|
|
||||||
// d.readString(1, &address, "127.0.0.1");
|
|
||||||
// d.readU32(2, &uintval, 9090);
|
|
||||||
//
|
|
||||||
// if ((uintval > 1024) && (uintval < 65536)) {
|
|
||||||
// dataPort = uintval;
|
|
||||||
// } else {
|
|
||||||
// dataPort = 9090;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// d.readBool(3, &dcBlock, false);
|
|
||||||
// d.readBool(4, &iqCorrection, false);
|
|
||||||
// d.readU32(5, &uintval, 9091);
|
|
||||||
//
|
|
||||||
// if ((uintval > 1024) && (uintval < 65536)) {
|
|
||||||
// m_controlPort = uintval;
|
|
||||||
// } else {
|
|
||||||
// m_controlPort = 9091;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// d.readU32(6, &confFrequency, 435000);
|
|
||||||
// d.readU32(7, &confDecim, 3);
|
|
||||||
// d.readU32(8, &confFcPos, 2);
|
|
||||||
// d.readU32(9, &confSampleRate, 1000);
|
|
||||||
// d.readString(10, &confSpecificParms, "");
|
|
||||||
//
|
|
||||||
// if ((address != m_address) || (dataPort != m_dataPort))
|
|
||||||
// {
|
|
||||||
// m_address = address;
|
|
||||||
// m_dataPort = dataPort;
|
|
||||||
// configureUDPLink();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if ((dcBlock != m_dcBlock) || (iqCorrection != m_iqCorrection))
|
|
||||||
// {
|
|
||||||
// m_dcBlock = dcBlock;
|
|
||||||
// m_iqCorrection = iqCorrection;
|
|
||||||
// configureAutoCorrections();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// displaySettings();
|
|
||||||
// displayConfigurationParameters(confFrequency, confDecim, confFcPos, confSampleRate, confSpecificParms);
|
|
||||||
// m_initSendConfiguration = true;
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// resetToDefaults();
|
|
||||||
// displaySettings();
|
|
||||||
// QString defaultSpecificParameters("");
|
|
||||||
// displayConfigurationParameters(435000, 3, 2, 1000, defaultSpecificParameters);
|
|
||||||
// m_initSendConfiguration = true;
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 SDRdaemonFECGui::getCenterFrequency() const
|
qint64 SDRdaemonFECGui::getCenterFrequency() const
|
||||||
@ -388,11 +273,7 @@ void SDRdaemonFECGui::updateSampleRateAndFrequency()
|
|||||||
void SDRdaemonFECGui::displaySettings()
|
void SDRdaemonFECGui::displaySettings()
|
||||||
{
|
{
|
||||||
ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000);
|
ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000);
|
||||||
// ui->sampleRate->setValue(m_settings.m_sampleRate);
|
|
||||||
ui->deviceRateText->setText(tr("%1k").arg(m_sampleRate / 1000.0));
|
ui->deviceRateText->setText(tr("%1k").arg(m_sampleRate / 1000.0));
|
||||||
// ui->txDelay->setValue(m_settings.m_txDelay*100);
|
|
||||||
// ui->txDelayText->setText(tr("%1").arg(m_settings.m_txDelay*100));
|
|
||||||
// ui->nbFECBlocks->setValue(m_settings.m_nbFECBlocks);
|
|
||||||
|
|
||||||
ui->freq->setText(QString::number(m_settings.m_centerFrequency / 1000));
|
ui->freq->setText(QString::number(m_settings.m_centerFrequency / 1000));
|
||||||
ui->decim->setCurrentIndex(m_settings.m_log2Decim);
|
ui->decim->setCurrentIndex(m_settings.m_log2Decim);
|
||||||
@ -411,9 +292,6 @@ void SDRdaemonFECGui::displaySettings()
|
|||||||
ui->controlPort->setText(tr("%1").arg(m_settings.m_controlPort));
|
ui->controlPort->setText(tr("%1").arg(m_settings.m_controlPort));
|
||||||
ui->specificParms->setText(m_settings.m_specificParameters);
|
ui->specificParms->setText(m_settings.m_specificParameters);
|
||||||
|
|
||||||
// ui->address->setText(m_address);
|
|
||||||
// ui->dataPort->setText(QString::number(m_dataPort));
|
|
||||||
// ui->controlPort->setText(QString::number(m_controlPort));
|
|
||||||
ui->dcOffset->setChecked(m_settings.m_dcBlock);
|
ui->dcOffset->setChecked(m_settings.m_dcBlock);
|
||||||
ui->iqImbalance->setChecked(m_settings.m_iqCorrection);
|
ui->iqImbalance->setChecked(m_settings.m_iqCorrection);
|
||||||
|
|
||||||
@ -527,20 +405,6 @@ void SDRdaemonFECGui::sendSettings()
|
|||||||
m_updateTimer.start(100);
|
m_updateTimer.start(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
//void SDRdaemonFECGui::displayConfigurationParameters(uint32_t freq,
|
|
||||||
// uint32_t log2Decim,
|
|
||||||
// uint32_t fcPos,
|
|
||||||
// uint32_t sampleRate,
|
|
||||||
// QString& specParms)
|
|
||||||
//{
|
|
||||||
// ui->freq->setText(QString::number(freq));
|
|
||||||
// ui->decim->setCurrentIndex(log2Decim);
|
|
||||||
// ui->fcPos->setCurrentIndex(fcPos);
|
|
||||||
// ui->sampleRate->setText(QString::number(sampleRate));
|
|
||||||
// ui->specificParms->setText(specParms);
|
|
||||||
// ui->specificParms->setCursorPosition(0);
|
|
||||||
//}
|
|
||||||
|
|
||||||
void SDRdaemonFECGui::on_applyButton_clicked(bool checked __attribute__((unused)))
|
void SDRdaemonFECGui::on_applyButton_clicked(bool checked __attribute__((unused)))
|
||||||
{
|
{
|
||||||
m_settings.m_address = ui->address->text();
|
m_settings.m_address = ui->address->text();
|
||||||
@ -562,103 +426,14 @@ void SDRdaemonFECGui::on_applyButton_clicked(bool checked __attribute__((unused)
|
|||||||
}
|
}
|
||||||
|
|
||||||
configureUDPLink();
|
configureUDPLink();
|
||||||
|
|
||||||
// bool dataOk, ctlOk;
|
|
||||||
// QString udpAddress = ui->address->text();
|
|
||||||
// int udpDataPort = ui->dataPort->text().toInt(&dataOk);
|
|
||||||
// int tcpCtlPort = ui->controlPort->text().toInt(&ctlOk);
|
|
||||||
//
|
|
||||||
// if((!dataOk) || (udpDataPort < 1024) || (udpDataPort > 65535))
|
|
||||||
// {
|
|
||||||
// udpDataPort = 9090;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if((!ctlOk) || (tcpCtlPort < 1024) || (tcpCtlPort > 65535))
|
|
||||||
// {
|
|
||||||
// tcpCtlPort = 9091;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// m_address = udpAddress;
|
|
||||||
// m_dataPort = udpDataPort;
|
|
||||||
// m_controlPort = tcpCtlPort;
|
|
||||||
//
|
|
||||||
// if (m_addressEdited || m_dataPortEdited)
|
|
||||||
// {
|
|
||||||
// configureUDPLink();
|
|
||||||
// m_addressEdited = false;
|
|
||||||
// m_dataPortEdited = false;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDRdaemonFECGui::on_sendButton_clicked(bool checked __attribute__((unused)))
|
void SDRdaemonFECGui::on_sendButton_clicked(bool checked __attribute__((unused)))
|
||||||
{
|
{
|
||||||
sendControl(true);
|
sendControl(true);
|
||||||
// sendConfiguration();
|
|
||||||
ui->specificParms->setCursorPosition(0);
|
ui->specificParms->setCursorPosition(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//void SDRdaemonFECGui::sendConfiguration()
|
|
||||||
//{
|
|
||||||
// QString remoteAddress;
|
|
||||||
// ((SDRdaemonFECInput *) m_sampleSource)->getRemoteAddress(remoteAddress);
|
|
||||||
//
|
|
||||||
// if (remoteAddress != m_remoteAddress)
|
|
||||||
// {
|
|
||||||
// m_remoteAddress = remoteAddress;
|
|
||||||
// std::ostringstream os;
|
|
||||||
// os << "tcp://" << m_remoteAddress.toStdString() << ":" << m_controlPort;
|
|
||||||
// std::string addrstrng = os.str();
|
|
||||||
// int rc = nn_connect(m_sender, addrstrng.c_str());
|
|
||||||
//
|
|
||||||
// if (rc < 0) {
|
|
||||||
// qDebug() << "SDRdaemonGui::sendConfiguration: connexion to " << addrstrng.c_str() << " failed";
|
|
||||||
// QMessageBox::information(this, tr("Message"), tr("Cannot connect to remote control port"));
|
|
||||||
// } else {
|
|
||||||
// qDebug() << "SDRdaemonGui::sendConfiguration: connexion to " << addrstrng.c_str() << " successful";
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// std::ostringstream os;
|
|
||||||
// bool ok;
|
|
||||||
//
|
|
||||||
// os << "decim=" << ui->decim->currentIndex()
|
|
||||||
// << ",fcpos=" << ui->fcPos->currentIndex();
|
|
||||||
//
|
|
||||||
// uint64_t freq = ui->freq->text().toInt(&ok);
|
|
||||||
//
|
|
||||||
// if (ok) {
|
|
||||||
// os << ",freq=" << freq*1000LL;
|
|
||||||
// } else {
|
|
||||||
// QMessageBox::information(this, tr("Message"), tr("Invalid frequency"));
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// uint32_t srate = ui->sampleRate->text().toInt(&ok);
|
|
||||||
//
|
|
||||||
// if (ok) {
|
|
||||||
// os << ",srate=" << srate*1000;
|
|
||||||
// } else {
|
|
||||||
// QMessageBox::information(this, tr("Message"), tr("invalid sample rate"));
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if ((ui->specificParms->text()).size() > 0) {
|
|
||||||
// os << "," << ui->specificParms->text().toStdString();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// int config_size = os.str().size();
|
|
||||||
// int rc = nn_send(m_sender, (void *) os.str().c_str(), config_size, 0);
|
|
||||||
//
|
|
||||||
// if (rc != config_size)
|
|
||||||
// {
|
|
||||||
// QMessageBox::information(this, tr("Message"), tr("Cannot send message to remote control port"));
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// qDebug() << "SDRdaemonGui::sendConfiguration:"
|
|
||||||
// << " remoteAddress: " << remoteAddress
|
|
||||||
// << " message: " << os.str().c_str();
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
void SDRdaemonFECGui::on_address_returnPressed()
|
void SDRdaemonFECGui::on_address_returnPressed()
|
||||||
{
|
{
|
||||||
m_settings.m_address = ui->address->text();
|
m_settings.m_address = ui->address->text();
|
||||||
@ -819,12 +594,6 @@ void SDRdaemonFECGui::updateWithStreamData()
|
|||||||
|
|
||||||
void SDRdaemonFECGui::updateWithStreamTime()
|
void SDRdaemonFECGui::updateWithStreamTime()
|
||||||
{
|
{
|
||||||
// if (m_initSendConfiguration)
|
|
||||||
// {
|
|
||||||
// sendConfiguration();
|
|
||||||
// m_initSendConfiguration = false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
quint64 startingTimeStampMsec = ((quint64) m_startingTimeStamp.tv_sec * 1000LL) + ((quint64) m_startingTimeStamp.tv_usec / 1000LL);
|
quint64 startingTimeStampMsec = ((quint64) m_startingTimeStamp.tv_sec * 1000LL) + ((quint64) m_startingTimeStamp.tv_usec / 1000LL);
|
||||||
QDateTime dt = QDateTime::fromMSecsSinceEpoch(startingTimeStampMsec);
|
QDateTime dt = QDateTime::fromMSecsSinceEpoch(startingTimeStampMsec);
|
||||||
QString s_date = dt.toString("yyyy-MM-dd hh:mm:ss.zzz");
|
QString s_date = dt.toString("yyyy-MM-dd hh:mm:ss.zzz");
|
||||||
@ -833,9 +602,9 @@ void SDRdaemonFECGui::updateWithStreamTime()
|
|||||||
if (m_framesDecodingStatus == 2) {
|
if (m_framesDecodingStatus == 2) {
|
||||||
ui->allFramesDecoded->setStyleSheet("QToolButton { background-color : green; }");
|
ui->allFramesDecoded->setStyleSheet("QToolButton { background-color : green; }");
|
||||||
} else if (m_framesDecodingStatus == 1) {
|
} else if (m_framesDecodingStatus == 1) {
|
||||||
ui->allFramesDecoded->setStyleSheet("QToolButton { background-color : magenta; }");
|
|
||||||
} else {
|
|
||||||
ui->allFramesDecoded->setStyleSheet("QToolButton { background:rgb(56,56,56); }");
|
ui->allFramesDecoded->setStyleSheet("QToolButton { background:rgb(56,56,56); }");
|
||||||
|
} else {
|
||||||
|
ui->allFramesDecoded->setStyleSheet("QToolButton { background-color : red; }");
|
||||||
}
|
}
|
||||||
|
|
||||||
QString s = QString::number(m_bufferLengthInSecs, 'f', 1);
|
QString s = QString::number(m_bufferLengthInSecs, 'f', 1);
|
||||||
@ -856,18 +625,9 @@ void SDRdaemonFECGui::updateWithStreamTime()
|
|||||||
ui->minNbBlocksText->setPalette(m_paletteWhiteText);
|
ui->minNbBlocksText->setPalette(m_paletteWhiteText);
|
||||||
}
|
}
|
||||||
|
|
||||||
s = QString::number(m_avgNbBlocks, 'f', 1);
|
|
||||||
ui->avgNbBlocksText->setText(tr("%1").arg(s));
|
|
||||||
|
|
||||||
s = QString::number(m_minNbOriginalBlocks, 'f', 0);
|
|
||||||
ui->minNbOriginalText->setText(tr("%1").arg(s));
|
|
||||||
|
|
||||||
s = QString::number(m_maxNbRecovery, 'f', 0);
|
s = QString::number(m_maxNbRecovery, 'f', 0);
|
||||||
ui->maxNbRecoveryText->setText(tr("%1").arg(s));
|
ui->maxNbRecoveryText->setText(tr("%1").arg(s));
|
||||||
|
|
||||||
s = QString::number(m_avgNbRecovery, 'f', 1);
|
|
||||||
ui->avgNbRecoveryText->setText(tr("%1").arg(s));
|
|
||||||
|
|
||||||
s = QString::number(m_nbOriginalBlocks + m_nbFECBlocks, 'f', 0);
|
s = QString::number(m_nbOriginalBlocks + m_nbFECBlocks, 'f', 0);
|
||||||
QString s1 = QString::number(m_nbFECBlocks, 'f', 0);
|
QString s1 = QString::number(m_nbFECBlocks, 'f', 0);
|
||||||
ui->nominalNbBlocksText->setText(tr("%1/%2").arg(s).arg(s1));
|
ui->nominalNbBlocksText->setText(tr("%1/%2").arg(s).arg(s1));
|
||||||
|
@ -101,13 +101,6 @@ private:
|
|||||||
|
|
||||||
void blockApplySettings(bool block);
|
void blockApplySettings(bool block);
|
||||||
void displaySettings();
|
void displaySettings();
|
||||||
|
|
||||||
// void displayConfigurationParameters(uint32_t freq,
|
|
||||||
// uint32_t log2Decim,
|
|
||||||
// uint32_t fcPos,
|
|
||||||
// uint32_t sampleRate,
|
|
||||||
// QString& specParms);
|
|
||||||
|
|
||||||
void displayTime();
|
void displayTime();
|
||||||
void sendControl(bool force = false);
|
void sendControl(bool force = false);
|
||||||
void sendSettings();
|
void sendSettings();
|
||||||
@ -116,7 +109,6 @@ private:
|
|||||||
void updateWithAcquisition();
|
void updateWithAcquisition();
|
||||||
void updateWithStreamData();
|
void updateWithStreamData();
|
||||||
void updateWithStreamTime();
|
void updateWithStreamTime();
|
||||||
// void sendConfiguration();
|
|
||||||
void updateSampleRateAndFrequency();
|
void updateSampleRateAndFrequency();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
@ -366,6 +366,42 @@
|
|||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="streamLayout">
|
<layout class="QHBoxLayout" name="streamLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="nominalNbBlocksText">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>52</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Nominal number of blocks per frame: Total/FEC</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>000/000</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="allFramesDecoded">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Frames status: green = all original received, none = some recovered by FEC, red = some lost</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../sdrbase/resources/res.qrc">
|
||||||
|
<normaloff>:/locked.png</normaloff>:/locked.png</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="minNbBlocksText">
|
<widget class="QLabel" name="minNbBlocksText">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
@ -385,68 +421,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="avgNbBlocksText">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>35</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Average number of blocks retrieved per frame</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>000.0</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QToolButton" name="allFramesDecoded">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Frames status: green = all original received, pink = some recovered by FEC, none = some lost</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>...</string>
|
|
||||||
</property>
|
|
||||||
<property name="icon">
|
|
||||||
<iconset resource="../../../sdrbase/resources/res.qrc">
|
|
||||||
<normaloff>:/locked.png</normaloff>:/locked.png</iconset>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="minNbOriginalText">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>24</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Minimum number of original blocks retrieved per frame</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>000</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="Line" name="lineStream5">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="maxNbRecoveryText">
|
<widget class="QLabel" name="maxNbRecoveryText">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
@ -467,47 +441,67 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="avgNbRecoveryText">
|
<widget class="Line" name="line_2">
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>35</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Average number of recovery blocks used per frame</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>000.0</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="Line" name="lineStream6">
|
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="nominalNbBlocksText">
|
<widget class="QPushButton" name="eventCountsReset">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>22</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Event counts reset</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="eventUnrecText">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>52</width>
|
<width>25</width>
|
||||||
<height>0</height>
|
<height>0</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Nominal number of blocks per frame: Total/FEC</string>
|
<string>Number of uncrecoverable errors since event counts reset</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>000/000</string>
|
<string>000</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
</widget>
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="eventRecText">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>25</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Number of correctable errors since event counts reset</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>000</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="eventCountsTimeText">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Time since last event counts reset</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>00:00:00</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -107,7 +107,14 @@ void SDRdaemonFECInput::getRemoteAddress(QString &s)
|
|||||||
|
|
||||||
bool SDRdaemonFECInput::handleMessage(const Message& message)
|
bool SDRdaemonFECInput::handleMessage(const Message& message)
|
||||||
{
|
{
|
||||||
if (MsgConfigureSDRdaemonUDPLink::match(message))
|
if (MsgConfigureSDRdaemonFEC::match(message))
|
||||||
|
{
|
||||||
|
qDebug() << "SDRdaemonFECInput::handleMessage:" << message.getIdentifier();
|
||||||
|
//MsgConfigureSDRdaemonFEC& conf = (MsgConfigureSDRdaemonFEC&) message;
|
||||||
|
//applySettings(conf.getSettings(), conf.getForce());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (MsgConfigureSDRdaemonUDPLink::match(message))
|
||||||
{
|
{
|
||||||
MsgConfigureSDRdaemonUDPLink& conf = (MsgConfigureSDRdaemonUDPLink&) message;
|
MsgConfigureSDRdaemonUDPLink& conf = (MsgConfigureSDRdaemonUDPLink&) message;
|
||||||
m_SDRdaemonUDPHandler->configureUDPLink(conf.getAddress(), conf.getPort());
|
m_SDRdaemonUDPHandler->configureUDPLink(conf.getAddress(), conf.getPort());
|
||||||
|
96
plugins/samplesource/sdrdaemonfec/sdrdaemonfecsettings.cpp
Normal file
96
plugins/samplesource/sdrdaemonfec/sdrdaemonfecsettings.cpp
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Copyright (C) 2017 Edouard Griffiths, F4EXB //
|
||||||
|
// //
|
||||||
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
// it under the terms of the GNU General Public License as published by //
|
||||||
|
// the Free Software Foundation as version 3 of the License, or //
|
||||||
|
// //
|
||||||
|
// This program is distributed in the hope that it will be useful, //
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||||
|
// GNU General Public License V3 for more details. //
|
||||||
|
// //
|
||||||
|
// You should have received a copy of the GNU General Public License //
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "util/simpleserializer.h"
|
||||||
|
#include "sdrdaemonfecsettings.h"
|
||||||
|
|
||||||
|
SDRdaemonFECSettings::SDRdaemonFECSettings()
|
||||||
|
{
|
||||||
|
resetToDefaults();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SDRdaemonFECSettings::resetToDefaults()
|
||||||
|
{
|
||||||
|
m_centerFrequency = 435000*1000;
|
||||||
|
m_sampleRate = 256000;
|
||||||
|
m_log2Decim = 4;
|
||||||
|
m_txDelay = 0.5;
|
||||||
|
m_nbFECBlocks = 0;
|
||||||
|
m_address = "127.0.0.1";
|
||||||
|
m_dataPort = 9092;
|
||||||
|
m_controlPort = 9093;
|
||||||
|
m_specificParameters = "";
|
||||||
|
m_dcBlock = false;
|
||||||
|
m_iqCorrection = false;
|
||||||
|
m_fcPos = 2; // center
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray SDRdaemonFECSettings::serialize() const
|
||||||
|
{
|
||||||
|
SimpleSerializer s(1);
|
||||||
|
|
||||||
|
s.writeU64(1, m_sampleRate);
|
||||||
|
s.writeU32(2, m_log2Decim);
|
||||||
|
s.writeFloat(3, m_txDelay);
|
||||||
|
s.writeU32(4, m_nbFECBlocks);
|
||||||
|
s.writeString(5, m_address);
|
||||||
|
s.writeU32(6, m_dataPort);
|
||||||
|
s.writeU32(7, m_controlPort);
|
||||||
|
s.writeString(8, m_specificParameters);
|
||||||
|
s.writeBool(9, m_dcBlock);
|
||||||
|
s.writeBool(10, m_iqCorrection);
|
||||||
|
s.writeU32(11, m_fcPos);
|
||||||
|
|
||||||
|
return s.final();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SDRdaemonFECSettings::deserialize(const QByteArray& data)
|
||||||
|
{
|
||||||
|
SimpleDeserializer d(data);
|
||||||
|
|
||||||
|
if (!d.isValid())
|
||||||
|
{
|
||||||
|
resetToDefaults();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d.getVersion() == 1)
|
||||||
|
{
|
||||||
|
quint32 uintval;
|
||||||
|
d.readU64(1, &m_sampleRate, 48000);
|
||||||
|
d.readU32(2, &m_log2Decim, 0);
|
||||||
|
d.readFloat(3, &m_txDelay, 0.5);
|
||||||
|
d.readU32(4, &m_nbFECBlocks, 0);
|
||||||
|
d.readString(5, &m_address, "127.0.0.1");
|
||||||
|
d.readU32(6, &uintval, 9090);
|
||||||
|
m_dataPort = uintval % (1<<16);
|
||||||
|
d.readU32(7, &uintval, 9090);
|
||||||
|
m_controlPort = uintval % (1<<16);
|
||||||
|
d.readString(8, &m_specificParameters, "");
|
||||||
|
d.readBool(9, &m_dcBlock, false);
|
||||||
|
d.readBool(10, &m_iqCorrection, false);
|
||||||
|
d.readU32(11, &m_fcPos, 2);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
resetToDefaults();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
42
plugins/samplesource/sdrdaemonfec/sdrdaemonfecsettings.h
Normal file
42
plugins/samplesource/sdrdaemonfec/sdrdaemonfecsettings.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Copyright (C) 2017 Edouard Griffiths, F4EXB //
|
||||||
|
// //
|
||||||
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
// it under the terms of the GNU General Public License as published by //
|
||||||
|
// the Free Software Foundation as version 3 of the License, or //
|
||||||
|
// //
|
||||||
|
// This program is distributed in the hope that it will be useful, //
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||||
|
// GNU General Public License V3 for more details. //
|
||||||
|
// //
|
||||||
|
// You should have received a copy of the GNU General Public License //
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef PLUGINS_SAMPLESOURCE_SDRDAEMONFEC_SDRDAEMONFECSETTINGS_H_
|
||||||
|
#define PLUGINS_SAMPLESOURCE_SDRDAEMONFEC_SDRDAEMONFECSETTINGS_H_
|
||||||
|
|
||||||
|
#include <QByteArray>
|
||||||
|
|
||||||
|
struct SDRdaemonFECSettings {
|
||||||
|
quint64 m_centerFrequency;
|
||||||
|
quint64 m_sampleRate;
|
||||||
|
quint32 m_log2Decim;
|
||||||
|
float m_txDelay;
|
||||||
|
quint32 m_nbFECBlocks;
|
||||||
|
QString m_address;
|
||||||
|
quint16 m_dataPort;
|
||||||
|
quint16 m_controlPort;
|
||||||
|
QString m_specificParameters;
|
||||||
|
bool m_dcBlock;
|
||||||
|
bool m_iqCorrection;
|
||||||
|
quint32 m_fcPos;
|
||||||
|
|
||||||
|
SDRdaemonFECSettings();
|
||||||
|
void resetToDefaults();
|
||||||
|
QByteArray serialize() const;
|
||||||
|
bool deserialize(const QByteArray& data);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* PLUGINS_SAMPLESOURCE_SDRDAEMONFEC_SDRDAEMONFECSETTINGS_H_ */
|
@ -233,7 +233,8 @@ void SDRdaemonFECUDPHandler::tick()
|
|||||||
int nbFECblocks = m_sdrDaemonBuffer.getCurrentMeta().m_nbFECBlocks;
|
int nbFECblocks = m_sdrDaemonBuffer.getCurrentMeta().m_nbFECBlocks;
|
||||||
m_tickCount = 0;
|
m_tickCount = 0;
|
||||||
|
|
||||||
framesDecodingStatus = (minNbOriginalBlocks == nbOriginalBlocks ? 2 : (minNbOriginalBlocks < nbOriginalBlocks - nbFECblocks ? 0 : 1));
|
//framesDecodingStatus = (minNbOriginalBlocks == nbOriginalBlocks ? 2 : (minNbOriginalBlocks < nbOriginalBlocks - nbFECblocks ? 0 : 1));
|
||||||
|
framesDecodingStatus = (minNbBlocks == 128 + nbFECblocks ? 2 : (minNbBlocks < 128 ? 0 : 1));
|
||||||
|
|
||||||
SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming *report = SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming::create(
|
SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming *report = SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming::create(
|
||||||
m_tv_sec,
|
m_tv_sec,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user