Files
@ 5e8115ecea3b
Branch filter:
Location: tempo-plotter/src/datarecorder.h - annotation
5e8115ecea3b
3.3 KiB
text/plain
make chunked buffer based on FrameBuffer
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 | 954ac648eea9 f6ca721ac759 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 b44879156c7c b44879156c7c 954ac648eea9 f6ca721ac759 f6ca721ac759 f6ca721ac759 f6ca721ac759 f6ca721ac759 f6ca721ac759 f6ca721ac759 f6ca721ac759 f6ca721ac759 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 e70ba1409177 e70ba1409177 e70ba1409177 954ac648eea9 b1d64d0822d2 b1d64d0822d2 b1d64d0822d2 b1d64d0822d2 b1d64d0822d2 b1d64d0822d2 b1d64d0822d2 b1d64d0822d2 954ac648eea9 954ac648eea9 f6ca721ac759 f6ca721ac759 954ac648eea9 954ac648eea9 a5247fcab715 954ac648eea9 b2e9f1d04c4a 954ac648eea9 954ac648eea9 b2e9f1d04c4a b2e9f1d04c4a 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 954ac648eea9 f6ca721ac759 f6ca721ac759 f6ca721ac759 954ac648eea9 954ac648eea9 b44879156c7c b44879156c7c a5247fcab715 b2e9f1d04c4a b1d64d0822d2 b1d64d0822d2 b1d64d0822d2 954ac648eea9 954ac648eea9 954ac648eea9 | /*
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/>.
*/
#ifndef DATARECORDER_H
#define DATARECORDER_H
#include <QObject>
#include <QFile>
#include <QTextStream>
#include "sink.h"
/**
* Implemented as a `Sink` that writes incoming data to a file. Before
* connecting a `Source` recording must be started with the `startRecording`
* method. Also before calling `stopRecording`, recorder should be disconnected
* from source.
*/
class DataRecorder : public QObject, public Sink
{
Q_OBJECT
public:
explicit DataRecorder(QObject *parent = 0);
/// Disables file buffering
bool disableBuffering;
/**
* Use CR+LF as line ending. `false` by default.
*
* @note Toggling this variable during a recording will result in
* a corrupted file. Care must be taken at higher (UI) levels.
*/
bool windowsLE;
/**
* @brief Starts recording data to a file in CSV format.
*
* File is opened and header line (names of channels) is written. After
* calling this function recorder should be connected to a `Source`.
*
* @param fileName name of the recording file
* @param separator column separator
* @param channelNames names of the channels for header line, if empty no header line is written
* @param insertTime enable inserting timestamp
* @return false if file operation fails (read only etc.)
*/
bool startRecording(QString fileName, QString separator,
QStringList channelNames, bool insertTime);
/**
* @brief Adds data to a channel.
*
* Multiple rows of data can be added at a time. Each channels
* data should be ordered consecutively in the `data` array:
*
* [CH0_SMP0, CH0_SMP1 ... CH0_SMPN, CH1_SMP0, CH1_SMP1, ... , CHN_SMPN]
*
* If `numOfChannels` changes during recording, no data will be
* lost (ie. it will be written to the file) but this will produce
* an invalid CSV file. An error message will be written to the
* console.
*
* @param data samples array
* @param length number of samples in `data`, must be multiple of `numOfChannels`
* @param numOfChannels how many channels samples this data carries
*/
void addData(double* data, unsigned length, unsigned numOfChannels);
/// Stops recording, closes file.
void stopRecording();
protected:
virtual void feedIn(const SamplePack& data);
private:
unsigned lastNumChannels; ///< used for error message only
QFile file;
QTextStream fileStream;
QString _sep;
bool timestampEn;
/// Returns the selected line ending.
const char* le() const;
};
#endif // DATARECORDER_H
|