#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: enum NumberFormat { NumberFormat_uint8, NumberFormat_uint16, NumberFormat_uint32, NumberFormat_int8, NumberFormat_int16, NumberFormat_int32 }; Ui::MainWindow *ui; QButtonGroup numberFormatButtons; QButtonGroup parityButtons; QButtonGroup dataBitsButtons; QButtonGroup stopBitsButtons; QButtonGroup flowControlButtons; QSerialPort serialPort; unsigned int numOfSamples; QwtPlotCurve curve; QVector dataArray; QVector dataX; void addData(QVector data); 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 double readSampleAs(); private slots: void loadPortList(); void loadBaudRateList(); void togglePort(); void selectPort(QString portName); void onPortToggled(bool open); void selectBaudRate(QString baudRate); void selectParity(int parity); // parity must be one of QSerialPort::Parity void selectDataBits(int dataBits); // bits must be one of QSerialPort::DataBits void selectStopBits(int stopBits); // stopBits must be one of QSerialPort::StopBits void selectFlowControl(int flowControl); // flowControl must be one of QSerialPort::FlowControl void onDataReady(); void onPortError(QSerialPort::SerialPortError error); void onNumOfSamplesChanged(int value); void onAutoScaleChecked(bool checked); void onYScaleChanged(); void onNumberFormatButtonToggled(int numberFormatId, bool checked); void selectNumberFormat(NumberFormat numberFormatId); void clearPlot(); signals: void portToggled(bool open); }; #endif // MAINWINDOW_H