Files @ a30d48dab8b8
Branch filter:

Location: tempo-plotter/src/stream.h - annotation

Hasan Yavuz ÖZDERYA
Merge with default
b29ee5395753
391ab62116c8
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
9fa4f585184b
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
5c0005f331cf
b29ee5395753
5c0005f331cf
b29ee5395753
5c0005f331cf
5c0005f331cf
b29ee5395753
b29ee5395753
b29ee5395753
5c0005f331cf
b29ee5395753
b29ee5395753
391ab62116c8
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
5c0005f331cf
b29ee5395753
b29ee5395753
b29ee5395753
5c0005f331cf
1e7920e956a9
68f79a7c6762
391ab62116c8
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
391ab62116c8
391ab62116c8
391ab62116c8
f5271e6d0ce0
391ab62116c8
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
5c0005f331cf
391ab62116c8
391ab62116c8
391ab62116c8
391ab62116c8
b29ee5395753
8554454db965
8554454db965
8554454db965
391ab62116c8
391ab62116c8
391ab62116c8
391ab62116c8
391ab62116c8
391ab62116c8
391ab62116c8
391ab62116c8
391ab62116c8
f5271e6d0ce0
f5271e6d0ce0
f5271e6d0ce0
f5271e6d0ce0
6b14ef397a98
6b14ef397a98
6b14ef397a98
6b14ef397a98
f5271e6d0ce0
f5271e6d0ce0
6b14ef397a98
f5271e6d0ce0
f5271e6d0ce0
b29ee5395753
b29ee5395753
b29ee5395753
b29ee5395753
/*
  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 STREAM_H
#define STREAM_H

#include <QObject>
#include <QModelIndex>
#include <QVector>
#include <QSettings>

#include "sink.h"
#include "source.h"
#include "channelinfomodel.h"
#include "streamchannel.h"
#include "framebuffer.h"

/**
 * Main waveform storage class. It consists of channels. Channels are
 * synchronized with each other.
 *
 * Implements `Sink` class for data entry. It's expected to be
 * connected to a `Device` source.
 */
class Stream : public QObject, public Sink
{
    Q_OBJECT

public:
    /**
     * @param nc number of channels
     * @param x has X data input
     * @param ns number of samples
     */
    Stream(unsigned nc = 0, bool x = false, unsigned ns = 0);
    ~Stream();

    // implementations for `Source`
    virtual bool hasX() const;
    virtual unsigned numChannels() const;

    unsigned numSamples() const;
    const StreamChannel* channel(unsigned index) const;
    StreamChannel* channel(unsigned index);
    const ChannelInfoModel* infoModel() const;
    ChannelInfoModel* infoModel();

    /// Saves channel information
    void saveSettings(QSettings* settings) const;
    /// Load channel information
    void loadSettings(QSettings* settings);

protected:
    // implementations for `Sink`
    virtual void setNumChannels(unsigned nc, bool x);
    virtual void feedIn(const SamplePack& pack);

signals:
    void numChannelsChanged(unsigned value);
    void numSamplesChanged(unsigned value);
    void channelAdded(const StreamChannel* chan);
    void channelNameChanged(unsigned channel, QString name); // TODO: does it stay?
    void dataAdded(); ///< emitted when data added to channel man.

public slots:
    // TODO: these won't be public
    // void setNumChannels(unsigned number);
    void setNumSamples(unsigned value);

    /// When paused data feed is ignored
    void pause(bool paused);

    /// Clears buffer data (fills with 0)
    void clear();

private:
    unsigned _numSamples;
    bool _paused;

    bool _hasx;
    ResizableBuffer* xData;
    QList<StreamChannel*> channels;

    ChannelInfoModel _infoModel;

    /**
     * Applies gain and offset to given pack.
     *
     * Caller is responsible for deleting returned `SamplePack`.
     *
     * @note Should be called only when gain or offset is enabled. Guard with
     * `ChannelInfoModel::gainOrOffsetEn()`.
     *
     * @param pack input data
     * @return modified data
     */
    const SamplePack* applyGainOffset(const SamplePack& pack) const;
};


#endif // STREAM_H