From f6058d2b1212fae41dd3b27b6ddfa5643dbaa226 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 4 Sep 2017 22:24:32 +0200 Subject: [PATCH] Airspy input: moved FileRecord out of the GUI --- plugins/samplesource/airspy/airspygui.cpp | 21 +++++-------------- plugins/samplesource/airspy/airspygui.h | 2 -- plugins/samplesource/airspy/airspyinput.cpp | 23 +++++++++++++++++++++ plugins/samplesource/airspy/airspyinput.h | 21 +++++++++++++++++++ 4 files changed, 49 insertions(+), 18 deletions(-) diff --git a/plugins/samplesource/airspy/airspygui.cpp b/plugins/samplesource/airspy/airspygui.cpp index 653d739f8..fa1eb7ceb 100644 --- a/plugins/samplesource/airspy/airspygui.cpp +++ b/plugins/samplesource/airspy/airspygui.cpp @@ -54,19 +54,11 @@ AirspyGui::AirspyGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : m_rates = ((AirspyInput*) m_sampleSource)->getSampleRates(); displaySampleRates(); connect(m_sampleSource->getOutputMessageQueueToGUI(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages())); - - char recFileNameCStr[30]; - sprintf(recFileNameCStr, "test_%d.sdriq", m_deviceAPI->getDeviceUID()); - m_fileSink = new FileRecord(std::string(recFileNameCStr)); - m_deviceAPI->addSink(m_fileSink); - connect(m_deviceAPI->getDeviceOutputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleDSPMessages()), Qt::QueuedConnection); } AirspyGui::~AirspyGui() { - m_deviceAPI->removeSink(m_fileSink); - delete m_fileSink; delete m_sampleSource; // Valgrind memcheck delete ui; } @@ -153,7 +145,6 @@ void AirspyGui::handleDSPMessages() m_deviceCenterFrequency = notif->getCenterFrequency(); qDebug("AirspyGui::handleDSPMessages: SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency()); updateSampleRateAndFrequency(); - m_fileSink->handleMessage(*notif); // forward to file sink delete message; } @@ -365,16 +356,14 @@ void AirspyGui::on_startStop_toggled(bool checked) void AirspyGui::on_record_toggled(bool checked) { - if (checked) - { + if (checked) { ui->record->setStyleSheet("QToolButton { background-color : red; }"); - m_fileSink->startRecording(); - } - else - { + } else { ui->record->setStyleSheet("QToolButton { background:rgb(79,79,79); }"); - m_fileSink->stopRecording(); } + + AirspyInput::MsgFileRecord* message = AirspyInput::MsgFileRecord::create(checked); + m_sampleSource->getInputMessageQueue()->push(message); } void AirspyGui::updateHardware() diff --git a/plugins/samplesource/airspy/airspygui.h b/plugins/samplesource/airspy/airspygui.h index 665233628..05200c32b 100644 --- a/plugins/samplesource/airspy/airspygui.h +++ b/plugins/samplesource/airspy/airspygui.h @@ -26,7 +26,6 @@ #define AIRSPY_MAX_DEVICE (32) class DeviceSourceAPI; -class FileRecord; namespace Ui { class AirspyGui; @@ -62,7 +61,6 @@ private: QTimer m_statusTimer; std::vector m_rates; DeviceSampleSource* m_sampleSource; - FileRecord *m_fileSink; //!< File sink to record device I/Q output int m_sampleRate; quint64 m_deviceCenterFrequency; //!< Center frequency in device int m_lastEngineState; diff --git a/plugins/samplesource/airspy/airspyinput.cpp b/plugins/samplesource/airspy/airspyinput.cpp index e51c16344..2d8b781f8 100644 --- a/plugins/samplesource/airspy/airspyinput.cpp +++ b/plugins/samplesource/airspy/airspyinput.cpp @@ -22,12 +22,14 @@ #include "airspyinput.h" #include +#include #include "dsp/dspcommands.h" #include "dsp/dspengine.h" #include "airspysettings.h" #include "airspythread.h" MESSAGE_CLASS_DEFINITION(AirspyInput::MsgConfigureAirspy, Message) +MESSAGE_CLASS_DEFINITION(AirspyInput::MsgFileRecord, Message) //MESSAGE_CLASS_DEFINITION(AirspyInput::MsgReportAirspy, Message) AirspyInput::AirspyInput(DeviceSourceAPI *deviceAPI) : @@ -39,11 +41,18 @@ AirspyInput::AirspyInput(DeviceSourceAPI *deviceAPI) : m_running(false) { openDevice(); + + char recFileNameCStr[30]; + sprintf(recFileNameCStr, "test_%d.sdriq", m_deviceAPI->getDeviceUID()); + m_fileSink = new FileRecord(std::string(recFileNameCStr)); + m_deviceAPI->addSink(m_fileSink); } AirspyInput::~AirspyInput() { if (m_running) stop(); + m_deviceAPI->removeSink(m_fileSink); + delete m_fileSink; closeDevice(); } @@ -220,6 +229,19 @@ bool AirspyInput::handleMessage(const Message& message) return true; } + else if (MsgFileRecord::match(message)) + { + MsgFileRecord& conf = (MsgFileRecord&) message; + qDebug() << "RTLSDRInput::handleMessage: MsgFileRecord: " << conf.getStartStop(); + + if (conf.getStartStop()) { + m_fileSink->startRecording(); + } else { + m_fileSink->stopRecording(); + } + + return true; + } else { return false; @@ -479,6 +501,7 @@ bool AirspyInput::applySettings(const AirspySettings& settings, bool force) int sampleRate = devSampleRate/(1<getDeviceInputMessageQueue()->push(notif); + m_fileSink->handleMessage(*notif); // forward to file sink } return true; diff --git a/plugins/samplesource/airspy/airspyinput.h b/plugins/samplesource/airspy/airspyinput.h index 846c3795f..805d4e028 100644 --- a/plugins/samplesource/airspy/airspyinput.h +++ b/plugins/samplesource/airspy/airspyinput.h @@ -25,6 +25,7 @@ class DeviceSourceAPI; class AirspyThread; +class FileRecord; class AirspyInput : public DeviceSampleSource { public: @@ -48,6 +49,25 @@ public: { } }; + class MsgFileRecord : public Message { + MESSAGE_CLASS_DECLARATION + + public: + bool getStartStop() const { return m_startStop; } + + static MsgFileRecord* create(bool startStop) { + return new MsgFileRecord(startStop); + } + + protected: + bool m_startStop; + + MsgFileRecord(bool startStop) : + Message(), + m_startStop(startStop) + { } + }; + // class MsgReportAirspy : public Message { // MESSAGE_CLASS_DECLARATION // @@ -96,6 +116,7 @@ private: QString m_deviceDescription; std::vector m_sampleRates; bool m_running; + FileRecord *m_fileSink; //!< File sink to record device I/Q output }; #endif // INCLUDE_AIRSPYINPUT_H