MultiVehicleManager.h 4.4 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
    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)
57
    Q_PROPERTY(QmlObjectListModel*  vehicles                        READ vehicles                                               CONSTANT)
dogmaphobic's avatar
dogmaphobic committed
58

59
    // Methods
dogmaphobic's avatar
dogmaphobic committed
60

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

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

65
    // Property accessors
dogmaphobic's avatar
dogmaphobic committed
66

67
    bool activeVehicleAvailable(void) { return _activeVehicleAvailable; }
dogmaphobic's avatar
dogmaphobic committed
68

69
    bool parameterReadyVehicleAvailable(void) { return _parameterReadyVehicleAvailable; }
dogmaphobic's avatar
dogmaphobic committed
70

71 72
    Vehicle* activeVehicle(void) { return _activeVehicle; }
    void setActiveVehicle(Vehicle* vehicle);
dogmaphobic's avatar
dogmaphobic committed
73

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

76 77 78
    // Override from QGCTool
    virtual void setToolbox(QGCToolbox *toolbox);

79 80 81 82 83 84
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
85

86
    void _deleteVehiclePhase2Signal(void);
dogmaphobic's avatar
dogmaphobic committed
87

88
private slots:
89
    void _deleteVehiclePhase1(Vehicle* vehicle);
90 91
    void _deleteVehiclePhase2(void);
    void _setActiveVehiclePhase2(void);
92
    void _autopilotParametersReadyChanged(bool parametersReady);
Don Gagne's avatar
Don Gagne committed
93
    void _linkActive(LinkInterface* link, int vehicleId, int vehicleFirmwareType, int vehicleType);
dogmaphobic's avatar
dogmaphobic committed
94

95 96
private:
    bool _vehicleExists(int vehicleId);
dogmaphobic's avatar
dogmaphobic committed
97

98 99 100
    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
101

Don Gagne's avatar
Don Gagne committed
102 103
    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
104

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

107
    QmlObjectListModel  _vehicles;
108

dogmaphobic's avatar
dogmaphobic committed
109 110 111 112 113
    FirmwarePluginManager*      _firmwarePluginManager;
    AutoPilotPluginManager*     _autopilotPluginManager;
    JoystickManager*            _joystickManager;
    MAVLinkProtocol*            _mavlinkProtocol;

114 115 116
};

#endif