1
0
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:
f4exb
2015-08-17 08:29:34 +02:00
parent b5f2475fbf
commit a6a7145f3d
77 changed files with 1816 additions and 1429 deletions
@@ -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();
};