LibreVNA/Software/PC_Application/LibreVNA-GUI/Traces/eyediagramplot.h
2022-10-21 19:50:06 +02:00

105 lines
2.7 KiB
C++

#ifndef EYEDIAGRAMPLOT_H
#define EYEDIAGRAMPLOT_H
#include "traceplot.h"
#include "traceaxis.h"
#include "Traces/Math/tdr.h"
#include <mutex>
#include <QObject>
class EyeDiagramPlot : public TracePlot
{
// friend class WaterfallAxisDialog;
Q_OBJECT
public:
EyeDiagramPlot(TraceModel &model, QWidget *parent = 0);
~EyeDiagramPlot();
virtual void enableTrace(Trace *t, bool enabled) override;
void replot() override;
virtual void move(const QPoint &vect) override;
virtual void zoom(const QPoint &center, double factor, bool horizontally, bool vertically) override;
virtual void setAuto(bool horizontally, bool vertically) override;
virtual Type getType() override { return Type::EyeDiagram;}
void fromJSON(nlohmann::json j) override;
nlohmann::json toJSON() override;
public slots:
void axisSetupDialog();
signals:
void statusChanged(QString);
protected:
virtual void updateContextMenu() override;
virtual bool positionWithinGraphArea(const QPoint &p) override;
virtual void draw(QPainter& p) override;
virtual bool supported(Trace *t) override;
virtual QPoint markerToPixel(Marker *m) override { Q_UNUSED(m) return QPoint(0,0);} // never used but most be implemented
virtual double nearestTracePoint(Trace *t, QPoint pixel, double *distance = nullptr) override {Q_UNUSED(t)Q_UNUSED(pixel)Q_UNUSED(distance)return 0.0;} // never used but most be implemented
virtual QString mouseText(QPoint pos) override;
protected slots:
virtual bool markerVisible(double x) override {Q_UNUSED(x)return false;} // never show markers
private slots:
void triggerUpdate();
private:
static constexpr double yOverrange = 0.2;
QPoint plotValueToPixel(QPointF plotValue);
QPointF pixelToPlotValue(QPoint pixel);
void updateThread(unsigned int xSamples);
void setStatus(QString s);
double calculatedTime();
double minDisplayVoltage();
double maxDisplayVoltage();
Math::TDR *tdr;
Trace *trace;
XAxis xAxis;
YAxis yAxis;
class Xdata {
public:
double x;
std::vector<double> y;
};
std::vector<Xdata> data[2];
std::vector<Xdata> *displayData;
std::vector<Xdata> *calcData;
bool updating;
bool updateScheduled;
unsigned int xSamples;
double datarate;
double highlevel;
double lowlevel;
unsigned int bitsPerSymbol;
double risetime;
double falltime;
double noise;
double jitter;
bool linearEdge;
unsigned int patternbits;
unsigned int cycles;
int traceBlurring;
int plotAreaLeft, plotAreaWidth, plotAreaBottom, plotAreaTop;
QString status;
std::mutex bufferSwitchMutex;
std::mutex calcMutex;
};
#endif // EYEDIAGRAMPLOT_H