QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
QGCCameraManager.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QElapsedTimer>
4#include <QtCore/QLoggingCategory>
5#include <QtCore/QMap>
6#include <QtCore/QObject>
7#include <QtCore/QPointer>
8#include <QtCore/QTimer>
9#include <QtCore/QVariantList>
10#include <QtQmlIntegration/QtQmlIntegration>
11
12#include "MAVLinkLib.h"
13#include "QmlObjectListModel.h"
14#include "Vehicle.h"
15
16Q_DECLARE_LOGGING_CATEGORY(CameraManagerLog)
17
18class CameraMetaData;
19class Joystick;
21class QGCCameraManagerTest;
24
26class QGCCameraManager : public QObject
27{
28 Q_OBJECT
29 QML_ELEMENT
30 QML_UNCREATABLE("")
31 Q_MOC_INCLUDE("Joystick.h")
32 Q_MOC_INCLUDE("MavlinkCameraControl.h")
33
34 Q_PROPERTY(QmlObjectListModel* cameras READ cameras NOTIFY camerasChanged)
35 Q_PROPERTY(QStringList cameraLabels READ cameraLabels NOTIFY cameraLabelsChanged)
36 Q_PROPERTY(MavlinkCameraControl* currentCameraInstance READ currentCameraInstance NOTIFY currentCameraChanged)
37 Q_PROPERTY(int currentCamera READ currentCamera WRITE setCurrentCamera NOTIFY currentCameraChanged)
38 Q_PROPERTY(int currentZoomLevel READ currentZoomLevel NOTIFY currentZoomLevelChanged)
39
40#ifdef QGC_UNITTEST_BUILD
41 friend class QGCCameraManagerTest;
42#endif
43
44public:
45 explicit QGCCameraManager(Vehicle* vehicle);
47
48 struct CameraStruct {
49 CameraStruct(QGCCameraManager* manager_, uint8_t compID_, Vehicle* vehicle_);
50 ~CameraStruct();
51
52 bool infoReceived = false;
53 uint8_t compID = 0;
54 int retryCount = 0;
55 QElapsedTimer lastHeartbeat;
56 QTimer backoffTimer;
57 QPointer<Vehicle> vehicle;
58 QPointer<QGCCameraManager> manager;
59
60 private:
61 Q_DISABLE_COPY_MOVE(CameraStruct)
62 };
63
64 QmlObjectListModel* cameras() { return &_cameras; }
65 const QmlObjectListModel* cameras() const { return &_cameras; }
66 QStringList cameraLabels() const { return _cameraLabels; }
67 int currentCamera() const { return _currentCameraIndex; }
68 MavlinkCameraControl* currentCameraInstance();
69 void setCurrentCamera(int sel);
70 QGCVideoStreamInfo* currentStreamInstance();
71 QGCVideoStreamInfo* thermalStreamInstance();
72
73 const QVariantList& cameraList() const;
74
75 Vehicle* vehicle() const { return _vehicle; }
76
77 CameraStruct* findCameraStruct(uint8_t compId) const { return _cameraInfoRequest.value(QString::number(compId), nullptr); }
78
79 int currentZoomLevel() const;
80 double aspectForComp(int compId) const;
81 double currentCameraAspect();
82 Q_INVOKABLE void requestCameraFovForComp(int compId);
83
84private:
85 int _zoomValueCurrent = 0;
86
87signals:
92
94
95protected slots:
96 void _vehicleReady(bool ready);
97 void _mavlinkMessageReceived(const mavlink_message_t& message);
98 void _activeJoystickChanged(Joystick* joystick);
99 void _stepZoom(int direction);
100 void _startZoom(int direction);
101 void _stopZoom();
102 void _stepCamera(int direction);
103 void _stepStream(int direction);
105 void _triggerCamera();
107 void _stopVideoRecording();
109
110private slots:
111 void _initialConnectCompleted();
112 void _setCurrentZoomLevel(int level);
113
114private:
115 MavlinkCameraControl* _findCamera(int id);
116 void _requestCameraInfo(CameraStruct* cameraInfo);
117 void _handleHeartbeat(const mavlink_message_t& message);
118 void _handleCameraInfo(const mavlink_message_t& message);
119 void _handleStorageInformation(const mavlink_message_t& message);
120 void _handleCameraSettings(const mavlink_message_t& message);
121 void _handleParamExtAck(const mavlink_message_t& message);
122 void _handleParamExtValue(const mavlink_message_t& message);
123 void _handleCameraCaptureStatus(const mavlink_message_t& message);
124 void _handleVideoStreamInformation(const mavlink_message_t& message);
125 void _handleVideoStreamStatus(const mavlink_message_t& message);
126 void _handleBatteryStatus(const mavlink_message_t& message);
127 void _handleTrackingImageStatus(const mavlink_message_t& message);
128 void _addCameraControlToLists(MavlinkCameraControl* cameraControl);
129 void _handleCameraFovStatus(const mavlink_message_t& message);
130
131 QPointer<Vehicle> _vehicle;
132 QPointer<SimulatedCameraControl> _simulatedCameraControl;
133 QPointer<Joystick> _activeJoystick;
134 bool _vehicleReadyState = false;
135 int _currentTask = 0;
136 QmlObjectListModel _cameras;
137 QStringList _cameraLabels;
138 int _currentCameraIndex = 0;
139 QElapsedTimer _lastZoomChange;
140 QElapsedTimer _lastCameraChange;
141 QTimer _camerasLostHeartbeatTimer;
142 QMap<QString, CameraStruct*> _cameraInfoRequest;
143 static QVariantList _cameraList;
144 bool _initialConnectComplete = false;
145
146 QHash<int, double> _aspectByCompId;
147};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
struct __mavlink_message mavlink_message_t
Set of meta data which describes a camera available on the vehicle.
Abstract base class for all camera controls: real and simulated.
Camera Manager.
void currentZoomLevelChanged()
void _vehicleReady(bool ready)
void cameraLabelsChanged()
void _stepZoom(int direction)
void _startZoom(int direction)
void _mavlinkMessageReceived(const mavlink_message_t &message)
void currentCameraChanged()
void _stepCamera(int direction)
void _activeJoystickChanged(Joystick *joystick)
void _stepStream(int direction)
Encapsulates the contents of a VIDEO_STREAM_INFORMATION message.