mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-05-29 05:22:25 -04:00
SDRdaemon debug. Frequency now in kHz in the meta data
This commit is contained in:
parent
4dfc4701e5
commit
42b52a2d2c
@ -31,7 +31,7 @@ public:
|
|||||||
struct MetaData
|
struct MetaData
|
||||||
{
|
{
|
||||||
// critical data
|
// 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
|
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_sampleBytes; //!< MSB(4): indicators, LSB(4) number of bytes per sample
|
||||||
uint8_t m_sampleBits; //!< number of effective bits per sample
|
uint8_t m_sampleBits; //!< number of effective bits per sample
|
||||||
|
@ -38,10 +38,11 @@ SDRdaemonGui::SDRdaemonGui(PluginAPI* pluginAPI, QWidget* parent) :
|
|||||||
m_acquisition(false),
|
m_acquisition(false),
|
||||||
m_sampleRate(0),
|
m_sampleRate(0),
|
||||||
m_centerFrequency(0),
|
m_centerFrequency(0),
|
||||||
m_startingTimeStamp(0),
|
|
||||||
m_samplesCount(0),
|
m_samplesCount(0),
|
||||||
m_tickCount(0)
|
m_tickCount(0)
|
||||||
{
|
{
|
||||||
|
m_startingTimeStamp.tv_sec = 0;
|
||||||
|
m_startingTimeStamp.tv_usec = 0;
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold));
|
ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold));
|
||||||
ui->centerFrequency->setValueRange(7, 0, pow(10,7));
|
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_sampleRate = ((SDRdaemonInput::MsgReportSDRdaemonStreamData&)message).getSampleRate();
|
||||||
m_centerFrequency = ((SDRdaemonInput::MsgReportSDRdaemonStreamData&)message).getCenterFrequency();
|
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();
|
updateWithStreamData();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -183,11 +185,12 @@ void SDRdaemonGui::displaySettings()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
void SDRdaemonGui::on_play_toggled(bool checked)
|
void SDRdaemonGui::on_play_toggled(bool checked)
|
||||||
{
|
{
|
||||||
SDRdaemonInput::MsgConfigureSDRdaemonWork* message = SDRdaemonInput::MsgConfigureSDRdaemonWork::create(checked);
|
SDRdaemonInput::MsgConfigureSDRdaemonWork* message = SDRdaemonInput::MsgConfigureSDRdaemonWork::create(checked);
|
||||||
m_sampleSource->getInputMessageQueue()->push(message);
|
m_sampleSource->getInputMessageQueue()->push(message);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
void SDRdaemonGui::on_applyButton_clicked(bool checked)
|
void SDRdaemonGui::on_applyButton_clicked(bool checked)
|
||||||
{
|
{
|
||||||
@ -218,7 +221,7 @@ void SDRdaemonGui::updateWithAcquisition()
|
|||||||
|
|
||||||
void SDRdaemonGui::updateWithStreamData()
|
void SDRdaemonGui::updateWithStreamData()
|
||||||
{
|
{
|
||||||
ui->centerFrequency->setValue(m_centerFrequency/1000);
|
ui->centerFrequency->setValue(m_centerFrequency);
|
||||||
QString s = QString::number(m_sampleRate/1000.0, 'f', 0);
|
QString s = QString::number(m_sampleRate/1000.0, 'f', 0);
|
||||||
ui->sampleRateText->setText(tr("%1k").arg(s));
|
ui->sampleRateText->setText(tr("%1k").arg(s));
|
||||||
updateWithStreamTime(); // TODO: remove when time data is implemented
|
updateWithStreamTime(); // TODO: remove when time data is implemented
|
||||||
@ -226,6 +229,11 @@ void SDRdaemonGui::updateWithStreamData()
|
|||||||
|
|
||||||
void SDRdaemonGui::updateWithStreamTime()
|
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_sec = 0;
|
||||||
int t_msec = 0;
|
int t_msec = 0;
|
||||||
|
|
||||||
@ -244,7 +252,7 @@ void SDRdaemonGui::updateWithStreamTime()
|
|||||||
dt = dt.addSecs(t_sec);
|
dt = dt.addSecs(t_sec);
|
||||||
dt = dt.addMSecs(t_msec);
|
dt = dt.addMSecs(t_msec);
|
||||||
QString s_date = dt.toString("yyyyMMdd hh.mm.ss.zzz");
|
QString s_date = dt.toString("yyyyMMdd hh.mm.ss.zzz");
|
||||||
ui->absTimeText->setText(s_date);
|
ui->absTimeText->setText(s_date);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDRdaemonGui::tick()
|
void SDRdaemonGui::tick()
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#define INCLUDE_SDRDAEMONGUI_H
|
#define INCLUDE_SDRDAEMONGUI_H
|
||||||
|
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
#include <sys/time.h>
|
||||||
#include "plugin/plugingui.h"
|
#include "plugin/plugingui.h"
|
||||||
|
|
||||||
#include "sdrdaemoninput.h"
|
#include "sdrdaemoninput.h"
|
||||||
@ -55,7 +56,7 @@ private:
|
|||||||
bool m_acquisition;
|
bool m_acquisition;
|
||||||
int m_sampleRate;
|
int m_sampleRate;
|
||||||
quint64 m_centerFrequency;
|
quint64 m_centerFrequency;
|
||||||
std::time_t m_startingTimeStamp;
|
struct timeval m_startingTimeStamp;
|
||||||
int m_samplesCount;
|
int m_samplesCount;
|
||||||
std::size_t m_tickCount;
|
std::size_t m_tickCount;
|
||||||
|
|
||||||
@ -68,8 +69,6 @@ private:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void handleSourceMessages();
|
void handleSourceMessages();
|
||||||
void on_playLoop_toggled(bool checked);
|
|
||||||
void on_play_toggled(bool checked);
|
|
||||||
void on_applyButton_clicked(bool checked);
|
void on_applyButton_clicked(bool checked);
|
||||||
void tick();
|
void tick();
|
||||||
};
|
};
|
||||||
|
@ -176,6 +176,13 @@
|
|||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="rateTimeLayout">
|
<layout class="QHBoxLayout" name="rateTimeLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Rate: </string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="sampleRateText">
|
<widget class="QLabel" name="sampleRateText">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
|
@ -73,7 +73,7 @@ MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgReportSDRdaemonStreamTiming, Message
|
|||||||
SDRdaemonInput::SDRdaemonInput(const QTimer& masterTimer) :
|
SDRdaemonInput::SDRdaemonInput(const QTimer& masterTimer) :
|
||||||
m_address("127.0.0.1"),
|
m_address("127.0.0.1"),
|
||||||
m_port(9090),
|
m_port(9090),
|
||||||
m_SDRdaemonThread(NULL),
|
m_SDRdaemonThread(0),
|
||||||
m_deviceDescription(),
|
m_deviceDescription(),
|
||||||
m_sampleRate(0),
|
m_sampleRate(0),
|
||||||
m_centerFrequency(0),
|
m_centerFrequency(0),
|
||||||
@ -97,12 +97,12 @@ bool SDRdaemonInput::start(int device)
|
|||||||
QMutexLocker mutexLocker(&m_mutex);
|
QMutexLocker mutexLocker(&m_mutex);
|
||||||
qDebug() << "SDRdaemonInput::startInput";
|
qDebug() << "SDRdaemonInput::startInput";
|
||||||
|
|
||||||
if(!m_sampleFifo.setSize(96000 * 4)) {
|
if (!m_sampleFifo.setSize(96000 * 4)) {
|
||||||
qCritical("Could not allocate SampleFifo");
|
qCritical("Could not allocate SampleFifo");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((m_SDRdaemonThread = new SDRdaemonThread(&m_sampleFifo)) == NULL) {
|
if ((m_SDRdaemonThread = new SDRdaemonThread(&m_sampleFifo, getOutputMessageQueueToGUI())) == NULL) {
|
||||||
qFatal("out of memory");
|
qFatal("out of memory");
|
||||||
stop();
|
stop();
|
||||||
return false;
|
return false;
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
class SDRdaemonThread;
|
class SDRdaemonThread;
|
||||||
|
|
||||||
@ -113,23 +114,26 @@ public:
|
|||||||
public:
|
public:
|
||||||
int getSampleRate() const { return m_sampleRate; }
|
int getSampleRate() const { return m_sampleRate; }
|
||||||
quint64 getCenterFrequency() const { return m_centerFrequency; }
|
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:
|
protected:
|
||||||
int m_sampleRate;
|
int m_sampleRate;
|
||||||
quint64 m_centerFrequency;
|
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(),
|
Message(),
|
||||||
m_sampleRate(sampleRate),
|
m_sampleRate(sampleRate),
|
||||||
m_centerFrequency(centerFrequency),
|
m_centerFrequency(centerFrequency),
|
||||||
m_startingTimeStamp(startingTimeStamp)
|
m_tv_sec(tv_sec),
|
||||||
|
m_tv_usec(tv_usec)
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "dsp/samplefifo.h"
|
#include "dsp/samplefifo.h"
|
||||||
|
#include "util/messagequeue.h"
|
||||||
|
#include "sdrdaemoninput.h"
|
||||||
#include <QUdpSocket>
|
#include <QUdpSocket>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
@ -26,7 +28,7 @@
|
|||||||
const int SDRdaemonThread::m_rateDivider = 1000/SDRDAEMON_THROTTLE_MS;
|
const int SDRdaemonThread::m_rateDivider = 1000/SDRDAEMON_THROTTLE_MS;
|
||||||
const int SDRdaemonThread::m_udpPayloadSize = 512;
|
const int SDRdaemonThread::m_udpPayloadSize = 512;
|
||||||
|
|
||||||
SDRdaemonThread::SDRdaemonThread(SampleFifo* sampleFifo, QObject* parent) :
|
SDRdaemonThread::SDRdaemonThread(SampleFifo* sampleFifo, MessageQueue *outputMessageQueueToGUI, QObject* parent) :
|
||||||
QThread(parent),
|
QThread(parent),
|
||||||
m_running(false),
|
m_running(false),
|
||||||
m_dataSocket(0),
|
m_dataSocket(0),
|
||||||
@ -40,7 +42,9 @@ SDRdaemonThread::SDRdaemonThread(SampleFifo* sampleFifo, QObject* parent) :
|
|||||||
m_sampleFifo(sampleFifo),
|
m_sampleFifo(sampleFifo),
|
||||||
m_samplesCount(0),
|
m_samplesCount(0),
|
||||||
m_sdrDaemonBuffer(m_udpPayloadSize),
|
m_sdrDaemonBuffer(m_udpPayloadSize),
|
||||||
m_samplerate(0)
|
m_samplerate(0),
|
||||||
|
m_centerFrequency(0),
|
||||||
|
m_outputMessageQueueToGUI(outputMessageQueueToGUI)
|
||||||
{
|
{
|
||||||
m_udpBuf = new char[m_udpPayloadSize];
|
m_udpBuf = new char[m_udpPayloadSize];
|
||||||
m_dataSocket = new QUdpSocket(this);
|
m_dataSocket = new QUdpSocket(this);
|
||||||
@ -218,12 +222,30 @@ void SDRdaemonThread::dataReadyRead()
|
|||||||
|
|
||||||
if (m_sdrDaemonBuffer.readMeta(m_udpBuf, readBytes))
|
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);
|
setSamplerate(metaData.m_sampleRate);
|
||||||
m_samplerate = 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())
|
else if (m_sdrDaemonBuffer.isSync())
|
||||||
|
@ -32,12 +32,13 @@
|
|||||||
#define SDRDAEMON_THROTTLE_MS 50
|
#define SDRDAEMON_THROTTLE_MS 50
|
||||||
|
|
||||||
class QUdpSocket;
|
class QUdpSocket;
|
||||||
|
class MessageQueue;
|
||||||
|
|
||||||
class SDRdaemonThread : public QThread {
|
class SDRdaemonThread : public QThread {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SDRdaemonThread(SampleFifo* sampleFifo, QObject* parent = NULL);
|
SDRdaemonThread(SampleFifo* sampleFifo, MessageQueue *outputMessageQueueToGUI, QObject* parent = NULL);
|
||||||
~SDRdaemonThread();
|
~SDRdaemonThread();
|
||||||
|
|
||||||
void startWork();
|
void startWork();
|
||||||
@ -70,6 +71,8 @@ private:
|
|||||||
SDRdaemonBuffer m_sdrDaemonBuffer;
|
SDRdaemonBuffer m_sdrDaemonBuffer;
|
||||||
|
|
||||||
uint32_t m_samplerate;
|
uint32_t m_samplerate;
|
||||||
|
uint32_t m_centerFrequency;
|
||||||
|
MessageQueue *m_outputMessageQueueToGUI;
|
||||||
static const int m_rateDivider;
|
static const int m_rateDivider;
|
||||||
static const int m_udpPayloadSize;
|
static const int m_udpPayloadSize;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user