/***************************************************************************
 *   Copyright (C) 2020 by Santiago González                               *
 *                                                                         *
 ***( see copyright.txt file at root folder )*******************************/

#pragma once

#include "e-element.h"
#include "updatable.h"

#include <QVector>

enum cond_t{
    C_NONE=0,
    C_LOW,
    C_RISING,
    C_HIGH,
    C_FALLING
};

class PlotBase;
class Pin;

class DataChannel : public eElement, public Updatable
{
        friend class PlotBase;
        friend class Oscope;
        friend class LAnalizer;
        friend class PlotDisplay;

    public:

        DataChannel( PlotBase* plotBase, QString id );
        ~DataChannel();

        virtual void stamp() override;

        virtual void setFilter( double f ) {;}

        bool isBus();
        virtual void setIsBus( bool b ){;}

        QString getChName() { return m_chTunnel; }

        bool doTest( bool test );

        QString testData();
        void setTestData( QString td );

    protected:
        QVector<double> m_buffer;
        QVector<uint64_t> m_time;

        QVector<double> m_bufferTest;
        QVector<uint64_t> m_timeTest;

        bool m_connected;
        bool m_rising;
        bool m_falling;
        bool m_trigger;
        int m_trigIndex;

        uint64_t m_risEdge;
        uint64_t m_period;

        int m_channel;
        int m_bufferCounter;

        bool m_pauseOnCond;
        cond_t m_lastCond;

        QString m_chTunnel;

        Pin* m_pin;

        PlotBase* m_plotBase;
};
