QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MultiVehicleManager.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QObject>
4#include <QtQmlIntegration/QtQmlIntegration>
5
6class LinkInterface;
7class Vehicle;
9class QTimer;
10
11class MultiVehicleManager : public QObject
12{
13 Q_OBJECT
14 QML_ELEMENT
15 QML_UNCREATABLE("")
16 Q_MOC_INCLUDE("QmlObjectListModel.h")
17 Q_MOC_INCLUDE("LinkInterface.h")
18 Q_MOC_INCLUDE("Vehicle.h")
19 Q_PROPERTY(bool activeVehicleAvailable READ _getActiveVehicleAvailable NOTIFY activeVehicleAvailableChanged)
20 Q_PROPERTY(bool parameterReadyVehicleAvailable READ _getParameterReadyVehicleAvailable NOTIFY parameterReadyVehicleAvailableChanged)
22 Q_PROPERTY(QmlObjectListModel *vehicles READ vehicles CONSTANT)
24 Q_PROPERTY(Vehicle *offlineEditingVehicle READ offlineEditingVehicle CONSTANT)
25
26public:
27 explicit MultiVehicleManager(QObject *parent = nullptr);
29
31
32 void init();
33 Q_INVOKABLE Vehicle *getVehicleById(int vehicleId) const;
34 Q_INVOKABLE void selectVehicle(int vehicleId);
35 Q_INVOKABLE void deselectVehicle(int vehicleId);
36 Q_INVOKABLE void deselectAllVehicles();
37 QmlObjectListModel *vehicles() const { return _vehicles; }
38 QmlObjectListModel *selectedVehicles() const { return _selectedVehicles; }
39 Vehicle *offlineEditingVehicle() const { return _offlineEditingVehicle; }
40 Vehicle *activeVehicle() const { return _activeVehicle; }
41 void setActiveVehicle(Vehicle *vehicle);
42
43signals:
44 void vehicleAdded(Vehicle *vehicle);
45 void vehicleRemoved(Vehicle *vehicle);
46 void activeVehicleAvailableChanged(bool activeVehicleAvailable);
47 void parameterReadyVehicleAvailableChanged(bool parameterReadyVehicleAvailable);
49
50private slots:
51 void _deleteVehiclePhase1(Vehicle *vehicle);
52 void _deleteVehiclePhase2(Vehicle *vehicle);
53 void _setActiveVehiclePhase2(Vehicle *vehicle);
54 void _vehicleParametersReadyChanged(bool parametersReady);
55 void _sendGCSHeartbeat();
56 void _vehicleHeartbeatInfo(LinkInterface *link, int vehicleId, int componentId, int vehicleFirmwareType, int vehicleType);
57
58private:
59 bool _vehicleExists(int vehicleId);
60 bool _vehicleSelected(int vehicleId);
61 void _setActiveVehicle(Vehicle *vehicle);
62 bool _getActiveVehicleAvailable() const { return _activeVehicleAvailable; }
63 void _setActiveVehicleAvailable(bool activeVehicleAvailable);
64 bool _getParameterReadyVehicleAvailable() const { return _parameterReadyVehicleAvailable; }
65 void _setParameterReadyVehicleAvailable(bool parametersReady);
66
67 QTimer *_gcsHeartbeatTimer = nullptr;
68 QmlObjectListModel *_vehicles = nullptr;
69 QmlObjectListModel *_selectedVehicles = nullptr;
70 Vehicle *_offlineEditingVehicle = nullptr;
71 bool _activeVehicleAvailable = false;
72 bool _parameterReadyVehicleAvailable = false;
73 Vehicle *_activeVehicle = nullptr;
74 QList<int> _ignoreVehicleIds;
75 bool _initialized = false;
76
77 static constexpr int kGCSHeartbeatRateMSecs = 1000;
78};
The link interface defines the interface for all links used to communicate with the ground station ap...
static MultiVehicleManager * instance()
void activeVehicleAvailableChanged(bool activeVehicleAvailable)
Vehicle * activeVehicle() const
Q_INVOKABLE void deselectAllVehicles()
Vehicle * offlineEditingVehicle() const
Q_INVOKABLE void selectVehicle(int vehicleId)
void vehicleAdded(Vehicle *vehicle)
Q_INVOKABLE void deselectVehicle(int vehicleId)
QmlObjectListModel * vehicles() const
QmlObjectListModel * selectedVehicles() const
void vehicleRemoved(Vehicle *vehicle)
void parameterReadyVehicleAvailableChanged(bool parameterReadyVehicleAvailable)
void activeVehicleChanged(Vehicle *activeVehicle)
Q_INVOKABLE Vehicle * getVehicleById(int vehicleId) const
void setActiveVehicle(Vehicle *vehicle)