QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MockLinkCamera.h
Go to the documentation of this file.
1#pragma once
2
3#include "MAVLinkLib.h"
4
5#include <QtCore/QLoggingCategory>
6#include <QtCore/QMutex>
7
8Q_DECLARE_LOGGING_CATEGORY(MockLinkCameraLog)
9
10class MockLink;
11
38{
39public:
47
49 struct CameraState {
50 uint8_t compId = MAV_COMP_ID_CAMERA;
51 uint32_t capFlags = 0;
52 uint8_t cameraMode = CAMERA_MODE_IMAGE;
53 bool recording = false;
55 float zoomLevel = 1.0f;
56 float focusLevel = 0.0f;
58 float image_interval = 0.0f;
59 qint64 singleShotStartMs = 0;
60 };
61
62 explicit MockLinkCamera(MockLink *mockLink,
63 bool captureVideo = true,
64 bool captureImage = true,
65 bool hasModes = true,
66 bool hasVideoStream = true,
67 bool canCaptureImageInVideoMode = true,
68 bool canCaptureVideoInImageMode = false,
69 bool hasBasicZoom = true,
70 bool hasTrackingPoint = false,
71 bool hasTrackingRectangle = false);
72 ~MockLinkCamera() = default;
73
76
78 void run10HzTasks();
79
83
84private:
87 bool _handleCameraCommand(const mavlink_command_long_t &request, uint8_t targetCompId);
88
91 bool _handleRequestMessage(const mavlink_command_long_t &request, uint8_t targetCompId);
92
93 void _sendCameraInformation(uint8_t compId);
94 void _sendCameraSettings(uint8_t compId);
95 void _sendStorageInformation(uint8_t compId);
96 void _sendCameraCaptureStatus(uint8_t compId);
97 void _sendCameraImageCaptured(uint8_t compId);
98 void _sendVideoStreamInformation(uint8_t compId, uint8_t streamId);
99 void _sendVideoStreamStatus(uint8_t compId, uint8_t streamId);
100 void _sendCommandAck(uint8_t compId, uint16_t command, uint8_t result, int requestedMsgId = -1);
101
102 CameraState *_findCamera(uint8_t compId);
103 static const char *_imageCaptureStatusToString(uint8_t status);
104
105 static constexpr uint8_t kNumCameras = 2;
106 static constexpr uint8_t kNumStreams = 2;
107 static constexpr uint32_t kStorageTotalMiB = 16384;
108 static constexpr uint32_t kStorageFreeMiB = 8192;
109
110 MockLink *_mockLink = nullptr;
111 CameraState _cameras[kNumCameras];
116 QMutex _camerasMutex;
117};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
struct __mavlink_message mavlink_message_t
void sendCameraHeartbeats()
Send heartbeats for all simulated camera components (call from 1Hz tasks)
bool handleMavlinkMessage(const mavlink_message_t &msg)
void run10HzTasks()
Update camera states (call from 10Hz tasks)
ImageCaptureStatus
Image capture status values.
@ ImageCaptureInProgress
Single image capture in progress.
@ ImageCaptureInterval
Interval capture enabled.
@ ImageCaptureIntervalCapture
Interval capture with capture in progress.
@ ImageCaptureIdle
No capture in progress.
~MockLinkCamera()=default
Per-camera simulated state.
float image_interval
Interval between image captures (seconds)
qint64 singleShotStartMs
Timestamp when single-shot capture started (0 = not active)
uint32_t capFlags
CAMERA_CAP_FLAGS.
uint8_t cameraMode
CAMERA_MODE enum.
uint8_t image_status
ImageCaptureStatus enum.