/** * Handle one wind sensor * Requests for wind sensor data in an given interval. * All data will be send by signal/slot connection in case of data change. * $Id$ * $HeadURL$ * $Author$ * Created by hjl, SLSE, 2016-09-22 */ #pragma once #include #include "tcpsocket.h" namespace MeteoDataManagement { class TcpWind final : public TcpSocket { Q_OBJECT public: explicit TcpWind(QObject *parent = nullptr); /** * Connect to converter and starts reading sensor data * @param[in] converterIp IP address of the RS232-LAN Converter * @param[in] windPort Port number of wind sensor on the RS232-LAN Converter */ void start(const QString &converterIp, quint16 windPort); Q_SIGNALS: /** * Emits signal if data were changed */ void sigWindDataChanged(float direction, float speed, bool windOk); protected Q_SLOTS: /** * Requests of new sensor data */ void onSensorDataRequest(); /** * Timeout for new sensor data request */ void onRequestTimeout(); protected: /** * pure virtual function from TcpSocket to initialize the especially sensor device */ void init() override; /** * pure virtual function from TcpSocket to handle the especially sensor device data */ void dataAvailable(const QByteArray &line) override; /** * Extract sensor data from given data line * @param[in] line data line to be extacted * @return False if an error occurded, otherwise true; */ bool extractDataFromLine(const QByteArray &line); QTimer *m_requestTimer; ///< Request Interval in msec QTimer *m_requestTimeoutTimer; ///< Request Timeout in msec float m_direction; ///< wind FROM direction in degree (north=0°, east=90°, south= 180°, west=270°) float m_speed; ///< wind speed in m/s char m_speedUnit; ///< M = m/s, K = Km/h, N = Knoten bool m_dataChanged; ///< if true, sensor data were changed }; } // namespace MeteoDataManagement