1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-09-04 22:27:53 -04:00

SDRdaemon plugin: removed references to file input

This commit is contained in:
f4exb 2016-02-01 08:24:14 +01:00
parent becf359db9
commit 1602525e0c
8 changed files with 136 additions and 358 deletions

View File

@ -193,6 +193,7 @@ See the v1.0.1 first official relase [release notes](https://github.com/f4exb/sd
<h2>To Do</h2> <h2>To Do</h2>
- UDP source plugin: add the possibility to launch an external command that will process the samples like a GNUradio headless flowgraph
- Allow the handling of more than one device at the same time. For Rx/Tx devices like the BladeRF Rx and Tx appear as two logical devices with two plugin instances and a common handler for the physical device services both plugins. This effectively opens Tx support. - Allow the handling of more than one device at the same time. For Rx/Tx devices like the BladeRF Rx and Tx appear as two logical devices with two plugin instances and a common handler for the physical device services both plugins. This effectively opens Tx support.
- Tx channels - Tx channels
- Possibility to connect channels for example Rx to Tx or single Rx channel to dual Rx channel supporting MI(MO) features like 360 degree polarization detection. - Possibility to connect channels for example Rx to Tx or single Rx channel to dual Rx channel supporting MI(MO) features like 360 degree polarization detection.
@ -202,7 +203,7 @@ See the v1.0.1 first official relase [release notes](https://github.com/f4exb/sd
- Headless mode based on a saved configuration in above human readable form - Headless mode based on a saved configuration in above human readable form
- Allow arbitrary sample rate for channelizers and demodulators (not multiple of 48 kHz). Prerequisite for polyphase channelizer - Allow arbitrary sample rate for channelizers and demodulators (not multiple of 48 kHz). Prerequisite for polyphase channelizer
- Implement polyphase channelizer - Implement polyphase channelizer
- Level calibration - Level calibration
- Even more demods ... - Even more demods ...
<h1>Developper's notes</h1> <h1>Developper's notes</h1>

View File

@ -305,7 +305,7 @@ void UDPSrcGUI::applySettings()
int udpPort = ui->udpPort->text().toInt(&ok); int udpPort = ui->udpPort->text().toInt(&ok);
if((!ok) || (udpPort < 1) || (udpPort > 65535)) if((!ok) || (udpPort < 1024) || (udpPort > 65535))
{ {
udpPort = 9999; udpPort = 9999;
} }

View File

@ -20,11 +20,13 @@
#include <QDateTime> #include <QDateTime>
#include <QString> #include <QString>
#include <QFileDialog> #include <QFileDialog>
#include <stdint.h>
#include "ui_sdrdaemongui.h" #include "ui_sdrdaemongui.h"
#include "plugin/pluginapi.h" #include "plugin/pluginapi.h"
#include "gui/colormapper.h" #include "gui/colormapper.h"
#include "dsp/dspengine.h" #include "dsp/dspengine.h"
#include "mainwindow.h" #include "mainwindow.h"
#include "util/simpleserializer.h"
#include "sdrdaemongui.h" #include "sdrdaemongui.h"
@ -32,10 +34,8 @@ SDRdaemonGui::SDRdaemonGui(PluginAPI* pluginAPI, QWidget* parent) :
QWidget(parent), QWidget(parent),
ui(new Ui::SDRdaemonGui), ui(new Ui::SDRdaemonGui),
m_pluginAPI(pluginAPI), m_pluginAPI(pluginAPI),
m_settings(),
m_sampleSource(NULL), m_sampleSource(NULL),
m_acquisition(false), m_acquisition(false),
m_fileName("..."),
m_sampleRate(0), m_sampleRate(0),
m_centerFrequency(0), m_centerFrequency(0),
m_startingTimeStamp(0), m_startingTimeStamp(0),
@ -45,14 +45,14 @@ SDRdaemonGui::SDRdaemonGui(PluginAPI* pluginAPI, QWidget* parent) :
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));
ui->fileNameText->setText(m_fileName);
connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware())); connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware()));
connect(&(m_pluginAPI->getMainWindow()->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick())); connect(&(m_pluginAPI->getMainWindow()->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick()));
displaySettings();
m_sampleSource = new SDRdaemonInput(m_pluginAPI->getMainWindow()->getMasterTimer()); m_sampleSource = new SDRdaemonInput(m_pluginAPI->getMainWindow()->getMasterTimer());
connect(m_sampleSource->getOutputMessageQueueToGUI(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages())); connect(m_sampleSource->getOutputMessageQueueToGUI(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages()));
DSPEngine::instance()->setSource(m_sampleSource); DSPEngine::instance()->setSource(m_sampleSource);
displaySettings();
} }
SDRdaemonGui::~SDRdaemonGui() SDRdaemonGui::~SDRdaemonGui()
@ -77,11 +77,54 @@ QString SDRdaemonGui::getName() const
void SDRdaemonGui::resetToDefaults() void SDRdaemonGui::resetToDefaults()
{ {
m_settings.resetToDefaults();
displaySettings(); displaySettings();
sendSettings();
} }
QByteArray SDRdaemonGui::serialize() const
{
bool ok;
SimpleSerializer s(1);
s.writeString(1, ui->address->text());
uint32_t uintval = ui->port->text().toInt(&ok);
if((!ok) || (uintval < 1024) || (uintval > 65535)) {
uintval = 9090;
}
s.writeU32(2, uintval);
return s.final();
}
bool SDRdaemonGui::deserialize(const QByteArray& data)
{
SimpleDeserializer d(data);
QString address;
uint32_t uintval;
quint16 port;
if(!d.isValid()) {
resetToDefaults();
return false;
}
if(d.getVersion() == 1) {
uint32_t uintval;
d.readString(1, &address, "127.0.0.1");
d.readU32(2, &uintval, 9090);
if ((uintval > 1024) && (uintval < 65536)) {
port = uintval;
} else {
port = 9090;
}
return true;
} else {
resetToDefaults();
return false;
}
ui->address->setText(address);
ui->port->setText(QString::number(port));
}
qint64 SDRdaemonGui::getCenterFrequency() const qint64 SDRdaemonGui::getCenterFrequency() const
{ {
return m_centerFrequency; return m_centerFrequency;
@ -91,24 +134,6 @@ void SDRdaemonGui::setCenterFrequency(qint64 centerFrequency)
{ {
m_centerFrequency = centerFrequency; m_centerFrequency = centerFrequency;
displaySettings(); displaySettings();
sendSettings();
}
QByteArray SDRdaemonGui::serialize() const
{
return m_settings.serialize();
}
bool SDRdaemonGui::deserialize(const QByteArray& data)
{
if(m_settings.deserialize(data)) {
displaySettings();
sendSettings();
return true;
} else {
resetToDefaults();
return false;
}
} }
bool SDRdaemonGui::handleMessage(const Message& message) bool SDRdaemonGui::handleMessage(const Message& message)
@ -158,45 +183,37 @@ void SDRdaemonGui::displaySettings()
{ {
} }
void SDRdaemonGui::sendSettings()
{
}
void SDRdaemonGui::updateHardware()
{
}
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_showFileDialog_clicked(bool checked) void SDRdaemonGui::on_applyButton_clicked(bool checked)
{ {
QString fileName = QFileDialog::getOpenFileName(this, configureUDPLink();
tr("Open I/Q record file"), ".", tr("SDR I/Q Files (*.sdriq)"));
if (fileName != "")
{
m_fileName = fileName;
ui->fileNameText->setText(m_fileName);
configureFileName();
}
} }
void SDRdaemonGui::configureFileName() void SDRdaemonGui::configureUDPLink()
{ {
qDebug() << "SDRdaemonGui::configureFileName: " << m_fileName.toStdString().c_str(); bool ok;
SDRdaemonInput::MsgConfigureSDRdaemonName* message = SDRdaemonInput::MsgConfigureSDRdaemonName::create(m_fileName); QString udpAddress = ui->address->text();
int udpPort = ui->port->text().toInt(&ok);
if((!ok) || (udpPort < 1024) || (udpPort > 65535))
{
udpPort = 9090;
}
qDebug() << "SDRdaemonGui::configureUDPLink: " << udpAddress.toStdString().c_str()
<< " : " << udpPort;
SDRdaemonInput::MsgConfigureSDRdaemonUDPLink* message = SDRdaemonInput::MsgConfigureSDRdaemonUDPLink::create(udpAddress, udpPort);
m_sampleSource->getInputMessageQueue()->push(message); m_sampleSource->getInputMessageQueue()->push(message);
} }
void SDRdaemonGui::updateWithAcquisition() void SDRdaemonGui::updateWithAcquisition()
{ {
ui->play->setEnabled(m_acquisition);
ui->play->setChecked(m_acquisition);
ui->showFileDialog->setEnabled(!m_acquisition);
} }
void SDRdaemonGui::updateWithStreamData() void SDRdaemonGui::updateWithStreamData()
@ -204,7 +221,6 @@ void SDRdaemonGui::updateWithStreamData()
ui->centerFrequency->setValue(m_centerFrequency/1000); ui->centerFrequency->setValue(m_centerFrequency/1000);
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));
ui->play->setEnabled(m_acquisition);
updateWithStreamTime(); // TODO: remove when time data is implemented updateWithStreamTime(); // TODO: remove when time data is implemented
} }
@ -222,7 +238,6 @@ void SDRdaemonGui::updateWithStreamTime()
t = t.addSecs(t_sec); t = t.addSecs(t_sec);
t = t.addMSecs(t_msec); t = t.addMSecs(t_msec);
QString s_time = t.toString("hh:mm:ss.zzz"); QString s_time = t.toString("hh:mm:ss.zzz");
ui->relTimeText->setText(s_time);
quint64 startingTimeStampMsec = m_startingTimeStamp * 1000; quint64 startingTimeStampMsec = m_startingTimeStamp * 1000;
QDateTime dt = QDateTime::fromMSecsSinceEpoch(startingTimeStampMsec); QDateTime dt = QDateTime::fromMSecsSinceEpoch(startingTimeStampMsec);

View File

@ -40,22 +40,19 @@ public:
QString getName() const; QString getName() const;
void resetToDefaults(); void resetToDefaults();
virtual qint64 getCenterFrequency() const;
virtual void setCenterFrequency(qint64 centerFrequency);
QByteArray serialize() const; QByteArray serialize() const;
bool deserialize(const QByteArray& data); bool deserialize(const QByteArray& data);
virtual qint64 getCenterFrequency() const;
virtual void setCenterFrequency(qint64 centerFrequency);
virtual bool handleMessage(const Message& message); virtual bool handleMessage(const Message& message);
private: private:
Ui::SDRdaemonGui* ui; Ui::SDRdaemonGui* ui;
PluginAPI* m_pluginAPI; PluginAPI* m_pluginAPI;
SDRdaemonInput::Settings m_settings;
QTimer m_updateTimer; QTimer m_updateTimer;
std::vector<int> m_gains;
SampleSource* m_sampleSource; SampleSource* m_sampleSource;
bool m_acquisition; bool m_acquisition;
QString m_fileName;
int m_sampleRate; int m_sampleRate;
quint64 m_centerFrequency; quint64 m_centerFrequency;
std::time_t m_startingTimeStamp; std::time_t m_startingTimeStamp;
@ -64,9 +61,7 @@ private:
void displaySettings(); void displaySettings();
void displayTime(); void displayTime();
void sendSettings(); void configureUDPLink();
void updateHardware();
void configureFileName();
void updateWithAcquisition(); void updateWithAcquisition();
void updateWithStreamData(); void updateWithStreamData();
void updateWithStreamTime(); void updateWithStreamTime();
@ -75,7 +70,7 @@ private slots:
void handleSourceMessages(); void handleSourceMessages();
void on_playLoop_toggled(bool checked); void on_playLoop_toggled(bool checked);
void on_play_toggled(bool checked); void on_play_toggled(bool checked);
void on_showFileDialog_clicked(bool checked); void on_applyButton_clicked(bool checked);
void tick(); void tick();
}; };

View File

@ -147,7 +147,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="addressApplyButton"> <widget class="QPushButton" name="applyButton">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>30</width> <width>30</width>
@ -235,108 +235,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="decimLayout">
<item>
<widget class="QLabel" name="label_decim">
<property name="text">
<string>Dec.</string>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="decim">
<property name="toolTip">
<string>Decimation factor</string>
</property>
<property name="maximum">
<number>6</number>
</property>
<property name="pageStep">
<number>1</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="decimText">
<property name="text">
<string>1</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="decimRate">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>0k</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="fileSelectionLayout">
<item>
<widget class="QPushButton" name="showFileDialog">
<property name="minimumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="toolTip">
<string>Open file</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../sdrbase/resources/res.qrc">
<normaloff>:/preset-load.png</normaloff>:/preset-load.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="fileNameText">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>File currently opened</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<widget class="Line" name="line_file"> <widget class="Line" name="line_file">
<property name="orientation"> <property name="orientation">
@ -345,104 +243,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="Line" name="line_rate"> <layout class="QHBoxLayout" name="statusLayout"/>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="playControllLayout">
<item>
<widget class="ButtonSwitch" name="playLoop">
<property name="toolTip">
<string>Play in a loop</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../sdrbase/resources/res.qrc">
<normaloff>:/playloop.png</normaloff>:/playloop.png</iconset>
</property>
<property name="iconSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="ButtonSwitch" name="play">
<property name="toolTip">
<string>Stopped / Play / Pause</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../sdrbase/resources/res.qrc">
<normaloff>:/play.png</normaloff>
<normalon>:/pause.png</normalon>
<disabledoff>:/stop.png</disabledoff>
<disabledon>:/stop.png</disabledon>
<activeoff>:/play.png</activeoff>
<activeon>:/pause.png</activeon>
<selectedoff>:/play.png</selectedoff>
<selectedon>:/pause.png</selectedon>:/play.png</iconset>
</property>
<property name="iconSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="Line" name="relTimeLine">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="relTimeText">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Record time from start</string>
</property>
<property name="text">
<string>00:00:00.000</string>
</property>
</widget>
</item>
</layout>
</item> </item>
</layout> </layout>
</widget> </widget>
@ -453,11 +254,6 @@
<header>gui/valuedial.h</header> <header>gui/valuedial.h</header>
<container>1</container> <container>1</container>
</customwidget> </customwidget>
<customwidget>
<class>ButtonSwitch</class>
<extends>QToolButton</extends>
<header>gui/buttonswitch.h</header>
</customwidget>
</customwidgets> </customwidgets>
<resources> <resources>
<include location="../../../sdrbase/resources/res.qrc"/> <include location="../../../sdrbase/resources/res.qrc"/>

View File

@ -27,55 +27,18 @@
#include "sdrdaemoninput.h" #include "sdrdaemoninput.h"
#include "sdrdaemonthread.h" #include "sdrdaemonthread.h"
MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgConfigureSDRdaemon, Message) MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgConfigureSDRdaemonUDPLink, Message)
MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgConfigureSDRdaemonName, Message)
MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgConfigureSDRdaemonWork, Message) MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgConfigureSDRdaemonWork, Message)
MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgConfigureSDRdaemonStreamTiming, Message) MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgConfigureSDRdaemonStreamTiming, Message)
MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgReportSDRdaemonAcquisition, Message) MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgReportSDRdaemonAcquisition, Message)
MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgReportSDRdaemonStreamData, Message) MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgReportSDRdaemonStreamData, Message)
MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgReportSDRdaemonStreamTiming, Message) MESSAGE_CLASS_DEFINITION(SDRdaemonInput::MsgReportSDRdaemonStreamTiming, Message)
SDRdaemonInput::Settings::Settings() :
m_fileName("./test.sdriq")
{
}
void SDRdaemonInput::Settings::resetToDefaults()
{
m_fileName = "./test.sdriq";
}
QByteArray SDRdaemonInput::Settings::serialize() const
{
SimpleSerializer s(1);
s.writeString(1, m_fileName);
return s.final();
}
bool SDRdaemonInput::Settings::deserialize(const QByteArray& data)
{
SimpleDeserializer d(data);
if(!d.isValid()) {
resetToDefaults();
return false;
}
if(d.getVersion() == 1) {
int intval;
d.readString(1, &m_fileName, "./test.sdriq");
return true;
} else {
resetToDefaults();
return false;
}
}
SDRdaemonInput::SDRdaemonInput(const QTimer& masterTimer) : SDRdaemonInput::SDRdaemonInput(const QTimer& masterTimer) :
m_settings(), m_address("127.0.0.1"),
m_port(9090),
m_SDRdaemonThread(NULL), m_SDRdaemonThread(NULL),
m_deviceDescription(), m_deviceDescription(),
m_fileName("..."),
m_sampleRate(0), m_sampleRate(0),
m_centerFrequency(0), m_centerFrequency(0),
m_startingTimeStamp(0), m_startingTimeStamp(0),
@ -164,10 +127,10 @@ std::time_t SDRdaemonInput::getStartingTimeStamp() const
bool SDRdaemonInput::handleMessage(const Message& message) bool SDRdaemonInput::handleMessage(const Message& message)
{ {
if (MsgConfigureSDRdaemonName::match(message)) if (MsgConfigureSDRdaemonUDPLink::match(message))
{ {
MsgConfigureSDRdaemonName& conf = (MsgConfigureSDRdaemonName&) message; MsgConfigureSDRdaemonUDPLink& conf = (MsgConfigureSDRdaemonUDPLink&) message;
m_fileName = conf.getFileName(); updateLink(conf.getAddress(), conf.getPort());
return true; return true;
} }
else if (MsgConfigureSDRdaemonWork::match(message)) else if (MsgConfigureSDRdaemonWork::match(message))
@ -210,14 +173,50 @@ bool SDRdaemonInput::handleMessage(const Message& message)
} }
} }
bool SDRdaemonInput::applySettings(const Settings& settings, bool force) void SDRdaemonInput::updateLink(const QString& address, quint16 port)
{ {
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
bool wasRunning = false; bool wasRunning = false;
if((m_settings.m_fileName != settings.m_fileName) || force) if ((m_address != address) || (m_port != port))
{ {
m_settings.m_fileName = settings.m_fileName; if (m_SDRdaemonThread != 0)
{
wasRunning = m_SDRdaemonThread->isRunning();
if (wasRunning)
{
m_SDRdaemonThread->stopWork();
}
}
if (m_SDRdaemonThread != 0)
{
m_SDRdaemonThread->updateLink(address, port);
if (wasRunning)
{
m_SDRdaemonThread->startWork();
}
}
m_address = address;
m_port = port;
qDebug() << "SDRdaemonInput::updateLink:"
<< " address: " << m_address.toStdString().c_str()
<< "port: " << m_port;
}
}
void SDRdaemonInput:: updateSampleRate(int sampleRate)
{
QMutexLocker mutexLocker(&m_mutex);
bool wasRunning = false;
if (m_sampleRate != sampleRate)
{
m_sampleRate = sampleRate;
if (m_SDRdaemonThread != 0) if (m_SDRdaemonThread != 0)
{ {
@ -242,11 +241,7 @@ bool SDRdaemonInput::applySettings(const Settings& settings, bool force)
DSPSignalNotification *notif = new DSPSignalNotification(m_sampleRate, m_centerFrequency); DSPSignalNotification *notif = new DSPSignalNotification(m_sampleRate, m_centerFrequency);
DSPEngine::instance()->getInputMessageQueue()->push(notif); DSPEngine::instance()->getInputMessageQueue()->push(notif);
qDebug() << "SDRdaemonInput::applySettings:" qDebug() << "SDRdaemonInput::updateSampleRate:"
<< " center freq: " << m_centerFrequency << " Hz" << " sample rate: " << m_sampleRate;
<< " sample rate: " << m_sampleRate
<< " Unix timestamp: " << m_startingTimeStamp;
} }
return true;
} }

View File

@ -27,52 +27,26 @@ class SDRdaemonThread;
class SDRdaemonInput : public SampleSource { class SDRdaemonInput : public SampleSource {
public: public:
struct Settings { class MsgConfigureSDRdaemonUDPLink : public Message {
QString m_fileName;
Settings();
void resetToDefaults();
QByteArray serialize() const;
bool deserialize(const QByteArray& data);
};
class MsgConfigureSDRdaemon : public Message {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
public: public:
const Settings& getSettings() const { return m_settings; } const QString& getAddress() const { return m_address; }
quint16 getPort() const { return m_port; }
static MsgConfigureSDRdaemon* create(const Settings& settings) static MsgConfigureSDRdaemonUDPLink* create(const QString& address, quint16 port)
{ {
return new MsgConfigureSDRdaemon(settings); return new MsgConfigureSDRdaemonUDPLink(address, port);
} }
private: private:
Settings m_settings; QString m_address;
quint16 m_port;
MsgConfigureSDRdaemon(const Settings& settings) : MsgConfigureSDRdaemonUDPLink(const QString& address, quint16 port) :
Message(), Message(),
m_settings(settings) m_address(address),
{ } m_port(port)
};
class MsgConfigureSDRdaemonName : public Message {
MESSAGE_CLASS_DECLARATION
public:
const QString& getFileName() const { return m_fileName; }
static MsgConfigureSDRdaemonName* create(const QString& fileName)
{
return new MsgConfigureSDRdaemonName(fileName);
}
private:
QString m_fileName;
MsgConfigureSDRdaemonName(const QString& fileName) :
Message(),
m_fileName(fileName)
{ } { }
}; };
@ -195,16 +169,17 @@ public:
private: private:
QMutex m_mutex; QMutex m_mutex;
Settings m_settings; QString m_address;
quint16 m_port;
SDRdaemonThread* m_SDRdaemonThread; SDRdaemonThread* m_SDRdaemonThread;
QString m_deviceDescription; QString m_deviceDescription;
QString m_fileName;
int m_sampleRate; int m_sampleRate;
quint64 m_centerFrequency; quint64 m_centerFrequency;
std::time_t m_startingTimeStamp; std::time_t m_startingTimeStamp;
const QTimer& m_masterTimer; const QTimer& m_masterTimer;
bool applySettings(const Settings& settings, bool force); void updateLink(const QString& address, quint16 port);
void updateSampleRate(int sampleRate);
}; };
#endif // INCLUDE_SDRDAEMONINPUT_H #endif // INCLUDE_SDRDAEMONINPUT_H

View File

@ -43,6 +43,7 @@ public:
void startWork(); void startWork();
void stopWork(); void stopWork();
void setSamplerate(uint32_t samplerate); void setSamplerate(uint32_t samplerate);
void updateLink(const QString& address, quint16 port);
bool isRunning() const { return m_running; } bool isRunning() const { return m_running; }
std::size_t getSamplesCount() const { return m_samplesCount; } std::size_t getSamplesCount() const { return m_samplesCount; }