QGCFlightDisplay.h 5.62 KB
Newer Older
dogmaphobic's avatar
dogmaphobic committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
/*=====================================================================

QGroundControl Open Source Ground Control Station

(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>

This file is part of the QGROUNDCONTROL project

    QGROUNDCONTROL 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.

    QGROUNDCONTROL 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 QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.

======================================================================*/

/**
 * @file
 *   @brief QGC Main Flight Display
 *   @author Gus Grubba <mavlink@grubba.com>
 */

#ifndef QGCFLIGHTDISPLAY_H
#define QGCFLIGHTDISPLAY_H

#include "QGCQmlWidgetHolder.h"

class UASInterface;

class QGCFlightDisplay : public QGCQmlWidgetHolder
{
    Q_OBJECT
public:
    QGCFlightDisplay(QWidget* parent = NULL);
    ~QGCFlightDisplay();

    Q_PROPERTY(float roll               READ roll               NOTIFY rollChanged)
    Q_PROPERTY(float pitch              READ pitch              NOTIFY pitchChanged)
    Q_PROPERTY(float heading            READ heading            NOTIFY headingChanged)
    Q_PROPERTY(float groundSpeed        READ groundSpeed        NOTIFY groundSpeedChanged)
    Q_PROPERTY(float airSpeed           READ airSpeed           NOTIFY airSpeedChanged)
    Q_PROPERTY(float climbRate          READ climbRate          NOTIFY climbRateChanged)
    Q_PROPERTY(float altitudeRelative   READ altitudeRelative   NOTIFY altitudeRelativeChanged)
    Q_PROPERTY(float altitudeWGS84      READ altitudeWGS84      NOTIFY altitudeWGS84Changed)
    Q_PROPERTY(float altitudeAMSL       READ altitudeAMSL       NOTIFY altitudeAMSLChanged)
    Q_PROPERTY(bool  repaintRequested   READ repaintRequested   NOTIFY repaintRequestedChanged)
    Q_PROPERTY(float latitude           READ latitude           NOTIFY latitudeChanged)
    Q_PROPERTY(float longitude          READ longitude          NOTIFY longitudeChanged)

57 58
    Q_INVOKABLE void    saveSetting (const QString &key, const QString& value);
    Q_INVOKABLE QString loadSetting (const QString &key, const QString& defaultValue);
dogmaphobic's avatar
dogmaphobic committed
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140

    float   roll                () { return _roll; }
    float   pitch               () { return _pitch; }
    float   heading             () { return _heading; }
    float   groundSpeed         () { return _groundSpeed; }
    float   airSpeed            () { return _airSpeed; }
    float   climbRate           () { return _climbRate; }
    float   altitudeRelative    () { return _altitudeRelative; }
    float   altitudeWGS84       () { return _altitudeWGS84; }
    float   altitudeAMSL        () { return _altitudeAMSL; }
    float   latitude            () { return _latitude; }
    float   longitude           () { return _longitude; }
    bool    repaintRequested    () { return true; }

    /** @brief Start updating widget */
    void showEvent(QShowEvent* event);
    /** @brief Stop updating widget */
    void hideEvent(QHideEvent* event);

signals:
    void rollChanged            ();
    void pitchChanged           ();
    void headingChanged         ();
    void groundSpeedChanged     ();
    void airSpeedChanged        ();
    void climbRateChanged       ();
    void altitudeRelativeChanged();
    void altitudeWGS84Changed   ();
    void altitudeAMSLChanged    ();
    void repaintRequestedChanged();
    void latitudeChanged        ();
    void longitudeChanged       ();

private slots:
    /** @brief Attitude from main autopilot / system state */
    void _updateAttitude                    (UASInterface* uas, double roll, double pitch, double yaw, quint64 timestamp);
    /** @brief Attitude from one specific component / redundant autopilot */
    void _updateAttitude                    (UASInterface* uas, int component, double roll, double pitch, double yaw, quint64 timestamp);
    /** @brief Speed */
    void _updateSpeed                       (UASInterface* uas, double _groundSpeed, double _airSpeed, quint64 timestamp);
    /** @brief Altitude */
    void _updateAltitude                    (UASInterface* uas, double _altitudeAMSL, double _altitudeWGS84, double _altitudeRelative, double _climbRate, quint64 timestamp);
    void _updateNavigationControllerErrors  (UASInterface* uas, double altitudeError, double speedError, double xtrackError);
    void _updateNavigationControllerData    (UASInterface *uas, float navRoll, float navPitch, float navBearing, float targetBearing, float targetDistance);
    void _forgetUAS                         (UASInterface* uas);
    void _setActiveUAS                      (UASInterface* uas);
    void _checkUpdate                       ();

private:
    bool    _isAirplane                     ();
    bool    _shouldDisplayNavigationData    ();

private:
    UASInterface*   _mav;

    float _roll;
    float _pitch;
    float _heading;

    float _altitudeAMSL;
    float _altitudeWGS84;
    float _altitudeRelative;

    float _groundSpeed;
    float _airSpeed;
    float _climbRate;

    float _navigationAltitudeError;
    float _navigationSpeedError;
    float _navigationCrosstrackError;
    float _navigationTargetBearing;

    float _latitude;
    float _longitude;

    QTimer* _refreshTimer;
    bool    _valuesChanged;
    quint64 _valuesLastPainted;
};


#endif // QGCFLIGHTDISPLAY_H