From 42b52a2d2c7e42f009ff625c3f36a1f5db369f9e Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 14 Feb 2016 20:01:46 +0100 Subject: [PATCH] SDRdaemon debug. Frequency now in kHz in the meta data --- .../samplesource/sdrdaemon/sdrdaemonbuffer.h | 2 +- .../samplesource/sdrdaemon/sdrdaemongui.cpp | 18 +++++++--- plugins/samplesource/sdrdaemon/sdrdaemongui.h | 5 ++- .../samplesource/sdrdaemon/sdrdaemongui.ui | 7 ++++ .../samplesource/sdrdaemon/sdrdaemoninput.cpp | 6 ++-- .../samplesource/sdrdaemon/sdrdaemoninput.h | 16 +++++---- .../sdrdaemon/sdrdaemonthread.cpp | 34 +++++++++++++++---- .../samplesource/sdrdaemon/sdrdaemonthread.h | 5 ++- 8 files changed, 68 insertions(+), 25 deletions(-) diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h b/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h index 1c223b31e..95c527030 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h +++ b/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h @@ -31,7 +31,7 @@ public: struct MetaData { // critical data - uint64_t m_centerFrequency; //!< center frequency in Hz + uint32_t m_centerFrequency; //!< center frequency in kHz uint32_t m_sampleRate; //!< sample rate in Hz uint8_t m_sampleBytes; //!< MSB(4): indicators, LSB(4) number of bytes per sample uint8_t m_sampleBits; //!< number of effective bits per sample diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp b/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp index 9c7205bc4..3f5ebe5ea 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp +++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp @@ -38,10 +38,11 @@ SDRdaemonGui::SDRdaemonGui(PluginAPI* pluginAPI, QWidget* parent) : m_acquisition(false), m_sampleRate(0), m_centerFrequency(0), - m_startingTimeStamp(0), m_samplesCount(0), m_tickCount(0) { + m_startingTimeStamp.tv_sec = 0; + m_startingTimeStamp.tv_usec = 0; ui->setupUi(this); ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold)); ui->centerFrequency->setValueRange(7, 0, pow(10,7)); @@ -148,7 +149,8 @@ bool SDRdaemonGui::handleMessage(const Message& message) { m_sampleRate = ((SDRdaemonInput::MsgReportSDRdaemonStreamData&)message).getSampleRate(); m_centerFrequency = ((SDRdaemonInput::MsgReportSDRdaemonStreamData&)message).getCenterFrequency(); - m_startingTimeStamp = ((SDRdaemonInput::MsgReportSDRdaemonStreamData&)message).getStartingTimeStamp(); + m_startingTimeStamp.tv_sec = ((SDRdaemonInput::MsgReportSDRdaemonStreamData&)message).get_tv_sec(); + m_startingTimeStamp.tv_usec = ((SDRdaemonInput::MsgReportSDRdaemonStreamData&)message).get_tv_usec(); updateWithStreamData(); return true; } @@ -183,11 +185,12 @@ void SDRdaemonGui::displaySettings() { } +/* void SDRdaemonGui::on_play_toggled(bool checked) { SDRdaemonInput::MsgConfigureSDRdaemonWork* message = SDRdaemonInput::MsgConfigureSDRdaemonWork::create(checked); m_sampleSource->getInputMessageQueue()->push(message); -} +}*/ void SDRdaemonGui::on_applyButton_clicked(bool checked) { @@ -218,7 +221,7 @@ void SDRdaemonGui::updateWithAcquisition() void SDRdaemonGui::updateWithStreamData() { - ui->centerFrequency->setValue(m_centerFrequency/1000); + ui->centerFrequency->setValue(m_centerFrequency); QString s = QString::number(m_sampleRate/1000.0, 'f', 0); ui->sampleRateText->setText(tr("%1k").arg(s)); updateWithStreamTime(); // TODO: remove when time data is implemented @@ -226,6 +229,11 @@ void SDRdaemonGui::updateWithStreamData() void SDRdaemonGui::updateWithStreamTime() { + quint64 startingTimeStampMsec = (m_startingTimeStamp.tv_sec * 1000) + (m_startingTimeStamp.tv_usec / 1000); + QDateTime dt = QDateTime::fromMSecsSinceEpoch(startingTimeStampMsec); + QString s_date = dt.toString("yyyyMMdd hh.mm.ss.zzz"); + ui->absTimeText->setText(s_date); + /* int t_sec = 0; int t_msec = 0; @@ -244,7 +252,7 @@ void SDRdaemonGui::updateWithStreamTime() dt = dt.addSecs(t_sec); dt = dt.addMSecs(t_msec); QString s_date = dt.toString("yyyyMMdd hh.mm.ss.zzz"); - ui->absTimeText->setText(s_date); + ui->absTimeText->setText(s_date);*/ } void SDRdaemonGui::tick() diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.h b/plugins/samplesource/sdrdaemon/sdrdaemongui.h index d192453f7..8ed697b8d 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemongui.h +++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.h @@ -18,6 +18,7 @@ #define INCLUDE_SDRDAEMONGUI_H #include +#include #include "plugin/plugingui.h" #include "sdrdaemoninput.h" @@ -55,7 +56,7 @@ private: bool m_acquisition; int m_sampleRate; quint64 m_centerFrequency; - std::time_t m_startingTimeStamp; + struct timeval m_startingTimeStamp; int m_samplesCount; std::size_t m_tickCount; @@ -68,8 +69,6 @@ private: private slots: void handleSourceMessages(); - void on_playLoop_toggled(bool checked); - void on_play_toggled(bool checked); void on_applyButton_clicked(bool checked); void tick(); }; diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.ui b/plugins/samplesource/sdrdaemon/sdrdaemongui.ui index c6e778eeb..77943b0a6 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemongui.ui +++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.ui @@ -176,6 +176,13 @@ + + + + Rate: + + + diff --git a/plugins/samplesource/sdrdaemon/sdrdaemoninput.cpp b/plugins/samplesource/sdrdaemon/sdrdaemoninput.cpp index 3b172c93e..5aab189cb 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemoninput.cpp +++ b/plugins/samplesource/sdrdaemon/sdrdaemoninput.cpp @@ -73,7 +73,7 @@ MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgReportSDRdaemonStreamTiming, Message SDRdaemonInput::SDRdaemonInput(const QTimer& masterTimer) : m_address("127.0.0.1"), m_port(9090), - m_SDRdaemonThread(NULL), + m_SDRdaemonThread(0), m_deviceDescription(), m_sampleRate(0), m_centerFrequency(0), @@ -97,12 +97,12 @@ bool SDRdaemonInput::start(int device) QMutexLocker mutexLocker(&m_mutex); qDebug() << "SDRdaemonInput::startInput"; - if(!m_sampleFifo.setSize(96000 * 4)) { + if (!m_sampleFifo.setSize(96000 * 4)) { qCritical("Could not allocate SampleFifo"); return false; } - if((m_SDRdaemonThread = new SDRdaemonThread(&m_sampleFifo)) == NULL) { + if ((m_SDRdaemonThread = new SDRdaemonThread(&m_sampleFifo, getOutputMessageQueueToGUI())) == NULL) { qFatal("out of memory"); stop(); return false; diff --git a/plugins/samplesource/sdrdaemon/sdrdaemoninput.h b/plugins/samplesource/sdrdaemon/sdrdaemoninput.h index 5666ce8e9..461a0190f 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemoninput.h +++ b/plugins/samplesource/sdrdaemon/sdrdaemoninput.h @@ -22,6 +22,7 @@ #include #include #include +#include class SDRdaemonThread; @@ -113,23 +114,26 @@ public: public: int getSampleRate() const { return m_sampleRate; } quint64 getCenterFrequency() const { return m_centerFrequency; } - std::time_t getStartingTimeStamp() const { return m_startingTimeStamp; } + uint32_t get_tv_sec() const { return m_tv_sec; } + uint32_t get_tv_usec() const { return m_tv_usec; } - static MsgReportSDRdaemonStreamData* create(int sampleRate, quint64 centerFrequency, std::time_t startingTimeStamp) + static MsgReportSDRdaemonStreamData* create(int sampleRate, quint64 centerFrequency, uint32_t tv_sec, uint32_t tv_usec) { - return new MsgReportSDRdaemonStreamData(sampleRate, centerFrequency, startingTimeStamp); + return new MsgReportSDRdaemonStreamData(sampleRate, centerFrequency, tv_sec, tv_usec); } protected: int m_sampleRate; quint64 m_centerFrequency; - std::time_t m_startingTimeStamp; + uint32_t m_tv_sec; + uint32_t m_tv_usec; - MsgReportSDRdaemonStreamData(int sampleRate, quint64 centerFrequency, std::time_t startingTimeStamp) : + MsgReportSDRdaemonStreamData(int sampleRate, quint64 centerFrequency, uint32_t tv_sec, uint32_t tv_usec) : Message(), m_sampleRate(sampleRate), m_centerFrequency(centerFrequency), - m_startingTimeStamp(startingTimeStamp) + m_tv_sec(tv_sec), + m_tv_usec(tv_usec) { } }; diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonthread.cpp b/plugins/samplesource/sdrdaemon/sdrdaemonthread.cpp index a3c360cd7..f27da2ad3 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemonthread.cpp +++ b/plugins/samplesource/sdrdaemon/sdrdaemonthread.cpp @@ -18,6 +18,8 @@ #include #include #include "dsp/samplefifo.h" +#include "util/messagequeue.h" +#include "sdrdaemoninput.h" #include #include @@ -26,7 +28,7 @@ const int SDRdaemonThread::m_rateDivider = 1000/SDRDAEMON_THROTTLE_MS; const int SDRdaemonThread::m_udpPayloadSize = 512; -SDRdaemonThread::SDRdaemonThread(SampleFifo* sampleFifo, QObject* parent) : +SDRdaemonThread::SDRdaemonThread(SampleFifo* sampleFifo, MessageQueue *outputMessageQueueToGUI, QObject* parent) : QThread(parent), m_running(false), m_dataSocket(0), @@ -40,7 +42,9 @@ SDRdaemonThread::SDRdaemonThread(SampleFifo* sampleFifo, QObject* parent) : m_sampleFifo(sampleFifo), m_samplesCount(0), m_sdrDaemonBuffer(m_udpPayloadSize), - m_samplerate(0) + m_samplerate(0), + m_centerFrequency(0), + m_outputMessageQueueToGUI(outputMessageQueueToGUI) { m_udpBuf = new char[m_udpPayloadSize]; m_dataSocket = new QUdpSocket(this); @@ -218,12 +222,30 @@ void SDRdaemonThread::dataReadyRead() if (m_sdrDaemonBuffer.readMeta(m_udpBuf, readBytes)) { - uint32_t sampleRate = m_sdrDaemonBuffer.getCurrentMeta().m_sampleRate; + const SDRdaemonBuffer::MetaData& metaData = m_sdrDaemonBuffer.getCurrentMeta(); + bool change = false; - if (m_samplerate != sampleRate) + if (m_samplerate != metaData.m_sampleRate) { - setSamplerate(sampleRate); - m_samplerate = sampleRate; + setSamplerate(metaData.m_sampleRate); + m_samplerate = metaData.m_sampleRate; + change = true; + } + + if (m_centerFrequency != metaData.m_centerFrequency) + { + m_centerFrequency = metaData.m_centerFrequency; + change = true; + } + + if (change) + { + SDRdaemonInput::MsgReportSDRdaemonStreamData *report = SDRdaemonInput::MsgReportSDRdaemonStreamData::create( + metaData.m_sampleRate, + metaData.m_centerFrequency, + metaData.m_tv_sec, + metaData.m_tv_usec); + m_outputMessageQueueToGUI->push(report); } } else if (m_sdrDaemonBuffer.isSync()) diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonthread.h b/plugins/samplesource/sdrdaemon/sdrdaemonthread.h index 35e9fb9ca..a3e0fa4c3 100644 --- a/plugins/samplesource/sdrdaemon/sdrdaemonthread.h +++ b/plugins/samplesource/sdrdaemon/sdrdaemonthread.h @@ -32,12 +32,13 @@ #define SDRDAEMON_THROTTLE_MS 50 class QUdpSocket; +class MessageQueue; class SDRdaemonThread : public QThread { Q_OBJECT public: - SDRdaemonThread(SampleFifo* sampleFifo, QObject* parent = NULL); + SDRdaemonThread(SampleFifo* sampleFifo, MessageQueue *outputMessageQueueToGUI, QObject* parent = NULL); ~SDRdaemonThread(); void startWork(); @@ -70,6 +71,8 @@ private: SDRdaemonBuffer m_sdrDaemonBuffer; uint32_t m_samplerate; + uint32_t m_centerFrequency; + MessageQueue *m_outputMessageQueueToGUI; static const int m_rateDivider; static const int m_udpPayloadSize;