QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MockLinkSettings.qml
Go to the documentation of this file.
1import QtQuick
2import QtQuick.Controls
3import QtQuick.Layouts
4
5import QGroundControl
6import QGroundControl.Controls
7
8ColumnLayout {
9 spacing: _rowSpacing
10
11 function saveSettings() {
12 subEditConfig.firmware = firmwareTypeCombo.selectedFirmware
13 if (firmwareTypeCombo.apmFirmwareSelected) {
14 if (vehicleTypeCombo.currentIndex === 1) {
15 subEditConfig.vehicle = MAVLinkEnums.MAV_TYPE_FIXED_WING
16 } else {
17 subEditConfig.vehicle = MAVLinkEnums.MAV_TYPE_QUADROTOR
18 }
19 }
20 subEditConfig.sendStatus = sendStatus.checked
21 subEditConfig.apmStartFreshParams = apmStartFreshParams.checked
22 subEditConfig.enableCamera = enableCamera.checked
23 subEditConfig.enableGimbal = enableGimbal.checked
24 subEditConfig.enableProximity = enableProximity.checked
25 subEditConfig.enableADSB = enableADSB.checked
26 subEditConfig.incrementVehicleId = incrementVehicleId.checked
27 subEditConfig.homeLocation = homeLocationCombo.currentIndex
28 subEditConfig.cameraCaptureVideo = cameraCaptureVideo.checked
29 subEditConfig.cameraCaptureImage = cameraCaptureImage.checked
30 subEditConfig.cameraHasModes = cameraHasModes.checked
31 subEditConfig.cameraHasVideoStream = cameraHasVideoStream.checked
32 // The stream type combo only applies when the camera advertises a video stream;
33 // persist Disabled otherwise so a stale selection can't linger in settings.
34 subEditConfig.videoStreamType = cameraHasVideoStream.checked ? videoStreamTypeCombo.currentIndex : 0
35 subEditConfig.cameraCanCaptureImageInVideoMode = cameraCanCaptureImageInVideoMode.checked
36 subEditConfig.cameraCanCaptureVideoInImageMode = cameraCanCaptureVideoInImageMode.checked
37 subEditConfig.cameraHasBasicZoom = cameraHasBasicZoom.checked
38 subEditConfig.cameraHasTrackingPoint = cameraHasTrackingPoint.checked
39 subEditConfig.cameraHasTrackingRectangle = cameraHasTrackingRectangle.checked
40 subEditConfig.gimbalHasRollAxis = gimbalHasRollAxis.checked
41 subEditConfig.gimbalHasPitchAxis = gimbalHasPitchAxis.checked
42 subEditConfig.gimbalHasYawAxis = gimbalHasYawAxis.checked
43 subEditConfig.gimbalHasYawFollow = gimbalHasYawFollow.checked
44 subEditConfig.gimbalHasYawLock = gimbalHasYawLock.checked
45 subEditConfig.gimbalHasRetract = gimbalHasRetract.checked
46 subEditConfig.gimbalHasNeutral = gimbalHasNeutral.checked
47 }
48
49 Component.onCompleted: {
50 let firmwareIndex = firmwareTypeCombo._firmwareValues.indexOf(subEditConfig.firmware)
51 if (firmwareIndex < 0) {
52 // Entries are ordered supported firmwares first, Generic last resort
53 firmwareIndex = 0
54 }
55 firmwareTypeCombo.currentIndex = firmwareIndex
56 if (subEditConfig.vehicle === MAVLinkEnums.MAV_TYPE_FIXED_WING) {
57 vehicleTypeCombo.currentIndex = 1
58 } else {
59 vehicleTypeCombo.currentIndex = 0
60 }
61 videoStreamTypeCombo.currentIndex = subEditConfig.videoStreamType
62 homeLocationCombo.currentIndex = subEditConfig.homeLocation
63 }
64
65 QGCCheckBoxSlider {
66 id: sendStatus
67 Layout.fillWidth: true
68 text: qsTr("Send Status Text and Voice")
69 checked: subEditConfig.sendStatus
70 }
71
72 QGCCheckBoxSlider {
73 id: enableCamera
74 Layout.fillWidth: true
75 text: qsTr("Enable Camera")
76 checked: subEditConfig.enableCamera
77 }
78
79 QGCCheckBoxSlider {
80 id: enableGimbal
81 Layout.fillWidth: true
82 text: qsTr("Enable Gimbal")
83 checked: subEditConfig.enableGimbal
84 }
85
86 QGCCheckBoxSlider {
87 id: enableProximity
88 Layout.fillWidth: true
89 text: qsTr("Enable Proximity Sensors")
90 checked: subEditConfig.enableProximity
91 }
92
93 QGCCheckBoxSlider {
94 id: enableADSB
95 Layout.fillWidth: true
96 text: qsTr("Enable ADS-B Vehicles")
97 checked: subEditConfig.enableADSB
98 }
99
100 QGCCheckBoxSlider {
101 id: incrementVehicleId
102 Layout.fillWidth: true
103 text: qsTr("Increment Vehicle Id")
104 checked: subEditConfig.incrementVehicleId
105 }
106
107 LabelledComboBox {
108 id: firmwareTypeCombo
109 Layout.fillWidth: true
110 label: qsTr("Firmware Type")
111 model: _firmwareEntries.map(entry => entry.name)
112
113 readonly property var _firmwareEntries: {
114 let entries = []
115 if (QGroundControl.px4ProFirmwareSupported) {
116 entries.push({ value: MAVLinkEnums.MAV_AUTOPILOT_PX4, name: qsTr("PX4 Pro") })
117 }
118 if (QGroundControl.apmFirmwareSupported) {
119 entries.push({ value: MAVLinkEnums.MAV_AUTOPILOT_ARDUPILOTMEGA, name: qsTr("ArduPilot") })
120 }
121 entries.push({ value: MAVLinkEnums.MAV_AUTOPILOT_GENERIC, name: qsTr("Generic MAVLink") })
122 return entries
123 }
124 readonly property var _firmwareValues: _firmwareEntries.map(entry => entry.value)
125 readonly property int selectedFirmware: currentIndex >= 0 ? _firmwareValues[currentIndex] : _firmwareValues[0]
126 readonly property bool apmFirmwareSelected: selectedFirmware === MAVLinkEnums.MAV_AUTOPILOT_ARDUPILOTMEGA
127 }
128
129 LabelledComboBox {
130 id: vehicleTypeCombo
131 Layout.fillWidth: true
132 label: qsTr("Vehicle Type")
133 model: [ qsTr("ArduCopter"), qsTr("ArduPlane") ]
134 visible: firmwareTypeCombo.apmFirmwareSelected
135 }
136
137 LabelledComboBox {
138 id: homeLocationCombo
139 Layout.fillWidth: true
140 label: qsTr("Home Location")
141 model: [
142 qsTr("PX4 SITL Default"),
143 qsTr("ArduPilot SITL Default"),
144 qsTr("Terrain Test")
145 ]
146 }
147
148 QGCCheckBoxSlider {
149 id: apmStartFreshParams
150 Layout.fillWidth: true
151 text: qsTr("Start With Fresh Firmware Parameters (Setup Required)")
152 checked: subEditConfig.apmStartFreshParams
153 visible: firmwareTypeCombo.apmFirmwareSelected
154
155 onVisibleChanged: {
156 if (!visible) {
157 // Reset the model, not the view — an imperative write to checked
158 // would sever its declarative binding
159 subEditConfig.apmStartFreshParams = false
160 }
161 }
162 }
163
164 SettingsGroupLayout {
165 Layout.fillWidth: true
166 heading: qsTr("Camera Capabilities")
167 visible: enableCamera.checked
168
169 QGCCheckBoxSlider {
170 id: cameraHasVideoStream
171 Layout.fillWidth: true
172 text: "CAMERA_CAP_FLAGS_HAS_VIDEO_STREAM"
173 checked: subEditConfig.cameraHasVideoStream
174 visible: enableCamera.checked
175 }
176
177 LabelledComboBox {
178 id: videoStreamTypeCombo
179 Layout.fillWidth: true
180 label: qsTr("Served Video Stream")
181 visible: enableCamera.checked && cameraHasVideoStream.checked
182 model: [
183 qsTr("Disabled"),
184 qsTr("RTP/UDP H.264"),
185 qsTr("RTP/UDP H.265"),
186 qsTr("RTSP (H.264)"),
187 qsTr("MPEG-TS (UDP)"),
188 qsTr("MPEG-TS (TCP)")
189 ]
190 }
191
192 QGCCheckBoxSlider {
193 id: cameraCaptureVideo
194 Layout.fillWidth: true
195 text: "CAMERA_CAP_FLAGS_CAPTURE_VIDEO"
196 checked: subEditConfig.cameraCaptureVideo
197 visible: enableCamera.checked
198 }
199
200 QGCCheckBoxSlider {
201 id: cameraCaptureImage
202 Layout.fillWidth: true
203 text: "CAMERA_CAP_FLAGS_CAPTURE_IMAGE"
204 checked: subEditConfig.cameraCaptureImage
205 visible: enableCamera.checked
206 }
207
208 QGCCheckBoxSlider {
209 id: cameraHasModes
210 Layout.fillWidth: true
211 text: "CAMERA_CAP_FLAGS_HAS_MODES"
212 checked: subEditConfig.cameraHasModes
213 visible: enableCamera.checked
214 }
215
216 QGCCheckBoxSlider {
217 id: cameraCanCaptureImageInVideoMode
218 Layout.fillWidth: true
219 text: "CAMERA_CAP_FLAGS_CAN_CAPTURE_IMAGE_IN_VIDEO_MODE"
220 checked: subEditConfig.cameraCanCaptureImageInVideoMode
221 visible: enableCamera.checked
222 }
223
224 QGCCheckBoxSlider {
225 id: cameraCanCaptureVideoInImageMode
226 Layout.fillWidth: true
227 text: "CAMERA_CAP_FLAGS_CAN_CAPTURE_VIDEO_IN_IMAGE_MODE"
228 checked: subEditConfig.cameraCanCaptureVideoInImageMode
229 visible: enableCamera.checked
230 }
231
232 QGCCheckBoxSlider {
233 id: cameraHasBasicZoom
234 Layout.fillWidth: true
235 text: "CAMERA_CAP_FLAGS_HAS_BASIC_ZOOM"
236 checked: subEditConfig.cameraHasBasicZoom
237 visible: enableCamera.checked
238 }
239
240 QGCCheckBoxSlider {
241 id: cameraHasTrackingPoint
242 Layout.fillWidth: true
243 text: "CAMERA_CAP_FLAGS_HAS_TRACKING_POINT"
244 checked: subEditConfig.cameraHasTrackingPoint
245 visible: enableCamera.checked
246 }
247
248 QGCCheckBoxSlider {
249 id: cameraHasTrackingRectangle
250 Layout.fillWidth: true
251 text: "CAMERA_CAP_FLAGS_HAS_TRACKING_RECTANGLE"
252 checked: subEditConfig.cameraHasTrackingRectangle
253 visible: enableCamera.checked
254 }
255 }
256
257 SettingsGroupLayout {
258 Layout.fillWidth: true
259 heading: qsTr("Gimbal Capabilities")
260 visible: enableGimbal.checked
261
262 QGCCheckBoxSlider {
263 id: gimbalHasRollAxis
264 Layout.fillWidth: true
265 text: "GIMBAL_MANAGER_CAP_FLAGS_HAS_ROLL_AXIS"
266 checked: subEditConfig.gimbalHasRollAxis
267 visible: enableGimbal.checked
268 }
269
270 QGCCheckBoxSlider {
271 id: gimbalHasPitchAxis
272 Layout.fillWidth: true
273 text: "GIMBAL_MANAGER_CAP_FLAGS_HAS_PITCH_AXIS"
274 checked: subEditConfig.gimbalHasPitchAxis
275 visible: enableGimbal.checked
276 }
277
278 QGCCheckBoxSlider {
279 id: gimbalHasYawAxis
280 Layout.fillWidth: true
281 text: "GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_AXIS"
282 checked: subEditConfig.gimbalHasYawAxis
283 visible: enableGimbal.checked
284 }
285
286 QGCCheckBoxSlider {
287 id: gimbalHasYawFollow
288 Layout.fillWidth: true
289 text: "GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_FOLLOW"
290 checked: subEditConfig.gimbalHasYawFollow
291 visible: enableGimbal.checked
292 }
293
294 QGCCheckBoxSlider {
295 id: gimbalHasYawLock
296 Layout.fillWidth: true
297 text: "GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_LOCK"
298 checked: subEditConfig.gimbalHasYawLock
299 visible: enableGimbal.checked
300 }
301
302 QGCCheckBoxSlider {
303 id: gimbalHasRetract
304 Layout.fillWidth: true
305 text: "GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT"
306 checked: subEditConfig.gimbalHasRetract
307 visible: enableGimbal.checked
308 }
309
310 QGCCheckBoxSlider {
311 id: gimbalHasNeutral
312 Layout.fillWidth: true
313 text: "GIMBAL_MANAGER_CAP_FLAGS_HAS_NEUTRAL"
314 checked: subEditConfig.gimbalHasNeutral
315 visible: enableGimbal.checked
316 }
317 }
318}