MultiVehicleManager.h 5.53 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 58
    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 vehicles                                                       CONSTANT)
    Q_PROPERTY(bool                 gcsHeartBeatEnabled             READ gcsHeartbeatEnabled            WRITE setGcsHeartbeatEnabled    NOTIFY gcsHeartBeatEnabledChanged)
dogmaphobic's avatar
dogmaphobic committed
59

Don Gagne's avatar
Don Gagne committed
60 61 62
    /// A disconnected vehicle is used to access FactGroup information for the Vehicle object when no active vehicle is available
    Q_PROPERTY(Vehicle*             disconnectedVehicle             MEMBER _disconnectedVehicle                                         CONSTANT)

63
    // Methods
dogmaphobic's avatar
dogmaphobic committed
64

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

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

69
    // Property accessors
dogmaphobic's avatar
dogmaphobic committed
70

71
    bool activeVehicleAvailable(void) { return _activeVehicleAvailable; }
dogmaphobic's avatar
dogmaphobic committed
72

73
    bool parameterReadyVehicleAvailable(void) { return _parameterReadyVehicleAvailable; }
dogmaphobic's avatar
dogmaphobic committed
74

75 76
    Vehicle* activeVehicle(void) { return _activeVehicle; }
    void setActiveVehicle(Vehicle* vehicle);
dogmaphobic's avatar
dogmaphobic committed
77

78
    QmlObjectListModel* vehicles(void) { return &_vehicles; }
dogmaphobic's avatar
dogmaphobic committed
79

80 81 82
    bool gcsHeartbeatEnabled(void) const { return _gcsHeartbeatEnabled; }
    void setGcsHeartbeatEnabled(bool gcsHeartBeatEnabled);

83 84 85
    // Override from QGCTool
    virtual void setToolbox(QGCToolbox *toolbox);

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

94
    void _deleteVehiclePhase2Signal(void);
dogmaphobic's avatar
dogmaphobic committed
95

96
private slots:
97
    void _deleteVehiclePhase1(Vehicle* vehicle);
98 99
    void _deleteVehiclePhase2(void);
    void _setActiveVehiclePhase2(void);
100
    void _autopilotParametersReadyChanged(bool parametersReady);
101
    void _sendGCSHeartbeat(void);
102
    void _vehicleHeartbeatInfo(LinkInterface* link, int vehicleId, int vehicleMavlinkVersion, int vehicleFirmwareType, int vehicleType);
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
Don Gagne's avatar
Don Gagne committed
110
    Vehicle*    _disconnectedVehicle;               ///< Disconnected vechicle for FactGroup access
dogmaphobic's avatar
dogmaphobic committed
111

Don Gagne's avatar
Don Gagne committed
112 113
    QList<Vehicle*> _vehiclesBeingDeleted;          ///< List of Vehicles being deleted in queued phases
    Vehicle*        _vehicleBeingSetActive;         ///< Vehicle being set active in queued phases
dogmaphobic's avatar
dogmaphobic committed
114

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

117
    QmlObjectListModel  _vehicles;
118

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

124 125 126 127
    QTimer              _gcsHeartbeatTimer;             ///< Timer to emit heartbeats
    bool                _gcsHeartbeatEnabled;           ///< Enabled/disable heartbeat emission
    static const int    _gcsHeartbeatRateMSecs = 1000;  ///< Heartbeat rate
    static const char*  _gcsHeartbeatEnabledKey;
128 129 130
};

#endif