From 790a62cba3b0915bf485ded97482c12f412d05d8 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 27 Aug 2018 02:41:06 +0200 Subject: [PATCH] SDRdaemon: channel source make updates from meta data --- sdrdaemon/channel/sdrdaemonchannelsink.cpp | 2 +- sdrdaemon/channel/sdrdaemonchannelsource.cpp | 28 +++++++++++++++++-- .../channel/sdrdaemonchannelsourcethread.cpp | 8 ------ sdrdaemon/channel/sdrdaemondatablock.h | 2 +- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/sdrdaemon/channel/sdrdaemonchannelsink.cpp b/sdrdaemon/channel/sdrdaemonchannelsink.cpp index a10d6a771..23a7b5e03 100644 --- a/sdrdaemon/channel/sdrdaemonchannelsink.cpp +++ b/sdrdaemon/channel/sdrdaemonchannelsink.cpp @@ -134,7 +134,7 @@ void SDRDaemonChannelSink::feed(const SampleVector::const_iterator& begin, const qDebug() << "SDRDaemonChannelSink::feed: meta: " << "|" << metaData.m_centerFrequency << ":" << metaData.m_sampleRate - << ":" << (int) metaData.m_sampleBytes + << ":" << (int) (metaData.m_sampleBytes & 0xF) << ":" << (int) metaData.m_sampleBits << "|" << (int) metaData.m_nbOriginalBlocks << ":" << (int) metaData.m_nbFECBlocks diff --git a/sdrdaemon/channel/sdrdaemonchannelsource.cpp b/sdrdaemon/channel/sdrdaemonchannelsource.cpp index cc1a5af32..511b6f49d 100644 --- a/sdrdaemon/channel/sdrdaemonchannelsource.cpp +++ b/sdrdaemon/channel/sdrdaemonchannelsource.cpp @@ -28,6 +28,7 @@ #include "util/simpleserializer.h" #include "dsp/threadedbasebandsamplesource.h" #include "dsp/upchannelizer.h" +#include "dsp/devicesamplesink.h" #include "device/devicesinkapi.h" #include "sdrdaemonchannelsource.h" #include "channel/sdrdaemonchannelsourcethread.h" @@ -105,7 +106,19 @@ void SDRDaemonChannelSource::stop() bool SDRDaemonChannelSource::handleMessage(const Message& cmd __attribute__((unused))) { - if (MsgConfigureSDRDaemonChannelSource::match(cmd)) + if (UpChannelizer::MsgChannelizerNotification::match(cmd)) + { + UpChannelizer::MsgChannelizerNotification& notif = (UpChannelizer::MsgChannelizerNotification&) cmd; + qDebug() << "SDRDaemonChannelSource::handleMessage: UpChannelizer::MsgChannelizerNotification:" + << " basebandSampleRate: " << notif.getBasebandSampleRate() + << " outputSampleRate: " << notif.getSampleRate() + << " inputFrequencyOffset: " << notif.getFrequencyOffset(); + + //applyChannelSettings(notif.getBasebandSampleRate(), notif.getSampleRate(), notif.getFrequencyOffset()); + + return true; + } + else if (MsgConfigureSDRDaemonChannelSource::match(cmd)) { MsgConfigureSDRDaemonChannelSource& cfg = (MsgConfigureSDRDaemonChannelSource&) cmd; qDebug() << "SDRDaemonChannelSource::handleMessage: MsgConfigureSDRDaemonChannelSource"; @@ -242,8 +255,17 @@ bool SDRDaemonChannelSource::handleDataBlock(SDRDaemonDataBlock& dataBlock) if (crc32.checksum() == metaData->m_crc32) { - if (!(m_currentMeta == *metaData)) { + if (!(m_currentMeta == *metaData)) + { printMeta("SDRDaemonChannelSource::handleDataBlock", metaData); + + if (m_currentMeta.m_centerFrequency != metaData->m_centerFrequency) { + m_deviceAPI->getSampleSink()->setCenterFrequency(metaData->m_centerFrequency); + } + + if (m_currentMeta.m_sampleRate != metaData->m_sampleRate) { + m_channelizer->configure(m_channelizer->getInputMessageQueue(), metaData->m_sampleRate, 0); + } } m_currentMeta = *metaData; @@ -273,7 +295,7 @@ void SDRDaemonChannelSource::handleData() void SDRDaemonChannelSource::printMeta(const QString& header, SDRDaemonMetaDataFEC *metaData) { - qDebug() << header << ": " + qDebug().noquote() << header << ": " << "|" << metaData->m_centerFrequency << ":" << metaData->m_sampleRate << ":" << (int) (metaData->m_sampleBytes & 0xF) diff --git a/sdrdaemon/channel/sdrdaemonchannelsourcethread.cpp b/sdrdaemon/channel/sdrdaemonchannelsourcethread.cpp index 533ace7d2..3b2d55998 100644 --- a/sdrdaemon/channel/sdrdaemonchannelsourcethread.cpp +++ b/sdrdaemon/channel/sdrdaemonchannelsourcethread.cpp @@ -184,14 +184,6 @@ void SDRDaemonChannelSourceThread::readPendingDatagrams() } m_dataBlocks[dataBlockIndex]->m_rxControlBlock.m_blockCount++; - -// // if enough data blocks to decode push into data queue -// if (m_dataBlocks[dataBlockIndex]->m_rxControlBlock.m_blockCount == SDRDaemonNbOrginalBlocks) -// { -// //qDebug("SDRDaemonChannelSourceThread::readPendingDatagrams: push frame %u", superBlock.m_header.m_frameIndex); -// m_dataQueue->push(m_dataBlocks[dataBlockIndex]); -// m_dataBlocks[dataBlockIndex] = new SDRDaemonDataBlock(); -// } } else { diff --git a/sdrdaemon/channel/sdrdaemondatablock.h b/sdrdaemon/channel/sdrdaemondatablock.h index af7a635b0..31dfe66ae 100644 --- a/sdrdaemon/channel/sdrdaemondatablock.h +++ b/sdrdaemon/channel/sdrdaemondatablock.h @@ -37,7 +37,7 @@ struct SDRDaemonMetaDataFEC { uint32_t m_centerFrequency; //!< 4 center frequency in kHz uint32_t m_sampleRate; //!< 8 sample rate in Hz - uint8_t m_sampleBytes; //!< 9 number of bytes per sample (2 or 3) + uint8_t m_sampleBytes; //!< 9 4 LSB: number of bytes per sample (2 or 3) uint8_t m_sampleBits; //!< 10 number of effective bits per sample (deprecated) uint8_t m_nbOriginalBlocks; //!< 11 number of blocks with original (protected) data uint8_t m_nbFECBlocks; //!< 12 number of blocks carrying FEC