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