diff --git a/doc/img/FileSink_plugin.png b/doc/img/FileOutput_plugin.png similarity index 100% rename from doc/img/FileSink_plugin.png rename to doc/img/FileOutput_plugin.png diff --git a/doc/img/FileSink_plugin.xcf b/doc/img/FileOutput_plugin.xcf similarity index 100% rename from doc/img/FileSink_plugin.xcf rename to doc/img/FileOutput_plugin.xcf diff --git a/doc/model/SDRAngel.mdj b/doc/model/SDRAngel.mdj index 35413fb75..13dac666c 100644 --- a/doc/model/SDRAngel.mdj +++ b/doc/model/SDRAngel.mdj @@ -23742,7 +23742,7 @@ "width": 153, "height": 38, "autoResize": false, - "text": "FileSink does not use this sample FIFO", + "text": "FileOutput does not use this sample FIFO", "wordWrap": true }, { @@ -23788,7 +23788,7 @@ "width": 153, "height": 77, "autoResize": false, - "text": "Does the upsampling from baseband FIFO to device FIFO. FileSink pulls from baseband FIFO directly", + "text": "Does the upsampling from baseband FIFO to device FIFO. FileOutput pulls from baseband FIFO directly", "wordWrap": true }, { diff --git a/plugins/channeltx/filesource/filesourcesource.cpp b/plugins/channeltx/filesource/filesourcesource.cpp index 8afc9d05e..202272c74 100644 --- a/plugins/channeltx/filesource/filesourcesource.cpp +++ b/plugins/channeltx/filesource/filesourcesource.cpp @@ -235,7 +235,7 @@ void FileSourceSource::seekFileStream(int seekMillis) { quint64 seekPoint = ((m_recordLength * seekMillis) / 1000) * m_fileSampleRate; m_samplesCount = seekPoint; - seekPoint *= (m_sampleSize == 24 ? 8 : 4); // + sizeof(FileSink::Header) + seekPoint *= (m_sampleSize == 24 ? 8 : 4); // + sizeof(FileRecord::Header) m_ifstream.clear(); m_ifstream.seekg(seekPoint + sizeof(FileRecord::Header), std::ios::beg); } diff --git a/plugins/samplesink/CMakeLists.txt b/plugins/samplesink/CMakeLists.txt index 829f955b7..0e421c3a9 100644 --- a/plugins/samplesink/CMakeLists.txt +++ b/plugins/samplesink/CMakeLists.txt @@ -1,7 +1,7 @@ project(samplesink) add_subdirectory(testsink) -add_subdirectory(filesink) +add_subdirectory(fileoutput) add_subdirectory(localoutput) if(CM256CC_FOUND) diff --git a/plugins/samplesink/fileoutput/CMakeLists.txt b/plugins/samplesink/fileoutput/CMakeLists.txt new file mode 100644 index 000000000..f0504eec4 --- /dev/null +++ b/plugins/samplesink/fileoutput/CMakeLists.txt @@ -0,0 +1,55 @@ +project(fileoutput) + +set(fileoutput_SOURCES + fileoutput.cpp + fileoutputplugin.cpp + fileoutputsettings.cpp + fileoutputworker.cpp +) + +set(fileoutput_HEADERS + fileoutput.h + fileoutputplugin.h + fileoutputsettings.h + fileoutputworker.h +) + +include_directories( + ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client +) + +if(NOT SERVER_MODE) + set(fileoutput_SOURCES + ${fileoutput_SOURCES} + fileoutputgui.cpp + fileoutputgui.ui + ) + set(fileoutput_HEADERS + ${fileoutput_HEADERS} + fileoutputgui.h + ) + + set(TARGET_NAME outputfileoutput) + set(TARGET_LIB "Qt5::Widgets") + set(TARGET_LIB_GUI "sdrgui") + set(INSTALL_FOLDER ${INSTALL_PLUGINS_DIR}) +else() + set(TARGET_NAME outputfileoutputsrv) + set(TARGET_LIB "") + set(TARGET_LIB_GUI "") + set(INSTALL_FOLDER ${INSTALL_PLUGINSSRV_DIR}) +endif() + +add_library(${TARGET_NAME} SHARED + ${fileoutput_SOURCES} +) + +target_link_libraries(${TARGET_NAME} + Qt5::Core + ${TARGET_LIB} + sdrbase + ${TARGET_LIB_GUI} + swagger +) + +install(TARGETS ${TARGET_NAME} DESTINATION ${INSTALL_FOLDER}) diff --git a/plugins/samplesink/filesink/filesinkoutput.cpp b/plugins/samplesink/fileoutput/fileoutput.cpp similarity index 59% rename from plugins/samplesink/filesink/filesinkoutput.cpp rename to plugins/samplesink/fileoutput/fileoutput.cpp index 62f194ea8..c4d2a86f4 100644 --- a/plugins/samplesink/filesink/filesinkoutput.cpp +++ b/plugins/samplesink/fileoutput/fileoutput.cpp @@ -28,22 +28,22 @@ #include "device/deviceapi.h" -#include "filesinkoutput.h" -#include "filesinkworker.h" +#include "fileoutput.h" +#include "fileoutputworker.h" -MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSink, Message) -MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgStartStop, Message) -MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSinkName, Message) -MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSinkWork, Message) -MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSinkStreamTiming, Message) -MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgReportFileSinkGeneration, Message) -MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgReportFileSinkStreamTiming, Message) +MESSAGE_CLASS_DEFINITION(FileOutput::MsgConfigureFileOutput, Message) +MESSAGE_CLASS_DEFINITION(FileOutput::MsgStartStop, Message) +MESSAGE_CLASS_DEFINITION(FileOutput::MsgConfigureFileOutputName, Message) +MESSAGE_CLASS_DEFINITION(FileOutput::MsgConfigureFileOutputWork, Message) +MESSAGE_CLASS_DEFINITION(FileOutput::MsgConfigureFileOutputStreamTiming, Message) +MESSAGE_CLASS_DEFINITION(FileOutput::MsgReportFileOutputGeneration, Message) +MESSAGE_CLASS_DEFINITION(FileOutput::MsgReportFileOutputStreamTiming, Message) -FileSinkOutput::FileSinkOutput(DeviceAPI *deviceAPI) : +FileOutput::FileOutput(DeviceAPI *deviceAPI) : m_deviceAPI(deviceAPI), m_settings(), - m_fileSinkWorker(nullptr), - m_deviceDescription("FileSink"), + m_fileOutputWorker(nullptr), + m_deviceDescription("FileOutput"), m_fileName("./test.sdriq"), m_startingTimeStamp(0), m_masterTimer(deviceAPI->getMasterTimer()) @@ -51,17 +51,17 @@ FileSinkOutput::FileSinkOutput(DeviceAPI *deviceAPI) : m_deviceAPI->setNbSinkStreams(1); } -FileSinkOutput::~FileSinkOutput() +FileOutput::~FileOutput() { stop(); } -void FileSinkOutput::destroy() +void FileOutput::destroy() { delete this; } -void FileSinkOutput::openFileStream() +void FileOutput::openFileStream() { if (m_ofstream.is_open()) { m_ofstream.close(); @@ -79,51 +79,51 @@ void FileSinkOutput::openFileStream() FileRecord::writeHeader(m_ofstream, header); - qDebug() << "FileSinkOutput::openFileStream: " << m_fileName.toStdString().c_str(); + qDebug() << "FileOutput::openFileStream: " << m_fileName.toStdString().c_str(); } -void FileSinkOutput::init() +void FileOutput::init() { applySettings(m_settings, true); } -bool FileSinkOutput::start() +bool FileOutput::start() { QMutexLocker mutexLocker(&m_mutex); - qDebug() << "FileSinkOutput::start"; + qDebug() << "FileOutput::start"; openFileStream(); - m_fileSinkWorker = new FileSinkWorker(&m_ofstream, &m_sampleSourceFifo); - m_fileSinkWorker->moveToThread(&m_fileSinkWorkerThread); - m_fileSinkWorker->setSamplerate(m_settings.m_sampleRate); - m_fileSinkWorker->setLog2Interpolation(m_settings.m_log2Interp); - m_fileSinkWorker->connectTimer(m_masterTimer); + m_fileOutputWorker = new FileOutputWorker(&m_ofstream, &m_sampleSourceFifo); + m_fileOutputWorker->moveToThread(&m_fileOutputWorkerThread); + m_fileOutputWorker->setSamplerate(m_settings.m_sampleRate); + m_fileOutputWorker->setLog2Interpolation(m_settings.m_log2Interp); + m_fileOutputWorker->connectTimer(m_masterTimer); startWorker(); mutexLocker.unlock(); //applySettings(m_generalSettings, m_settings, true); - qDebug("FileSinkOutput::start: started"); + qDebug("FileOutput::start: started"); if (getMessageQueueToGUI()) { - MsgReportFileSinkGeneration *report = MsgReportFileSinkGeneration::create(true); // acquisition on + MsgReportFileOutputGeneration *report = MsgReportFileOutputGeneration::create(true); // acquisition on getMessageQueueToGUI()->push(report); } return true; } -void FileSinkOutput::stop() +void FileOutput::stop() { qDebug() << "FileSourceInput::stop"; QMutexLocker mutexLocker(&m_mutex); - if (m_fileSinkWorker) + if (m_fileOutputWorker) { stopWorker(); - delete m_fileSinkWorker; - m_fileSinkWorker = nullptr; + delete m_fileOutputWorker; + m_fileOutputWorker = nullptr; } if (m_ofstream.is_open()) { @@ -132,30 +132,30 @@ void FileSinkOutput::stop() if (getMessageQueueToGUI()) { - MsgReportFileSinkGeneration *report = MsgReportFileSinkGeneration::create(false); // acquisition off + MsgReportFileOutputGeneration *report = MsgReportFileOutputGeneration::create(false); // acquisition off getMessageQueueToGUI()->push(report); } } -void FileSinkOutput::startWorker() +void FileOutput::startWorker() { - m_fileSinkWorker->startWork(); - m_fileSinkWorkerThread.start(); + m_fileOutputWorker->startWork(); + m_fileOutputWorkerThread.start(); } -void FileSinkOutput::stopWorker() +void FileOutput::stopWorker() { - m_fileSinkWorker->stopWork(); - m_fileSinkWorkerThread.quit(); - m_fileSinkWorkerThread.wait(); + m_fileOutputWorker->stopWork(); + m_fileOutputWorkerThread.quit(); + m_fileOutputWorkerThread.wait(); } -QByteArray FileSinkOutput::serialize() const +QByteArray FileOutput::serialize() const { return m_settings.serialize(); } -bool FileSinkOutput::deserialize(const QByteArray& data) +bool FileOutput::deserialize(const QByteArray& data) { bool success = true; @@ -165,58 +165,58 @@ bool FileSinkOutput::deserialize(const QByteArray& data) success = false; } - MsgConfigureFileSink* message = MsgConfigureFileSink::create(m_settings, true); + MsgConfigureFileOutput* message = MsgConfigureFileOutput::create(m_settings, true); m_inputMessageQueue.push(message); if (m_guiMessageQueue) { - MsgConfigureFileSink* messageToGUI = MsgConfigureFileSink::create(m_settings, true); + MsgConfigureFileOutput* messageToGUI = MsgConfigureFileOutput::create(m_settings, true); m_guiMessageQueue->push(messageToGUI); } return success; } -const QString& FileSinkOutput::getDeviceDescription() const +const QString& FileOutput::getDeviceDescription() const { return m_deviceDescription; } -int FileSinkOutput::getSampleRate() const +int FileOutput::getSampleRate() const { return m_settings.m_sampleRate; } -quint64 FileSinkOutput::getCenterFrequency() const +quint64 FileOutput::getCenterFrequency() const { return m_settings.m_centerFrequency; } -void FileSinkOutput::setCenterFrequency(qint64 centerFrequency) +void FileOutput::setCenterFrequency(qint64 centerFrequency) { - FileSinkSettings settings = m_settings; + FileOutputSettings settings = m_settings; settings.m_centerFrequency = centerFrequency; - MsgConfigureFileSink* message = MsgConfigureFileSink::create(settings, false); + MsgConfigureFileOutput* message = MsgConfigureFileOutput::create(settings, false); m_inputMessageQueue.push(message); if (m_guiMessageQueue) { - MsgConfigureFileSink* messageToGUI = MsgConfigureFileSink::create(settings, false); + MsgConfigureFileOutput* messageToGUI = MsgConfigureFileOutput::create(settings, false); m_guiMessageQueue->push(messageToGUI); } } -std::time_t FileSinkOutput::getStartingTimeStamp() const +std::time_t FileOutput::getStartingTimeStamp() const { return m_startingTimeStamp; } -bool FileSinkOutput::handleMessage(const Message& message) +bool FileOutput::handleMessage(const Message& message) { - if (MsgConfigureFileSinkName::match(message)) + if (MsgConfigureFileOutputName::match(message)) { - MsgConfigureFileSinkName& conf = (MsgConfigureFileSinkName&) message; + MsgConfigureFileOutputName& conf = (MsgConfigureFileOutputName&) message; m_fileName = conf.getFileName(); openFileStream(); return true; @@ -224,7 +224,7 @@ bool FileSinkOutput::handleMessage(const Message& message) else if (MsgStartStop::match(message)) { MsgStartStop& cmd = (MsgStartStop&) message; - qDebug() << "FileSinkOutput::handleMessage: MsgStartStop: " << (cmd.getStartStop() ? "start" : "stop"); + qDebug() << "FileOutput::handleMessage: MsgStartStop: " << (cmd.getStartStop() ? "start" : "stop"); if (cmd.getStartStop()) { @@ -240,19 +240,19 @@ bool FileSinkOutput::handleMessage(const Message& message) return true; } - else if (MsgConfigureFileSink::match(message)) + else if (MsgConfigureFileOutput::match(message)) { - qDebug() << "FileSinkOutput::handleMessage: MsgConfigureFileSink"; - MsgConfigureFileSink& conf = (MsgConfigureFileSink&) message; + qDebug() << "FileOutput::handleMessage: MsgConfigureFileOutput"; + MsgConfigureFileOutput& conf = (MsgConfigureFileOutput&) message; applySettings(conf.getSettings(), conf.getForce()); return true; } - else if (MsgConfigureFileSinkWork::match(message)) + else if (MsgConfigureFileOutputWork::match(message)) { - MsgConfigureFileSinkWork& conf = (MsgConfigureFileSinkWork&) message; + MsgConfigureFileOutputWork& conf = (MsgConfigureFileOutputWork&) message; bool working = conf.isWorking(); - if (m_fileSinkWorker != 0) + if (m_fileOutputWorker != 0) { if (working) { startWorker(); @@ -263,13 +263,13 @@ bool FileSinkOutput::handleMessage(const Message& message) return true; } - else if (MsgConfigureFileSinkStreamTiming::match(message)) + else if (MsgConfigureFileOutputStreamTiming::match(message)) { - MsgReportFileSinkStreamTiming *report; + MsgReportFileOutputStreamTiming *report; - if (m_fileSinkWorker != 0 && getMessageQueueToGUI()) + if (m_fileOutputWorker != 0 && getMessageQueueToGUI()) { - report = MsgReportFileSinkStreamTiming::create(m_fileSinkWorker->getSamplesCount()); + report = MsgReportFileOutputStreamTiming::create(m_fileOutputWorker->getSamplesCount()); getMessageQueueToGUI()->push(report); } @@ -281,7 +281,7 @@ bool FileSinkOutput::handleMessage(const Message& message) } } -void FileSinkOutput::applySettings(const FileSinkSettings& settings, bool force) +void FileOutput::applySettings(const FileOutputSettings& settings, bool force) { QMutexLocker mutexLocker(&m_mutex); bool forwardChange = false; @@ -296,9 +296,9 @@ void FileSinkOutput::applySettings(const FileSinkSettings& settings, bool force) { m_settings.m_sampleRate = settings.m_sampleRate; - if (m_fileSinkWorker != 0) + if (m_fileOutputWorker != 0) { - m_fileSinkWorker->setSamplerate(m_settings.m_sampleRate); + m_fileOutputWorker->setSamplerate(m_settings.m_sampleRate); } forwardChange = true; @@ -308,9 +308,9 @@ void FileSinkOutput::applySettings(const FileSinkSettings& settings, bool force) { m_settings.m_log2Interp = settings.m_log2Interp; - if (m_fileSinkWorker != 0) + if (m_fileOutputWorker != 0) { - m_fileSinkWorker->setLog2Interpolation(m_settings.m_log2Interp); + m_fileOutputWorker->setLog2Interpolation(m_settings.m_log2Interp); } forwardChange = true; @@ -318,7 +318,7 @@ void FileSinkOutput::applySettings(const FileSinkSettings& settings, bool force) if (forwardChange) { - qDebug("FileSinkOutput::applySettings: forward: m_centerFrequency: %llu m_sampleRate: %llu m_log2Interp: %d", + qDebug("FileOutput::applySettings: forward: m_centerFrequency: %llu m_sampleRate: %llu m_log2Interp: %d", m_settings.m_centerFrequency, m_settings.m_sampleRate, m_settings.m_log2Interp); @@ -328,7 +328,7 @@ void FileSinkOutput::applySettings(const FileSinkSettings& settings, bool force) } -int FileSinkOutput::webapiRunGet( +int FileOutput::webapiRunGet( SWGSDRangel::SWGDeviceState& response, QString& errorMessage) { @@ -337,7 +337,7 @@ int FileSinkOutput::webapiRunGet( return 200; } -int FileSinkOutput::webapiRun( +int FileOutput::webapiRun( bool run, SWGSDRangel::SWGDeviceState& response, QString& errorMessage) diff --git a/plugins/samplesink/filesink/filesinkoutput.h b/plugins/samplesink/fileoutput/fileoutput.h similarity index 68% rename from plugins/samplesink/filesink/filesinkoutput.h rename to plugins/samplesink/fileoutput/fileoutput.h index 0094a42b7..7142656b8 100644 --- a/plugins/samplesink/filesink/filesinkoutput.h +++ b/plugins/samplesink/fileoutput/fileoutput.h @@ -15,8 +15,8 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// -#ifndef INCLUDE_FILESINKOUTPUT_H -#define INCLUDE_FILESINKOUTPUT_H +#ifndef INCLUDE_FILEOUTPUT_H +#define INCLUDE_FILEOUTPUT_H #include #include @@ -27,30 +27,30 @@ #include #include "dsp/devicesamplesink.h" -#include "filesinksettings.h" +#include "fileoutputsettings.h" -class FileSinkWorker; +class FileOutputWorker; class DeviceAPI; -class FileSinkOutput : public DeviceSampleSink { +class FileOutput : public DeviceSampleSink { public: - class MsgConfigureFileSink : public Message { + class MsgConfigureFileOutput : public Message { MESSAGE_CLASS_DECLARATION public: - const FileSinkSettings& getSettings() const { return m_settings; } + const FileOutputSettings& getSettings() const { return m_settings; } bool getForce() const { return m_force; } - static MsgConfigureFileSink* create(const FileSinkSettings& settings, bool force) + static MsgConfigureFileOutput* create(const FileOutputSettings& settings, bool force) { - return new MsgConfigureFileSink(settings, force); + return new MsgConfigureFileOutput(settings, force); } private: - FileSinkSettings m_settings; + FileOutputSettings m_settings; bool m_force; - MsgConfigureFileSink(const FileSinkSettings& settings, bool force) : + MsgConfigureFileOutput(const FileOutputSettings& settings, bool force) : Message(), m_settings(settings), m_force(force) @@ -76,105 +76,105 @@ public: { } }; - class MsgConfigureFileSinkName : public Message { + class MsgConfigureFileOutputName : public Message { MESSAGE_CLASS_DECLARATION public: const QString& getFileName() const { return m_fileName; } - static MsgConfigureFileSinkName* create(const QString& fileName) + static MsgConfigureFileOutputName* create(const QString& fileName) { - return new MsgConfigureFileSinkName(fileName); + return new MsgConfigureFileOutputName(fileName); } private: QString m_fileName; - MsgConfigureFileSinkName(const QString& fileName) : + MsgConfigureFileOutputName(const QString& fileName) : Message(), m_fileName(fileName) { } }; - class MsgConfigureFileSinkWork : public Message { + class MsgConfigureFileOutputWork : public Message { MESSAGE_CLASS_DECLARATION public: bool isWorking() const { return m_working; } - static MsgConfigureFileSinkWork* create(bool working) + static MsgConfigureFileOutputWork* create(bool working) { - return new MsgConfigureFileSinkWork(working); + return new MsgConfigureFileOutputWork(working); } private: bool m_working; - MsgConfigureFileSinkWork(bool working) : + MsgConfigureFileOutputWork(bool working) : Message(), m_working(working) { } }; - class MsgConfigureFileSinkStreamTiming : public Message { + class MsgConfigureFileOutputStreamTiming : public Message { MESSAGE_CLASS_DECLARATION public: - static MsgConfigureFileSinkStreamTiming* create() + static MsgConfigureFileOutputStreamTiming* create() { - return new MsgConfigureFileSinkStreamTiming(); + return new MsgConfigureFileOutputStreamTiming(); } private: - MsgConfigureFileSinkStreamTiming() : + MsgConfigureFileOutputStreamTiming() : Message() { } }; - class MsgReportFileSinkGeneration : public Message { + class MsgReportFileOutputGeneration : public Message { MESSAGE_CLASS_DECLARATION public: bool getAcquisition() const { return m_acquisition; } - static MsgReportFileSinkGeneration* create(bool acquisition) + static MsgReportFileOutputGeneration* create(bool acquisition) { - return new MsgReportFileSinkGeneration(acquisition); + return new MsgReportFileOutputGeneration(acquisition); } protected: bool m_acquisition; - MsgReportFileSinkGeneration(bool acquisition) : + MsgReportFileOutputGeneration(bool acquisition) : Message(), m_acquisition(acquisition) { } }; - class MsgReportFileSinkStreamTiming : public Message { + class MsgReportFileOutputStreamTiming : public Message { MESSAGE_CLASS_DECLARATION public: std::size_t getSamplesCount() const { return m_samplesCount; } - static MsgReportFileSinkStreamTiming* create(std::size_t samplesCount) + static MsgReportFileOutputStreamTiming* create(std::size_t samplesCount) { - return new MsgReportFileSinkStreamTiming(samplesCount); + return new MsgReportFileOutputStreamTiming(samplesCount); } protected: std::size_t m_samplesCount; - MsgReportFileSinkStreamTiming(std::size_t samplesCount) : + MsgReportFileOutputStreamTiming(std::size_t samplesCount) : Message(), m_samplesCount(samplesCount) { } }; - FileSinkOutput(DeviceAPI *deviceAPI); - virtual ~FileSinkOutput(); + FileOutput(DeviceAPI *deviceAPI); + virtual ~FileOutput(); virtual void destroy(); virtual void init(); @@ -206,10 +206,10 @@ public: private: DeviceAPI *m_deviceAPI; QMutex m_mutex; - FileSinkSettings m_settings; + FileOutputSettings m_settings; std::ofstream m_ofstream; - FileSinkWorker* m_fileSinkWorker; - QThread m_fileSinkWorkerThread; + FileOutputWorker* m_fileOutputWorker; + QThread m_fileOutputWorkerThread; QString m_deviceDescription; QString m_fileName; std::time_t m_startingTimeStamp; @@ -218,7 +218,7 @@ private: void startWorker(); void stopWorker(); void openFileStream(); - void applySettings(const FileSinkSettings& settings, bool force = false); + void applySettings(const FileOutputSettings& settings, bool force = false); }; -#endif // INCLUDE_FILESINKOUTPUT_H +#endif // INCLUDE_FILEOUTPUT_H diff --git a/plugins/samplesink/filesink/filesinkgui.cpp b/plugins/samplesink/fileoutput/fileoutputgui.cpp similarity index 69% rename from plugins/samplesink/filesink/filesinkgui.cpp rename to plugins/samplesink/fileoutput/fileoutputgui.cpp index c0da9481f..139663136 100644 --- a/plugins/samplesink/filesink/filesinkgui.cpp +++ b/plugins/samplesink/fileoutput/fileoutputgui.cpp @@ -23,7 +23,7 @@ #include #include -#include "ui_filesinkgui.h" +#include "ui_fileoutputgui.h" #include "plugin/pluginapi.h" #include "gui/colormapper.h" #include "gui/glspectrum.h" @@ -34,11 +34,11 @@ #include "device/deviceapi.h" #include "device/deviceuiset.h" -#include "filesinkgui.h" +#include "fileoutputgui.h" -FileSinkGui::FileSinkGui(DeviceUISet *deviceUISet, QWidget* parent) : +FileOutputGui::FileOutputGui(DeviceUISet *deviceUISet, QWidget* parent) : QWidget(parent), - ui(new Ui::FileSinkGui), + ui(new Ui::FileOutputGui), m_deviceUISet(deviceUISet), m_doApplySettings(true), m_forceSettings(true), @@ -69,55 +69,55 @@ FileSinkGui::FileSinkGui(DeviceUISet *deviceUISet, QWidget* parent) : displaySettings(); - m_deviceSampleSink = (FileSinkOutput*) m_deviceUISet->m_deviceAPI->getSampleSink(); + m_deviceSampleSink = (FileOutput*) m_deviceUISet->m_deviceAPI->getSampleSink(); connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); } -FileSinkGui::~FileSinkGui() +FileOutputGui::~FileOutputGui() { delete ui; } -void FileSinkGui::destroy() +void FileOutputGui::destroy() { delete this; } -void FileSinkGui::setName(const QString& name) +void FileOutputGui::setName(const QString& name) { setObjectName(name); } -QString FileSinkGui::getName() const +QString FileOutputGui::getName() const { return objectName(); } -void FileSinkGui::resetToDefaults() +void FileOutputGui::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); sendSettings(); } -qint64 FileSinkGui::getCenterFrequency() const +qint64 FileOutputGui::getCenterFrequency() const { return m_settings.m_centerFrequency; } -void FileSinkGui::setCenterFrequency(qint64 centerFrequency) +void FileOutputGui::setCenterFrequency(qint64 centerFrequency) { m_settings.m_centerFrequency = centerFrequency; displaySettings(); sendSettings(); } -QByteArray FileSinkGui::serialize() const +QByteArray FileOutputGui::serialize() const { return m_settings.serialize(); } -bool FileSinkGui::deserialize(const QByteArray& data) +bool FileOutputGui::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); @@ -130,35 +130,35 @@ bool FileSinkGui::deserialize(const QByteArray& data) } } -bool FileSinkGui::handleMessage(const Message& message) +bool FileOutputGui::handleMessage(const Message& message) { - if (FileSinkOutput::MsgConfigureFileSink::match(message)) + if (FileOutput::MsgConfigureFileOutput::match(message)) { - qDebug("FileSinkGui::handleMessage: message: MsgConfigureFileSink"); - const FileSinkOutput::MsgConfigureFileSink& cfg = (FileSinkOutput::MsgConfigureFileSink&) message; + qDebug("FileOutputGui::handleMessage: message: MsgConfigureFileOutput"); + const FileOutput::MsgConfigureFileOutput& cfg = (FileOutput::MsgConfigureFileOutput&) message; m_settings = cfg.getSettings(); blockApplySettings(true); displaySettings(); blockApplySettings(false); return true; } - else if (FileSinkOutput::MsgReportFileSinkGeneration::match(message)) + else if (FileOutput::MsgReportFileOutputGeneration::match(message)) { - m_generation = ((FileSinkOutput::MsgReportFileSinkGeneration&)message).getAcquisition(); - qDebug("FileSinkGui::handleMessage: message: MsgReportFileSinkGeneration: %s", m_generation ? "start" : "stop"); + m_generation = ((FileOutput::MsgReportFileOutputGeneration&)message).getAcquisition(); + qDebug("FileOutputGui::handleMessage: message: MsgReportFileOutputGeneration: %s", m_generation ? "start" : "stop"); updateWithGeneration(); return true; } - else if (FileSinkOutput::MsgReportFileSinkStreamTiming::match(message)) + else if (FileOutput::MsgReportFileOutputStreamTiming::match(message)) { - m_samplesCount = ((FileSinkOutput::MsgReportFileSinkStreamTiming&)message).getSamplesCount(); + m_samplesCount = ((FileOutput::MsgReportFileOutputStreamTiming&)message).getSamplesCount(); updateWithStreamTime(); return true; } - else if (FileSinkOutput::MsgStartStop::match(message)) + else if (FileOutput::MsgStartStop::match(message)) { - FileSinkOutput::MsgStartStop& notif = (FileSinkOutput::MsgStartStop&) message; - qDebug("FileSinkGui::handleMessage: message: MsgStartStop: %s", notif.getStartStop() ? "start" : "stop"); + FileOutput::MsgStartStop& notif = (FileOutput::MsgStartStop&) message; + qDebug("FileOutputGui::handleMessage: message: MsgStartStop: %s", notif.getStartStop() ? "start" : "stop"); blockApplySettings(true); ui->startStop->setChecked(notif.getStartStop()); blockApplySettings(false); @@ -170,7 +170,7 @@ bool FileSinkGui::handleMessage(const Message& message) } } -void FileSinkGui::handleInputMessages() +void FileOutputGui::handleInputMessages() { Message* message; @@ -180,7 +180,7 @@ void FileSinkGui::handleInputMessages() if (DSPSignalNotification::match(*message)) { DSPSignalNotification* notif = (DSPSignalNotification*) message; - qDebug("FileSinkGui::handleInputMessages: DSPSignalNotification: SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency()); + qDebug("FileOutputGui::handleInputMessages: DSPSignalNotification: SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency()); m_sampleRate = notif->getSampleRate(); m_deviceCenterFrequency = notif->getCenterFrequency(); updateSampleRateAndFrequency(); @@ -197,36 +197,36 @@ void FileSinkGui::handleInputMessages() } } -void FileSinkGui::updateSampleRateAndFrequency() +void FileOutputGui::updateSampleRateAndFrequency() { m_deviceUISet->getSpectrum()->setSampleRate(m_sampleRate); m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency); ui->deviceRateText->setText(tr("%1k").arg((float)(m_sampleRate*(1<centerFrequency->setValue(m_settings.m_centerFrequency / 1000); ui->sampleRate->setValue(m_settings.m_sampleRate); } -void FileSinkGui::sendSettings() +void FileOutputGui::sendSettings() { if(!m_updateTimer.isActive()) m_updateTimer.start(100); } -void FileSinkGui::updateHardware() +void FileOutputGui::updateHardware() { - qDebug() << "FileSinkGui::updateHardware"; - FileSinkOutput::MsgConfigureFileSink* message = FileSinkOutput::MsgConfigureFileSink::create(m_settings, m_forceSettings); + qDebug() << "FileOutputGui::updateHardware"; + FileOutput::MsgConfigureFileOutput* message = FileOutput::MsgConfigureFileOutput::create(m_settings, m_forceSettings); m_deviceSampleSink->getInputMessageQueue()->push(message); m_forceSettings = false; m_updateTimer.stop(); } -void FileSinkGui::updateStatus() +void FileOutputGui::updateStatus() { int state = m_deviceUISet->m_deviceAPI->state(); @@ -255,19 +255,19 @@ void FileSinkGui::updateStatus() } } -void FileSinkGui::on_centerFrequency_changed(quint64 value) +void FileOutputGui::on_centerFrequency_changed(quint64 value) { m_settings.m_centerFrequency = value * 1000; sendSettings(); } -void FileSinkGui::on_sampleRate_changed(quint64 value) +void FileOutputGui::on_sampleRate_changed(quint64 value) { m_settings.m_sampleRate = value; sendSettings(); } -void FileSinkGui::on_interp_currentIndexChanged(int index) +void FileOutputGui::on_interp_currentIndexChanged(int index) { if (index < 0) { return; @@ -278,16 +278,16 @@ void FileSinkGui::on_interp_currentIndexChanged(int index) sendSettings(); } -void FileSinkGui::on_startStop_toggled(bool checked) +void FileOutputGui::on_startStop_toggled(bool checked) { if (m_doApplySettings) { - FileSinkOutput::MsgStartStop *message = FileSinkOutput::MsgStartStop::create(checked); + FileOutput::MsgStartStop *message = FileOutput::MsgStartStop::create(checked); m_deviceSampleSink->getInputMessageQueue()->push(message); } } -void FileSinkGui::on_showFileDialog_clicked(bool checked) +void FileOutputGui::on_showFileDialog_clicked(bool checked) { (void) checked; QString fileName = QFileDialog::getSaveFileName(this, @@ -301,19 +301,19 @@ void FileSinkGui::on_showFileDialog_clicked(bool checked) } } -void FileSinkGui::configureFileName() +void FileOutputGui::configureFileName() { - qDebug() << "FileSinkGui::configureFileName: " << m_fileName.toStdString().c_str(); - FileSinkOutput::MsgConfigureFileSinkName* message = FileSinkOutput::MsgConfigureFileSinkName::create(m_fileName); + qDebug() << "FileOutputGui::configureFileName: " << m_fileName.toStdString().c_str(); + FileOutput::MsgConfigureFileOutputName* message = FileOutput::MsgConfigureFileOutputName::create(m_fileName); m_deviceSampleSink->getInputMessageQueue()->push(message); } -void FileSinkGui::updateWithGeneration() +void FileOutputGui::updateWithGeneration() { ui->showFileDialog->setEnabled(!m_generation); } -void FileSinkGui::updateWithStreamTime() +void FileOutputGui::updateWithStreamTime() { int t_sec = 0; int t_msec = 0; @@ -330,11 +330,11 @@ void FileSinkGui::updateWithStreamTime() ui->relTimeText->setText(s_timems); } -void FileSinkGui::tick() +void FileOutputGui::tick() { if ((++m_tickCount & 0xf) == 0) { - FileSinkOutput::MsgConfigureFileSinkStreamTiming* message = FileSinkOutput::MsgConfigureFileSinkStreamTiming::create(); + FileOutput::MsgConfigureFileOutputStreamTiming* message = FileOutput::MsgConfigureFileOutputStreamTiming::create(); m_deviceSampleSink->getInputMessageQueue()->push(message); } } diff --git a/plugins/samplesink/filesink/filesinkgui.h b/plugins/samplesink/fileoutput/fileoutputgui.h similarity index 88% rename from plugins/samplesink/filesink/filesinkgui.h rename to plugins/samplesink/fileoutput/fileoutputgui.h index cc0d591e2..398cae37b 100644 --- a/plugins/samplesink/filesink/filesinkgui.h +++ b/plugins/samplesink/fileoutput/fileoutputgui.h @@ -15,8 +15,8 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// -#ifndef INCLUDE_FILESINKGUI_H -#define INCLUDE_FILESINKGUI_H +#ifndef INCLUDE_FILEOUTPUTGUI_H +#define INCLUDE_FILEOUTPUTGUI_H #include #include @@ -24,23 +24,23 @@ #include "util/messagequeue.h" -#include "filesinkoutput.h" -#include "filesinksettings.h" +#include "fileoutput.h" +#include "fileoutputsettings.h" class DeviceSampleSink; class DeviceUISet; namespace Ui { - class FileSinkGui; + class FileOutputGui; } -class FileSinkGui : public QWidget, public PluginInstanceGUI { +class FileOutputGui : public QWidget, public PluginInstanceGUI { Q_OBJECT public: - explicit FileSinkGui(DeviceUISet *deviceUISet, QWidget* parent = 0); - virtual ~FileSinkGui(); + explicit FileOutputGui(DeviceUISet *deviceUISet, QWidget* parent = 0); + virtual ~FileOutputGui(); virtual void destroy(); void setName(const QString& name); @@ -55,12 +55,12 @@ public: virtual bool handleMessage(const Message& message); private: - Ui::FileSinkGui* ui; + Ui::FileOutputGui* ui; DeviceUISet* m_deviceUISet; bool m_doApplySettings; bool m_forceSettings; - FileSinkSettings m_settings; + FileOutputSettings m_settings; QString m_fileName; QTimer m_updateTimer; QTimer m_statusTimer; @@ -95,4 +95,4 @@ private slots: void tick(); }; -#endif // INCLUDE_FILESINKGUI_H +#endif // INCLUDE_FILEOUTPUTGUI_H diff --git a/plugins/samplesink/filesink/filesinkgui.ui b/plugins/samplesink/fileoutput/fileoutputgui.ui similarity index 98% rename from plugins/samplesink/filesink/filesinkgui.ui rename to plugins/samplesink/fileoutput/fileoutputgui.ui index c32352c73..6deafee04 100644 --- a/plugins/samplesink/filesink/filesinkgui.ui +++ b/plugins/samplesink/fileoutput/fileoutputgui.ui @@ -1,7 +1,7 @@ - FileSinkGui - + FileOutputGui + 0 @@ -29,7 +29,7 @@ - FileSink + FileOutput diff --git a/plugins/samplesink/filesink/filesinkplugin.cpp b/plugins/samplesink/fileoutput/fileoutputplugin.cpp similarity index 72% rename from plugins/samplesink/filesink/filesinkplugin.cpp rename to plugins/samplesink/fileoutput/fileoutputplugin.cpp index 7cc5a053f..bde944d82 100644 --- a/plugins/samplesink/filesink/filesinkplugin.cpp +++ b/plugins/samplesink/fileoutput/fileoutputplugin.cpp @@ -21,48 +21,48 @@ #include "util/simpleserializer.h" #ifdef SERVER_MODE -#include "filesinkoutput.h" +#include "fileoutput.h" #else -#include "filesinkgui.h" +#include "fileoutputgui.h" #endif -#include "filesinkplugin.h" +#include "fileoutputplugin.h" -const PluginDescriptor FileSinkPlugin::m_pluginDescriptor = { - QString("FileSink"), - QString("File sink output"), - QString("4.14.16"), +const PluginDescriptor FileOutputPlugin::m_pluginDescriptor = { + QString("FileOutput"), + QString("File output"), + QString("4.15.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, QString("https://github.com/f4exb/sdrangel") }; -const QString FileSinkPlugin::m_hardwareID = "FileSink"; -const QString FileSinkPlugin::m_deviceTypeID = FILESINK_DEVICE_TYPE_ID; +const QString FileOutputPlugin::m_hardwareID = "FileOutput"; +const QString FileOutputPlugin::m_deviceTypeID = FILEOUTPUT_DEVICE_TYPE_ID; -FileSinkPlugin::FileSinkPlugin(QObject* parent) : +FileOutputPlugin::FileOutputPlugin(QObject* parent) : QObject(parent) { } -const PluginDescriptor& FileSinkPlugin::getPluginDescriptor() const +const PluginDescriptor& FileOutputPlugin::getPluginDescriptor() const { return m_pluginDescriptor; } -void FileSinkPlugin::initPlugin(PluginAPI* pluginAPI) +void FileOutputPlugin::initPlugin(PluginAPI* pluginAPI) { pluginAPI->registerSampleSink(m_deviceTypeID, this); } -void FileSinkPlugin::enumOriginDevices(QStringList& listedHwIds, OriginDevices& originDevices) +void FileOutputPlugin::enumOriginDevices(QStringList& listedHwIds, OriginDevices& originDevices) { if (listedHwIds.contains(m_hardwareID)) { // check if it was done return; } originDevices.append(OriginDevice( - "FileSink", + "FileOutput", m_hardwareID, QString(), 0, // Sequence @@ -73,7 +73,7 @@ void FileSinkPlugin::enumOriginDevices(QStringList& listedHwIds, OriginDevices& listedHwIds.append(m_hardwareID); } -PluginInterface::SamplingDevices FileSinkPlugin::enumSampleSinks(const OriginDevices& originDevices) +PluginInterface::SamplingDevices FileOutputPlugin::enumSampleSinks(const OriginDevices& originDevices) { SamplingDevices result; @@ -99,7 +99,7 @@ PluginInterface::SamplingDevices FileSinkPlugin::enumSampleSinks(const OriginDev } #ifdef SERVER_MODE -PluginInstanceGUI* FileSinkPlugin::createSampleSinkPluginInstanceGUI( +PluginInstanceGUI* FileOutputPlugin::createSampleSinkPluginInstanceGUI( const QString& sinkId, QWidget **widget, DeviceUISet *deviceUISet) @@ -107,32 +107,32 @@ PluginInstanceGUI* FileSinkPlugin::createSampleSinkPluginInstanceGUI( (void) sinkId; (void) widget; (void) deviceUISet; - return 0; + return nullptr; } #else -PluginInstanceGUI* FileSinkPlugin::createSampleSinkPluginInstanceGUI( +PluginInstanceGUI* FileOutputPlugin::createSampleSinkPluginInstanceGUI( const QString& sinkId, QWidget **widget, DeviceUISet *deviceUISet) { - if(sinkId == m_deviceTypeID) + if (sinkId == m_deviceTypeID) { - FileSinkGui* gui = new FileSinkGui(deviceUISet); + FileOutputGui* gui = new FileOutputGui(deviceUISet); *widget = gui; return gui; } else { - return 0; + return nullptr; } } #endif -DeviceSampleSink* FileSinkPlugin::createSampleSinkPluginInstance(const QString& sinkId, DeviceAPI *deviceAPI) +DeviceSampleSink* FileOutputPlugin::createSampleSinkPluginInstance(const QString& sinkId, DeviceAPI *deviceAPI) { if(sinkId == m_deviceTypeID) { - FileSinkOutput* output = new FileSinkOutput(deviceAPI); + FileOutput* output = new FileOutput(deviceAPI); return output; } else diff --git a/plugins/samplesink/filesink/filesinkplugin.h b/plugins/samplesink/fileoutput/fileoutputplugin.h similarity index 86% rename from plugins/samplesink/filesink/filesinkplugin.h rename to plugins/samplesink/fileoutput/fileoutputplugin.h index b7989571c..506ff491c 100644 --- a/plugins/samplesink/filesink/filesinkplugin.h +++ b/plugins/samplesink/fileoutput/fileoutputplugin.h @@ -15,24 +15,24 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// -#ifndef INCLUDE_FILESINKPLUGIN_H -#define INCLUDE_FILESINKPLUGIN_H +#ifndef INCLUDE_FILEOUTPUTPLUGIN_H +#define INCLUDE_FILEOUTPUTPLUGIN_H #include #include "plugin/plugininterface.h" -#define FILESINK_DEVICE_TYPE_ID "sdrangel.samplesink.filesink" +#define FILEOUTPUT_DEVICE_TYPE_ID "sdrangel.samplesink.fileoutput" class PluginAPI; class DeviceAPI; -class FileSinkPlugin : public QObject, public PluginInterface { +class FileOutputPlugin : public QObject, public PluginInterface { Q_OBJECT Q_INTERFACES(PluginInterface) - Q_PLUGIN_METADATA(IID FILESINK_DEVICE_TYPE_ID) + Q_PLUGIN_METADATA(IID FILEOUTPUT_DEVICE_TYPE_ID) public: - explicit FileSinkPlugin(QObject* parent = NULL); + explicit FileOutputPlugin(QObject* parent = NULL); const PluginDescriptor& getPluginDescriptor() const; void initPlugin(PluginAPI* pluginAPI); @@ -52,4 +52,4 @@ private: static const PluginDescriptor m_pluginDescriptor; }; -#endif // INCLUDE_FILESOURCEPLUGIN_H +#endif // INCLUDE_FILEOUTPUTPLUGIN_H diff --git a/plugins/samplesink/filesink/filesinksettings.cpp b/plugins/samplesink/fileoutput/fileoutputsettings.cpp similarity index 89% rename from plugins/samplesink/filesink/filesinksettings.cpp rename to plugins/samplesink/fileoutput/fileoutputsettings.cpp index ae35fe31a..cdd1fad60 100644 --- a/plugins/samplesink/filesink/filesinksettings.cpp +++ b/plugins/samplesink/fileoutput/fileoutputsettings.cpp @@ -16,21 +16,21 @@ /////////////////////////////////////////////////////////////////////////////////// #include "util/simpleserializer.h" -#include "filesinksettings.h" +#include "fileoutputsettings.h" -FileSinkSettings::FileSinkSettings() +FileOutputSettings::FileOutputSettings() { resetToDefaults(); } -void FileSinkSettings::resetToDefaults() +void FileOutputSettings::resetToDefaults() { m_centerFrequency = 435000*1000; m_sampleRate = 48000; m_log2Interp = 0; } -QByteArray FileSinkSettings::serialize() const +QByteArray FileOutputSettings::serialize() const { SimpleSerializer s(1); @@ -40,7 +40,7 @@ QByteArray FileSinkSettings::serialize() const return s.final(); } -bool FileSinkSettings::deserialize(const QByteArray& data) +bool FileOutputSettings::deserialize(const QByteArray& data) { SimpleDeserializer d(data); diff --git a/plugins/samplesink/filesink/filesinksettings.h b/plugins/samplesink/fileoutput/fileoutputsettings.h similarity index 86% rename from plugins/samplesink/filesink/filesinksettings.h rename to plugins/samplesink/fileoutput/fileoutputsettings.h index e20e36be9..91d593fa4 100644 --- a/plugins/samplesink/filesink/filesinksettings.h +++ b/plugins/samplesink/fileoutput/fileoutputsettings.h @@ -15,20 +15,20 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// -#ifndef PLUGINS_SAMPLESINK_FILESINK_FILESINKSETTINGS_H_ -#define PLUGINS_SAMPLESINK_FILESINK_FILESINKSETTINGS_H_ +#ifndef PLUGINS_SAMPLESINK_FILEOUTPUT_FILEOUTPUTSETTINGS_H_ +#define PLUGINS_SAMPLESINK_FILEOUTPUT_FILEOUTPUTSETTINGS_H_ #include -struct FileSinkSettings { +struct FileOutputSettings { quint64 m_centerFrequency; quint64 m_sampleRate; quint32 m_log2Interp; - FileSinkSettings(); + FileOutputSettings(); void resetToDefaults(); QByteArray serialize() const; bool deserialize(const QByteArray& data); }; -#endif /* PLUGINS_SAMPLESINK_FILESINK_FILESINKSETTINGS_H_ */ +#endif /* PLUGINS_SAMPLESINK_FILEOUTPUT_FILEOUTPUTSETTINGS_H_ */ diff --git a/plugins/samplesink/filesink/filesinkworker.cpp b/plugins/samplesink/fileoutput/fileoutputworker.cpp similarity index 85% rename from plugins/samplesink/filesink/filesinkworker.cpp rename to plugins/samplesink/fileoutput/fileoutputworker.cpp index bf4470bb3..d31e6589a 100644 --- a/plugins/samplesink/filesink/filesinkworker.cpp +++ b/plugins/samplesink/fileoutput/fileoutputworker.cpp @@ -22,9 +22,9 @@ #include #include "dsp/samplesourcefifo.h" -#include "filesinkworker.h" +#include "fileoutputworker.h" -FileSinkWorker::FileSinkWorker(std::ofstream *samplesStream, SampleSourceFifo* sampleFifo, QObject* parent) : +FileOutputWorker::FileOutputWorker(std::ofstream *samplesStream, SampleSourceFifo* sampleFifo, QObject* parent) : QObject(parent), m_running(false), m_ofstream(samplesStream), @@ -34,7 +34,7 @@ FileSinkWorker::FileSinkWorker(std::ofstream *samplesStream, SampleSourceFifo* s m_samplesCount(0), m_samplerate(0), m_log2Interpolation(0), - m_throttlems(FILESINK_THROTTLE_MS), + m_throttlems(FILEOUTPUT_THROTTLE_MS), m_maxThrottlems(50), m_throttleToggle(false), m_buf(nullptr) @@ -42,7 +42,7 @@ FileSinkWorker::FileSinkWorker(std::ofstream *samplesStream, SampleSourceFifo* s assert(m_ofstream != nullptr); } -FileSinkWorker::~FileSinkWorker() +FileOutputWorker::~FileOutputWorker() { if (m_running) { stopWork(); @@ -51,34 +51,34 @@ FileSinkWorker::~FileSinkWorker() if (m_buf) delete[] m_buf; } -void FileSinkWorker::startWork() +void FileOutputWorker::startWork() { - qDebug() << "FileSinkWorker::startWork: "; + qDebug() << "FileOutputWorker::startWork: "; if (m_ofstream->is_open()) { - qDebug() << "FileSinkWorker::startWork: file stream open, starting..."; + qDebug() << "FileOutputWorker::startWork: file stream open, starting..."; m_maxThrottlems = 0; m_elapsedTimer.start(); m_running = true; } else { - qDebug() << "FileSinkWorker::startWork: file stream closed, not starting."; + qDebug() << "FileOutputWorker::startWork: file stream closed, not starting."; m_running = false; } } -void FileSinkWorker::stopWork() +void FileOutputWorker::stopWork() { m_running = false; } -void FileSinkWorker::setSamplerate(int samplerate) +void FileOutputWorker::setSamplerate(int samplerate) { if (samplerate != m_samplerate) { - qDebug() << "FileSinkWorker::setSamplerate:" + qDebug() << "FileOutputWorker::setSamplerate:" << " new:" << samplerate << " old:" << m_samplerate; @@ -108,7 +108,7 @@ void FileSinkWorker::setSamplerate(int samplerate) } } -void FileSinkWorker::setLog2Interpolation(int log2Interpolation) +void FileOutputWorker::setLog2Interpolation(int log2Interpolation) { if ((log2Interpolation < 0) || (log2Interpolation > 6)) { @@ -117,7 +117,7 @@ void FileSinkWorker::setLog2Interpolation(int log2Interpolation) if (log2Interpolation != m_log2Interpolation) { - qDebug() << "FileSinkWorker::setLog2Interpolation:" + qDebug() << "FileOutputWorker::setLog2Interpolation:" << " new:" << log2Interpolation << " old:" << m_log2Interpolation; @@ -141,13 +141,13 @@ void FileSinkWorker::setLog2Interpolation(int log2Interpolation) } } -void FileSinkWorker::connectTimer(const QTimer& timer) +void FileOutputWorker::connectTimer(const QTimer& timer) { - qDebug() << "FileSinkWorker::connectTimer"; + qDebug() << "FileOutputWorker::connectTimer"; connect(&timer, SIGNAL(timeout()), this, SLOT(tick())); } -void FileSinkWorker::tick() +void FileOutputWorker::tick() { if (m_running) { @@ -175,7 +175,7 @@ void FileSinkWorker::tick() } } -void FileSinkWorker::callbackPart(SampleVector& data, unsigned int iBegin, unsigned int iEnd) +void FileOutputWorker::callbackPart(SampleVector& data, unsigned int iBegin, unsigned int iEnd) { SampleVector::iterator beginRead = data.begin() + iBegin; unsigned int chunkSize = iEnd - iBegin; diff --git a/plugins/samplesink/filesink/filesinkworker.h b/plugins/samplesink/fileoutput/fileoutputworker.h similarity index 89% rename from plugins/samplesink/filesink/filesinkworker.h rename to plugins/samplesink/fileoutput/fileoutputworker.h index c4e1f9f62..db5c5f3b4 100644 --- a/plugins/samplesink/filesink/filesinkworker.h +++ b/plugins/samplesink/fileoutput/fileoutputworker.h @@ -15,8 +15,8 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// -#ifndef INCLUDE_FILESINKWORKER_H -#define INCLUDE_FILESINKWORKER_H +#ifndef INCLUDE_FILEOUTPUTWORKER_H +#define INCLUDE_FILEOUTPUTWORKER_H #include #include @@ -29,16 +29,16 @@ #include "dsp/inthalfbandfilter.h" #include "dsp/interpolators.h" -#define FILESINK_THROTTLE_MS 50 +#define FILEOUTPUT_THROTTLE_MS 50 class SampleSourceFifo; -class FileSinkWorker : public QObject { +class FileOutputWorker : public QObject { Q_OBJECT public: - FileSinkWorker(std::ofstream *samplesStream, SampleSourceFifo* sampleFifo, QObject* parent = 0); - ~FileSinkWorker(); + FileOutputWorker(std::ofstream *samplesStream, SampleSourceFifo* sampleFifo, QObject* parent = 0); + ~FileOutputWorker(); void startWork(); void stopWork(); @@ -76,4 +76,4 @@ private slots: void tick(); }; -#endif // INCLUDE_FILESINKWORKER_H +#endif // INCLUDE_FILEOUTPUTWORKER_H diff --git a/plugins/samplesink/filesink/readme.md b/plugins/samplesink/fileoutput/readme.md similarity index 89% rename from plugins/samplesink/filesink/readme.md rename to plugins/samplesink/fileoutput/readme.md index d65fb0b60..992d1ce61 100644 --- a/plugins/samplesink/filesink/readme.md +++ b/plugins/samplesink/fileoutput/readme.md @@ -1,8 +1,8 @@ -

File sink plugin

+

File output plugin

Introduction

-This output sample sink plugin sends its samples to file in the SDRangel .sdriq format. +This sample sink plugin sends its samples to file in the SDRangel .sdriq format. The format is S16LE I/Q samples. Thus there are 4 bytes per sample. I and Q values are 16 bit signed integers. The file starts with a context header containing information about center frequency, sample rate and timestamp of the start of the recording. This header has a length which is a multiple of a sample size (normally 24 bytes thus 6 samples). Thus this file can be used as a raw I/Q file with S16LE samples tolerating a glitch at the start corresponding to the 6 "random" samples. For example in GNURadio you can simply specify your file source format as short complex. @@ -10,7 +10,7 @@ You can also zap the 24 bytes header with this Linux command: `tail -c +25 myfil To convert in another format you may use the sox utility. For example to convert to 32 bit (float) complex samples do: `sox -r 48k −b 16 −e signed-integer -c 2 myfile.raw -e float -c 2 myfilec.raw` -Note that you have to specify the sampling rate and use .raw for the file extensions. +Note that you have to specify the sampling rate and use .raw for the file extensions.

Build

@@ -18,20 +18,20 @@ The plugin is always built.

Interface

-![File sink plugin GUI](../../../doc/img/FileSink_plugin.png) +![File output plugin GUI](../../../doc/img/FileOutput_plugin.png)

1: Start/Stop

-Device start / stop button. +Device start / stop button. - Blue triangle icon: device is ready and can be started - Red square icon: device is running and can be stopped - Magenta (or pink) square icon: an error occurred - +

2: File stream sample rate

-This is the file stream sample rate in kS/s after interpolation (4) from the baseband stream. Thus this is the sample rate (7) multiplied by the interpolation factor (6). - +This is the file stream sample rate in kS/s after interpolation (4) from the baseband stream. Thus this is the sample rate (7) multiplied by the interpolation factor (6). +

3: Frequency

This is the center frequency in kHz that will be put in the file header. diff --git a/plugins/samplesink/filesink/CMakeLists.txt b/plugins/samplesink/filesink/CMakeLists.txt deleted file mode 100644 index e5e0d9aa3..000000000 --- a/plugins/samplesink/filesink/CMakeLists.txt +++ /dev/null @@ -1,56 +0,0 @@ -project(filesink) - -set(filesink_SOURCES - filesinkoutput.cpp - filesinkplugin.cpp - filesinksettings.cpp - filesinkworker.cpp -) - -set(filesink_HEADERS - filesinkoutput.h - filesinkplugin.h - filesinksettings.h - filesinkworker.h -) - -include_directories( - ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client -) - -if(NOT SERVER_MODE) - set(filesink_SOURCES - ${filesink_SOURCES} - filesinkgui.cpp - - filesinkgui.ui - ) - set(filesink_HEADERS - ${filesink_HEADERS} - filesinkgui.h - ) - - set(TARGET_NAME outputfilesink) - set(TARGET_LIB "Qt5::Widgets") - set(TARGET_LIB_GUI "sdrgui") - set(INSTALL_FOLDER ${INSTALL_PLUGINS_DIR}) -else() - set(TARGET_NAME outputfilesinksrv) - set(TARGET_LIB "") - set(TARGET_LIB_GUI "") - set(INSTALL_FOLDER ${INSTALL_PLUGINSSRV_DIR}) -endif() - -add_library(${TARGET_NAME} SHARED - ${filesink_SOURCES} -) - -target_link_libraries(${TARGET_NAME} - Qt5::Core - ${TARGET_LIB} - sdrbase - ${TARGET_LIB_GUI} - swagger -) - -install(TARGETS ${TARGET_NAME} DESTINATION ${INSTALL_FOLDER}) diff --git a/plugins/samplesource/fileinput/fileinput.cpp b/plugins/samplesource/fileinput/fileinput.cpp index e0d1819ba..ce77778ff 100644 --- a/plugins/samplesource/fileinput/fileinput.cpp +++ b/plugins/samplesource/fileinput/fileinput.cpp @@ -165,7 +165,7 @@ void FileInput::seekFileStream(int seekMillis) { quint64 seekPoint = ((m_recordLength * seekMillis) / 1000) * m_sampleRate; m_fileInputWorker->setSamplesCount(seekPoint); - seekPoint *= (m_sampleSize == 24 ? 8 : 4); // + sizeof(FileSink::Header) + seekPoint *= (m_sampleSize == 24 ? 8 : 4); // + sizeof(FileRecord::Header) m_ifstream.clear(); m_ifstream.seekg(seekPoint + sizeof(FileRecord::Header), std::ios::beg); } diff --git a/sdrbase/dsp/filerecord.cpp b/sdrbase/dsp/filerecord.cpp index 3d7543512..125ae7cc6 100644 --- a/sdrbase/dsp/filerecord.cpp +++ b/sdrbase/dsp/filerecord.cpp @@ -36,7 +36,7 @@ FileRecord::FileRecord() : m_recordStart(false), m_byteCount(0) { - setObjectName("FileSink"); + setObjectName("FileRecord"); } FileRecord::FileRecord(const QString& filename) : diff --git a/sdrbase/plugin/pluginmanager.cpp b/sdrbase/plugin/pluginmanager.cpp index 0fc60cb5f..cd67a176e 100644 --- a/sdrbase/plugin/pluginmanager.cpp +++ b/sdrbase/plugin/pluginmanager.cpp @@ -42,8 +42,8 @@ const QString PluginManager::m_localOutputHardwareID = "LocalOutput"; const QString PluginManager::m_localOutputDeviceTypeID = "sdrangel.samplesource.localoutput"; const QString PluginManager::m_remoteOutputHardwareID = "RemoteOutput"; const QString PluginManager::m_remoteOutputDeviceTypeID = "sdrangel.samplesink.remoteoutput"; -const QString PluginManager::m_fileSinkHardwareID = "FileSink"; -const QString PluginManager::m_fileSinkDeviceTypeID = "sdrangel.samplesink.filesink"; +const QString PluginManager::m_fileOutputHardwareID = "FileOutput"; +const QString PluginManager::m_fileOutputDeviceTypeID = "sdrangel.samplesink.fileoutput"; PluginManager::PluginManager(QObject* parent) : QObject(parent), diff --git a/sdrbase/plugin/pluginmanager.h b/sdrbase/plugin/pluginmanager.h index df8df23f2..0a04c31dd 100644 --- a/sdrbase/plugin/pluginmanager.h +++ b/sdrbase/plugin/pluginmanager.h @@ -91,7 +91,7 @@ public: const PluginInterface *getDevicePluginInterface(const QString& deviceId) const; static const QString& getFileInputDeviceId() { return m_fileInputDeviceTypeID; } - static const QString& getFileSinkDeviceId() { return m_fileSinkDeviceTypeID; } + static const QString& getFileSinkDeviceId() { return m_fileOutputDeviceTypeID; } private: struct SamplingDevice { //!< This is the device registration @@ -143,8 +143,8 @@ private: static const QString m_localOutputDeviceTypeID; //!< Local output plugin ID static const QString m_remoteOutputHardwareID; //!< Remote output hardware ID static const QString m_remoteOutputDeviceTypeID; //!< Remote output plugin ID - static const QString m_fileSinkHardwareID; //!< FileSink sink hardware ID - static const QString m_fileSinkDeviceTypeID; //!< FileSink sink plugin ID + static const QString m_fileOutputHardwareID; //!< FileOutput sink hardware ID + static const QString m_fileOutputDeviceTypeID; //!< FileOutput sink plugin ID void loadPluginsDir(const QDir& dir); }; diff --git a/swagger/sdrangel/examples/rx_tx_test.py b/swagger/sdrangel/examples/rx_tx_test.py index f5145a110..c48895249 100644 --- a/swagger/sdrangel/examples/rx_tx_test.py +++ b/swagger/sdrangel/examples/rx_tx_test.py @@ -38,7 +38,7 @@ def getInputOptions(): options.device_hwid_rx = "FileInput" if options.device_hwid_tx == None: - options.device_hwid_tx = "FileSink" + options.device_hwid_tx = "FileOutput" if options.device_freq == None: options.device_freq = 435000