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;