Skip to content

Add PARAM_EXT to parameter tab - #15030

Open
julianoes wants to merge 2 commits into
masterfrom
param-ext-parameter-view
Open

Add PARAM_EXT to parameter tab#15030
julianoes wants to merge 2 commits into
masterfrom
param-ext-parameter-view

Conversation

@julianoes

@julianoes julianoes commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Description

This adds PARAM_EXT parameters to the parameters tab, as requested in https://discord.com/channels/1022170275984457759/1022185820683255908/threads/1544457580351332386.

Tested using PX4 SITL together with this MAVSDK camera example.

image

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update
  • Refactoring (no functional changes)
  • CI/Build changes
  • Other

Testing

  • Tested locally
  • Added/updated unit tests
  • Tested with simulator (SITL)
  • Tested with hardware

Platforms Tested

  • Linux
  • Windows
  • macOS
  • Android
  • iOS

Flight Stacks Tested

  • PX4
  • ArduPilot

Screenshots

Checklist

  • I have read the Contribution Guidelines
  • I have read the Code of Conduct
  • My code follows the project's coding standards
  • I have added tests that prove my fix/feature works
  • New and existing unit tests pass locally

Related Issues


By submitting this pull request, I confirm that my contribution is made under the terms of the project's dual license (Apache 2.0 and GPL v3).

QGCCameraParamIO carried its own switch statements for encoding and decoding
the 128 byte PARAM_EXT value blob. ParameterManager needs the same conversion
for the extended parameter protocol, so move it to QGCMAVLink rather than
duplicate it.

The encode path previously used std::max where std::min was meant, reading
past the end of a CUSTOM value shorter than 128 bytes.
Extended parameters were only reachable through the camera definition file,
which means a camera's parameters could not be inspected or changed unless the
definition happened to describe them. ParameterManager now queries them
directly.

Once the classic parameter download completes, PARAM_EXT_REQUEST_LIST goes out
to every non-autopilot component heard from, and to any that appears later.
Components which don't implement the protocol simply never answer. The query is
held back until the classic download is done so the two don't compete for
bandwidth, and missing indices are re-requested a bounded number of times.

Ext facts are kept in their own map: they take no part in the load progress,
the parameter cache, or the .params file, and they must be written with
PARAM_EXT_SET rather than PARAM_SET. componentIds(), parameterNames() and
getParameter() merge both maps, so the parameter editor picks them up with no
UI change and lists them under their component.

Writes go through a state machine mirroring the PARAM_SET one, handling
PARAM_ACK_IN_PROGRESS as "keep waiting" and reporting rejections to the user.
Because acks are broadcast, a parameter shown in both the parameter view and
the camera settings UI stays in sync whichever side writes it.

VehicleCameraControl no longer warns about ext values outside its camera
definition, since a full list query makes those expected traffic.

MockLinkCamera serves a small set of ext parameters on camera 1 only, so the
tests also cover components that ignore the query.
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Build Results

Platform Status

Platform Status Details
Linux Passed View
Windows Passed View
MacOS Passed View
Android Passed View

All builds passed.

Pre-commit

Check Status Details
pre-commit Failed (non-blocking) View

Pre-commit hooks: 2 passed, 77 failed, 7 skipped.

Test Results

linux-coverage-integration: 52 passed, 0 skipped
linux-coverage-unit: 185 passed, 0 skipped
linux-sanitizers-integration: 31 passed, 0 skipped
linux-sanitizers-unit: 185 passed, 0 skipped
Total: 453 passed, 0 skipped

Code Coverage

Coverage: 70.7%

No baseline available for comparison

Artifact Sizes

Artifact Size
QGroundControl 253.15 MB
QGroundControl-aarch64 177.13 MB
QGroundControl-installer-AMD64 128.88 MB
QGroundControl-installer-AMD64-ARM64 71.04 MB
QGroundControl-installer-ARM64 99.55 MB
QGroundControl-linux 84.78 MB
QGroundControl-mac 84.78 MB
QGroundControl-x86_64 189.39 MB
No baseline available for comparison

Updated: 2026-09-03 03:43:51 UTC • Commit: 3ff5777 • Triggered by: Windows

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant