MultiVehicleManager.h 4.85 KB
Newer Older
1
/*=====================================================================
dogmaphobic's avatar
dogmaphobic committed
2

3
 QGroundControl Open Source Ground Control Station
dogmaphobic's avatar
dogmaphobic committed
4

5
 (c) 2009 - 2014 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
dogmaphobic's avatar
dogmaphobic committed
6

7
 This file is part of the QGROUNDCONTROL project
dogmaphobic's avatar
dogmaphobic committed
8

9 10 11 12
 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.
dogmaphobic's avatar
dogmaphobic committed
13

14 15 16 17
 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.
dogmaphobic's avatar
dogmaphobic committed
18

19 20
 You should have received a copy of the GNU General Public License
 along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
dogmaphobic's avatar
dogmaphobic committed
21

22 23 24 25 26 27 28 29 30 31
 ======================================================================*/

/// @file
///     @author Don Gagne <don@thegagnes.com>

#ifndef MultiVehicleManager_H
#define MultiVehicleManager_H

#include "Vehicle.h"
#include "QGCMAVLink.h"
32
#include "QmlObjectListModel.h"
33
#include "QGCToolbox.h"
Don Gagne's avatar
Don Gagne committed
34
#include "QGCLoggingCategory.h"
35

36 37 38 39 40 41
class FirmwarePluginManager;
class AutoPilotPluginManager;
class JoystickManager;
class QGCApplication;
class MAVLinkProtocol;

Don Gagne's avatar
Don Gagne committed
42 43
Q_DECLARE_LOGGING_CATEGORY(MultiVehicleManagerLog)

44
class MultiVehicleManager : public QGCTool
45 46
{
    Q_OBJECT
dogmaphobic's avatar
dogmaphobic committed
47

48
public:
49 50
    MultiVehicleManager(QGCApplication* app);

51 52
    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
53

54 55 56 57
    Q_PROPERTY(bool                 activeVehicleAvailable          READ activeVehicleAvailable                                 NOTIFY activeVehicleAvailableChanged)
    Q_PROPERTY(bool                 parameterReadyVehicleAvailable  READ parameterReadyVehicleAvailable                         NOTIFY parameterReadyVehicleAvailableChanged)
    Q_PROPERTY(Vehicle*             activeVehicle                   READ activeVehicle                  WRITE setActiveVehicle  NOTIFY activeVehicleChanged)
    Q_PROPERTY(QmlObjectListModel*  vehicles                        READ vehiclesModel                                          CONSTANT)
dogmaphobic's avatar
dogmaphobic committed
58

59
    // Methods
dogmaphobic's avatar
dogmaphobic committed
60

61 62 63 64 65 66 67
    /// Called to notify that a heartbeat was received with the specified information. MultiVehicleManager
    /// will create/update Vehicles as necessary.
    ///     @param link Heartbeat came through on this link
    ///     @param vehicleId Mavlink system id for vehicle
    ///     @param heartbeat Mavlink heartbeat message
    /// @return true: continue further processing of this message, false: disregard this message
    bool notifyHeartbeatInfo(LinkInterface* link, int vehicleId, mavlink_heartbeat_t& heartbeat);
dogmaphobic's avatar
dogmaphobic committed
68

Don Gagne's avatar
Don Gagne committed
69
    Q_INVOKABLE Vehicle* getVehicleById(int vehicleId);
dogmaphobic's avatar
dogmaphobic committed
70

71
    UAS* activeUas(void) { return _activeVehicle ? _activeVehicle->uas() : NULL; }
dogmaphobic's avatar
dogmaphobic committed
72

73
    QList<Vehicle*> vehicles(void);
74

75
    // Property accessors
dogmaphobic's avatar
dogmaphobic committed
76

77
    bool activeVehicleAvailable(void) { return _activeVehicleAvailable; }
dogmaphobic's avatar
dogmaphobic committed
78

79
    bool parameterReadyVehicleAvailable(void) { return _parameterReadyVehicleAvailable; }
dogmaphobic's avatar
dogmaphobic committed
80

81 82
    Vehicle* activeVehicle(void) { return _activeVehicle; }
    void setActiveVehicle(Vehicle* vehicle);
dogmaphobic's avatar
dogmaphobic committed
83

84
    QmlObjectListModel* vehiclesModel(void) { return &_vehicles; }
dogmaphobic's avatar
dogmaphobic committed
85

86 87 88
    // Override from QGCTool
    virtual void setToolbox(QGCToolbox *toolbox);

89 90 91 92 93 94
signals:
    void vehicleAdded(Vehicle* vehicle);
    void vehicleRemoved(Vehicle* vehicle);
    void activeVehicleAvailableChanged(bool activeVehicleAvailable);
    void parameterReadyVehicleAvailableChanged(bool parameterReadyVehicleAvailable);
    void activeVehicleChanged(Vehicle* activeVehicle);
dogmaphobic's avatar
dogmaphobic committed
95

96
    void _deleteVehiclePhase2Signal(void);
dogmaphobic's avatar
dogmaphobic committed
97

98
private slots:
99
    void _deleteVehiclePhase1(Vehicle* vehicle);
100 101
    void _deleteVehiclePhase2(void);
    void _setActiveVehiclePhase2(void);
102
    void _autopilotParametersReadyChanged(bool parametersReady);
dogmaphobic's avatar
dogmaphobic committed
103

104 105
private:
    bool _vehicleExists(int vehicleId);
dogmaphobic's avatar
dogmaphobic committed
106

107 108 109
    bool        _activeVehicleAvailable;            ///< true: An active vehicle is available
    bool        _parameterReadyVehicleAvailable;    ///< true: An active vehicle with ready parameters is available
    Vehicle*    _activeVehicle;                     ///< Currently active vehicle from a ui perspective
dogmaphobic's avatar
dogmaphobic committed
110

111 112
    Vehicle*    _vehicleBeingDeleted;               ///< Vehicle being deleted in queued phases
    Vehicle*    _vehicleBeingSetActive;             ///< Vehicle being set active in queued phases
dogmaphobic's avatar
dogmaphobic committed
113

114
    QList<int>  _ignoreVehicleIds;          ///< List of vehicle id for which we ignore further communication
dogmaphobic's avatar
dogmaphobic committed
115

116
    QmlObjectListModel  _vehicles;
117

dogmaphobic's avatar
dogmaphobic committed
118 119 120 121 122
    FirmwarePluginManager*      _firmwarePluginManager;
    AutoPilotPluginManager*     _autopilotPluginManager;
    JoystickManager*            _joystickManager;
    MAVLinkProtocol*            _mavlinkProtocol;

123 124 125
};

#endif