Skip to content
Snippets Groups Projects
Vehicle.h 87.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • /****************************************************************************
     *
    
    Gus Grubba's avatar
    Gus Grubba committed
     * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
    
     *
     * QGroundControl is licensed according to the terms in the file
     * COPYING.md in the root of the source code directory.
     *
     ****************************************************************************/
    
    #include <QObject>
    
    #include <QVariantList>
    
    #include <QGeoCoordinate>
    
    Don Gagne's avatar
     
    Don Gagne committed
    #include <QTime>
    
    Don Gagne's avatar
    Don Gagne committed
    #include "FactGroup.h"
    
    #include "LinkInterface.h"
    #include "QGCMAVLink.h"
    
    #include "QmlObjectListModel.h"
    
    Don Gagne's avatar
    Don Gagne committed
    #include "MAVLinkProtocol.h"
    
    dogmaphobic's avatar
    dogmaphobic committed
    #include "UASMessageHandler.h"
    
    #include "SettingsFact.h"
    
    Don Gagne's avatar
     
    Don Gagne committed
    #include "QGCMapCircle.h"
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
    #include "TerrainFactGroup.h"
    
    class UAS;
    class UASInterface;
    
    class FirmwarePlugin;
    
    class FirmwarePluginManager;
    
    class AutoPilotPlugin;
    
    Don Gagne's avatar
    Don Gagne committed
    class MissionManager;
    
    class GeoFenceManager;
    
    class RallyPointManager;
    
    class ParameterManager;
    
    class JoystickManager;
    
    dogmaphobic's avatar
    dogmaphobic committed
    class UASMessage;
    
    class SettingsManager;
    
    class QGCCameraManager;
    
    Gus Grubba's avatar
    Gus Grubba committed
    class Joystick;
    
    Gus Grubba's avatar
    Gus Grubba committed
    class VehicleObjectAvoidance;
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
    class TrajectoryPoints;
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
    class TerrainProtocolHandler;
    
    Gus Grubba's avatar
    Gus Grubba committed
    
    
    #if defined(QGC_AIRMAP_ENABLED)
    class AirspaceVehicleManager;
    #endif
    
    
    Q_DECLARE_LOGGING_CATEGORY(VehicleLog)
    
    
    Don Gagne's avatar
    Don Gagne committed
    class Vehicle;
    
    
    class VehicleDistanceSensorFactGroup : public FactGroup
    {
        Q_OBJECT
    
    public:
    
        VehicleDistanceSensorFactGroup(QObject* parent = nullptr);
    
        Q_PROPERTY(Fact* rotationNone       READ rotationNone       CONSTANT)
        Q_PROPERTY(Fact* rotationYaw45      READ rotationYaw45      CONSTANT)
        Q_PROPERTY(Fact* rotationYaw90      READ rotationYaw90      CONSTANT)
        Q_PROPERTY(Fact* rotationYaw135     READ rotationYaw135     CONSTANT)
        Q_PROPERTY(Fact* rotationYaw180     READ rotationYaw180     CONSTANT)
        Q_PROPERTY(Fact* rotationYaw225     READ rotationYaw225     CONSTANT)
        Q_PROPERTY(Fact* rotationYaw270     READ rotationYaw270     CONSTANT)
        Q_PROPERTY(Fact* rotationYaw315     READ rotationYaw315     CONSTANT)
        Q_PROPERTY(Fact* rotationPitch90    READ rotationPitch90    CONSTANT)
        Q_PROPERTY(Fact* rotationPitch270   READ rotationPitch270   CONSTANT)
    
        Fact* rotationNone      () { return &_rotationNoneFact; }
        Fact* rotationYaw45     () { return &_rotationYaw45Fact; }
        Fact* rotationYaw90     () { return &_rotationYaw90Fact; }
        Fact* rotationYaw135    () { return &_rotationYaw90Fact; }
        Fact* rotationYaw180    () { return &_rotationYaw180Fact; }
        Fact* rotationYaw225    () { return &_rotationYaw180Fact; }
        Fact* rotationYaw270    () { return &_rotationYaw270Fact; }
        Fact* rotationYaw315    () { return &_rotationYaw315Fact; }
        Fact* rotationPitch90   () { return &_rotationPitch90Fact; }
        Fact* rotationPitch270  () { return &_rotationPitch270Fact; }
    
        static const char* _rotationNoneFactName;
    
        static const char* _rotationYaw45FactName;
    
        static const char* _rotationYaw90FactName;
    
        static const char* _rotationYaw135FactName;
    
        static const char* _rotationYaw180FactName;
    
        static const char* _rotationYaw225FactName;
    
        static const char* _rotationYaw270FactName;
    
        static const char* _rotationYaw315FactName;
        static const char* _rotationPitch90FactName;
        static const char* _rotationPitch270FactName;
    
    
    private:
        Fact _rotationNoneFact;
    
        Fact _rotationYaw45Fact;
    
        Fact _rotationYaw90Fact;
    
        Fact _rotationYaw135Fact;
    
        Fact _rotationYaw180Fact;
    
        Fact _rotationYaw225Fact;
    
        Fact _rotationYaw270Fact;
    
        Fact _rotationYaw315Fact;
        Fact _rotationPitch90Fact;
        Fact _rotationPitch270Fact;
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
    class VehicleSetpointFactGroup : public FactGroup
    {
        Q_OBJECT
    
    public:
    
        VehicleSetpointFactGroup(QObject* parent = nullptr);
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
    
        Q_PROPERTY(Fact* roll       READ roll       CONSTANT)
        Q_PROPERTY(Fact* pitch      READ pitch      CONSTANT)
        Q_PROPERTY(Fact* yaw        READ yaw        CONSTANT)
        Q_PROPERTY(Fact* rollRate   READ rollRate   CONSTANT)
        Q_PROPERTY(Fact* pitchRate  READ pitchRate  CONSTANT)
        Q_PROPERTY(Fact* yawRate    READ yawRate    CONSTANT)
    
    
        Fact* roll      () { return &_rollFact; }
        Fact* pitch     () { return &_pitchFact; }
        Fact* yaw       () { return &_yawFact; }
        Fact* rollRate  () { return &_rollRateFact; }
        Fact* pitchRate () { return &_pitchRateFact; }
        Fact* yawRate   () { return &_yawRateFact; }
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
    
        static const char* _rollFactName;
        static const char* _pitchFactName;
        static const char* _yawFactName;
        static const char* _rollRateFactName;
        static const char* _pitchRateFactName;
        static const char* _yawRateFactName;
    
    private:
        Fact _rollFact;
        Fact _pitchFact;
        Fact _yawFact;
        Fact _rollRateFact;
        Fact _pitchRateFact;
        Fact _yawRateFact;
    };
    
    
    class VehicleVibrationFactGroup : public FactGroup
    {
        Q_OBJECT
    
    public:
    
        VehicleVibrationFactGroup(QObject* parent = nullptr);
    
    
        Q_PROPERTY(Fact* xAxis      READ xAxis      CONSTANT)
        Q_PROPERTY(Fact* yAxis      READ yAxis      CONSTANT)
        Q_PROPERTY(Fact* zAxis      READ zAxis      CONSTANT)
        Q_PROPERTY(Fact* clipCount1 READ clipCount1 CONSTANT)
        Q_PROPERTY(Fact* clipCount2 READ clipCount2 CONSTANT)
        Q_PROPERTY(Fact* clipCount3 READ clipCount3 CONSTANT)
    
    
        Fact* xAxis         () { return &_xAxisFact; }
        Fact* yAxis         () { return &_yAxisFact; }
        Fact* zAxis         () { return &_zAxisFact; }
        Fact* clipCount1    () { return &_clipCount1Fact; }
        Fact* clipCount2    () { return &_clipCount2Fact; }
        Fact* clipCount3    () { return &_clipCount3Fact; }
    
    
        static const char* _xAxisFactName;
        static const char* _yAxisFactName;
        static const char* _zAxisFactName;
        static const char* _clipCount1FactName;
        static const char* _clipCount2FactName;
        static const char* _clipCount3FactName;
    
    private:
        Fact        _xAxisFact;
        Fact        _yAxisFact;
        Fact        _zAxisFact;
        Fact        _clipCount1Fact;
        Fact        _clipCount2Fact;
        Fact        _clipCount3Fact;
    };
    
    
    Don Gagne's avatar
    Don Gagne committed
    class VehicleWindFactGroup : public FactGroup
    {
        Q_OBJECT
    
    public:
    
        VehicleWindFactGroup(QObject* parent = nullptr);
    
    Don Gagne's avatar
    Don Gagne committed
    
        Q_PROPERTY(Fact* direction      READ direction      CONSTANT)
        Q_PROPERTY(Fact* speed          READ speed          CONSTANT)
        Q_PROPERTY(Fact* verticalSpeed  READ verticalSpeed  CONSTANT)
    
    
        Fact* direction     () { return &_directionFact; }
        Fact* speed         () { return &_speedFact; }
        Fact* verticalSpeed () { return &_verticalSpeedFact; }
    
    Don Gagne's avatar
    Don Gagne committed
    
        static const char* _directionFactName;
        static const char* _speedFactName;
        static const char* _verticalSpeedFactName;
    
    private:
        Fact        _directionFact;
        Fact        _speedFact;
        Fact        _verticalSpeedFact;
    };
    
    
    Don Gagne's avatar
    Don Gagne committed
    class VehicleGPSFactGroup : public FactGroup
    {
        Q_OBJECT
    
    public:
    
        VehicleGPSFactGroup(QObject* parent = nullptr);
    
        Q_PROPERTY(Fact* lat                READ lat                CONSTANT)
        Q_PROPERTY(Fact* lon                READ lon                CONSTANT)
    
        Q_PROPERTY(Fact* mgrs               READ mgrs               CONSTANT)
    
    Don Gagne's avatar
    Don Gagne committed
        Q_PROPERTY(Fact* hdop               READ hdop               CONSTANT)
        Q_PROPERTY(Fact* vdop               READ vdop               CONSTANT)
        Q_PROPERTY(Fact* courseOverGround   READ courseOverGround   CONSTANT)
        Q_PROPERTY(Fact* count              READ count              CONSTANT)
        Q_PROPERTY(Fact* lock               READ lock               CONSTANT)
    
    
        Fact* lat               () { return &_latFact; }
        Fact* lon               () { return &_lonFact; }
        Fact* mgrs              () { return &_mgrsFact; }
        Fact* hdop              () { return &_hdopFact; }
        Fact* vdop              () { return &_vdopFact; }
        Fact* courseOverGround  () { return &_courseOverGroundFact; }
        Fact* count             () { return &_countFact; }
        Fact* lock              () { return &_lockFact; }
    
        static const char* _latFactName;
        static const char* _lonFactName;
    
        static const char* _mgrsFactName;
    
    Don Gagne's avatar
    Don Gagne committed
        static const char* _hdopFactName;
        static const char* _vdopFactName;
        static const char* _courseOverGroundFactName;
        static const char* _countFactName;
        static const char* _lockFactName;
    
    
    Don Gagne's avatar
    Don Gagne committed
    private:
    
        Fact        _latFact;
        Fact        _lonFact;
    
        Fact        _mgrsFact;
    
    Don Gagne's avatar
    Don Gagne committed
        Fact        _hdopFact;
        Fact        _vdopFact;
        Fact        _courseOverGroundFact;
        Fact        _countFact;
        Fact        _lockFact;
    
    Don Gagne's avatar
    Don Gagne committed
    };
    
    Don Gagne's avatar
    Don Gagne committed
    class VehicleBatteryFactGroup : public FactGroup
    {
        Q_OBJECT
    
    public:
    
        VehicleBatteryFactGroup(QObject* parent = nullptr);
    
    Don Gagne's avatar
    Don Gagne committed
    
        Q_PROPERTY(Fact* voltage            READ voltage            CONSTANT)
        Q_PROPERTY(Fact* percentRemaining   READ percentRemaining   CONSTANT)
        Q_PROPERTY(Fact* mahConsumed        READ mahConsumed        CONSTANT)
        Q_PROPERTY(Fact* current            READ current            CONSTANT)
        Q_PROPERTY(Fact* temperature        READ temperature        CONSTANT)
    
        Q_PROPERTY(Fact* instantPower       READ instantPower       CONSTANT)
    
        Q_PROPERTY(Fact* timeRemaining      READ timeRemaining      CONSTANT)
        Q_PROPERTY(Fact* chargeState        READ chargeState        CONSTANT)
    
        Fact* voltage                   () { return &_voltageFact; }
        Fact* percentRemaining          () { return &_percentRemainingFact; }
        Fact* mahConsumed               () { return &_mahConsumedFact; }
        Fact* current                   () { return &_currentFact; }
        Fact* temperature               () { return &_temperatureFact; }
        Fact* instantPower              () { return &_instantPowerFact; }
        Fact* timeRemaining             () { return &_timeRemainingFact; }
        Fact* chargeState               () { return &_chargeStateFact; }
    
    Don Gagne's avatar
    Don Gagne committed
    
        static const char* _voltageFactName;
        static const char* _percentRemainingFactName;
        static const char* _mahConsumedFactName;
        static const char* _currentFactName;
        static const char* _temperatureFactName;
    
        static const char* _instantPowerFactName;
    
        static const char* _timeRemainingFactName;
        static const char* _chargeStateFactName;
    
        static const char* _settingsGroup;
    
    
    Don Gagne's avatar
    Don Gagne committed
    private:
    
        Fact            _voltageFact;
        Fact            _percentRemainingFact;
        Fact            _mahConsumedFact;
        Fact            _currentFact;
        Fact            _temperatureFact;
    
        Fact            _timeRemainingFact;
        Fact            _chargeStateFact;
    
    class VehicleTemperatureFactGroup : public FactGroup
    {
        Q_OBJECT
    
    public:
    
        VehicleTemperatureFactGroup(QObject* parent = nullptr);
    
    
        Q_PROPERTY(Fact* temperature1       READ temperature1       CONSTANT)
        Q_PROPERTY(Fact* temperature2       READ temperature2       CONSTANT)
        Q_PROPERTY(Fact* temperature3       READ temperature3       CONSTANT)
    
    
        Fact* temperature1 () { return &_temperature1Fact; }
        Fact* temperature2 () { return &_temperature2Fact; }
        Fact* temperature3 () { return &_temperature3Fact; }
    
    
        static const char* _temperature1FactName;
        static const char* _temperature2FactName;
        static const char* _temperature3FactName;
    
        static const char* _settingsGroup;
    
        static const double _temperatureUnavailable;
    
    private:
        Fact            _temperature1Fact;
        Fact            _temperature2Fact;
        Fact            _temperature3Fact;
    };
    
    
    dheideman's avatar
    dheideman committed
    class VehicleClockFactGroup : public FactGroup
    {
        Q_OBJECT
    
    public:
    
        VehicleClockFactGroup(QObject* parent = nullptr);
    
    dheideman's avatar
    dheideman committed
    
        Q_PROPERTY(Fact* currentTime        READ currentTime        CONSTANT)
        Q_PROPERTY(Fact* currentDate        READ currentDate        CONSTANT)
    
    
        Fact* currentTime () { return &_currentTimeFact; }
        Fact* currentDate () { return &_currentDateFact; }
    
    dheideman's avatar
    dheideman committed
    
        static const char* _currentTimeFactName;
        static const char* _currentDateFactName;
    
        static const char* _settingsGroup;
    
    private slots:
    
        void _updateAllValues() override;
    
    dheideman's avatar
    dheideman committed
    
    private:
        Fact            _currentTimeFact;
        Fact            _currentDateFact;
    };
    
    
    class VehicleEstimatorStatusFactGroup : public FactGroup
    {
        Q_OBJECT
    
    public:
        VehicleEstimatorStatusFactGroup(QObject* parent = nullptr);
    
        Q_PROPERTY(Fact* goodAttitudeEstimate           READ goodAttitudeEstimate           CONSTANT)
        Q_PROPERTY(Fact* goodHorizVelEstimate           READ goodHorizVelEstimate           CONSTANT)
        Q_PROPERTY(Fact* goodVertVelEstimate            READ goodVertVelEstimate            CONSTANT)
        Q_PROPERTY(Fact* goodHorizPosRelEstimate        READ goodHorizPosRelEstimate        CONSTANT)
        Q_PROPERTY(Fact* goodHorizPosAbsEstimate        READ goodHorizPosAbsEstimate        CONSTANT)
        Q_PROPERTY(Fact* goodVertPosAbsEstimate         READ goodVertPosAbsEstimate         CONSTANT)
        Q_PROPERTY(Fact* goodVertPosAGLEstimate         READ goodVertPosAGLEstimate         CONSTANT)
        Q_PROPERTY(Fact* goodConstPosModeEstimate       READ goodConstPosModeEstimate       CONSTANT)
        Q_PROPERTY(Fact* goodPredHorizPosRelEstimate    READ goodPredHorizPosRelEstimate    CONSTANT)
        Q_PROPERTY(Fact* goodPredHorizPosAbsEstimate    READ goodPredHorizPosAbsEstimate    CONSTANT)
        Q_PROPERTY(Fact* gpsGlitch                      READ gpsGlitch                      CONSTANT)
        Q_PROPERTY(Fact* accelError                     READ accelError                     CONSTANT)
        Q_PROPERTY(Fact* velRatio                       READ velRatio                       CONSTANT)
        Q_PROPERTY(Fact* horizPosRatio                  READ horizPosRatio                  CONSTANT)
        Q_PROPERTY(Fact* vertPosRatio                   READ vertPosRatio                   CONSTANT)
        Q_PROPERTY(Fact* magRatio                       READ magRatio                       CONSTANT)
        Q_PROPERTY(Fact* haglRatio                      READ haglRatio                      CONSTANT)
        Q_PROPERTY(Fact* tasRatio                       READ tasRatio                       CONSTANT)
        Q_PROPERTY(Fact* horizPosAccuracy               READ horizPosAccuracy               CONSTANT)
        Q_PROPERTY(Fact* vertPosAccuracy                READ vertPosAccuracy                CONSTANT)
    
    
        Fact* goodAttitudeEstimate          () { return &_goodAttitudeEstimateFact; }
        Fact* goodHorizVelEstimate          () { return &_goodHorizVelEstimateFact; }
        Fact* goodVertVelEstimate           () { return &_goodVertVelEstimateFact; }
        Fact* goodHorizPosRelEstimate       () { return &_goodHorizPosRelEstimateFact; }
        Fact* goodHorizPosAbsEstimate       () { return &_goodHorizPosAbsEstimateFact; }
        Fact* goodVertPosAbsEstimate        () { return &_goodVertPosAbsEstimateFact; }
        Fact* goodVertPosAGLEstimate        () { return &_goodVertPosAGLEstimateFact; }
        Fact* goodConstPosModeEstimate      () { return &_goodConstPosModeEstimateFact; }
        Fact* goodPredHorizPosRelEstimate   () { return &_goodPredHorizPosRelEstimateFact; }
        Fact* goodPredHorizPosAbsEstimate   () { return &_goodPredHorizPosAbsEstimateFact; }
        Fact* gpsGlitch                     () { return &_gpsGlitchFact; }
        Fact* accelError                    () { return &_accelErrorFact; }
        Fact* velRatio                      () { return &_velRatioFact; }
        Fact* horizPosRatio                 () { return &_horizPosRatioFact; }
        Fact* vertPosRatio                  () { return &_vertPosRatioFact; }
        Fact* magRatio                      () { return &_magRatioFact; }
        Fact* haglRatio                     () { return &_haglRatioFact; }
        Fact* tasRatio                      () { return &_tasRatioFact; }
        Fact* horizPosAccuracy              () { return &_horizPosAccuracyFact; }
        Fact* vertPosAccuracy               () { return &_vertPosAccuracyFact; }
    
    
        static const char* _goodAttitudeEstimateFactName;
        static const char* _goodHorizVelEstimateFactName;
        static const char* _goodVertVelEstimateFactName;
        static const char* _goodHorizPosRelEstimateFactName;
        static const char* _goodHorizPosAbsEstimateFactName;
        static const char* _goodVertPosAbsEstimateFactName;
        static const char* _goodVertPosAGLEstimateFactName;
        static const char* _goodConstPosModeEstimateFactName;
        static const char* _goodPredHorizPosRelEstimateFactName;
        static const char* _goodPredHorizPosAbsEstimateFactName;
        static const char* _gpsGlitchFactName;
        static const char* _accelErrorFactName;
        static const char* _velRatioFactName;
        static const char* _horizPosRatioFactName;
        static const char* _vertPosRatioFactName;
        static const char* _magRatioFactName;
        static const char* _haglRatioFactName;
        static const char* _tasRatioFactName;
        static const char* _horizPosAccuracyFactName;
        static const char* _vertPosAccuracyFactName;
    
    private:
        Fact _goodAttitudeEstimateFact;
        Fact _goodHorizVelEstimateFact;
        Fact _goodVertVelEstimateFact;
        Fact _goodHorizPosRelEstimateFact;
        Fact _goodHorizPosAbsEstimateFact;
        Fact _goodVertPosAbsEstimateFact;
        Fact _goodVertPosAGLEstimateFact;
        Fact _goodConstPosModeEstimateFact;
        Fact _goodPredHorizPosRelEstimateFact;
        Fact _goodPredHorizPosAbsEstimateFact;
        Fact _gpsGlitchFact;
        Fact _accelErrorFact;
        Fact _velRatioFact;
        Fact _horizPosRatioFact;
        Fact _vertPosRatioFact;
        Fact _magRatioFact;
        Fact _haglRatioFact;
        Fact _tasRatioFact;
        Fact _horizPosAccuracyFact;
        Fact _vertPosAccuracyFact;
    
    #if 0
        typedef enum ESTIMATOR_STATUS_FLAGS
        {
           ESTIMATOR_ATTITUDE=1, /* True if the attitude estimate is good | */
           ESTIMATOR_VELOCITY_HORIZ=2, /* True if the horizontal velocity estimate is good | */
           ESTIMATOR_VELOCITY_VERT=4, /* True if the  vertical velocity estimate is good | */
           ESTIMATOR_POS_HORIZ_REL=8, /* True if the horizontal position (relative) estimate is good | */
           ESTIMATOR_POS_HORIZ_ABS=16, /* True if the horizontal position (absolute) estimate is good | */
           ESTIMATOR_POS_VERT_ABS=32, /* True if the vertical position (absolute) estimate is good | */
           ESTIMATOR_POS_VERT_AGL=64, /* True if the vertical position (above ground) estimate is good | */
           ESTIMATOR_CONST_POS_MODE=128, /* True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow) | */
           ESTIMATOR_PRED_POS_HORIZ_REL=256, /* True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate | */
           ESTIMATOR_PRED_POS_HORIZ_ABS=512, /* True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate | */
           ESTIMATOR_GPS_GLITCH=1024, /* True if the EKF has detected a GPS glitch | */
           ESTIMATOR_ACCEL_ERROR=2048, /* True if the EKF has detected bad accelerometer data | */
    
            typedef struct __mavlink_estimator_status_t {
             uint64_t time_usec; /*< Timestamp (micros since boot or Unix epoch)*/
             float vel_ratio; /*< Velocity innovation test ratio*/
             float pos_horiz_ratio; /*< Horizontal position innovation test ratio*/
             float pos_vert_ratio; /*< Vertical position innovation test ratio*/
             float mag_ratio; /*< Magnetometer innovation test ratio*/
             float hagl_ratio; /*< Height above terrain innovation test ratio*/
             float tas_ratio; /*< True airspeed innovation test ratio*/
             float pos_horiz_accuracy; /*< Horizontal position 1-STD accuracy relative to the EKF local origin (m)*/
             float pos_vert_accuracy; /*< Vertical position 1-STD accuracy relative to the EKF local origin (m)*/
             uint16_t flags; /*< Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS.*/
    
            } mavlink_estimator_status_t;
        };
    
    Don Gagne's avatar
    Don Gagne committed
    class Vehicle : public FactGroup
    
        Vehicle(LinkInterface*          link,
                int                     vehicleId,
    
                int                     defaultComponentId,
    
                MAV_AUTOPILOT           firmwareType,
                MAV_TYPE                vehicleType,
                FirmwarePluginManager*  firmwarePluginManager,
                JoystickManager*        joystickManager);
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
        // Pass these into the offline constructor to create an offline vehicle which tracks the offline vehicle settings
        static const MAV_AUTOPILOT    MAV_AUTOPILOT_TRACK = static_cast<MAV_AUTOPILOT>(-1);
        static const MAV_TYPE         MAV_TYPE_TRACK = static_cast<MAV_TYPE>(-1);
    
    
        // The following is used to create a disconnected Vehicle for use while offline editing.
        Vehicle(MAV_AUTOPILOT           firmwareType,
                MAV_TYPE                vehicleType,
                FirmwarePluginManager*  firmwarePluginManager,
    
                QObject*                parent = nullptr);
    
        /// Sensor bits from sensors*Bits properties
        enum MavlinkSysStatus {
            SysStatusSensor3dGyro =                 MAV_SYS_STATUS_SENSOR_3D_GYRO,
            SysStatusSensor3dAccel =                MAV_SYS_STATUS_SENSOR_3D_ACCEL,
            SysStatusSensor3dMag =                  MAV_SYS_STATUS_SENSOR_3D_MAG,
    
            SysStatusSensorAbsolutePressure =       MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE,
    
            SysStatusSensorDifferentialPressure =   MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE,
            SysStatusSensorGPS =                    MAV_SYS_STATUS_SENSOR_GPS,
            SysStatusSensorOpticalFlow =            MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW,
            SysStatusSensorVisionPosition =         MAV_SYS_STATUS_SENSOR_VISION_POSITION,
            SysStatusSensorLaserPosition =          MAV_SYS_STATUS_SENSOR_LASER_POSITION,
            SysStatusSensorExternalGroundTruth =    MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH,
            SysStatusSensorAngularRateControl =     MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL,
            SysStatusSensorAttitudeStabilization =  MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION,
            SysStatusSensorYawPosition =            MAV_SYS_STATUS_SENSOR_YAW_POSITION,
            SysStatusSensorZAltitudeControl =       MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL,
            SysStatusSensorXYPositionControl =      MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL,
            SysStatusSensorMotorOutputs =           MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS,
            SysStatusSensorRCReceiver =             MAV_SYS_STATUS_SENSOR_RC_RECEIVER,
            SysStatusSensor3dGyro2 =                MAV_SYS_STATUS_SENSOR_3D_GYRO2,
            SysStatusSensor3dAccel2 =               MAV_SYS_STATUS_SENSOR_3D_ACCEL2,
            SysStatusSensor3dMag2 =                 MAV_SYS_STATUS_SENSOR_3D_MAG2,
            SysStatusSensorGeoFence =               MAV_SYS_STATUS_GEOFENCE,
            SysStatusSensorAHRS =                   MAV_SYS_STATUS_AHRS,
            SysStatusSensorTerrain =                MAV_SYS_STATUS_TERRAIN,
            SysStatusSensorReverseMotor =           MAV_SYS_STATUS_REVERSE_MOTOR,
            SysStatusSensorLogging =                MAV_SYS_STATUS_LOGGING,
            SysStatusSensorBattery =                MAV_SYS_STATUS_SENSOR_BATTERY,
        };
        Q_ENUM(MavlinkSysStatus)
    
    
        enum CheckList {
            CheckListNotSetup = 0,
            CheckListPassed,
            CheckListFailed,
        };
        Q_ENUM(CheckList)
    
    
        Q_PROPERTY(int                  id                      READ id                                                     CONSTANT)
        Q_PROPERTY(AutoPilotPlugin*     autopilot               MEMBER _autopilotPlugin                                     CONSTANT)
        Q_PROPERTY(QGeoCoordinate       coordinate              READ coordinate                                             NOTIFY coordinateChanged)
        Q_PROPERTY(QGeoCoordinate       homePosition            READ homePosition                                           NOTIFY homePositionChanged)
    
        Q_PROPERTY(QGeoCoordinate       armedPosition           READ armedPosition                                          NOTIFY armedPositionChanged)
    
        Q_PROPERTY(bool                 armed                   READ armed                  WRITE setArmed                  NOTIFY armedChanged)
    
        Q_PROPERTY(bool                 autoDisarm              READ autoDisarm                                             NOTIFY autoDisarmChanged)
    
        Q_PROPERTY(bool                 flightModeSetAvailable  READ flightModeSetAvailable                                 CONSTANT)
    
        Q_PROPERTY(QStringList          flightModes             READ flightModes                                            NOTIFY flightModesChanged)
    
    DoinLakeFlyer's avatar
     
    DoinLakeFlyer committed
        Q_PROPERTY(QStringList          extraJoystickFlightModes READ extraJoystickFlightModes                              NOTIFY flightModesChanged)
    
        Q_PROPERTY(QString              flightMode              READ flightMode             WRITE setFlightMode             NOTIFY flightModeChanged)
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
        Q_PROPERTY(TrajectoryPoints*    trajectoryPoints        MEMBER _trajectoryPoints                                    CONSTANT)
    
        Q_PROPERTY(QmlObjectListModel*  cameraTriggerPoints     READ cameraTriggerPoints                                    CONSTANT)
    
        Q_PROPERTY(float                latitude                READ latitude                                               NOTIFY coordinateChanged)
        Q_PROPERTY(float                longitude               READ longitude                                              NOTIFY coordinateChanged)
        Q_PROPERTY(bool                 messageTypeNone         READ messageTypeNone                                        NOTIFY messageTypeChanged)
        Q_PROPERTY(bool                 messageTypeNormal       READ messageTypeNormal                                      NOTIFY messageTypeChanged)
        Q_PROPERTY(bool                 messageTypeWarning      READ messageTypeWarning                                     NOTIFY messageTypeChanged)
        Q_PROPERTY(bool                 messageTypeError        READ messageTypeError                                       NOTIFY messageTypeChanged)
        Q_PROPERTY(int                  newMessageCount         READ newMessageCount                                        NOTIFY newMessageCountChanged)
        Q_PROPERTY(int                  messageCount            READ messageCount                                           NOTIFY messageCountChanged)
        Q_PROPERTY(QString              formatedMessages        READ formatedMessages                                       NOTIFY formatedMessagesChanged)
        Q_PROPERTY(QString              formatedMessage         READ formatedMessage                                        NOTIFY formatedMessageChanged)
        Q_PROPERTY(QString              latestError             READ latestError                                            NOTIFY latestErrorChanged)
        Q_PROPERTY(int                  joystickMode            READ joystickMode           WRITE setJoystickMode           NOTIFY joystickModeChanged)
        Q_PROPERTY(QStringList          joystickModes           READ joystickModes                                          CONSTANT)
        Q_PROPERTY(bool                 joystickEnabled         READ joystickEnabled        WRITE setJoystickEnabled        NOTIFY joystickEnabledChanged)
        Q_PROPERTY(bool                 active                  READ active                 WRITE setActive                 NOTIFY activeChanged)
        Q_PROPERTY(int                  flowImageIndex          READ flowImageIndex                                         NOTIFY flowImageIndexChanged)
        Q_PROPERTY(int                  rcRSSI                  READ rcRSSI                                                 NOTIFY rcRSSIChanged)
    
        Q_PROPERTY(bool                 px4Firmware             READ px4Firmware                                            NOTIFY firmwareTypeChanged)
        Q_PROPERTY(bool                 apmFirmware             READ apmFirmware                                            NOTIFY firmwareTypeChanged)
    
        Q_PROPERTY(bool                 soloFirmware            READ soloFirmware           WRITE setSoloFirmware           NOTIFY soloFirmwareChanged)
        Q_PROPERTY(bool                 genericFirmware         READ genericFirmware                                        CONSTANT)
        Q_PROPERTY(bool                 connectionLost          READ connectionLost                                         NOTIFY connectionLostChanged)
        Q_PROPERTY(bool                 connectionLostEnabled   READ connectionLostEnabled  WRITE setConnectionLostEnabled  NOTIFY connectionLostEnabledChanged)
        Q_PROPERTY(uint                 messagesReceived        READ messagesReceived                                       NOTIFY messagesReceivedChanged)
        Q_PROPERTY(uint                 messagesSent            READ messagesSent                                           NOTIFY messagesSentChanged)
        Q_PROPERTY(uint                 messagesLost            READ messagesLost                                           NOTIFY messagesLostChanged)
    
        Q_PROPERTY(bool                 fixedWing               READ fixedWing                                              NOTIFY vehicleTypeChanged)
        Q_PROPERTY(bool                 multiRotor              READ multiRotor                                             NOTIFY vehicleTypeChanged)
        Q_PROPERTY(bool                 vtol                    READ vtol                                                   NOTIFY vehicleTypeChanged)
        Q_PROPERTY(bool                 rover                   READ rover                                                  NOTIFY vehicleTypeChanged)
        Q_PROPERTY(bool                 sub                     READ sub                                                    NOTIFY vehicleTypeChanged)
    
        Q_PROPERTY(bool        supportsThrottleModeCenterZero   READ supportsThrottleModeCenterZero                         CONSTANT)
    
        Q_PROPERTY(bool                supportsNegativeThrust   READ supportsNegativeThrust                                 CONSTANT)
    
        Q_PROPERTY(bool                 supportsJSButton        READ supportsJSButton                                       CONSTANT)
    
        Q_PROPERTY(bool                 supportsRadio           READ supportsRadio                                          CONSTANT)
    
        Q_PROPERTY(bool               supportsMotorInterference READ supportsMotorInterference                              CONSTANT)
    
        Q_PROPERTY(bool                 autoDisconnect          MEMBER _autoDisconnect                                      NOTIFY autoDisconnectChanged)
        Q_PROPERTY(QString              prearmError             READ prearmError            WRITE setPrearmError            NOTIFY prearmErrorChanged)
    
    Don Gagne's avatar
    Don Gagne committed
        Q_PROPERTY(int                  motorCount              READ motorCount                                             CONSTANT)
        Q_PROPERTY(bool                 coaxialMotors           READ coaxialMotors                                          CONSTANT)
        Q_PROPERTY(bool                 xConfigMotors           READ xConfigMotors                                          CONSTANT)
    
        Q_PROPERTY(bool                 isOfflineEditingVehicle READ isOfflineEditingVehicle                                CONSTANT)
    
        Q_PROPERTY(QString              brandImageIndoor        READ brandImageIndoor                                       NOTIFY firmwareTypeChanged)
        Q_PROPERTY(QString              brandImageOutdoor       READ brandImageOutdoor                                      NOTIFY firmwareTypeChanged)
    
        Q_PROPERTY(QStringList          unhealthySensors        READ unhealthySensors                                       NOTIFY unhealthySensorsChanged)
    
        Q_PROPERTY(int                  sensorsPresentBits      READ sensorsPresentBits                                     NOTIFY sensorsPresentBitsChanged)
        Q_PROPERTY(int                  sensorsEnabledBits      READ sensorsEnabledBits                                     NOTIFY sensorsEnabledBitsChanged)
        Q_PROPERTY(int                  sensorsHealthBits       READ sensorsHealthBits                                      NOTIFY sensorsHealthBitsChanged)
    
        Q_PROPERTY(int                  sensorsUnhealthyBits    READ sensorsUnhealthyBits                                   NOTIFY sensorsUnhealthyBitsChanged) ///< Combination of enabled and health
    
        Q_PROPERTY(QString              missionFlightMode       READ missionFlightMode                                      CONSTANT)
    
        Q_PROPERTY(QString              pauseFlightMode         READ pauseFlightMode                                        CONSTANT)
    
        Q_PROPERTY(QString              rtlFlightMode           READ rtlFlightMode                                          CONSTANT)
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
        Q_PROPERTY(QString              smartRTLFlightMode      READ smartRTLFlightMode                                     CONSTANT)
        Q_PROPERTY(bool                 supportsSmartRTL        READ supportsSmartRTL                                       CONSTANT)
    
        Q_PROPERTY(QString              landFlightMode          READ landFlightMode                                         CONSTANT)
    
        Q_PROPERTY(QString              takeControlFlightMode   READ takeControlFlightMode                                  CONSTANT)
    
    Don Gagne's avatar
     
    Don Gagne committed
        Q_PROPERTY(QString              followFlightMode        READ followFlightMode                                       CONSTANT)
    
        Q_PROPERTY(QString              firmwareTypeString      READ firmwareTypeString                                     NOTIFY firmwareTypeChanged)
        Q_PROPERTY(QString              vehicleTypeString       READ vehicleTypeString                                      NOTIFY vehicleTypeChanged)
    
        Q_PROPERTY(QString              vehicleImageOpaque      READ vehicleImageOpaque                                     CONSTANT)
        Q_PROPERTY(QString              vehicleImageOutline     READ vehicleImageOutline                                    CONSTANT)
        Q_PROPERTY(QString              vehicleImageCompass     READ vehicleImageCompass                                    CONSTANT)
    
    Gus Grubba's avatar
    Gus Grubba committed
        Q_PROPERTY(int                  telemetryRRSSI          READ telemetryRRSSI                                         NOTIFY telemetryRRSSIChanged)
        Q_PROPERTY(int                  telemetryLRSSI          READ telemetryLRSSI                                         NOTIFY telemetryLRSSIChanged)
        Q_PROPERTY(unsigned int         telemetryRXErrors       READ telemetryRXErrors                                      NOTIFY telemetryRXErrorsChanged)
        Q_PROPERTY(unsigned int         telemetryFixed          READ telemetryFixed                                         NOTIFY telemetryFixedChanged)
        Q_PROPERTY(unsigned int         telemetryTXBuffer       READ telemetryTXBuffer                                      NOTIFY telemetryTXBufferChanged)
    
        Q_PROPERTY(int                  telemetryLNoise         READ telemetryLNoise                                        NOTIFY telemetryLNoiseChanged)
        Q_PROPERTY(int                  telemetryRNoise         READ telemetryRNoise                                        NOTIFY telemetryRNoiseChanged)
    
    DoinLakeFlyer's avatar
     
    DoinLakeFlyer committed
        Q_PROPERTY(QVariantList         toolIndicators          READ toolIndicators                                         NOTIFY toolIndicatorsChanged)
        Q_PROPERTY(QVariantList         modeIndicators          READ modeIndicators                                         NOTIFY modeIndicatorsChanged)
    
    Don Gagne's avatar
    Don Gagne committed
        Q_PROPERTY(bool              initialPlanRequestComplete READ initialPlanRequestComplete                             NOTIFY initialPlanRequestCompleteChanged)
    
    Gus Grubba's avatar
    Gus Grubba committed
        Q_PROPERTY(QVariantList         staticCameraList        READ staticCameraList                                       CONSTANT)
    
        Q_PROPERTY(QGCCameraManager*    dynamicCameras          READ dynamicCameras                                         NOTIFY dynamicCamerasChanged)
    
        Q_PROPERTY(QString              hobbsMeter              READ hobbsMeter                                             NOTIFY hobbsMeterChanged)
    
        Q_PROPERTY(bool                 vtolInFwdFlight         READ vtolInFwdFlight        WRITE setVtolInFwdFlight        NOTIFY vtolInFwdFlightChanged)
    
        Q_PROPERTY(bool                 highLatencyLink         READ highLatencyLink                                        NOTIFY highLatencyLinkChanged)
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
        Q_PROPERTY(bool                 supportsTerrainFrame    READ supportsTerrainFrame                                   NOTIFY capabilityBitsChanged)
    
        Q_PROPERTY(QString              priorityLinkName        READ priorityLinkName       WRITE setPriorityLinkByName     NOTIFY priorityLinkNameChanged)
    
        Q_PROPERTY(QVariantList         links                   READ links                                                  NOTIFY linksChanged)
    
        Q_PROPERTY(LinkInterface*       priorityLink            READ priorityLink                                           NOTIFY priorityLinkNameChanged)
    
        Q_PROPERTY(quint64              mavlinkSentCount        READ mavlinkSentCount                                       NOTIFY mavlinkStatusChanged)
        Q_PROPERTY(quint64              mavlinkReceivedCount    READ mavlinkReceivedCount                                   NOTIFY mavlinkStatusChanged)
        Q_PROPERTY(quint64              mavlinkLossCount        READ mavlinkLossCount                                       NOTIFY mavlinkStatusChanged)
        Q_PROPERTY(float                mavlinkLossPercent      READ mavlinkLossPercent                                     NOTIFY mavlinkStatusChanged)
    
    Gus Grubba's avatar
    Gus Grubba committed
        Q_PROPERTY(qreal                gimbalRoll              READ gimbalRoll                                             NOTIFY gimbalRollChanged)
        Q_PROPERTY(qreal                gimbalPitch             READ gimbalPitch                                            NOTIFY gimbalPitchChanged)
        Q_PROPERTY(qreal                gimbalYaw               READ gimbalYaw                                              NOTIFY gimbalYawChanged)
        Q_PROPERTY(bool                 gimbalData              READ gimbalData                                             NOTIFY gimbalDataChanged)
    
        Q_PROPERTY(bool                 isROIEnabled            READ isROIEnabled                                           NOTIFY isROIEnabledChanged)
    
        Q_PROPERTY(CheckList            checkListState          READ checkListState         WRITE setCheckListState         NOTIFY checkListStateChanged)
    
    Don Gagne's avatar
     
    Don Gagne committed
        // The following properties relate to Orbit status
        Q_PROPERTY(bool             orbitActive     READ orbitActive        NOTIFY orbitActiveChanged)
        Q_PROPERTY(QGCMapCircle*    orbitMapCircle  READ orbitMapCircle     CONSTANT)
    
    
        // Vehicle state used for guided control
    
    Don Gagne's avatar
     
    Don Gagne committed
        Q_PROPERTY(bool     flying                  READ flying                                         NOTIFY flyingChanged)       ///< Vehicle is flying
        Q_PROPERTY(bool     landing                 READ landing                                        NOTIFY landingChanged)      ///< Vehicle is in landing pattern (DO_LAND_START)
        Q_PROPERTY(bool     guidedMode              READ guidedMode                 WRITE setGuidedMode NOTIFY guidedModeChanged)   ///< Vehicle is in Guided mode and can respond to guided commands
        Q_PROPERTY(bool     guidedModeSupported     READ guidedModeSupported                            CONSTANT)                   ///< Guided mode commands are supported by this vehicle
        Q_PROPERTY(bool     pauseVehicleSupported   READ pauseVehicleSupported                          CONSTANT)                   ///< Pause vehicle command is supported
        Q_PROPERTY(bool     orbitModeSupported      READ orbitModeSupported                             CONSTANT)                   ///< Orbit mode is supported by this vehicle
    
    Gus Grubba's avatar
    Gus Grubba committed
        Q_PROPERTY(bool     roiModeSupported        READ roiModeSupported                               CONSTANT)                   ///< Orbit mode is supported by this vehicle
    
    Don Gagne's avatar
     
    Don Gagne committed
        Q_PROPERTY(bool     takeoffVehicleSupported READ takeoffVehicleSupported                        CONSTANT)                   ///< Guided takeoff supported
        Q_PROPERTY(QString  gotoFlightMode          READ gotoFlightMode                                 CONSTANT)                   ///< Flight mode vehicle is in while performing goto
    
    Gus Grubba's avatar
    Gus Grubba committed
        Q_PROPERTY(ParameterManager*        parameterManager    READ parameterManager   CONSTANT)
        Q_PROPERTY(VehicleObjectAvoidance*  objectAvoidance     READ objectAvoidance    CONSTANT)
    
    Don Gagne's avatar
    Don Gagne committed
        // FactGroup object model properties
    
        Q_PROPERTY(Fact* roll               READ roll               CONSTANT)
        Q_PROPERTY(Fact* pitch              READ pitch              CONSTANT)
        Q_PROPERTY(Fact* heading            READ heading            CONSTANT)
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
        Q_PROPERTY(Fact* rollRate           READ rollRate           CONSTANT)
        Q_PROPERTY(Fact* pitchRate          READ pitchRate          CONSTANT)
        Q_PROPERTY(Fact* yawRate            READ yawRate            CONSTANT)
    
    Don Gagne's avatar
    Don Gagne committed
        Q_PROPERTY(Fact* groundSpeed        READ groundSpeed        CONSTANT)
        Q_PROPERTY(Fact* airSpeed           READ airSpeed           CONSTANT)
        Q_PROPERTY(Fact* climbRate          READ climbRate          CONSTANT)
        Q_PROPERTY(Fact* altitudeRelative   READ altitudeRelative   CONSTANT)
        Q_PROPERTY(Fact* altitudeAMSL       READ altitudeAMSL       CONSTANT)
    
        Q_PROPERTY(Fact* flightDistance     READ flightDistance     CONSTANT)
    
        Q_PROPERTY(Fact* distanceToHome     READ distanceToHome     CONSTANT)
    
        Q_PROPERTY(Fact* missionItemIndex   READ missionItemIndex   CONSTANT)
    
        Q_PROPERTY(Fact* headingToNextWP    READ headingToNextWP    CONSTANT)
    
    Don Gagne's avatar
     
    Don Gagne committed
        Q_PROPERTY(Fact* headingToHome      READ headingToHome      CONSTANT)
    
    Don Gagne's avatar
     
    Don Gagne committed
        Q_PROPERTY(Fact* distanceToGCS      READ distanceToGCS      CONSTANT)
    
        Q_PROPERTY(Fact* hobbs              READ hobbs              CONSTANT)
    
    Don Gagne's avatar
     
    Don Gagne committed
        Q_PROPERTY(Fact* throttlePct        READ throttlePct        CONSTANT)
    
        Q_PROPERTY(FactGroup* gps               READ gpsFactGroup               CONSTANT)
        Q_PROPERTY(FactGroup* battery           READ battery1FactGroup          CONSTANT)
        Q_PROPERTY(FactGroup* battery2          READ battery2FactGroup          CONSTANT)
        Q_PROPERTY(FactGroup* wind              READ windFactGroup              CONSTANT)
        Q_PROPERTY(FactGroup* vibration         READ vibrationFactGroup         CONSTANT)
        Q_PROPERTY(FactGroup* temperature       READ temperatureFactGroup       CONSTANT)
        Q_PROPERTY(FactGroup* clock             READ clockFactGroup             CONSTANT)
        Q_PROPERTY(FactGroup* setpoint          READ setpointFactGroup          CONSTANT)
        Q_PROPERTY(FactGroup* estimatorStatus   READ estimatorStatusFactGroup   CONSTANT)
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
        Q_PROPERTY(FactGroup* terrain           READ terrainFactGroup           CONSTANT)
    
        Q_PROPERTY(int      firmwareMajorVersion        READ firmwareMajorVersion       NOTIFY firmwareVersionChanged)
        Q_PROPERTY(int      firmwareMinorVersion        READ firmwareMinorVersion       NOTIFY firmwareVersionChanged)
        Q_PROPERTY(int      firmwarePatchVersion        READ firmwarePatchVersion       NOTIFY firmwareVersionChanged)
        Q_PROPERTY(int      firmwareVersionType         READ firmwareVersionType        NOTIFY firmwareVersionChanged)
        Q_PROPERTY(QString  firmwareVersionTypeString   READ firmwareVersionTypeString  NOTIFY firmwareVersionChanged)
        Q_PROPERTY(int      firmwareCustomMajorVersion  READ firmwareCustomMajorVersion NOTIFY firmwareCustomVersionChanged)
        Q_PROPERTY(int      firmwareCustomMinorVersion  READ firmwareCustomMinorVersion NOTIFY firmwareCustomVersionChanged)
        Q_PROPERTY(int      firmwareCustomPatchVersion  READ firmwareCustomPatchVersion NOTIFY firmwareCustomVersionChanged)
        Q_PROPERTY(QString  gitHash                     READ gitHash                    NOTIFY gitHashChanged)
    
    Gus Grubba's avatar
    Gus Grubba committed
        Q_PROPERTY(quint64  vehicleUID                  READ vehicleUID                 NOTIFY vehicleUIDChanged)
        Q_PROPERTY(QString  vehicleUIDStr               READ vehicleUIDStr              NOTIFY vehicleUIDChanged)
    
        /// Resets link status counters
        Q_INVOKABLE void resetCounters  ();
    
    dogmaphobic's avatar
    dogmaphobic committed
        // Called when the message drop-down is invoked to clear current count
        Q_INVOKABLE void        resetMessages();
    
    
    Gus Grubba's avatar
    Gus Grubba committed
        Q_INVOKABLE void virtualTabletJoystickValue(double roll, double pitch, double yaw, double thrust);
    
        Q_INVOKABLE void disconnectInactiveVehicle();
    
    Don Gagne's avatar
    Don Gagne committed
        /// Command vehicle to return to launch
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
        Q_INVOKABLE void guidedModeRTL(bool smartRTL);
    
    Don Gagne's avatar
    Don Gagne committed
    
        /// Command vehicle to land at current location
    
        Q_INVOKABLE void guidedModeLand();
    
    Don Gagne's avatar
    Don Gagne committed
    
        /// Command vehicle to takeoff from current location
    
        Q_INVOKABLE void guidedModeTakeoff(double altitudeRelative);
    
        /// @return The minimum takeoff altitude (relative) for guided takeoff.
    
        Q_INVOKABLE double minimumTakeoffAltitude();
    
    Don Gagne's avatar
    Don Gagne committed
        /// Command vehicle to move to specified location (altitude is included and relative)
        Q_INVOKABLE void guidedModeGotoLocation(const QGeoCoordinate& gotoCoord);
    
    
        /// Command vehicle to change altitude
        ///     @param altitudeChange If > 0, go up by amount specified, if < 0, go down by amount specified
        Q_INVOKABLE void guidedModeChangeAltitude(double altitudeChange);
    
        /// Command vehicle to orbit given center point
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
        ///     @param centerCoord Orit around this point
    
        ///     @param radius Distance from vehicle to centerCoord
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
        ///     @param amslAltitude Desired vehicle altitude
        Q_INVOKABLE void guidedModeOrbit(const QGeoCoordinate& centerCoord, double radius, double amslAltitude);
    
    Gus Grubba's avatar
    Gus Grubba committed
        /// Command vehicle to keep given point as ROI
        ///     @param centerCoord ROI coordinates
        Q_INVOKABLE void guidedModeROI(const QGeoCoordinate& centerCoord);
    
        Q_INVOKABLE void stopGuidedModeROI();
    
    Gus Grubba's avatar
    Gus Grubba committed
    
    
    Don Gagne's avatar
    Don Gagne committed
        /// Command vehicle to pause at current location. If vehicle supports guide mode, vehicle will be left
        /// in guided mode after pause.
    
        Q_INVOKABLE void pauseVehicle();
    
    Don Gagne's avatar
    Don Gagne committed
    
        /// Command vehicle to kill all motors no matter what state
    
        Q_INVOKABLE void emergencyStop();
    
        Q_INVOKABLE void abortLanding(double climbOutAltitude);
    
        Q_INVOKABLE void startMission();
    
        /// Alter the current mission item on the vehicle
        Q_INVOKABLE void setCurrentMissionSequence(int seq);
    
    
        /// Reboot vehicle
        Q_INVOKABLE void rebootVehicle();
    
    
    dogmaphobic's avatar
    dogmaphobic committed
        /// Clear Messages
        Q_INVOKABLE void clearMessages();
    
    
        Q_INVOKABLE void triggerCamera();
    
    Don Gagne's avatar
    Don Gagne committed
        Q_INVOKABLE void sendPlan(QString planFile);
    
        /// Used to check if running current version is equal or higher than the one being compared.
        //  returns 1 if current > compare, 0 if current == compare, -1 if current < compare
        Q_INVOKABLE int versionCompare(QString& compare);
        Q_INVOKABLE int versionCompare(int major, int minor, int patch);
    
    
    Don Gagne's avatar
    Don Gagne committed
        /// Test motor
        ///     @param motor Motor number, 1-based
        ///     @param percent 0-no power, 100-full power
    
    Don Gagne's avatar
     
    Don Gagne committed
        ///     @param timeoutSec Disabled motor after this amount of time
        Q_INVOKABLE void motorTest(int motor, int percent, int timeoutSecs);
    
    Don Gagne's avatar
     
    Don Gagne committed
        Q_INVOKABLE void setPIDTuningTelemetryMode(bool pidTuning);
    
    
    Gus Grubba's avatar
    Gus Grubba committed
        Q_INVOKABLE void gimbalControlValue (double pitch, double yaw);
        Q_INVOKABLE void gimbalPitchStep    (int direction);
        Q_INVOKABLE void gimbalYawStep      (int direction);
        Q_INVOKABLE void centerGimbal       ();
    
    DoinLakeFlyer's avatar
     
    DoinLakeFlyer committed
        /// Sends PARAM_MAP_RC message to vehicle
        Q_INVOKABLE void sendParamMapRC(const QString& paramName, double scale, double centerValue, int tuningID, double minValue, double maxValue);
    
        /// Clears all PARAM_MAP_RC settings from vehicle
        Q_INVOKABLE void clearAllParamMapRC(void);
    
    
    
    Don Gagne's avatar
     
    Don Gagne committed
    #if !defined(NO_ARDUPILOT_DIALECT)
    
        Q_INVOKABLE void flashBootloader();
    
    Don Gagne's avatar
     
    Don Gagne committed
    #endif
    
    
        bool    guidedModeSupported     () const;
        bool    pauseVehicleSupported   () const;
        bool    orbitModeSupported      () const;
        bool    roiModeSupported        () const;
        bool    takeoffVehicleSupported () const;
        QString gotoFlightMode          () const;
    
        // Property accessors
    
        QGeoCoordinate coordinate() { return _coordinate; }
        QGeoCoordinate armedPosition    () { return _armedPosition; }
    
            JoystickModeRC,         ///< Joystick emulates an RC Transmitter
    
            JoystickModeAttitude,
            JoystickModePosition,
            JoystickModeForce,
            JoystickModeVelocity,
            JoystickModeMax
        } JoystickMode_t;
    
    Gus Grubba's avatar
    Gus Grubba committed
        void updateFlightDistance(double distance);
    
        int joystickMode();
    
        void setJoystickMode(int mode);
    
        /// List of joystick mode names
    
        QStringList joystickModes();
    
        bool joystickEnabled();
    
        void setJoystickEnabled(bool enabled);
    
        // Is vehicle active with respect to current active vehicle in QGC
    
        bool active();
    
        void setActive(bool active);
    
        // Property accesors
    
        int id() { return _id; }
        MAV_AUTOPILOT firmwareType() const { return _firmwareType; }
        MAV_TYPE vehicleType() const { return _vehicleType; }
        Q_INVOKABLE QString vehicleTypeName() const;
    
    Patrick José Pereira's avatar
    Patrick José Pereira committed
        /// Returns the highest quality link available to the Vehicle. If you need to hold a reference to this link use
    
        /// LinkManager::sharedLinkInterfaceForGet to get QSharedPointer for link.
    
        LinkInterface* priorityLink() { return _priorityLink.data(); }
    
    
        /// Sends a message to the specified link
        /// @return true: message sent, false: Link no longer connected
        bool sendMessageOnLink(LinkInterface* link, mavlink_message_t message);
    
    
        /// Sends the specified messages multiple times to the vehicle in order to attempt to
        /// guarantee that it makes it to the vehicle.
        void sendMessageMultiple(mavlink_message_t message);
    
        /// Provides access to uas from vehicle. Temporary workaround until UAS is fully phased out.
    
        UAS* uas() { return _uas; }
    
        /// Provides access to uas from vehicle. Temporary workaround until AutoPilotPlugin is fully phased out.
    
        AutoPilotPlugin* autopilotPlugin() { return _autopilotPlugin; }
    
    Don Gagne's avatar
    Don Gagne committed
        /// Provides access to the Firmware Plugin for this Vehicle
    
        FirmwarePlugin* firmwarePlugin() { return _firmwarePlugin; }
    
        MissionManager*     missionManager()    { return _missionManager; }
        GeoFenceManager*    geoFenceManager()   { return _geoFenceManager; }
        RallyPointManager*  rallyPointManager() { return _rallyPointManager; }
    
        QGeoCoordinate homePosition();
    
    Gus Grubba's avatar
    Gus Grubba committed
        bool armed      () { return _armed; }
        void setArmed   (bool armed);
    
        bool flightModeSetAvailable             ();
        QStringList flightModes                 ();
        QStringList extraJoystickFlightModes    ();
        QString flightMode                      () const;
    
    DoinLakeFlyer's avatar
     
    DoinLakeFlyer committed
        void setFlightMode                      (const QString& flightMode);
    
        QString priorityLinkName() const;
        QVariantList links() const;
    
        void setPriorityLinkByName(const QString& priorityLinkName);
    
    
        bool fixedWing() const;
        bool multiRotor() const;
        bool vtol() const;
        bool rover() const;
        bool sub() const;
    
        bool supportsThrottleModeCenterZero () const;
        bool supportsNegativeThrust         ();
        bool supportsRadio                  () const;
        bool supportsJSButton               () const;
        bool supportsMotorInterference      () const;
        bool supportsTerrainFrame           () const;
    
    Don Gagne's avatar
    Don Gagne committed
        void setGuidedMode(bool guidedMode);
    
    
        QString prearmError() const { return _prearmError; }
    
    Don Gagne's avatar
    Don Gagne committed
        void setPrearmError(const QString& prearmError);
    
    
        QmlObjectListModel* cameraTriggerPoints () { return &_cameraTriggerPoints; }
    
    dogmaphobic's avatar
    dogmaphobic committed
    
        int  flowImageIndex() { return _flowImageIndex; }
    
    
        //-- Mavlink Logging
        void startMavlinkLog();
        void stopMavlinkLog();
    
    
        /// Requests the specified data stream from the vehicle
        ///     @param stream Stream which is being requested
        ///     @param rate Rate at which to send stream in Hz
    
        ///     @param sendMultiple Send multiple time to guarantee Vehicle reception
        void requestDataStream(MAV_DATA_STREAM stream, uint16_t rate, bool sendMultiple = true);
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
        // The follow method are used to turn on/off the tracking of settings updates for firmware/vehicle type on offline vehicles.
        void trackFirmwareVehicleTypeChanges(void);
        void stopTrackingFirmwareVehicleTypeChanges(void);
    
    
        typedef enum {
            MessageNone,
            MessageNormal,
            MessageWarning,
            MessageError
        } MessageType_t;
    
        bool            messageTypeNone         () { return _currentMessageType == MessageNone; }
        bool            messageTypeNormal       () { return _currentMessageType == MessageNormal; }
        bool            messageTypeWarning      () { return _currentMessageType == MessageWarning; }
        bool            messageTypeError        () { return _currentMessageType == MessageError; }
        int             newMessageCount         () { return _currentMessageCount; }
        int             messageCount            () { return _messageCount; }
        QString         formatedMessages        ();
        QString         formatedMessage         () { return _formatedMessage; }
        QString         latestError             () { return _latestError; }
    
        float           latitude                () { return static_cast<float>(_coordinate.latitude()); }
        float           longitude               () { return static_cast<float>(_coordinate.longitude()); }
        bool            mavPresent              () { return _mav != nullptr; }
    
        int             rcRSSI                  () { return _rcRSSI; }
        bool            px4Firmware             () const { return _firmwareType == MAV_AUTOPILOT_PX4; }
        bool            apmFirmware             () const { return _firmwareType == MAV_AUTOPILOT_ARDUPILOTMEGA; }
        bool            genericFirmware         () const { return !px4Firmware() && !apmFirmware(); }
        bool            connectionLost          () const { return _connectionLost; }
        bool            connectionLostEnabled   () const { return _connectionLostEnabled; }
        uint            messagesReceived        () { return _messagesReceived; }
        uint            messagesSent            () { return _messagesSent; }
        uint            messagesLost            () { return _messagesLost; }
        bool            flying                  () const { return _flying; }
    
        bool            landing                 () const { return _landing; }
    
        bool            guidedMode              () const;
    
        bool            vtolInFwdFlight         () const { return _vtolInFwdFlight; }
    
        uint8_t         baseMode                () const { return _base_mode; }
        uint32_t        customMode              () const { return _custom_mode; }
        bool            isOfflineEditingVehicle () const { return _offlineEditingVehicle; }
    
        QString         brandImageIndoor        () const;
        QString         brandImageOutdoor       () const;
    
        QStringList     unhealthySensors        () const;
    
        int             sensorsPresentBits      () const { return static_cast<int>(_onboardControlSensorsPresent); }
        int             sensorsEnabledBits      () const { return static_cast<int>(_onboardControlSensorsEnabled); }
        int             sensorsHealthBits       () const { return static_cast<int>(_onboardControlSensorsHealth); }
        int             sensorsUnhealthyBits    () const { return static_cast<int>(_onboardControlSensorsUnhealthy); }
    
        QString         missionFlightMode       () const;
    
        QString         pauseFlightMode         () const;
    
        QString         rtlFlightMode           () const;
    
    DonLakeFlyer's avatar
     
    DonLakeFlyer committed
        QString         smartRTLFlightMode      () const;
        bool            supportsSmartRTL        () const;
    
        QString         landFlightMode          () const;
    
        QString         takeControlFlightMode   () const;
    
    Don Gagne's avatar
     
    Don Gagne committed
        QString         followFlightMode        () const;
    
    DonLakeFlyer's avatar
    DonLakeFlyer committed
        double          defaultCruiseSpeed      () const { return _defaultCruiseSpeed; }
        double          defaultHoverSpeed       () const { return _defaultHoverSpeed; }
    
        QString         firmwareTypeString      () const;
    
    Gus Grubba's avatar
    Gus Grubba committed
        QString         vehicleTypeString       () const;
        int             telemetryRRSSI          () { return _telemetryRRSSI; }
        int             telemetryLRSSI          () { return _telemetryLRSSI; }
        unsigned int    telemetryRXErrors       () { return _telemetryRXErrors; }
        unsigned int    telemetryFixed          () { return _telemetryFixed; }
        unsigned int    telemetryTXBuffer       () { return _telemetryTXBuffer; }
    
        int             telemetryLNoise         () { return _telemetryLNoise; }
        int             telemetryRNoise         () { return _telemetryRNoise; }
    
        bool            autoDisarm              ();
    
        bool            highLatencyLink         () const { return _highLatencyLink; }
    
    Don Gagne's avatar
     
    Don Gagne committed
        bool            orbitActive             () const { return _orbitActive; }
        QGCMapCircle*   orbitMapCircle          () { return &_orbitMapCircle; }
    
    
        /// Get the maximum MAVLink protocol version supported
        /// @return the maximum version
        unsigned        maxProtoVersion         () const { return _maxProtoVersion; }
    
        Fact* roll                              () { return &_rollFact; }
        Fact* pitch                             () { return &_pitchFact; }
        Fact* heading                           () { return &_headingFact; }
        Fact* rollRate                          () { return &_rollRateFact; }
        Fact* pitchRate                         () { return &_pitchRateFact; }
        Fact* yawRate                           () { return &_yawRateFact; }
        Fact* airSpeed                          () { return &_airSpeedFact; }
        Fact* groundSpeed                       () { return &_groundSpeedFact; }
        Fact* climbRate                         () { return &_climbRateFact; }
        Fact* altitudeRelative                  () { return &_altitudeRelativeFact; }
        Fact* altitudeAMSL                      () { return &_altitudeAMSLFact; }
        Fact* flightDistance                    () { return &_flightDistanceFact; }
        Fact* distanceToHome                    () { return &_distanceToHomeFact; }