Files
@ 48e24c542d4e
Branch filter:
Location: tempo-plotter/src/datarecorder.cpp - annotation
48e24c542d4e
3.3 KiB
text/x-c++hdr
Change binary name
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | 954ac648eea9 f6ca721ac759 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 85030785d3fc 85030785d3fc b2e9f1d04c4a b44879156c7c b44879156c7c b44879156c7c b44879156c7c b44879156c7c 954ac648eea9 b44879156c7c e70ba1409177 b1d64d0822d2 b2e9f1d04c4a 954ac648eea9 954ac648eea9 b2e9f1d04c4a b2e9f1d04c4a 954ac648eea9 b44879156c7c a5247fcab715 b2e9f1d04c4a 954ac648eea9 85030785d3fc 85030785d3fc 85030785d3fc 85030785d3fc 85030785d3fc 85030785d3fc 85030785d3fc 85030785d3fc 85030785d3fc 85030785d3fc b44879156c7c b44879156c7c b44879156c7c b44879156c7c b44879156c7c b44879156c7c b44879156c7c b44879156c7c b44879156c7c b44879156c7c b44879156c7c b44879156c7c b2e9f1d04c4a b2e9f1d04c4a b2e9f1d04c4a b2e9f1d04c4a a5247fcab715 b1d64d0822d2 b44879156c7c b44879156c7c b44879156c7c 954ac648eea9 954ac648eea9 f6ca721ac759 954ac648eea9 f6ca721ac759 f6ca721ac759 954ac648eea9 f6ca721ac759 f6ca721ac759 f6ca721ac759 b44879156c7c b44879156c7c f6ca721ac759 b44879156c7c b44879156c7c f6ca721ac759 b44879156c7c f6ca721ac759 b2e9f1d04c4a b2e9f1d04c4a f6ca721ac759 f6ca721ac759 b44879156c7c b2e9f1d04c4a b2e9f1d04c4a b2e9f1d04c4a b2e9f1d04c4a f6ca721ac759 b44879156c7c f6ca721ac759 f6ca721ac759 b44879156c7c b1d64d0822d2 b44879156c7c e70ba1409177 e70ba1409177 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 b44879156c7c 954ac648eea9 b44879156c7c b44879156c7c 954ac648eea9 b1d64d0822d2 b1d64d0822d2 b1d64d0822d2 b1d64d0822d2 b1d64d0822d2 | /*
Copyright © 2018 Hasan Yavuz Özderya
This file is part of serialplot.
serialplot is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
serialplot is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with serialplot. If not, see <http://www.gnu.org/licenses/>.
*/
#include "datarecorder.h"
#include <QFileInfo>
#include <QDir>
#include <QDateTime>
#include <QtDebug>
DataRecorder::DataRecorder(QObject *parent) :
QObject(parent),
fileStream(&file)
{
lastNumChannels = 0;
disableBuffering = false;
windowsLE = false;
timestampEn = false;
}
bool DataRecorder::startRecording(QString fileName, QString separator,
QStringList channelNames, bool insertTime)
{
Q_ASSERT(!file.isOpen());
_sep = separator;
timestampEn = insertTime;
// create directory if it doesn't exist
{
QFileInfo fi(fileName);
if (!fi.dir().mkpath("."))
{
qCritical() << "Failed to create directory for: " << fileName;
return false;
}
}
// open file
file.setFileName(fileName);
if (!file.open(QIODevice::WriteOnly))
{
qCritical() << "Opening file " << fileName
<< " for recording failed with error: " << file.error();
return false;
}
// write header line
if (!channelNames.isEmpty())
{
if (timestampEn)
{
fileStream << tr("timestamp") << _sep;
}
fileStream << channelNames.join(_sep);
fileStream << le();
lastNumChannels = channelNames.length();
}
return true;
}
void DataRecorder::feedIn(const SamplePack& data)
{
Q_ASSERT(file.isOpen()); // recorder should be disconnected before stopping recording
Q_ASSERT(!data.hasX()); // NYI
// check if number of channels has changed during recording and warn
unsigned numChannels = data.numChannels();
if (lastNumChannels != 0 && numChannels != lastNumChannels)
{
qWarning() << "Number of channels changed from " << lastNumChannels
<< " to " << numChannels <<
" during recording, CSV file is corrupted but no data will be lost.";
}
lastNumChannels = numChannels;
// write data
qint64 timestamp;
if (timestampEn) timestamp = QDateTime::currentMSecsSinceEpoch();
unsigned numSamples = data.numSamples();
for (unsigned int i = 0; i < numSamples; i++)
{
if (timestampEn)
{
fileStream << timestamp << _sep;
}
for (unsigned ci = 0; ci < numChannels; ci++)
{
fileStream << data.data(ci)[i];
if (ci != numChannels-1) fileStream << _sep;
}
fileStream << le();
}
if (disableBuffering) fileStream.flush();
}
void DataRecorder::stopRecording()
{
Q_ASSERT(file.isOpen());
file.close();
lastNumChannels = 0;
}
const char* DataRecorder::le() const
{
return windowsLE ? "\r\n" : "\n";
}
|