From 54c89f16aaafecc166f3e2802011a1c77df69b5c Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 6 Sep 2018 05:21:43 +0200 Subject: [PATCH] DaemonSink (7) --- plugins/channelrx/daemonsink/daemonsink.cpp | 10 ++++++++-- plugins/channelrx/daemonsink/daemonsink.h | 3 +++ .../channelrx/daemonsink/daemonsinkthread.cpp | 18 ++++++++++-------- .../channelrx/daemonsink/daemonsinkthread.h | 5 ++++- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/plugins/channelrx/daemonsink/daemonsink.cpp b/plugins/channelrx/daemonsink/daemonsink.cpp index 56168e657..959ff950b 100644 --- a/plugins/channelrx/daemonsink/daemonsink.cpp +++ b/plugins/channelrx/daemonsink/daemonsink.cpp @@ -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_dataPort = m_dataPort; - qDebug("DaemonSink::feed: m_dataBlock: %p m_dataQueue.sz: %d", m_dataBlock, m_dataQueue.size()); - m_dataQueue.push(m_dataBlock); + //qDebug("DaemonSink::feed: m_dataBlock: %p m_dataQueue.sz: %d", m_dataBlock, m_dataQueue.size()); + emit dataBlockAvailable(m_dataBlock); + //m_dataQueue.push(m_dataBlock); m_dataBlock = new SDRDaemonDataBlock(); // create a new one immediately m_dataBlockMutex.unlock(); @@ -211,6 +212,11 @@ void DaemonSink::start() } m_sinkThread = new DaemonSinkThread(&m_dataQueue); + connect(this, + SIGNAL(dataBlockAvailable(SDRDaemonDataBlock *)), + m_sinkThread, + SLOT(processDataBlock(SDRDaemonDataBlock *)), + Qt::QueuedConnection); m_sinkThread->startStop(true); m_running = true; } diff --git a/plugins/channelrx/daemonsink/daemonsink.h b/plugins/channelrx/daemonsink/daemonsink.h index 9d0ddb005..97b3b1eb8 100644 --- a/plugins/channelrx/daemonsink/daemonsink.h +++ b/plugins/channelrx/daemonsink/daemonsink.h @@ -123,6 +123,9 @@ public: static const QString m_channelIdURI; static const QString m_channelId; +signals: + void dataBlockAvailable(SDRDaemonDataBlock *dataBlock); + private: DeviceSourceAPI *m_deviceAPI; ThreadedBasebandSampleSink* m_threadedChannelizer; diff --git a/plugins/channelrx/daemonsink/daemonsinkthread.cpp b/plugins/channelrx/daemonsink/daemonsinkthread.cpp index 319076a08..fc31692a0 100644 --- a/plugins/channelrx/daemonsink/daemonsinkthread.cpp +++ b/plugins/channelrx/daemonsink/daemonsinkthread.cpp @@ -89,7 +89,13 @@ void DaemonSinkThread::run() 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_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; int nbBlocksFEC = dataBlock.m_txControlBlock.m_nbBlocksFEC; 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); uint16_t dataPort = dataBlock.m_txControlBlock.m_dataPort; SDRDaemonSuperBlock *txBlockx = dataBlock.m_superBlocks; @@ -139,7 +145,6 @@ bool DaemonSinkThread::handleDataBlock(SDRDaemonDataBlock& dataBlock) { qWarning("SDRDaemonChannelSinkThread::handleDataBlock: CM256 encode failed. No transmission."); // TODO: send without FEC changing meta data to set indication of no FEC - return true; } // Merge FEC with data to transmit @@ -161,7 +166,6 @@ bool DaemonSinkThread::handleDataBlock(SDRDaemonDataBlock& dataBlock) } dataBlock.m_txControlBlock.m_processed = true; - return true; } void DaemonSinkThread::handleData() @@ -170,10 +174,8 @@ void DaemonSinkThread::handleData() while (m_running && ((dataBlock = m_dataQueue->pop()) != 0)) { - if (handleDataBlock(*dataBlock)) - { - delete dataBlock; - } + handleDataBlock(*dataBlock); + delete dataBlock; } } diff --git a/plugins/channelrx/daemonsink/daemonsinkthread.h b/plugins/channelrx/daemonsink/daemonsinkthread.h index 451f74720..88995c53d 100644 --- a/plugins/channelrx/daemonsink/daemonsinkthread.h +++ b/plugins/channelrx/daemonsink/daemonsinkthread.h @@ -63,6 +63,9 @@ public: void startStop(bool start); +public slots: + void processDataBlock(SDRDaemonDataBlock *dataBlock); + private: QMutex m_startWaitMutex; QWaitCondition m_startWaiter; @@ -81,7 +84,7 @@ private: void stopWork(); void run(); - bool handleDataBlock(SDRDaemonDataBlock& dataBlock); + void handleDataBlock(SDRDaemonDataBlock& dataBlock); private slots: void handleData();