| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2017-05-21 13:32:56 +02:00
										 |  |  | // Copyright (C) 2017 Edouard Griffiths, F4EXB                                   //
 | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // This program 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 as version 3 of the License, or                  //
 | 
					
						
							| 
									
										
										
										
											2019-04-11 06:39:30 +02:00
										 |  |  | // (at your option) any later version.                                           //
 | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // This program 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 V3 for more details.                               //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // You should have received a copy of the GNU General Public License             //
 | 
					
						
							|  |  |  | // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 22:58:42 +01:00
										 |  |  | #ifndef INCLUDE_REMOTEOUTPUTGUI_H
 | 
					
						
							|  |  |  | #define INCLUDE_REMOTEOUTPUTGUI_H
 | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-02 19:12:03 +02:00
										 |  |  | #include <stdint.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | #include <QTimer>
 | 
					
						
							| 
									
										
										
										
											2020-04-27 12:33:57 +02:00
										 |  |  | #include <QElapsedTimer>
 | 
					
						
							| 
									
										
										
										
											2017-09-03 17:26:32 +02:00
										 |  |  | #include <QWidget>
 | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-05 19:23:13 +02:00
										 |  |  | #include "device/devicegui.h"
 | 
					
						
							| 
									
										
										
										
											2017-09-16 22:23:31 +02:00
										 |  |  | #include "util/messagequeue.h"
 | 
					
						
							| 
									
										
										
										
											2018-08-31 07:38:30 +02:00
										 |  |  | #include "util/limitedcounter.h"
 | 
					
						
							| 
									
										
										
										
											2017-09-16 22:23:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 22:58:42 +01:00
										 |  |  | #include "remoteoutput.h"
 | 
					
						
							|  |  |  | #include "remoteoutputsettings.h"
 | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class DeviceSampleSink; | 
					
						
							| 
									
										
										
										
											2017-10-30 01:11:35 +01:00
										 |  |  | class DeviceUISet; | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace Ui { | 
					
						
							| 
									
										
										
										
											2019-02-02 22:58:42 +01:00
										 |  |  | 	class RemoteOutputGui; | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 22:58:42 +01:00
										 |  |  | class RemoteOutputExpAvg { | 
					
						
							| 
									
										
										
										
											2018-09-02 19:12:03 +02:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2019-02-02 22:58:42 +01:00
										 |  |  |     RemoteOutputExpAvg(float alpha) : | 
					
						
							| 
									
										
										
										
											2018-09-02 19:12:03 +02:00
										 |  |  |         m_alpha(alpha), | 
					
						
							|  |  |  |         m_start(true), | 
					
						
							|  |  |  |         m_s(0) | 
					
						
							|  |  |  |     {} | 
					
						
							|  |  |  |     int put(int y) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (m_start) { | 
					
						
							|  |  |  |             m_start = false; | 
					
						
							|  |  |  |             m_s = y; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             m_s = m_alpha*y + (1.0-m_alpha)*m_s; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return roundf(m_s); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     void reset() { | 
					
						
							|  |  |  |         m_start = true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  |     float m_alpha; | 
					
						
							|  |  |  |     bool m_start; | 
					
						
							|  |  |  |     float m_s; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-05 19:23:13 +02:00
										 |  |  | class RemoteOutputSinkGui : public DeviceGUI { | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2019-02-02 22:58:42 +01:00
										 |  |  | 	explicit RemoteOutputSinkGui(DeviceUISet *deviceUISet, QWidget* parent = 0); | 
					
						
							|  |  |  | 	virtual ~RemoteOutputSinkGui(); | 
					
						
							| 
									
										
										
										
											2017-09-16 10:45:08 +02:00
										 |  |  | 	virtual void destroy(); | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void resetToDefaults(); | 
					
						
							|  |  |  | 	QByteArray serialize() const; | 
					
						
							|  |  |  | 	bool deserialize(const QByteArray& data); | 
					
						
							| 
									
										
										
										
											2017-09-16 22:23:31 +02:00
										 |  |  | 	virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2019-02-02 22:58:42 +01:00
										 |  |  | 	Ui::RemoteOutputGui* ui; | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 22:58:42 +01:00
										 |  |  | 	RemoteOutputSettings m_settings;        //!< current settings
 | 
					
						
							| 
									
										
										
										
											2022-10-31 11:18:22 +01:00
										 |  |  |     QList<QString> m_settingsKeys; | 
					
						
							| 
									
										
										
										
											2019-02-02 22:58:42 +01:00
										 |  |  | 	RemoteOutputSettings m_controlSettings; //!< settings last sent to device via control port
 | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 	QTimer m_updateTimer; | 
					
						
							|  |  |  |     QTimer m_statusTimer; | 
					
						
							| 
									
										
										
										
											2021-12-12 12:54:22 +01:00
										 |  |  | 	DeviceSampleSink* m_remoteOutput; | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  |     int m_sampleRate; | 
					
						
							|  |  |  |     quint64 m_deviceCenterFrequency; //!< Center frequency in device
 | 
					
						
							|  |  |  | 	int m_samplesCount; | 
					
						
							| 
									
										
										
										
											2018-08-31 07:38:30 +02:00
										 |  |  | 	uint32_t m_tickCount; | 
					
						
							| 
									
										
										
										
											2017-06-05 01:18:35 +02:00
										 |  |  | 	std::size_t m_nbSinceLastFlowCheck; | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 	int m_lastEngineState; | 
					
						
							| 
									
										
										
										
											2017-05-21 19:45:56 +02:00
										 |  |  |     bool m_doApplySettings; | 
					
						
							| 
									
										
										
										
											2017-05-23 01:41:30 +02:00
										 |  |  |     bool m_forceSettings; | 
					
						
							| 
									
										
										
										
											2021-12-12 19:54:57 +01:00
										 |  |  |     bool m_remoteAPIConnected; | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-06 01:53:21 +02:00
										 |  |  |     uint32_t m_countUnrecoverable; | 
					
						
							|  |  |  |     uint32_t m_countRecovered; | 
					
						
							| 
									
										
										
										
											2018-08-30 08:45:57 +02:00
										 |  |  |     uint32_t m_lastCountUnrecoverable; | 
					
						
							|  |  |  |     uint32_t m_lastCountRecovered; | 
					
						
							| 
									
										
										
										
											2018-08-31 08:47:18 +02:00
										 |  |  | 	uint32_t m_lastSampleCount; | 
					
						
							| 
									
										
										
										
											2018-08-31 07:38:30 +02:00
										 |  |  | 	uint64_t m_lastTimestampUs; | 
					
						
							| 
									
										
										
										
											2020-04-27 12:33:57 +02:00
										 |  |  |     QElapsedTimer m_time; | 
					
						
							| 
									
										
										
										
											2017-06-06 01:53:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-05 23:00:28 +02:00
										 |  |  |     QPalette m_paletteGreenText; | 
					
						
							|  |  |  |     QPalette m_paletteRedText; | 
					
						
							|  |  |  |     QPalette m_paletteWhiteText; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-16 22:23:31 +02:00
										 |  |  |     MessageQueue m_inputMessageQueue; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-21 19:45:56 +02:00
										 |  |  |     void blockApplySettings(bool block); | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 	void displaySettings(); | 
					
						
							|  |  |  | 	void displayTime(); | 
					
						
							| 
									
										
										
										
											2021-12-12 12:54:22 +01:00
										 |  |  |     void displayRemoteData(const RemoteOutput::MsgReportRemoteData::RemoteData& remoteData); | 
					
						
							|  |  |  |     void displayRemoteFixedData(const RemoteOutput::MsgReportRemoteFixedData::RemoteData& remoteData); | 
					
						
							| 
									
										
										
										
											2017-05-21 19:45:56 +02:00
										 |  |  |     void sendControl(bool force = false); | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 	void sendSettings(); | 
					
						
							| 
									
										
										
										
											2018-09-07 00:58:09 +02:00
										 |  |  | 	void updateSampleRate(); | 
					
						
							| 
									
										
										
										
											2017-06-06 01:53:21 +02:00
										 |  |  | 	void displayEventCounts(); | 
					
						
							| 
									
										
										
										
											2018-08-30 08:45:57 +02:00
										 |  |  | 	void displayEventStatus(int recoverableCount, int unrecoverableCount); | 
					
						
							| 
									
										
										
										
											2017-06-06 01:53:21 +02:00
										 |  |  |     void displayEventTimer(); | 
					
						
							| 
									
										
										
										
											2020-10-03 19:51:14 +02:00
										 |  |  | 	bool handleMessage(const Message& message); | 
					
						
							| 
									
										
										
										
											2022-04-07 16:32:03 +02:00
										 |  |  |     void makeUIConnections(); | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | private slots: | 
					
						
							| 
									
										
										
										
											2017-09-17 17:35:03 +02:00
										 |  |  |     void handleInputMessages(); | 
					
						
							| 
									
										
										
										
											2017-05-21 13:32:56 +02:00
										 |  |  |     void on_nbFECBlocks_valueChanged(int value); | 
					
						
							| 
									
										
										
										
											2018-09-01 10:44:12 +02:00
										 |  |  |     void on_deviceIndex_returnPressed(); | 
					
						
							|  |  |  |     void on_channelIndex_returnPressed(); | 
					
						
							| 
									
										
										
										
											2021-12-19 11:30:48 +01:00
										 |  |  |     void on_nbTxBytes_currentIndexChanged(int index); | 
					
						
							| 
									
										
										
										
											2018-08-29 18:39:40 +02:00
										 |  |  |     void on_apiAddress_returnPressed(); | 
					
						
							|  |  |  |     void on_apiPort_returnPressed(); | 
					
						
							|  |  |  |     void on_dataAddress_returnPressed(); | 
					
						
							| 
									
										
										
										
											2017-05-22 00:04:54 +02:00
										 |  |  |     void on_dataPort_returnPressed(); | 
					
						
							| 
									
										
										
										
											2018-08-30 01:56:53 +02:00
										 |  |  |     void on_apiApplyButton_clicked(bool checked); | 
					
						
							|  |  |  |     void on_dataApplyButton_clicked(bool checked); | 
					
						
							| 
									
										
										
										
											2017-05-21 19:45:56 +02:00
										 |  |  | 	void on_startStop_toggled(bool checked); | 
					
						
							| 
									
										
										
										
											2017-06-06 01:53:21 +02:00
										 |  |  | 	void on_eventCountsReset_clicked(bool checked); | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  |     void updateHardware(); | 
					
						
							|  |  |  |     void updateStatus(); | 
					
						
							|  |  |  | 	void tick(); | 
					
						
							| 
									
										
										
										
											2018-12-26 22:30:35 +01:00
										 |  |  |     void openDeviceSettingsDialog(const QPoint& p); | 
					
						
							| 
									
										
										
										
											2017-05-15 00:58:56 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-02 22:58:42 +01:00
										 |  |  | #endif // INCLUDE_REMOTEOUTPUTGUI_H
 |