mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-05-23 18:52:28 -04:00
DaemonSink (6)
This commit is contained in:
parent
354409a21a
commit
2be1281885
@ -54,7 +54,7 @@ DaemonSink::DaemonSink(DeviceSourceAPI *deviceAPI) :
|
|||||||
m_sampleRate(48000),
|
m_sampleRate(48000),
|
||||||
m_sampleBytes(SDR_RX_SAMP_SZ == 24 ? 4 : 2),
|
m_sampleBytes(SDR_RX_SAMP_SZ == 24 ? 4 : 2),
|
||||||
m_nbBlocksFEC(0),
|
m_nbBlocksFEC(0),
|
||||||
m_txDelay(50),
|
m_txDelay(35),
|
||||||
m_dataAddress("127.0.0.1"),
|
m_dataAddress("127.0.0.1"),
|
||||||
m_dataPort(9090)
|
m_dataPort(9090)
|
||||||
{
|
{
|
||||||
@ -64,8 +64,6 @@ DaemonSink::DaemonSink(DeviceSourceAPI *deviceAPI) :
|
|||||||
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
|
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
|
||||||
m_deviceAPI->addThreadedSink(m_threadedChannelizer);
|
m_deviceAPI->addThreadedSink(m_threadedChannelizer);
|
||||||
m_deviceAPI->addChannelAPI(this);
|
m_deviceAPI->addChannelAPI(this);
|
||||||
|
|
||||||
m_cm256p = m_cm256.isInitialized() ? &m_cm256 : 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DaemonSink::~DaemonSink()
|
DaemonSink::~DaemonSink()
|
||||||
@ -212,7 +210,7 @@ void DaemonSink::start()
|
|||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sinkThread = new DaemonSinkThread(&m_dataQueue, m_cm256p);
|
m_sinkThread = new DaemonSinkThread(&m_dataQueue);
|
||||||
m_sinkThread->startStop(true);
|
m_sinkThread->startStop(true);
|
||||||
m_running = true;
|
m_running = true;
|
||||||
}
|
}
|
||||||
@ -366,7 +364,7 @@ int DaemonSink::webapiSettingsPutPatch(
|
|||||||
int txDelay = response.getDaemonSinkSettings()->getTxDelay();
|
int txDelay = response.getDaemonSinkSettings()->getTxDelay();
|
||||||
|
|
||||||
if (txDelay < 0) {
|
if (txDelay < 0) {
|
||||||
settings.m_txDelay = 50;
|
settings.m_txDelay = 35;
|
||||||
} else {
|
} else {
|
||||||
settings.m_txDelay = txDelay;
|
settings.m_txDelay = txDelay;
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,6 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
|
|
||||||
#include "cm256.h"
|
|
||||||
|
|
||||||
#include "dsp/basebandsamplesink.h"
|
#include "dsp/basebandsamplesink.h"
|
||||||
#include "channel/channelsinkapi.h"
|
#include "channel/channelsinkapi.h"
|
||||||
#include "channel/sdrdaemondataqueue.h"
|
#include "channel/sdrdaemondataqueue.h"
|
||||||
@ -134,8 +132,6 @@ private:
|
|||||||
DaemonSinkSettings m_settings;
|
DaemonSinkSettings m_settings;
|
||||||
SDRDaemonDataQueue m_dataQueue;
|
SDRDaemonDataQueue m_dataQueue;
|
||||||
DaemonSinkThread *m_sinkThread;
|
DaemonSinkThread *m_sinkThread;
|
||||||
CM256 m_cm256;
|
|
||||||
CM256 *m_cm256p;
|
|
||||||
|
|
||||||
int m_txBlockIndex; //!< Current index in blocks to transmit in the Tx row
|
int m_txBlockIndex; //!< Current index in blocks to transmit in the Tx row
|
||||||
uint16_t m_frameCount; //!< transmission frame count
|
uint16_t m_frameCount; //!< transmission frame count
|
||||||
|
@ -179,6 +179,7 @@ void DaemonSinkGUI::displaySettings()
|
|||||||
QString s1 = QString::number(m_settings.m_nbFECBlocks, 'f', 0);
|
QString s1 = QString::number(m_settings.m_nbFECBlocks, 'f', 0);
|
||||||
ui->nominalNbBlocksText->setText(tr("%1/%2").arg(s).arg(s1));
|
ui->nominalNbBlocksText->setText(tr("%1/%2").arg(s).arg(s1));
|
||||||
ui->txDelayText->setText(tr("%1%").arg(m_settings.m_txDelay));
|
ui->txDelayText->setText(tr("%1%").arg(m_settings.m_txDelay));
|
||||||
|
ui->txDelay->setValue(m_settings.m_txDelay);
|
||||||
updateTxDelayTime();
|
updateTxDelayTime();
|
||||||
blockApplySettings(false);
|
blockApplySettings(false);
|
||||||
}
|
}
|
||||||
|
@ -232,16 +232,16 @@
|
|||||||
<string>Delay between consecutive UDP packets in percentage of nominal UDP packet process time</string>
|
<string>Delay between consecutive UDP packets in percentage of nominal UDP packet process time</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>10</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>90</number>
|
<number>70</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="pageStep">
|
<property name="pageStep">
|
||||||
<number>1</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="value">
|
<property name="value">
|
||||||
<number>50</number>
|
<number>35</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -34,7 +34,7 @@ DaemonSinkSettings::DaemonSinkSettings()
|
|||||||
void DaemonSinkSettings::resetToDefaults()
|
void DaemonSinkSettings::resetToDefaults()
|
||||||
{
|
{
|
||||||
m_nbFECBlocks = 0;
|
m_nbFECBlocks = 0;
|
||||||
m_txDelay = 50;
|
m_txDelay = 35;
|
||||||
m_dataAddress = "127.0.0.1";
|
m_dataAddress = "127.0.0.1";
|
||||||
m_dataPort = 9090;
|
m_dataPort = 9090;
|
||||||
m_rgbColor = QColor(140, 4, 4).rgb();
|
m_rgbColor = QColor(140, 4, 4).rgb();
|
||||||
@ -77,7 +77,7 @@ bool DaemonSinkSettings::deserialize(const QByteArray& data)
|
|||||||
m_nbFECBlocks = 0;
|
m_nbFECBlocks = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
d.readU32(2, &m_txDelay, 50);
|
d.readU32(2, &m_txDelay, 35);
|
||||||
d.readString(3, &m_dataAddress, "127.0.0.1");
|
d.readString(3, &m_dataAddress, "127.0.0.1");
|
||||||
d.readU32(4, &tmp, 0);
|
d.readU32(4, &tmp, 0);
|
||||||
|
|
||||||
|
@ -30,14 +30,15 @@
|
|||||||
|
|
||||||
MESSAGE_CLASS_DEFINITION(DaemonSinkThread::MsgStartStop, Message)
|
MESSAGE_CLASS_DEFINITION(DaemonSinkThread::MsgStartStop, Message)
|
||||||
|
|
||||||
DaemonSinkThread::DaemonSinkThread(SDRDaemonDataQueue *dataQueue, CM256 *cm256, QObject* parent) :
|
DaemonSinkThread::DaemonSinkThread(SDRDaemonDataQueue *dataQueue, QObject* parent) :
|
||||||
QThread(parent),
|
QThread(parent),
|
||||||
m_running(false),
|
m_running(false),
|
||||||
m_dataQueue(dataQueue),
|
m_dataQueue(dataQueue),
|
||||||
m_cm256(cm256),
|
|
||||||
m_address(QHostAddress::LocalHost),
|
m_address(QHostAddress::LocalHost),
|
||||||
m_socket(0)
|
m_socket(0)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
m_cm256p = m_cm256.isInitialized() ? &m_cm256 : 0;
|
||||||
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection);
|
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection);
|
||||||
connect(m_dataQueue, SIGNAL(dataBlockEnqueued()), this, SLOT(handleData()), Qt::QueuedConnection);
|
connect(m_dataQueue, SIGNAL(dataBlockEnqueued()), this, SLOT(handleData()), Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
@ -102,7 +103,7 @@ bool DaemonSinkThread::handleDataBlock(SDRDaemonDataBlock& dataBlock)
|
|||||||
uint16_t dataPort = dataBlock.m_txControlBlock.m_dataPort;
|
uint16_t dataPort = dataBlock.m_txControlBlock.m_dataPort;
|
||||||
SDRDaemonSuperBlock *txBlockx = dataBlock.m_superBlocks;
|
SDRDaemonSuperBlock *txBlockx = dataBlock.m_superBlocks;
|
||||||
|
|
||||||
if ((nbBlocksFEC == 0) || !m_cm256) // Do not FEC encode
|
if ((nbBlocksFEC == 0) || !m_cm256p) // Do not FEC encode
|
||||||
{
|
{
|
||||||
if (m_socket)
|
if (m_socket)
|
||||||
{
|
{
|
||||||
@ -134,7 +135,7 @@ bool DaemonSinkThread::handleDataBlock(SDRDaemonDataBlock& dataBlock)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Encode FEC blocks
|
// Encode FEC blocks
|
||||||
if (m_cm256->cm256_encode(cm256Params, descriptorBlocks, fecBlocks))
|
if (m_cm256p->cm256_encode(cm256Params, descriptorBlocks, fecBlocks))
|
||||||
{
|
{
|
||||||
qWarning("SDRDaemonChannelSinkThread::handleDataBlock: CM256 encode failed. No transmission.");
|
qWarning("SDRDaemonChannelSinkThread::handleDataBlock: CM256 encode failed. No transmission.");
|
||||||
// TODO: send without FEC changing meta data to set indication of no FEC
|
// TODO: send without FEC changing meta data to set indication of no FEC
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
#include <QWaitCondition>
|
#include <QWaitCondition>
|
||||||
#include <QHostAddress>
|
#include <QHostAddress>
|
||||||
|
|
||||||
|
#include "cm256.h"
|
||||||
|
|
||||||
#include "util/message.h"
|
#include "util/message.h"
|
||||||
#include "util/messagequeue.h"
|
#include "util/messagequeue.h"
|
||||||
|
|
||||||
@ -56,7 +58,7 @@ public:
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
DaemonSinkThread(SDRDaemonDataQueue *dataQueue, CM256 *cm256, QObject* parent = 0);
|
DaemonSinkThread(SDRDaemonDataQueue *dataQueue, QObject* parent = 0);
|
||||||
~DaemonSinkThread();
|
~DaemonSinkThread();
|
||||||
|
|
||||||
void startStop(bool start);
|
void startStop(bool start);
|
||||||
@ -67,7 +69,8 @@ private:
|
|||||||
bool m_running;
|
bool m_running;
|
||||||
|
|
||||||
SDRDaemonDataQueue *m_dataQueue;
|
SDRDaemonDataQueue *m_dataQueue;
|
||||||
CM256 *m_cm256; //!< CM256 library object
|
CM256 m_cm256;
|
||||||
|
CM256 *m_cm256p;
|
||||||
|
|
||||||
QHostAddress m_address;
|
QHostAddress m_address;
|
||||||
QUdpSocket *m_socket;
|
QUdpSocket *m_socket;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user