1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-09-27 15:26:33 -04:00

DaemonSink (7)

This commit is contained in:
f4exb 2018-09-06 05:21:43 +02:00
parent 2be1281885
commit 54c89f16aa
4 changed files with 25 additions and 11 deletions

View File

@ -184,8 +184,9 @@ void DaemonSink::feed(const SampleVector::const_iterator& begin, const SampleVec
m_dataBlock->m_txControlBlock.m_dataAddress = m_dataAddress; m_dataBlock->m_txControlBlock.m_dataAddress = m_dataAddress;
m_dataBlock->m_txControlBlock.m_dataPort = m_dataPort; m_dataBlock->m_txControlBlock.m_dataPort = m_dataPort;
qDebug("DaemonSink::feed: m_dataBlock: %p m_dataQueue.sz: %d", m_dataBlock, m_dataQueue.size()); //qDebug("DaemonSink::feed: m_dataBlock: %p m_dataQueue.sz: %d", m_dataBlock, m_dataQueue.size());
m_dataQueue.push(m_dataBlock); emit dataBlockAvailable(m_dataBlock);
//m_dataQueue.push(m_dataBlock);
m_dataBlock = new SDRDaemonDataBlock(); // create a new one immediately m_dataBlock = new SDRDaemonDataBlock(); // create a new one immediately
m_dataBlockMutex.unlock(); m_dataBlockMutex.unlock();
@ -211,6 +212,11 @@ void DaemonSink::start()
} }
m_sinkThread = new DaemonSinkThread(&m_dataQueue); m_sinkThread = new DaemonSinkThread(&m_dataQueue);
connect(this,
SIGNAL(dataBlockAvailable(SDRDaemonDataBlock *)),
m_sinkThread,
SLOT(processDataBlock(SDRDaemonDataBlock *)),
Qt::QueuedConnection);
m_sinkThread->startStop(true); m_sinkThread->startStop(true);
m_running = true; m_running = true;
} }

View File

@ -123,6 +123,9 @@ public:
static const QString m_channelIdURI; static const QString m_channelIdURI;
static const QString m_channelId; static const QString m_channelId;
signals:
void dataBlockAvailable(SDRDaemonDataBlock *dataBlock);
private: private:
DeviceSourceAPI *m_deviceAPI; DeviceSourceAPI *m_deviceAPI;
ThreadedBasebandSampleSink* m_threadedChannelizer; ThreadedBasebandSampleSink* m_threadedChannelizer;

View File

@ -89,7 +89,13 @@ void DaemonSinkThread::run()
qDebug("DaemonSinkThread::run: end"); qDebug("DaemonSinkThread::run: end");
} }
bool DaemonSinkThread::handleDataBlock(SDRDaemonDataBlock& dataBlock) void DaemonSinkThread::processDataBlock(SDRDaemonDataBlock *dataBlock)
{
handleDataBlock(*dataBlock);
delete dataBlock;
}
void DaemonSinkThread::handleDataBlock(SDRDaemonDataBlock& dataBlock)
{ {
CM256::cm256_encoder_params cm256Params; //!< Main interface with CM256 encoder CM256::cm256_encoder_params cm256Params; //!< Main interface with CM256 encoder
CM256::cm256_block descriptorBlocks[256]; //!< Pointers to data for CM256 encoder CM256::cm256_block descriptorBlocks[256]; //!< Pointers to data for CM256 encoder
@ -98,7 +104,7 @@ bool DaemonSinkThread::handleDataBlock(SDRDaemonDataBlock& dataBlock)
uint16_t frameIndex = dataBlock.m_txControlBlock.m_frameIndex; uint16_t frameIndex = dataBlock.m_txControlBlock.m_frameIndex;
int nbBlocksFEC = dataBlock.m_txControlBlock.m_nbBlocksFEC; int nbBlocksFEC = dataBlock.m_txControlBlock.m_nbBlocksFEC;
int txDelay = dataBlock.m_txControlBlock.m_txDelay; int txDelay = dataBlock.m_txControlBlock.m_txDelay;
qDebug("DaemonSinkThread::handleDataBlock: txDelay: %d QS: %d", txDelay, m_dataQueue->size()); //qDebug("DaemonSinkThread::handleDataBlock: dataBlock: %p QS: %d", &dataBlock, m_dataQueue->size());
m_address.setAddress(dataBlock.m_txControlBlock.m_dataAddress); m_address.setAddress(dataBlock.m_txControlBlock.m_dataAddress);
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;
@ -139,7 +145,6 @@ bool DaemonSinkThread::handleDataBlock(SDRDaemonDataBlock& dataBlock)
{ {
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
return true;
} }
// Merge FEC with data to transmit // Merge FEC with data to transmit
@ -161,7 +166,6 @@ bool DaemonSinkThread::handleDataBlock(SDRDaemonDataBlock& dataBlock)
} }
dataBlock.m_txControlBlock.m_processed = true; dataBlock.m_txControlBlock.m_processed = true;
return true;
} }
void DaemonSinkThread::handleData() void DaemonSinkThread::handleData()
@ -170,10 +174,8 @@ void DaemonSinkThread::handleData()
while (m_running && ((dataBlock = m_dataQueue->pop()) != 0)) while (m_running && ((dataBlock = m_dataQueue->pop()) != 0))
{ {
if (handleDataBlock(*dataBlock)) handleDataBlock(*dataBlock);
{ delete dataBlock;
delete dataBlock;
}
} }
} }

View File

@ -63,6 +63,9 @@ public:
void startStop(bool start); void startStop(bool start);
public slots:
void processDataBlock(SDRDaemonDataBlock *dataBlock);
private: private:
QMutex m_startWaitMutex; QMutex m_startWaitMutex;
QWaitCondition m_startWaiter; QWaitCondition m_startWaiter;
@ -81,7 +84,7 @@ private:
void stopWork(); void stopWork();
void run(); void run();
bool handleDataBlock(SDRDaemonDataBlock& dataBlock); void handleDataBlock(SDRDaemonDataBlock& dataBlock);
private slots: private slots:
void handleData(); void handleData();