Files @ e92bd1a05782
Branch filter:

Location: tempo-plotter/mainwindow.h - annotation

Hasan Yavuz ÖZDERYA
do not print "baud rate changed" message
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
ce43e0348d45
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
649401566a84
8fd74552f317
58db5f6bf2b1
f38042ba2eb0
8932fd91959c
58db5f6bf2b1
4d74a5d375ab
abcdecae08b4
70f83253cf6c
f918be7cd46f
f38042ba2eb0
d4f23bf96cf5
58db5f6bf2b1
6a311d722818
cb28b6958b0e
3d321162263e
cb28b6958b0e
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
f918be7cd46f
f918be7cd46f
f918be7cd46f
58db5f6bf2b1
649401566a84
649401566a84
649401566a84
649401566a84
649401566a84
649401566a84
649401566a84
508c8437347e
a6f1f85f1eba
508c8437347e
649401566a84
649401566a84
58db5f6bf2b1
649401566a84
649401566a84
cb28b6958b0e
cb28b6958b0e
cb28b6958b0e
58db5f6bf2b1
fffccd972bd4
58db5f6bf2b1
f38042ba2eb0
8932fd91959c
8932fd91959c
8932fd91959c
8932fd91959c
3d321162263e
3d321162263e
8932fd91959c
a510b72b400b
8bc730cfda45
f38042ba2eb0
649401566a84
649401566a84
649401566a84
649401566a84
649401566a84
649401566a84
649401566a84
bcd6b30d01d1
bcd6b30d01d1
8fd74552f317
8fd74552f317
8fd74552f317
8fd74552f317
8fd74552f317
abcdecae08b4
abcdecae08b4
abcdecae08b4
abcdecae08b4
d4f23bf96cf5
abcdecae08b4
70f83253cf6c
70f83253cf6c
58db5f6bf2b1
58db5f6bf2b1
508c8437347e
508c8437347e
b12c2ff3d038
58db5f6bf2b1
bcd6b30d01d1
bcd6b30d01d1
a6e52579723b
90fb38350cfd
90fb38350cfd
a6e52579723b
e65811fa0522
649401566a84
649401566a84
649401566a84
44b87d87610b
44b87d87610b
8fd74552f317
8fd74552f317
abcdecae08b4
abcdecae08b4
4cc4bd170d6a
4cc4bd170d6a
58db5f6bf2b1
58db5f6bf2b1
58db5f6bf2b1
/*
  Copyright © 2015 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 MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QButtonGroup>
#include <QLabel>
#include <QString>
#include <QVector>
#include <QList>
#include <QSerialPort>
#include <QSignalMapper>
#include <QTimer>
#include <QColor>
#include <QtGlobal>
#include <qwt_plot_curve.h>
#include <qwt_plot_textlabel.h>

#include "portcontrol.h"
#include "ui_about_dialog.h"
#include "framebuffer.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void messageHandler(QtMsgType type, const QMessageLogContext &context,
                        const QString &msg);

private:
    enum NumberFormat
    {
        NumberFormat_uint8,
        NumberFormat_uint16,
        NumberFormat_uint32,
        NumberFormat_int8,
        NumberFormat_int16,
        NumberFormat_int32,
        NumberFormat_float,
        NumberFormat_ASCII
    };

    Ui::MainWindow *ui;
    QButtonGroup numberFormatButtons;

    QDialog aboutDialog;
    void setupAboutDialog();

    QSerialPort serialPort;
    PortControl portControl;

    unsigned int numOfSamples;
    unsigned int numOfChannels;

    QList<QwtPlotCurve*> curves;
    typedef QVector<double> DataArray;
    // Note: FrameBuffer s are owned by their respective QwtPlotCurve s.
    QList<FrameBuffer*> channelBuffers;

    // `data` contains i th channels data
    void addChannelData(unsigned int channel, double* data, unsigned size);

    NumberFormat numberFormat;
    unsigned int sampleSize; // number of bytes in the selected number format
    double (MainWindow::*readSample)();

    // note that serialPort should already have enough bytes present
    template<typename T> double readSampleAs();

    bool skipByteRequested;

    const int SPS_UPDATE_TIMEOUT = 1;  // second
    QLabel spsLabel;
    unsigned int sampleCount;
    QTimer spsTimer;

    // demo
    QTimer demoTimer;
    int demoCount;
    bool isDemoRunning();
    QwtPlotTextLabel demoIndicator;

    QColor makeColor(unsigned int channelIndex);

private slots:
    void onPortToggled(bool open);
    void onDataReady();      // used with binary number formats
    void onDataReadyASCII(); // used with ASCII number format
    void onPortError(QSerialPort::SerialPortError error);

    void skipByte();

    void onNumOfSamplesChanged(int value);
    void onAutoScaleChecked(bool checked);
    void onYScaleChanged();

    void onNumOfChannelsChanged(int value);
    void onNumberFormatButtonToggled(int numberFormatId, bool checked);
    void selectNumberFormat(NumberFormat numberFormatId);

    void clearPlot();

    void spsTimerTimeout();

    void demoTimerTimeout();
    void enableDemo(bool enabled);

    void onExportCsv();
};

#endif // MAINWINDOW_H