Commit 4bb601b2 authored by LM's avatar LM

Added option to zero-order hold for logging

parent 01363b88
...@@ -231,19 +231,35 @@ void LogCompressor::run() ...@@ -231,19 +231,35 @@ void LogCompressor::run()
for (int index = 0; index < outLines->count(); ++index) for (int index = 0; index < outLines->count(); ++index)
{ {
QString line = outLines->at(index); QString line = outLines->at(index);
//qDebug() << "LINE" << line;
QStringList fields = line.split(separator, QString::SkipEmptyParts); QStringList fields = line.split(separator, QString::SkipEmptyParts);
// The fields line contains the timestamp // The fields line contains the timestamp
// index of the data fields therefore runs from 1 to n-1 // index of the data fields therefore runs from 1 to n-1
int fieldCount = fields.count(); int fieldCount = fields.count();
for (int i = 1; i < fillCount+1; ++i) for (int i = 1; i < fillCount+1; ++i)
{ {
if (fieldCount < fillCount) fields.append(""); if (fieldCount <= i) fields.append("");
// Allow input data to be screwed up
if (fields.at(i) == "\t" || fields.at(i) == " " || fields.at(i) == "\n")
{
// Remove invalid data
if (fieldCount > fillCount+1)
{
// This field has a seperator value and is too much
//qDebug() << "REMOVED INVALID INPUT DATA";
fields.removeAt(i);
}
// Continue on invalid data
continue;
}
// Check if this is NaN // Check if this is NaN
if (fields[i] == 0 || fields[i] == "" || fields[i] == "\t" || fields[i] == " " || fields[i] == "\n") if (fields.at(i) == 0 || fields.at(i) == "")
{ {
// Value was empty, replace it // Value was empty, replace it
fields.replace(i, fillValues[i-1]); fields.replace(i, fillValues[i-1]);
//qDebug() << "FILL" << fillValues.at(i-1);
} }
else else
{ {
...@@ -285,8 +301,14 @@ void LogCompressor::run() ...@@ -285,8 +301,14 @@ void LogCompressor::run()
running = false; running = false;
} }
void LogCompressor::startCompression() /**
* @param holeFilling If hole filling is enabled, the compressor tries to fill empty data fields with previous
* values from the same variable (or NaN, if no previous value existed)
*/
void LogCompressor::startCompression(bool holeFilling)
{ {
// Set hole filling
holeFillingEnabled = holeFilling;
start(); start();
} }
......
...@@ -9,7 +9,8 @@ class LogCompressor : public QThread ...@@ -9,7 +9,8 @@ class LogCompressor : public QThread
public: public:
/** @brief Create the log compressor. It will only get active upon calling startCompression() */ /** @brief Create the log compressor. It will only get active upon calling startCompression() */
LogCompressor(QString logFileName, QString outFileName="", int uasid = 0); LogCompressor(QString logFileName, QString outFileName="", int uasid = 0);
void startCompression(); /** @brief Start the compression of a raw, line-based logfile into a CSV file */
void startCompression(bool holeFilling=false);
bool isFinished(); bool isFinished();
int getDataLines(); int getDataLines();
int getCurrentLine(); int getCurrentLine();
......
...@@ -499,8 +499,25 @@ void LinechartWidget::stopLogging() ...@@ -499,8 +499,25 @@ void LinechartWidget::stopLogging()
compressor = new LogCompressor(logFile->fileName(), logFile->fileName()); compressor = new LogCompressor(logFile->fileName(), logFile->fileName());
connect(compressor, SIGNAL(finishedFile(QString)), this, SIGNAL(logfileWritten(QString))); connect(compressor, SIGNAL(finishedFile(QString)), this, SIGNAL(logfileWritten(QString)));
connect(compressor, SIGNAL(logProcessingStatusChanged(QString)), MainWindow::instance(), SLOT(showStatusMessage(QString))); connect(compressor, SIGNAL(logProcessingStatusChanged(QString)), MainWindow::instance(), SLOT(showStatusMessage(QString)));
MainWindow::instance()->showInfoMessage("Logging ended", "QGroundControl is now compressing the logfile in a consistent CVS file. This may take a while, you can continue to use QGroundControl. Status updates appear at the bottom of the window.");
compressor->startCompression(); QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Question);
msgBox.setText(tr("Starting Log Compression"));
msgBox.setInformativeText(tr("Should empty fields be filled with the previous variable of the same variable? The compression might take some time.."));
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
int ret = msgBox.exec();
bool fill;
if (ret == QMessageBox::Yes)
{
fill = true;
}
else
{
fill = false;
}
compressor->startCompression(fill);
} }
logButton->setText(tr("Start logging")); logButton->setText(tr("Start logging"));
disconnect(logButton, SIGNAL(clicked()), this, SLOT(stopLogging())); disconnect(logButton, SIGNAL(clicked()), this, SLOT(stopLogging()));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment