diff --git a/plugins/samplesource/filesource/filesourcegui.cpp b/plugins/samplesource/filesource/filesourcegui.cpp index d6174d909..f76a26af0 100644 --- a/plugins/samplesource/filesource/filesourcegui.cpp +++ b/plugins/samplesource/filesource/filesourcegui.cpp @@ -38,6 +38,7 @@ FileSourceGui::FileSourceGui(PluginAPI* pluginAPI, QWidget* parent) : m_fileName("..."), m_sampleRate(0), m_centerFrequency(0), + m_recordLength(0), m_startingTimeStamp(0), m_samplesCount(0), m_tickCount(0) @@ -124,6 +125,7 @@ bool FileSourceGui::handleMessage(const Message& message) m_sampleRate = ((FileSourceInput::MsgReportFileSourceStreamData&)message).getSampleRate(); m_centerFrequency = ((FileSourceInput::MsgReportFileSourceStreamData&)message).getCenterFrequency(); m_startingTimeStamp = ((FileSourceInput::MsgReportFileSourceStreamData&)message).getStartingTimeStamp(); + m_recordLength = ((FileSourceInput::MsgReportFileSourceStreamData&)message).getRecordLength(); updateWithStreamData(); return true; } @@ -205,6 +207,10 @@ void FileSourceGui::updateWithStreamData() QString s = QString::number(m_sampleRate/1000.0, 'f', 0); ui->sampleRateText->setText(tr("%1k").arg(s)); ui->play->setEnabled(m_acquisition); + QTime recordLength(0, 0, 0, 0); + recordLength = recordLength.addSecs(m_recordLength); + QString s_time = recordLength.toString("hh:mm:ss"); + ui->recordLengthText->setText(s_time); updateWithStreamTime(); // TODO: remove when time data is implemented } diff --git a/plugins/samplesource/filesource/filesourcegui.h b/plugins/samplesource/filesource/filesourcegui.h index d77ebdd75..d481dc1d4 100644 --- a/plugins/samplesource/filesource/filesourcegui.h +++ b/plugins/samplesource/filesource/filesourcegui.h @@ -58,6 +58,7 @@ private: QString m_fileName; int m_sampleRate; quint64 m_centerFrequency; + quint32 m_recordLength; std::time_t m_startingTimeStamp; int m_samplesCount; std::size_t m_tickCount; diff --git a/plugins/samplesource/filesource/filesourcegui.ui b/plugins/samplesource/filesource/filesourcegui.ui index 16d417c3c..10d2e4ff4 100644 --- a/plugins/samplesource/filesource/filesourcegui.ui +++ b/plugins/samplesource/filesource/filesourcegui.ui @@ -6,7 +6,7 @@ 0 0 - 266 + 289 133 @@ -303,7 +303,7 @@ - + Qt::Vertical @@ -331,6 +331,35 @@ + + + + Qt::Vertical + + + + + + + false + + + + 60 + 0 + + + + Total record time + + + 00:00:00 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + diff --git a/plugins/samplesource/filesource/filesourceinput.cpp b/plugins/samplesource/filesource/filesourceinput.cpp index 46d1788a2..4f5de24a0 100644 --- a/plugins/samplesource/filesource/filesourceinput.cpp +++ b/plugins/samplesource/filesource/filesourceinput.cpp @@ -78,6 +78,7 @@ FileSourceInput::FileSourceInput(const QTimer& masterTimer) : m_fileName("..."), m_sampleRate(0), m_centerFrequency(0), + m_recordLength(0), m_startingTimeStamp(0), m_masterTimer(masterTimer) { @@ -90,15 +91,15 @@ FileSourceInput::~FileSourceInput() void FileSourceInput::openFileStream() { - qDebug() << "FileSourceInput::openFileStream: " << m_fileName.toStdString().c_str(); - //stopInput(); if (m_ifstream.is_open()) { m_ifstream.close(); } - m_ifstream.open(m_fileName.toStdString().c_str(), std::ios::binary); + m_ifstream.open(m_fileName.toStdString().c_str(), std::ios::binary | std::ios::ate); + quint64 fileSize = m_ifstream.tellg(); + m_ifstream.seekg(0,std::ios_base::beg); FileSink::Header header; FileSink::readHeader(m_ifstream, header); @@ -106,7 +107,20 @@ void FileSourceInput::openFileStream() m_centerFrequency = header.centerFrequency; m_startingTimeStamp = header.startTimeStamp; - MsgReportFileSourceStreamData *report = MsgReportFileSourceStreamData::create(m_sampleRate, m_centerFrequency, m_startingTimeStamp); // file stream data + if (fileSize > sizeof(FileSink::Header)) { + m_recordLength = (fileSize - sizeof(FileSink::Header)) / (4 * m_sampleRate); + } else { + m_recordLength = 0; + } + + qDebug() << "FileSourceInput::openFileStream: " << m_fileName.toStdString().c_str() + << " fileSize: " << fileSize << "bytes" + << " length: " << m_recordLength << " seconds"; + + MsgReportFileSourceStreamData *report = MsgReportFileSourceStreamData::create(m_sampleRate, + m_centerFrequency, + m_startingTimeStamp, + m_recordLength); // file stream data getOutputMessageQueueToGUI()->push(report); } diff --git a/plugins/samplesource/filesource/filesourceinput.h b/plugins/samplesource/filesource/filesourceinput.h index fe16d3576..5360b2644 100644 --- a/plugins/samplesource/filesource/filesourceinput.h +++ b/plugins/samplesource/filesource/filesourceinput.h @@ -141,22 +141,31 @@ public: int getSampleRate() const { return m_sampleRate; } quint64 getCenterFrequency() const { return m_centerFrequency; } std::time_t getStartingTimeStamp() const { return m_startingTimeStamp; } + quint32 getRecordLength() const { return m_recordLength; } - static MsgReportFileSourceStreamData* create(int sampleRate, quint64 centerFrequency, std::time_t startingTimeStamp) + static MsgReportFileSourceStreamData* create(int sampleRate, + quint64 centerFrequency, + std::time_t startingTimeStamp, + quint32 recordLength) { - return new MsgReportFileSourceStreamData(sampleRate, centerFrequency, startingTimeStamp); + return new MsgReportFileSourceStreamData(sampleRate, centerFrequency, startingTimeStamp, recordLength); } protected: int m_sampleRate; quint64 m_centerFrequency; std::time_t m_startingTimeStamp; + quint32 m_recordLength; - MsgReportFileSourceStreamData(int sampleRate, quint64 centerFrequency, std::time_t startingTimeStamp) : + MsgReportFileSourceStreamData(int sampleRate, + quint64 centerFrequency, + std::time_t startingTimeStamp, + quint32 recordLength) : Message(), m_sampleRate(sampleRate), m_centerFrequency(centerFrequency), - m_startingTimeStamp(startingTimeStamp) + m_startingTimeStamp(startingTimeStamp), + m_recordLength(recordLength) { } }; @@ -203,6 +212,7 @@ private: QString m_fileName; int m_sampleRate; quint64 m_centerFrequency; + quint32 m_recordLength; //!< record length in seconds computed from file size std::time_t m_startingTimeStamp; const QTimer& m_masterTimer;