mirror of
https://github.com/f4exb/sdrangel.git
synced 2026-06-05 23:45:00 -04:00
Deep redesign: phase #4. Compiles
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include "ui_filesourcegui.h"
|
||||
#include "plugin/pluginapi.h"
|
||||
#include "gui/colormapper.h"
|
||||
#include "dsp/dspengine.h"
|
||||
#include "mainwindow.h"
|
||||
|
||||
#include "filesourcegui.h"
|
||||
@@ -49,8 +50,8 @@ FileSourceGui::FileSourceGui(PluginAPI* pluginAPI, QWidget* parent) :
|
||||
connect(&(m_pluginAPI->getMainWindow()->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick()));
|
||||
displaySettings();
|
||||
|
||||
m_sampleSource = new FileSourceInput(m_pluginAPI->getMainWindowMessageQueue(), m_pluginAPI->getMainWindow()->getMasterTimer());
|
||||
m_pluginAPI->setSampleSource(m_sampleSource);
|
||||
m_sampleSource = new FileSourceInput(m_pluginAPI->getMainWindow()->getMasterTimer());
|
||||
DSPEngine::instance()->setSource(m_sampleSource);
|
||||
}
|
||||
|
||||
FileSourceGui::~FileSourceGui()
|
||||
@@ -75,32 +76,14 @@ QString FileSourceGui::getName() const
|
||||
|
||||
void FileSourceGui::resetToDefaults()
|
||||
{
|
||||
m_generalSettings.resetToDefaults();
|
||||
m_settings.resetToDefaults();
|
||||
displaySettings();
|
||||
sendSettings();
|
||||
}
|
||||
|
||||
QByteArray FileSourceGui::serializeGeneral() const
|
||||
{
|
||||
return m_generalSettings.serialize();
|
||||
}
|
||||
|
||||
bool FileSourceGui::deserializeGeneral(const QByteArray&data)
|
||||
{
|
||||
if(m_generalSettings.deserialize(data)) {
|
||||
displaySettings();
|
||||
sendSettings();
|
||||
return true;
|
||||
} else {
|
||||
resetToDefaults();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
qint64 FileSourceGui::getCenterFrequency() const
|
||||
{
|
||||
return m_generalSettings.m_centerFrequency;
|
||||
return m_centerFrequency;
|
||||
}
|
||||
|
||||
QByteArray FileSourceGui::serialize() const
|
||||
@@ -120,28 +103,25 @@ bool FileSourceGui::deserialize(const QByteArray& data)
|
||||
}
|
||||
}
|
||||
|
||||
bool FileSourceGui::handleMessage(Message* message)
|
||||
bool FileSourceGui::handleMessage(const Message& message)
|
||||
{
|
||||
if(FileSourceInput::MsgReportFileSourceAcquisition::match(message))
|
||||
{
|
||||
m_acquisition = ((FileSourceInput::MsgReportFileSourceAcquisition*)message)->getAcquisition();
|
||||
m_acquisition = ((FileSourceInput::MsgReportFileSourceAcquisition&)message).getAcquisition();
|
||||
updateWithAcquisition();
|
||||
message->completed();
|
||||
return true;
|
||||
}
|
||||
else if(FileSourceInput::MsgReportFileSourceStreamData::match(message))
|
||||
{
|
||||
m_sampleRate = ((FileSourceInput::MsgReportFileSourceStreamData*)message)->getSampleRate();
|
||||
m_centerFrequency = ((FileSourceInput::MsgReportFileSourceStreamData*)message)->getCenterFrequency();
|
||||
m_startingTimeStamp = ((FileSourceInput::MsgReportFileSourceStreamData*)message)->getStartingTimeStamp();
|
||||
message->completed();
|
||||
m_sampleRate = ((FileSourceInput::MsgReportFileSourceStreamData&)message).getSampleRate();
|
||||
m_centerFrequency = ((FileSourceInput::MsgReportFileSourceStreamData&)message).getCenterFrequency();
|
||||
m_startingTimeStamp = ((FileSourceInput::MsgReportFileSourceStreamData&)message).getStartingTimeStamp();
|
||||
updateWithStreamData();
|
||||
return true;
|
||||
}
|
||||
else if(FileSourceInput::MsgReportFileSourceStreamTiming::match(message))
|
||||
{
|
||||
m_samplesCount = ((FileSourceInput::MsgReportFileSourceStreamTiming*)message)->getSamplesCount();
|
||||
message->completed();
|
||||
m_samplesCount = ((FileSourceInput::MsgReportFileSourceStreamTiming&)message).getSamplesCount();
|
||||
updateWithStreamTime();
|
||||
return true;
|
||||
}
|
||||
@@ -157,31 +137,25 @@ void FileSourceGui::displaySettings()
|
||||
|
||||
void FileSourceGui::sendSettings()
|
||||
{
|
||||
/*
|
||||
if(!m_updateTimer.isActive())
|
||||
m_updateTimer.start(100);
|
||||
*/
|
||||
}
|
||||
|
||||
void FileSourceGui::updateHardware()
|
||||
{
|
||||
/*
|
||||
FileSourceInput::MsgConfigureFileSource* message = FileSourceInput::MsgConfigureFileSource::create(m_generalSettings, m_settings);
|
||||
message->submit(m_pluginAPI->getDSPEngineMessageQueue());
|
||||
m_updateTimer.stop();*/
|
||||
}
|
||||
|
||||
void FileSourceGui::on_play_toggled(bool checked)
|
||||
{
|
||||
FileSourceInput::MsgConfigureFileSourceWork* message = FileSourceInput::MsgConfigureFileSourceWork::create(checked);
|
||||
message->submit(m_pluginAPI->getDSPEngineMessageQueue());
|
||||
m_sampleSource->getInputMessageQueue()->push(message);
|
||||
}
|
||||
|
||||
void FileSourceGui::on_showFileDialog_clicked(bool checked)
|
||||
{
|
||||
QString fileName = QFileDialog::getOpenFileName(this,
|
||||
tr("Open I/Q record file"), ".", tr("SDR I/Q Files (*.sdriq)"));
|
||||
if (fileName != "") {
|
||||
|
||||
if (fileName != "")
|
||||
{
|
||||
m_fileName = fileName;
|
||||
ui->fileNameText->setText(m_fileName);
|
||||
configureFileName();
|
||||
@@ -192,7 +166,7 @@ void FileSourceGui::configureFileName()
|
||||
{
|
||||
qDebug() << "FileSourceGui::configureFileName: " << m_fileName.toStdString().c_str();
|
||||
FileSourceInput::MsgConfigureFileSourceName* message = FileSourceInput::MsgConfigureFileSourceName::create(m_fileName);
|
||||
message->submit(m_pluginAPI->getDSPEngineMessageQueue());
|
||||
m_sampleSource->getInputMessageQueue()->push(message);
|
||||
}
|
||||
|
||||
void FileSourceGui::updateWithAcquisition()
|
||||
@@ -239,6 +213,6 @@ void FileSourceGui::tick()
|
||||
{
|
||||
if ((++m_tickCount & 0xf) == 0) {
|
||||
FileSourceInput::MsgConfigureFileSourceStreamTiming* message = FileSourceInput::MsgConfigureFileSourceStreamTiming::create();
|
||||
message->submit(m_pluginAPI->getDSPEngineMessageQueue());
|
||||
m_sampleSource->getInputMessageQueue()->push(message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,25 +33,22 @@ class FileSourceGui : public QWidget, public PluginGUI {
|
||||
|
||||
public:
|
||||
explicit FileSourceGui(PluginAPI* pluginAPI, QWidget* parent = NULL);
|
||||
~FileSourceGui();
|
||||
virtual ~FileSourceGui();
|
||||
void destroy();
|
||||
|
||||
void setName(const QString& name);
|
||||
QString getName() const;
|
||||
|
||||
void resetToDefaults();
|
||||
QByteArray serializeGeneral() const;
|
||||
bool deserializeGeneral(const QByteArray&data);
|
||||
qint64 getCenterFrequency() const;
|
||||
QByteArray serialize() const;
|
||||
bool deserialize(const QByteArray& data);
|
||||
bool handleMessage(Message* message);
|
||||
virtual bool handleMessage(const Message& message);
|
||||
|
||||
private:
|
||||
Ui::FileSourceGui* ui;
|
||||
|
||||
PluginAPI* m_pluginAPI;
|
||||
SampleSource::GeneralSettings m_generalSettings;
|
||||
FileSourceInput::Settings m_settings;
|
||||
QTimer m_updateTimer;
|
||||
std::vector<int> m_gains;
|
||||
|
||||
@@ -69,8 +69,7 @@ bool FileSourceInput::Settings::deserialize(const QByteArray& data)
|
||||
}
|
||||
}
|
||||
|
||||
FileSourceInput::FileSourceInput(MessageQueue* msgQueueToGUI, const QTimer& masterTimer) :
|
||||
SampleSource(msgQueueToGUI),
|
||||
FileSourceInput::FileSourceInput(const QTimer& masterTimer) :
|
||||
m_settings(),
|
||||
m_fileSourceThread(NULL),
|
||||
m_deviceDescription(),
|
||||
@@ -84,7 +83,7 @@ FileSourceInput::FileSourceInput(MessageQueue* msgQueueToGUI, const QTimer& mast
|
||||
|
||||
FileSourceInput::~FileSourceInput()
|
||||
{
|
||||
stopInput();
|
||||
stop();
|
||||
}
|
||||
|
||||
void FileSourceInput::openFileStream()
|
||||
@@ -105,19 +104,15 @@ void FileSourceInput::openFileStream()
|
||||
m_centerFrequency = header.centerFrequency;
|
||||
m_startingTimeStamp = header.startTimeStamp;
|
||||
|
||||
MsgReportFileSourceStreamData::create(m_sampleRate, m_centerFrequency, m_startingTimeStamp)->submit(m_guiMessageQueue); // file stream data
|
||||
MsgReportFileSourceStreamData *report = MsgReportFileSourceStreamData::create(m_sampleRate, m_centerFrequency, m_startingTimeStamp); // file stream data
|
||||
getOutputMessageQueue()->push(report);
|
||||
}
|
||||
|
||||
bool FileSourceInput::startInput(int device)
|
||||
bool FileSourceInput::start(int device)
|
||||
{
|
||||
QMutexLocker mutexLocker(&m_mutex);
|
||||
qDebug() << "FileSourceInput::startInput";
|
||||
|
||||
/*
|
||||
if (!m_ifstream.is_open()) {
|
||||
openFileStream();
|
||||
}*/
|
||||
|
||||
if (m_ifstream.tellg() != 0) {
|
||||
m_ifstream.clear();
|
||||
m_ifstream.seekg(0, std::ios::beg);
|
||||
@@ -132,7 +127,8 @@ bool FileSourceInput::startInput(int device)
|
||||
|
||||
if((m_fileSourceThread = new FileSourceThread(&m_ifstream, &m_sampleFifo)) == NULL) {
|
||||
qFatal("out of memory");
|
||||
goto failed;
|
||||
stop();
|
||||
return false;
|
||||
}
|
||||
|
||||
m_fileSourceThread->setSamplerate(m_sampleRate);
|
||||
@@ -144,29 +140,28 @@ bool FileSourceInput::startInput(int device)
|
||||
//applySettings(m_generalSettings, m_settings, true);
|
||||
qDebug("FileSourceInput::startInput: started");
|
||||
|
||||
MsgReportFileSourceAcquisition::create(true)->submit(m_guiMessageQueue); // acquisition on
|
||||
MsgReportFileSourceAcquisition *report = MsgReportFileSourceAcquisition::create(true); // acquisition on
|
||||
getOutputMessageQueue()->push(report);
|
||||
|
||||
return true;
|
||||
|
||||
failed:
|
||||
stopInput();
|
||||
return false;
|
||||
}
|
||||
|
||||
void FileSourceInput::stopInput()
|
||||
void FileSourceInput::stop()
|
||||
{
|
||||
qDebug() << "FileSourceInput::stopInput";
|
||||
qDebug() << "FileSourceInput::stop";
|
||||
QMutexLocker mutexLocker(&m_mutex);
|
||||
|
||||
if(m_fileSourceThread != NULL) {
|
||||
if(m_fileSourceThread != 0)
|
||||
{
|
||||
m_fileSourceThread->stopWork();
|
||||
delete m_fileSourceThread;
|
||||
m_fileSourceThread = NULL;
|
||||
m_fileSourceThread = 0;
|
||||
}
|
||||
|
||||
m_deviceDescription.clear();
|
||||
|
||||
MsgReportFileSourceAcquisition::create(false)->submit(m_guiMessageQueue); // acquisition off
|
||||
MsgReportFileSourceAcquisition *report = MsgReportFileSourceAcquisition::create(false); // acquisition off
|
||||
getOutputMessageQueue()->push(report);
|
||||
}
|
||||
|
||||
const QString& FileSourceInput::getDeviceDescription() const
|
||||
@@ -189,40 +184,52 @@ std::time_t FileSourceInput::getStartingTimeStamp() const
|
||||
return m_startingTimeStamp;
|
||||
}
|
||||
|
||||
bool FileSourceInput::handleMessage(Message* message)
|
||||
bool FileSourceInput::handleMessage(const Message& message)
|
||||
{
|
||||
if (MsgConfigureFileSourceName::match(message))
|
||||
{
|
||||
MsgConfigureFileSourceName* conf = (MsgConfigureFileSourceName*) message;
|
||||
m_fileName = conf->getFileName();
|
||||
MsgConfigureFileSourceName& conf = (MsgConfigureFileSourceName&) message;
|
||||
m_fileName = conf.getFileName();
|
||||
openFileStream();
|
||||
message->completed();
|
||||
return true;
|
||||
}
|
||||
else if (MsgConfigureFileSourceWork::match(message))
|
||||
{
|
||||
MsgConfigureFileSourceWork* conf = (MsgConfigureFileSourceWork*) message;
|
||||
bool working = conf->isWorking();
|
||||
MsgConfigureFileSourceWork& conf = (MsgConfigureFileSourceWork&) message;
|
||||
bool working = conf.isWorking();
|
||||
|
||||
if (m_fileSourceThread != 0)
|
||||
{
|
||||
if (working) {
|
||||
if (working)
|
||||
{
|
||||
m_fileSourceThread->startWork();
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fileSourceThread->stopWork();
|
||||
}
|
||||
|
||||
MsgReportFileSourceStreamTiming::create(m_fileSourceThread->getSamplesCount())->submit(m_guiMessageQueue);
|
||||
MsgReportFileSourceStreamTiming *report =
|
||||
MsgReportFileSourceStreamTiming::create(m_fileSourceThread->getSamplesCount());
|
||||
getOutputMessageQueue()->push(report);
|
||||
}
|
||||
message->completed();
|
||||
|
||||
return true;
|
||||
}
|
||||
else if (MsgConfigureFileSourceStreamTiming::match(message))
|
||||
{
|
||||
if (m_fileSourceThread != 0) {
|
||||
MsgReportFileSourceStreamTiming::create(m_fileSourceThread->getSamplesCount())->submit(m_guiMessageQueue);
|
||||
}else {
|
||||
MsgReportFileSourceStreamTiming::create(0)->submit(m_guiMessageQueue);
|
||||
MsgReportFileSourceStreamTiming *report;
|
||||
|
||||
if (m_fileSourceThread != 0)
|
||||
{
|
||||
report = MsgReportFileSourceStreamTiming::create(m_fileSourceThread->getSamplesCount());
|
||||
}
|
||||
else
|
||||
{
|
||||
report = MsgReportFileSourceStreamTiming::create(0);
|
||||
}
|
||||
|
||||
getOutputMessageQueue()->push(report);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -230,30 +237,38 @@ bool FileSourceInput::handleMessage(Message* message)
|
||||
}
|
||||
}
|
||||
|
||||
bool FileSourceInput::applySettings(const GeneralSettings& generalSettings, const Settings& settings, bool force)
|
||||
bool FileSourceInput::applySettings(const Settings& settings, bool force)
|
||||
{
|
||||
QMutexLocker mutexLocker(&m_mutex);
|
||||
bool wasRunning = false;
|
||||
|
||||
if((m_settings.m_fileName != settings.m_fileName) || force) {
|
||||
if((m_settings.m_fileName != settings.m_fileName) || force)
|
||||
{
|
||||
m_settings.m_fileName = settings.m_fileName;
|
||||
|
||||
if (m_fileSourceThread != 0) {
|
||||
if (m_fileSourceThread != 0)
|
||||
{
|
||||
wasRunning = m_fileSourceThread->isRunning();
|
||||
if (wasRunning) {
|
||||
|
||||
if (wasRunning)
|
||||
{
|
||||
m_fileSourceThread->stopWork();
|
||||
}
|
||||
}
|
||||
|
||||
if (m_ifstream.is_open()) {
|
||||
if (m_ifstream.is_open())
|
||||
{
|
||||
m_ifstream.close();
|
||||
}
|
||||
|
||||
openFileStream();
|
||||
|
||||
if (m_fileSourceThread != 0) {
|
||||
if (m_fileSourceThread != 0)
|
||||
{
|
||||
m_fileSourceThread->setSamplerate(m_sampleRate);
|
||||
if (wasRunning) {
|
||||
|
||||
if (wasRunning)
|
||||
{
|
||||
m_fileSourceThread->startWork();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,21 +41,18 @@ public:
|
||||
MESSAGE_CLASS_DECLARATION
|
||||
|
||||
public:
|
||||
const GeneralSettings& getGeneralSettings() const { return m_generalSettings; }
|
||||
const Settings& getSettings() const { return m_settings; }
|
||||
|
||||
static MsgConfigureFileSource* create(const GeneralSettings& generalSettings, const Settings& settings)
|
||||
static MsgConfigureFileSource* create(const Settings& settings)
|
||||
{
|
||||
return new MsgConfigureFileSource(generalSettings, settings);
|
||||
return new MsgConfigureFileSource(settings);
|
||||
}
|
||||
|
||||
private:
|
||||
GeneralSettings m_generalSettings;
|
||||
Settings m_settings;
|
||||
|
||||
MsgConfigureFileSource(const GeneralSettings& generalSettings, const Settings& settings) :
|
||||
MsgConfigureFileSource(const Settings& settings) :
|
||||
Message(),
|
||||
m_generalSettings(generalSettings),
|
||||
m_settings(settings)
|
||||
{ }
|
||||
};
|
||||
@@ -183,18 +180,19 @@ public:
|
||||
{ }
|
||||
};
|
||||
|
||||
FileSourceInput(MessageQueue* msgQueueToGUI, const QTimer& masterTimer);
|
||||
~FileSourceInput();
|
||||
FileSourceInput(const QTimer& masterTimer);
|
||||
virtual ~FileSourceInput();
|
||||
|
||||
bool startInput(int device);
|
||||
void stopInput();
|
||||
virtual bool init(const Message& message);
|
||||
virtual bool start(int device);
|
||||
virtual void stop();
|
||||
|
||||
const QString& getDeviceDescription() const;
|
||||
int getSampleRate() const;
|
||||
quint64 getCenterFrequency() const;
|
||||
virtual const QString& getDeviceDescription() const;
|
||||
virtual int getSampleRate() const;
|
||||
virtual quint64 getCenterFrequency() const;
|
||||
std::time_t getStartingTimeStamp() const;
|
||||
|
||||
bool handleMessage(Message* message);
|
||||
virtual bool handleMessage(const Message& message);
|
||||
|
||||
private:
|
||||
QMutex m_mutex;
|
||||
@@ -208,7 +206,7 @@ private:
|
||||
std::time_t m_startingTimeStamp;
|
||||
const QTimer& m_masterTimer;
|
||||
|
||||
bool applySettings(const GeneralSettings& generalSettings, const Settings& settings, bool force);
|
||||
bool applySettings(const Settings& settings, bool force);
|
||||
void openFileStream();
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user