1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-09-02 13:17:48 -04:00

Tx ph.1: Added FileSink (2) compiles. Added plugin/samplesink in all builds

This commit is contained in:
f4exb 2016-10-19 22:32:14 +02:00
parent 6c82c36958
commit fbb816ebdf
13 changed files with 40 additions and 58 deletions

View File

@ -2,3 +2,4 @@ project(plugins)
add_subdirectory(channelrx) add_subdirectory(channelrx)
add_subdirectory(samplesource) add_subdirectory(samplesource)
add_subdirectory(samplesink)

View File

@ -0,0 +1,4 @@
project(samplesink)
add_subdirectory(filesink)

View File

@ -47,7 +47,6 @@ FileSinkGui::FileSinkGui(DeviceSinkAPI *deviceAPI, QWidget* parent) :
m_startingTimeStamp(0), m_startingTimeStamp(0),
m_samplesCount(0), m_samplesCount(0),
m_tickCount(0), m_tickCount(0),
m_enableNavTime(false),
m_lastEngineState((DSPDeviceSinkEngine::State)-1) m_lastEngineState((DSPDeviceSinkEngine::State)-1)
{ {
ui->setupUi(this); ui->setupUi(this);
@ -234,16 +233,16 @@ void FileSinkGui::updateStatus()
{ {
switch(state) switch(state)
{ {
case DSPDeviceSourceEngine::StNotStarted: case DSPDeviceSinkEngine::StNotStarted:
ui->startStop->setStyleSheet("QToolButton { background:rgb(79,79,79); }"); ui->startStop->setStyleSheet("QToolButton { background:rgb(79,79,79); }");
break; break;
case DSPDeviceSourceEngine::StIdle: case DSPDeviceSinkEngine::StIdle:
ui->startStop->setStyleSheet("QToolButton { background-color : blue; }"); ui->startStop->setStyleSheet("QToolButton { background-color : blue; }");
break; break;
case DSPDeviceSourceEngine::StRunning: case DSPDeviceSinkEngine::StRunning:
ui->startStop->setStyleSheet("QToolButton { background-color : green; }"); ui->startStop->setStyleSheet("QToolButton { background-color : green; }");
break; break;
case DSPDeviceSourceEngine::StError: case DSPDeviceSinkEngine::StError:
ui->startStop->setStyleSheet("QToolButton { background-color : red; }"); ui->startStop->setStyleSheet("QToolButton { background-color : red; }");
QMessageBox::information(this, tr("Message"), m_deviceAPI->errorMessage()); QMessageBox::information(this, tr("Message"), m_deviceAPI->errorMessage());
break; break;
@ -283,16 +282,12 @@ void FileSinkGui::configureFileName()
void FileSinkGui::updateWithGeneration() void FileSinkGui::updateWithGeneration()
{ {
ui->play->setEnabled(m_generation);
ui->play->setChecked(m_generation);
ui->showFileDialog->setEnabled(!m_generation); ui->showFileDialog->setEnabled(!m_generation);
} }
void FileSinkGui::updateWithStreamData() void FileSinkGui::updateWithStreamData()
{ {
ui->centerFrequency->setValue(m_centerFrequency/1000); ui->centerFrequency->setValue(m_centerFrequency/1000);
ui->sampleRateText->setText(tr("%1k").arg((float)m_sampleRate / 1000));
ui->play->setEnabled(m_generation);
} }
void FileSinkGui::updateWithStreamTime() void FileSinkGui::updateWithStreamTime()

View File

@ -27,7 +27,7 @@ class DeviceSinkAPI;
class DeviceSampleSink; class DeviceSampleSink;
namespace Ui { namespace Ui {
class FileSourceGui; class FileSinkGui;
} }
class FileSinkGui : public QWidget, public PluginGUI { class FileSinkGui : public QWidget, public PluginGUI {
@ -49,7 +49,7 @@ public:
virtual bool handleMessage(const Message& message); virtual bool handleMessage(const Message& message);
private: private:
Ui::FileSourceGui* ui; Ui::FileSinkGui* ui;
DeviceSinkAPI* m_deviceAPI; DeviceSinkAPI* m_deviceAPI;
FileSinkOutput::Settings m_settings; FileSinkOutput::Settings m_settings;

View File

@ -30,7 +30,6 @@
MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSink, Message) MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSink, Message)
MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSinkName, Message) MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSinkName, Message)
MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSinkWork, Message) MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSinkWork, Message)
MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSinkSeek, Message)
MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSinkStreamTiming, Message) MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgConfigureFileSinkStreamTiming, Message)
MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgReportFileSinkGeneration, Message) MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgReportFileSinkGeneration, Message)
MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgReportFileSinkStreamData, Message) MESSAGE_CLASS_DEFINITION(FileSinkOutput::MsgReportFileSinkStreamData, Message)
@ -74,12 +73,11 @@ bool FileSinkOutput::Settings::deserialize(const QByteArray& data)
FileSinkOutput::FileSinkOutput(const QTimer& masterTimer) : FileSinkOutput::FileSinkOutput(const QTimer& masterTimer) :
m_settings(), m_settings(),
m_fileSourceThread(0), m_fileSinkThread(0),
m_deviceDescription(), m_deviceDescription(),
m_fileName("..."), m_fileName("..."),
m_sampleRate(0), m_sampleRate(0),
m_centerFrequency(0), m_centerFrequency(0),
m_recordLength(0),
m_startingTimeStamp(0), m_startingTimeStamp(0),
m_masterTimer(masterTimer) m_masterTimer(masterTimer)
{ {
@ -126,15 +124,15 @@ bool FileSinkOutput::start(int device)
//openFileStream(); //openFileStream();
if((m_fileSourceThread = new FileSinkThread(&m_ifstream, &m_sampleFifo)) == 0) { if((m_fileSinkThread = new FileSinkThread(&m_ofstream, &m_sampleSourceFifo)) == 0) {
qFatal("out of memory"); qFatal("out of memory");
stop(); stop();
return false; return false;
} }
m_fileSourceThread->setSamplerate(m_sampleRate); m_fileSinkThread->setSamplerate(m_sampleRate);
m_fileSourceThread->connectTimer(m_masterTimer); m_fileSinkThread->connectTimer(m_masterTimer);
m_fileSourceThread->startWork(); m_fileSinkThread->startWork();
m_deviceDescription = "FileSink"; m_deviceDescription = "FileSink";
mutexLocker.unlock(); mutexLocker.unlock();
@ -152,11 +150,11 @@ void FileSinkOutput::stop()
qDebug() << "FileSourceInput::stop"; qDebug() << "FileSourceInput::stop";
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
if(m_fileSourceThread != 0) if(m_fileSinkThread != 0)
{ {
m_fileSourceThread->stopWork(); m_fileSinkThread->stopWork();
delete m_fileSourceThread; delete m_fileSinkThread;
m_fileSourceThread = 0; m_fileSinkThread = 0;
} }
m_deviceDescription.clear(); m_deviceDescription.clear();
@ -199,11 +197,11 @@ bool FileSinkOutput::handleMessage(const Message& message)
MsgConfigureFileSinkWork& conf = (MsgConfigureFileSinkWork&) message; MsgConfigureFileSinkWork& conf = (MsgConfigureFileSinkWork&) message;
bool working = conf.isWorking(); bool working = conf.isWorking();
if (m_fileSourceThread != 0) if (m_fileSinkThread != 0)
{ {
if (working) if (working)
{ {
m_fileSourceThread->startWork(); m_fileSinkThread->startWork();
/* /*
MsgReportFileSourceStreamTiming *report = MsgReportFileSourceStreamTiming *report =
MsgReportFileSourceStreamTiming::create(m_fileSourceThread->getSamplesCount()); MsgReportFileSourceStreamTiming::create(m_fileSourceThread->getSamplesCount());
@ -211,27 +209,19 @@ bool FileSinkOutput::handleMessage(const Message& message)
} }
else else
{ {
m_fileSourceThread->stopWork(); m_fileSinkThread->stopWork();
} }
} }
return true; return true;
} }
else if (MsgConfigureFileSinkSeek::match(message))
{
MsgConfigureFileSinkSeek& conf = (MsgConfigureFileSinkSeek&) message;
int seekPercentage = conf.getPercentage();
seekFileStream(seekPercentage);
return true;
}
else if (MsgConfigureFileSinkStreamTiming::match(message)) else if (MsgConfigureFileSinkStreamTiming::match(message))
{ {
MsgReportFileSinkStreamTiming *report; MsgReportFileSinkStreamTiming *report;
if (m_fileSourceThread != 0) if (m_fileSinkThread != 0)
{ {
report = MsgReportFileSinkStreamTiming::create(m_fileSourceThread->getSamplesCount()); report = MsgReportFileSinkStreamTiming::create(m_fileSinkThread->getSamplesCount());
getOutputMessageQueueToGUI()->push(report); getOutputMessageQueueToGUI()->push(report);
} }

View File

@ -114,26 +114,6 @@ public:
{ } { }
}; };
class MsgConfigureFileSinkSeek : public Message {
MESSAGE_CLASS_DECLARATION
public:
int getPercentage() const { return m_seekPercentage; }
static MsgConfigureFileSinkSeek* create(int seekPercentage)
{
return new MsgConfigureFileSinkSeek(seekPercentage);
}
protected:
int m_seekPercentage; //!< percentage of seek position from the beginning 0..100
MsgConfigureFileSinkSeek(int seekPercentage) :
Message(),
m_seekPercentage(seekPercentage)
{ }
};
class MsgReportFileSinkGeneration : public Message { class MsgReportFileSinkGeneration : public Message {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
@ -222,7 +202,7 @@ private:
QMutex m_mutex; QMutex m_mutex;
Settings m_settings; Settings m_settings;
std::ofstream m_ofstream; std::ofstream m_ofstream;
FileSinkThread* m_fileSourceThread; FileSinkThread* m_fileSinkThread;
QString m_deviceDescription; QString m_deviceDescription;
QString m_fileName; QString m_fileName;
int m_sampleRate; int m_sampleRate;

View File

@ -22,7 +22,7 @@
#include "dsp/samplesourcefifo.h" #include "dsp/samplesourcefifo.h"
#include "filesinkthread.h" #include "filesinkthread.h"
FileSinkThread::FileSinkThread(std::ofstream *samplesStream, SampleSinkFifo* sampleFifo, QObject* parent) : FileSinkThread::FileSinkThread(std::ofstream *samplesStream, SampleSourceFifo* sampleFifo, QObject* parent) :
QThread(parent), QThread(parent),
m_running(false), m_running(false),
m_ofstream(samplesStream), m_ofstream(samplesStream),
@ -30,6 +30,7 @@ FileSinkThread::FileSinkThread(std::ofstream *samplesStream, SampleSinkFifo* sam
m_bufsize(0), m_bufsize(0),
m_samplesChunkSize(0), m_samplesChunkSize(0),
m_sampleFifo(sampleFifo), m_sampleFifo(sampleFifo),
m_samplesCount(0),
m_samplerate(0), m_samplerate(0),
m_throttlems(FILESINK_THROTTLE_MS), m_throttlems(FILESINK_THROTTLE_MS),
m_throttleToggle(false) m_throttleToggle(false)
@ -129,6 +130,7 @@ void FileSinkThread::tick()
SampleVector::iterator beginRead; SampleVector::iterator beginRead;
m_sampleFifo->read(beginRead, m_samplesChunkSize); m_sampleFifo->read(beginRead, m_samplesChunkSize);
m_ofstream->write(reinterpret_cast<char*>(*beginRead), m_samplesChunkSize*4); m_ofstream->write(reinterpret_cast<char*>(&(*beginRead)), m_samplesChunkSize*4);
m_samplesCount += m_samplesChunkSize;
} }
} }

View File

@ -44,6 +44,8 @@ public:
void setSamplerate(int samplerate); void setSamplerate(int samplerate);
void setBuffer(std::size_t chunksize); void setBuffer(std::size_t chunksize);
bool isRunning() const { return m_running; } bool isRunning() const { return m_running; }
std::size_t getSamplesCount() const { return m_samplesCount; }
void setSamplesCount(int samplesCount) { m_samplesCount = samplesCount; }
void connectTimer(const QTimer& timer); void connectTimer(const QTimer& timer);
@ -57,6 +59,7 @@ private:
std::size_t m_bufsize; std::size_t m_bufsize;
std::size_t m_samplesChunkSize; std::size_t m_samplesChunkSize;
SampleSourceFifo* m_sampleFifo; SampleSourceFifo* m_sampleFifo;
std::size_t m_samplesCount;
int m_samplerate; int m_samplerate;
int m_throttlems; int m_throttlems;

View File

@ -15,6 +15,7 @@ SUBDIRS += plugins/samplesource/sdrdaemon
#SUBDIRS += plugins/samplesource/rtlsdr #SUBDIRS += plugins/samplesource/rtlsdr
#SUBDIRS += plugins/samplesource/hackrf #SUBDIRS += plugins/samplesource/hackrf
#SUBDIRS += plugins/samplesource/airspy #SUBDIRS += plugins/samplesource/airspy
SUBDIRS += plugins/samplesink/filesink
SUBDIRS += plugins/channel/chanalyzer SUBDIRS += plugins/channel/chanalyzer
SUBDIRS += plugins/channel/demodam SUBDIRS += plugins/channel/demodam
SUBDIRS += plugins/channel/demodbfm SUBDIRS += plugins/channel/demodbfm

View File

@ -15,6 +15,7 @@ SUBDIRS += plugins/samplesource/sdrdaemon
SUBDIRS += plugins/samplesource/rtlsdr SUBDIRS += plugins/samplesource/rtlsdr
SUBDIRS += plugins/samplesource/hackrf SUBDIRS += plugins/samplesource/hackrf
SUBDIRS += plugins/samplesource/airspy SUBDIRS += plugins/samplesource/airspy
SUBDIRS += plugins/samplesink/filesink
SUBDIRS += plugins/channelrx/chanalyzer SUBDIRS += plugins/channelrx/chanalyzer
SUBDIRS += plugins/channelrx/demodam SUBDIRS += plugins/channelrx/demodam
SUBDIRS += plugins/channelrx/demodbfm SUBDIRS += plugins/channelrx/demodbfm

View File

@ -25,6 +25,7 @@ SUBDIRS += plugins/samplesource/rtlsdr
SUBDIRS += plugins/samplesource/hackrf SUBDIRS += plugins/samplesource/hackrf
SUBDIRS += plugins/samplesource/airspy SUBDIRS += plugins/samplesource/airspy
SUBDIRS += plugins/samplesource/bladerf SUBDIRS += plugins/samplesource/bladerf
SUBDIRS += plugins/samplesink/filesink
SUBDIRS += plugins/channelrx/chanalyzer SUBDIRS += plugins/channelrx/chanalyzer
SUBDIRS += plugins/channelrx/demodam SUBDIRS += plugins/channelrx/demodam
SUBDIRS += plugins/channelrx/demodbfm SUBDIRS += plugins/channelrx/demodbfm

View File

@ -14,6 +14,7 @@ copy %libusbdir%\dll\libusb-1.0.dll %2
mkdir %2\plugins mkdir %2\plugins
mkdir %2\plugins\channelrx mkdir %2\plugins\channelrx
mkdir %2\plugins\samplesource mkdir %2\plugins\samplesource
mkdir %2\plugins\samplesink
copy plugins\channelrx\chanalyzer\%1\chanalyzer.dll %2\plugins\channelrx copy plugins\channelrx\chanalyzer\%1\chanalyzer.dll %2\plugins\channelrx
copy plugins\channelrx\demodam\%1\demodam.dll %2\plugins\channelrx copy plugins\channelrx\demodam\%1\demodam.dll %2\plugins\channelrx
copy plugins\channelrx\demodbfm\%1\demodbfm.dll %2\plugins\channelrx copy plugins\channelrx\demodbfm\%1\demodbfm.dll %2\plugins\channelrx
@ -29,3 +30,4 @@ copy plugins\samplesource\rtlsdr\%1\inputrtlsdr.dll %2\plugins\samplesource
copy plugins\samplesource\hackrf\%1\inputhackrf.dll %2\plugins\samplesource copy plugins\samplesource\hackrf\%1\inputhackrf.dll %2\plugins\samplesource
copy plugins\samplesource\airspy\%1\inputairspy.dll %2\plugins\samplesource copy plugins\samplesource\airspy\%1\inputairspy.dll %2\plugins\samplesource
copy plugins\samplesource\bladerf\%1\inputbladerf.dll %2\plugins\samplesource copy plugins\samplesource\bladerf\%1\inputbladerf.dll %2\plugins\samplesource
copy plugins\samplesink\filesink\%1\outputfilesink.dll %2\plugins\samplesink

View File

@ -27,6 +27,7 @@ copy %libusbdir%\dll\libusb-1.0.dll %2
mkdir %2\plugins mkdir %2\plugins
mkdir %2\plugins\channelrx mkdir %2\plugins\channelrx
mkdir %2\plugins\samplesource mkdir %2\plugins\samplesource
mkdir %2\plugins\samplesink
copy plugins\channelrx\chanalyzer\%1\chanalyzer.dll %2\plugins\channelrx copy plugins\channelrx\chanalyzer\%1\chanalyzer.dll %2\plugins\channelrx
copy plugins\channelrx\demodam\%1\demodam.dll %2\plugins\channelrx copy plugins\channelrx\demodam\%1\demodam.dll %2\plugins\channelrx
copy plugins\channelrx\demodbfm\%1\demodbfm.dll %2\plugins\channelrx copy plugins\channelrx\demodbfm\%1\demodbfm.dll %2\plugins\channelrx
@ -44,3 +45,4 @@ copy plugins\samplesource\rtlsdr\%1\inputrtlsdr.dll %2\plugins\samplesource
copy plugins\samplesource\hackrf\%1\inputhackrf.dll %2\plugins\samplesource copy plugins\samplesource\hackrf\%1\inputhackrf.dll %2\plugins\samplesource
copy plugins\samplesource\airspy\%1\inputairspy.dll %2\plugins\samplesource copy plugins\samplesource\airspy\%1\inputairspy.dll %2\plugins\samplesource
copy plugins\samplesource\bladerf\%1\inputbladerf.dll %2\plugins\samplesource copy plugins\samplesource\bladerf\%1\inputbladerf.dll %2\plugins\samplesource
copy plugins\samplesink\filesink\%1\outputfilesink.dll %2\plugins\samplesink