diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp index 4174444d0..1f6d2980d 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp @@ -53,12 +53,6 @@ RTLSDRGui::RTLSDRGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : displaySettings(); 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); queryDeviceReport(); // will reply with MsgReportRTLSDR to report gain list @@ -66,8 +60,6 @@ RTLSDRGui::RTLSDRGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : RTLSDRGui::~RTLSDRGui() { - m_deviceAPI->removeSink(m_fileSink); - delete m_fileSink; delete ui; delete m_sampleSource; } @@ -169,7 +161,6 @@ void RTLSDRGui::handleDSPMessages() m_deviceCenterFrequency = notif->getCenterFrequency(); qDebug("RTLSDRGui::handleDSPMessages: SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency()); updateSampleRateAndFrequency(); - m_fileSink->handleMessage(*notif); // forward to file sink delete message; } @@ -329,16 +320,14 @@ void RTLSDRGui::on_startStop_toggled(bool checked) void RTLSDRGui::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(); } + + RTLSDRInput::MsgFileRecord* message = RTLSDRInput::MsgFileRecord::create(checked); + m_sampleSource->getInputMessageQueue()->push(message); } void RTLSDRGui::queryDeviceReport() diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.h b/plugins/samplesource/rtlsdr/rtlsdrgui.h index bce1298ea..775d0a0af 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.h +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.h @@ -24,7 +24,6 @@ #include "rtlsdrinput.h" class DeviceSourceAPI; -class FileRecord; namespace Ui { class RTLSDRGui; @@ -58,7 +57,6 @@ private: QTimer m_statusTimer; std::vector m_gains; 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/rtlsdr/rtlsdrinput.cpp b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp index 3d04d2c77..976fa3273 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp @@ -26,10 +26,12 @@ #include "rtlsdrgui.h" #include "dsp/dspcommands.h" #include "dsp/dspengine.h" +#include "dsp/filerecord.h" MESSAGE_CLASS_DEFINITION(RTLSDRInput::MsgConfigureRTLSDR, Message) MESSAGE_CLASS_DEFINITION(RTLSDRInput::MsgQueryRTLSDR, Message) MESSAGE_CLASS_DEFINITION(RTLSDRInput::MsgReportRTLSDR, Message) +MESSAGE_CLASS_DEFINITION(RTLSDRInput::MsgFileRecord, Message) RTLSDRInput::RTLSDRInput(DeviceSourceAPI *deviceAPI) : m_deviceAPI(deviceAPI), @@ -40,11 +42,18 @@ RTLSDRInput::RTLSDRInput(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); } RTLSDRInput::~RTLSDRInput() { if (m_running) stop(); + m_deviceAPI->removeSink(m_fileSink); + delete m_fileSink; closeDevice(); } @@ -246,6 +255,17 @@ bool RTLSDRInput::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(); + } + } else { return false; @@ -400,6 +420,7 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, bool force) int sampleRate = m_settings.m_devSampleRate/(1<getDeviceInputMessageQueue()->push(notif); + m_fileSink->handleMessage(*notif); // forward to file sink } return true; diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.h b/plugins/samplesource/rtlsdr/rtlsdrinput.h index 42bb765b5..0fc21b17e 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.h +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.h @@ -26,6 +26,7 @@ class DeviceSourceAPI; class RTLSDRThread; +class FileRecord; class RTLSDRInput : public DeviceSampleSource { public: @@ -84,6 +85,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) + { } + }; + RTLSDRInput(DeviceSourceAPI *deviceAPI); virtual ~RTLSDRInput(); @@ -101,6 +121,7 @@ public: private: DeviceSourceAPI *m_deviceAPI; + FileRecord *m_fileSink; //!< File sink to record device I/Q output QMutex m_mutex; RTLSDRSettings m_settings; rtlsdr_dev_t* m_dev;