mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-03 09:44:01 -05: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->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()));
|
||||
m_statusTimer.start(500);
|
||||
connect(&(deviceAPI->getMainWindow()->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick()));
|
||||
@ -148,46 +147,6 @@ void SDRdaemonFECGui::resetToDefaults()
|
||||
QByteArray SDRdaemonFECGui::serialize() const
|
||||
{
|
||||
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)
|
||||
@ -209,80 +168,6 @@ bool SDRdaemonFECGui::deserialize(const QByteArray& data)
|
||||
blockApplySettings(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
|
||||
@ -388,11 +273,7 @@ void SDRdaemonFECGui::updateSampleRateAndFrequency()
|
||||
void SDRdaemonFECGui::displaySettings()
|
||||
{
|
||||
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->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->decim->setCurrentIndex(m_settings.m_log2Decim);
|
||||
@ -411,9 +292,6 @@ void SDRdaemonFECGui::displaySettings()
|
||||
ui->controlPort->setText(tr("%1").arg(m_settings.m_controlPort));
|
||||
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->iqImbalance->setChecked(m_settings.m_iqCorrection);
|
||||
|
||||
@ -527,20 +405,6 @@ void SDRdaemonFECGui::sendSettings()
|
||||
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)))
|
||||
{
|
||||
m_settings.m_address = ui->address->text();
|
||||
@ -562,103 +426,14 @@ void SDRdaemonFECGui::on_applyButton_clicked(bool checked __attribute__((unused)
|
||||
}
|
||||
|
||||
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)))
|
||||
{
|
||||
sendControl(true);
|
||||
// sendConfiguration();
|
||||
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()
|
||||
{
|
||||
m_settings.m_address = ui->address->text();
|
||||
@ -819,12 +594,6 @@ void SDRdaemonFECGui::updateWithStreamData()
|
||||
|
||||
void SDRdaemonFECGui::updateWithStreamTime()
|
||||
{
|
||||
// if (m_initSendConfiguration)
|
||||
// {
|
||||
// sendConfiguration();
|
||||
// m_initSendConfiguration = false;
|
||||
// }
|
||||
|
||||
quint64 startingTimeStampMsec = ((quint64) m_startingTimeStamp.tv_sec * 1000LL) + ((quint64) m_startingTimeStamp.tv_usec / 1000LL);
|
||||
QDateTime dt = QDateTime::fromMSecsSinceEpoch(startingTimeStampMsec);
|
||||
QString s_date = dt.toString("yyyy-MM-dd hh:mm:ss.zzz");
|
||||
@ -833,9 +602,9 @@ void SDRdaemonFECGui::updateWithStreamTime()
|
||||
if (m_framesDecodingStatus == 2) {
|
||||
ui->allFramesDecoded->setStyleSheet("QToolButton { background-color : green; }");
|
||||
} else if (m_framesDecodingStatus == 1) {
|
||||
ui->allFramesDecoded->setStyleSheet("QToolButton { background-color : magenta; }");
|
||||
} else {
|
||||
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);
|
||||
@ -856,18 +625,9 @@ void SDRdaemonFECGui::updateWithStreamTime()
|
||||
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);
|
||||
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);
|
||||
QString s1 = QString::number(m_nbFECBlocks, 'f', 0);
|
||||
ui->nominalNbBlocksText->setText(tr("%1/%2").arg(s).arg(s1));
|
||||
|
@ -101,13 +101,6 @@ private:
|
||||
|
||||
void blockApplySettings(bool block);
|
||||
void displaySettings();
|
||||
|
||||
// void displayConfigurationParameters(uint32_t freq,
|
||||
// uint32_t log2Decim,
|
||||
// uint32_t fcPos,
|
||||
// uint32_t sampleRate,
|
||||
// QString& specParms);
|
||||
|
||||
void displayTime();
|
||||
void sendControl(bool force = false);
|
||||
void sendSettings();
|
||||
@ -116,7 +109,6 @@ private:
|
||||
void updateWithAcquisition();
|
||||
void updateWithStreamData();
|
||||
void updateWithStreamTime();
|
||||
// void sendConfiguration();
|
||||
void updateSampleRateAndFrequency();
|
||||
|
||||
private slots:
|
||||
|
@ -366,6 +366,42 @@
|
||||
</item>
|
||||
<item>
|
||||
<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>
|
||||
<widget class="QLabel" name="minNbBlocksText">
|
||||
<property name="minimumSize">
|
||||
@ -385,68 +421,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</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>
|
||||
<widget class="QLabel" name="maxNbRecoveryText">
|
||||
<property name="minimumSize">
|
||||
@ -467,47 +441,67 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="avgNbRecoveryText">
|
||||
<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">
|
||||
<widget class="Line" name="line_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</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">
|
||||
<size>
|
||||
<width>52</width>
|
||||
<width>25</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<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 name="text">
|
||||
<string>000/000</string>
|
||||
<string>000</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</widget>
|
||||
</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>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -107,7 +107,14 @@ void SDRdaemonFECInput::getRemoteAddress(QString &s)
|
||||
|
||||
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;
|
||||
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;
|
||||
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(
|
||||
m_tv_sec,
|
||||
|
Loading…
Reference in New Issue
Block a user