diff --git a/dataformatpanel.h b/dataformatpanel.h new file mode 100644 --- /dev/null +++ b/dataformatpanel.h @@ -0,0 +1,117 @@ +/* + 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 . +*/ + +#ifndef DATAFORMATPANEL_H +#define DATAFORMATPANEL_H + +#include +#include +#include +#include +#include +#include + +#include "framebuffer.h" + +namespace Ui { +class DataFormatPanel; +} + +class DataFormatPanel : public QWidget +{ + Q_OBJECT + +public: + explicit DataFormatPanel(QSerialPort* port, + QList* channelBuffers, + QWidget *parent = 0); + ~DataFormatPanel(); + + unsigned numOfChannels(); + unsigned samplesPerSecond(); + bool skipByteEnabled(void); // true for binary formats + +public slots: + // during next read operation reader will skip 1 byte, + // requests are not accumulated + void requestSkipByte(); + void pause(bool); + void enableDemo(bool); // demo shouldn't be enabled when port is open + +signals: + void numOfChannelsChanged(unsigned); + void samplesPerSecondChanged(unsigned); + void skipByteEnabledChanged(bool); + void dataAdded(); + +private: + enum NumberFormat + { + NumberFormat_uint8, + NumberFormat_uint16, + NumberFormat_uint32, + NumberFormat_int8, + NumberFormat_int16, + NumberFormat_int32, + NumberFormat_float, + NumberFormat_ASCII + }; + + Ui::DataFormatPanel *ui; + QButtonGroup numberFormatButtons; + + QSerialPort* serialPort; + QList* _channelBuffers; + + unsigned int _numOfChannels; + NumberFormat numberFormat; + unsigned int sampleSize; // number of bytes in the selected number format + bool skipByteRequested; + bool paused; + + const int SPS_UPDATE_TIMEOUT = 1; // second + unsigned _samplesPerSecond; + unsigned int sampleCount; + QTimer spsTimer; + + // demo + QTimer demoTimer; + int demoCount; + + void selectNumberFormat(NumberFormat numberFormatId); + + // points to the readSampleAs function for currently selected number format + double (DataFormatPanel::*readSample)(); + + // note that serialPort should already have enough bytes present + template double readSampleAs(); + + // `data` contains i th channels data + void addChannelData(unsigned int channel, double* data, unsigned size); + +private slots: + void onDataReady(); // used with binary number formats + void onDataReadyASCII(); // used with ASCII number format + void onNumberFormatButtonToggled(int numberFormatId, bool checked); + void onNumOfChannelsSP(int value); + void spsTimerTimeout(); + void demoTimerTimeout(); +}; + +#endif // DATAFORMATPANEL_H