Skip to content

CRSF telemetry: selectable altitude source for the GPS frame (ESTIMATED/MSL) - #11850

Open
Raffi1202 wants to merge 3 commits into
iNavFlight:maintenance-10.xfrom
Raffi1202:crsf-gps-alt-msl
Open

Raffi1202 wants to merge 3 commits into
iNavFlight:maintenance-10.xfrom
Raffi1202:crsf-gps-alt-msl

Conversation

@Raffi1202

@Raffi1202 Raffi1202 commented Sep 2, 2026

Copy link
Copy Markdown

Problem

The altitude field of the CRSF GPS frame (0x02) is what EdgeTX/OpenTX radios show as GAlt. Since #11168 that field follows crsf_use_legacy_baro_packet: with the setting OFF (default) it carries the GNSS altitude above mean sea level and the altitude above the arming point moves to the barometer/vario frame; with ON the legacy packet set returns and the GPS frame carries the estimated altitude again.

Altitude source and packet format are therefore one decision. Someone who needs the legacy packet set - an older radio, an existing Lua script - cannot have MSL as GAlt, and someone on the new packet set cannot keep the estimated altitude there. No issue asks for this; it follows the discussion in #10934, where the CLI option that became #11168 was requested.

Cause

src/main/telemetry/crsf.c:244 on maintenance-10.x:

crsfSerialize16(dst, (uint16_t)( (telemetryConfig()->crsf_use_legacy_baro_packet
    ? getEstimatedActualPosition(Z) : gpsSol.llh.alt ) / 100 + 1000) );

One setting selects both the frame set (crsf.c:695) and the altitude source.

Change

A new setting crsf_gps_alt_source = AUTO | ESTIMATED | MSL that touches only the altitude field of the GPS frame. AUTO (default) follows crsf_use_legacy_baro_packet, so the conversion expression and the output stay bit-identical for anyone who sets nothing. ESTIMATED always sends getEstimatedActualPosition(Z), MSL always gpsSol.llh.alt. PG_TELEMETRY_CONFIG is bumped 11 to 12 for the added struct member.

Note that MSL sends gpsSol.llh.alt as it stands, which GPS fix estimation overwrites with a baro-derived value during an eligible outage (src/main/io/gps.c:346). That matches the other fields of this frame, which come from the same solution.

Test

Not run on hardware. Cause verified by reading crsf.c:244 and crsf.c:695 on maintenance-10.x. Fork CI for the head commit, all targets plus the four SITL builds and unit tests, green: https://github.com/Raffi1202/inav/actions/runs/34374230553

Flash / RAM

Not measured. The upstream firmware CI has not been released for this PR, and the fork build has no size baseline for this branch.

Docs

docs/Settings.md regenerated from settings.yaml with src/utils/update_cli_docs.py; the new entry describes what each of the three values sends and how AUTO relates to crsf_use_legacy_baro_packet.

Open question for a maintainer

This only adds value if decoupling the two is wanted. #11168 already covers what #10934 asked for, and nobody has asked for the altitude source on its own - if the answer is that the coupling is fine, this can be closed as superseded.

@qodo-code-review

Copy link
Copy Markdown
Contributor

ⓘ Qodo reviews are paused because the subscription is no longer active. Ask your workspace admin to reactivate the subscription to resume reviews. Manage billing

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

Branch Targeting Suggestion

You've targeted the master branch with this PR. Please consider if a version branch might be more appropriate:

  • maintenance-9.x - If your change is backward-compatible and won't create compatibility issues between INAV firmware and Configurator 9.x versions. This will allow your PR to be included in the next 9.x release.

  • maintenance-10.x - If your change introduces compatibility requirements between firmware and configurator that would break 9.x compatibility. This is for PRs which will be included in INAV 10.x

If master is the correct target for this change, no action is needed.


This is an automated suggestion to help route contributions to the appropriate branch.

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Sep 2, 2026

Copy link
Copy Markdown

PR Summary by Qodo

Add CRSF altitude selection and accurate PR size baselines

✨ Enhancement 🐞 Bug fix 🧪 Tests 📝 Documentation ⚙️ Configuration changes 🕐 40+ Minutes

Grey Divider

AI Description

• Adds selectable estimated or MSL altitude to CRSF GPS telemetry, preserving legacy default.
• Compares PR firmware sizes against retained merge-base baselines instead of moving branch tips.
• Expands tests and documentation, and removes an unused servo configuration field.
Diagram

graph TD
  subgraph Telemetry
    A["CLI setting"] --> B["Telemetry config"] --> C["CRSF GPS frame"]
    D["Altitude sources"] --> C
  end
  subgraph Size Reporting
    E["Nightly report"] --> F["Baseline publisher"] --> G["Commit baselines"] --> H["PR comparator"]
  end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Build the merge-base on demand
  • ➕ Always produces an exact baseline regardless of retention limits.
  • ➕ Avoids storing and pruning per-commit release assets.
  • ➖ Adds substantial build time and compute cost to every PR comparison.
  • ➖ Complicates privileged fork-PR workflows and delays feedback.
2. Store baselines in dedicated object storage
  • ➕ Supports longer retention and direct commit-keyed lookup.
  • ➕ Avoids using GitHub releases as a data store.
  • ➖ Requires new infrastructure, credentials, lifecycle policies, and maintenance.
  • ➖ Provides little immediate benefit at the current baseline volume.

Recommendation: Keep the PR's bounded per-commit release strategy. It fixes moving-branch-tip comparisons without rebuilding firmware, preserves compatibility through branch tags, and degrades safely to a nearby ancestor; monitor fallback frequency to determine whether the 50-baseline retention window should increase.

Files changed (13) +545 / -74

Enhancement (2) +14 / -1
crsf.cSelect CRSF GPS altitude from configuration +8/-1

Select CRSF GPS altitude from configuration

• Serializes either estimated altitude above the arming point or raw GNSS altitude above mean sea level into the CRSF GPS frame. Both paths retain the protocol's 1000-meter offset encoding.

src/main/telemetry/crsf.c

telemetry.hDefine CRSF GPS altitude-source configuration +6/-0

Define CRSF GPS altitude-source configuration

• Adds the estimated and MSL source enum and stores the selected value in 'telemetryConfig_t'.

src/main/telemetry/telemetry.h

Bug fix (2) +140 / -5
fetch-size-baseline.shResolve size baselines from the PR merge-base +119/-0

Resolve size baselines from the PR merge-base

• Adds a validated baseline resolver that first downloads the exact merge-base report, then searches up to 30 first-parent ancestors. It deliberately avoids the latest branch baseline and retries transient release-asset replacement failures.

.github/scripts/fetch-size-baseline.sh

size-diff-comment.jsIdentify the baseline commit in size comments +21/-5

Identify the baseline commit in size comments

• Extends comment rendering with the selected baseline SHA and a nearest-ancestor notice. Missing-baseline output now describes commit-keyed availability without claiming a comparison occurred.

.github/scripts/size-diff-comment.js

Refactor (1) +0 / -1
servos.hRemove an orphaned servo autotrim field +0/-1

Remove an orphaned servo autotrim field

• Removes 'servo_autotrim_iterm_threshold', which had no setting, reset initializer, or remaining code references.

src/main/flight/servos.h

Tests (1) +76 / -7
size-diff-comment.test.jsCover commit-aware size comment rendering +76/-7

Cover commit-aware size comment rendering

• Adds cases for exact, nearest-ancestor, legacy, and contradictory missing-baseline inputs. Existing notable-delta fixtures are aligned with the current 256-byte noise threshold.

.github/scripts/size-diff-comment.test.js

Documentation (3) +85 / -16
README.mdDocument commit-keyed size comparison architecture +29/-13

Document commit-keyed size comparison architecture

• Explains dual baseline publication, retention limits, merge-base lookup, ancestor fallback, and the new helper scripts. It also records the mandatory checkout requirement for jobs invoking repository scripts.

.github/workflows/README.md

Settings.mdDocument the CRSF GPS altitude-source setting +10/-0

Document the CRSF GPS altitude-source setting

• Documents the ESTIMATED and MSL choices, handset sensor semantics, and backward-compatible default.

docs/Settings.md

ram-and-flash-optimization.mdExpand cache and state memory guidance +46/-3

Expand cache and state memory guidance

• Corrects buffer-size examples and removes a stale handler detail. Adds guidance for budgeting speculative cache reads, reusing shared caches, and consolidating feature state into caller-owned structures.

docs/development/ram-and-flash-optimization.md

Other (4) +230 / -44
publish-size-baseline.shPublish and prune commit-keyed size baselines +142/-0

Publish and prune commit-keyed size baselines

• Adds reusable release publishing for both backward-compatible branch tags and primary commit SHA tags. Per-branch and global retention limits prevent unbounded growth, while pruning failures remain non-fatal.

.github/scripts/publish-size-baseline.sh

ci-size-report.ymlCompare PR sizes against merge-base reports +77/-43

Compare PR sizes against merge-base reports

• Publishes nightly reports through the new baseline script and computes each PR's merge-base through the GitHub compare API. The comment job fetches an exact or nearest-ancestor report and passes baseline metadata to the renderer; the publishing job now checks out trusted repository scripts first.

.github/workflows/ci-size-report.yml

settings.yamlRegister the CRSF altitude-source CLI setting +9/-0

Register the CRSF altitude-source CLI setting

• Defines the ESTIMATED/MSL lookup table and exposes 'crsf_gps_alt_source' as a telemetry setting. ESTIMATED remains the default to preserve existing behavior.

src/main/fc/settings.yaml

telemetry.cInitialize the new telemetry configuration field +2/-1

Initialize the new telemetry configuration field

• Bumps 'PG_TELEMETRY_CONFIG' from version 8 to 9 and initializes the CRSF GPS altitude source from its generated default.

src/main/telemetry/telemetry.c

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Sep 2, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (3) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Malformed baselines evade retention 🐞 Bug ☼ Reliability
Description
list_per_commit_baselines applies .b // "?" only after capture(...), so notes without a
matching first-line branch: marker never reach the intended fallback bucket and instead disappear
from or fail the release-listing pipeline. Any per-commit release with missing or malformed branch
notes can therefore stop prune before its deletion loop, while the caller only warns about the
failure, preventing both the per-branch limit and global cap from processing old reports.
Code

.github/scripts/publish-size-baseline.sh[R97-99]

+        --jq '.[] | select(.tag_name | test("^size-baseline-[0-9a-f]{40}$")) |
+              [.created_at, .tag_name,
+               ((.body // "") | capture("(?m)^branch: (?<b>[A-Za-z0-9._/-]+)$") | .b // "?")] | @tsv'
Evidence
The comments and pruning policy explicitly reserve the ? bucket and global cap for note-parse
failures, but the jq expression applies the fallback only after capture(...) has successfully
produced a value. When the branch marker does not match, the capture cannot supply a row to the
fallback and may fail the listing pipeline; consequently, the release is absent from the awk
deletion set or prune stops before deletion, and the caller reduces that pruning failure to a
warning.

.github/scripts/publish-size-baseline.sh[30-32]
.github/scripts/publish-size-baseline.sh[89-100]
.github/scripts/publish-size-baseline.sh[107-129]
.github/scripts/publish-size-baseline.sh[113-142]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Make baseline listing tolerate per-commit releases whose notes lack a valid first-line `branch:` marker. Ensure every matching release is emitted under the documented `?` fallback bucket instead of disappearing from jq output or causing the listing pipeline to fail and abort pruning; use `try`, optional matching, or group the entire capture pipeline before applying the fallback.
## Issue Context
The pruning policy explicitly intends the `?` bucket and global cap to cover orphaned baselines and note-parse failures. Missing or malformed notes must therefore remain in the pruning input, and coverage should include such a per-commit baseline to verify that retention continues processing all releases; this is especially important because pruning failures are intentionally reduced to warnings after publishing.
## Fix Focus Areas
- .github/scripts/publish-size-baseline.sh[95-100]
- .github/scripts/publish-size-baseline.sh[102-142]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Pruning API failures stay silent 🐞 Bug ◔ Observability
Description
prune is invoked on the left side of ||, which disables Bash's errexit behavior for commands
inside the function despite set -e, allowing a failed release-list pipeline to continue into
successful empty-input processing. When GitHub release enumeration fails, no baselines are pruned
and the promised warning is not emitted, so repeated retention failures can go unnoticed.
Code

.github/scripts/publish-size-baseline.sh[142]

+prune || echo "::warning::per-commit baseline pruning failed (see stderr)" >&2
Evidence
The function relies on the release-list pipeline failing under set -e, then calls that function in
an OR-list whose purpose is to warn. Bash suppresses errexit in this context, and the following
awk pipeline can return success after the failed listing, preventing the outer warning.

.github/scripts/publish-size-baseline.sh[34-34]
.github/scripts/publish-size-baseline.sh[102-129]
.github/scripts/publish-size-baseline.sh[139-142]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The outer `prune || warning` construct suppresses `errexit` within the function, allowing release-list failures to be masked by later successful commands. Explicitly check and return failure from the listing/sorting pipeline so the warning path reliably runs.
## Issue Context
Pruning is intentionally non-fatal, but its failures are supposed to produce a visible warning rather than silently skipping retention enforcement.
## Fix Focus Areas
- .github/scripts/publish-size-baseline.sh[102-114]
- .github/scripts/publish-size-baseline.sh[139-142]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Negative altitude rounding changed ✓ Resolved 🐞 Bug ≡ Correctness
Description
The new intermediate integer division truncates negative centimeters toward zero, whereas the
previous floating-point expression effectively rounded negative relative altitude down to the next
meter. In default ESTIMATED mode, values such as -150 cm now report -1 m instead of the legacy -2 m,
contradicting the promised unchanged behavior.
Code

src/main/telemetry/crsf.c[R248-250]

+        altitudeCm = lrintf(getEstimatedActualPosition(Z));
+    }
+    const uint16_t altitude = (altitudeCm / 100) + 1000;
Evidence
The CRSF field represents whole meters with a 1000 m offset, while getEstimatedActualPosition
returns a float. Rounding the float to centimeters and then applying signed integer division changes
how routine below-arming-point values are quantized compared with the removed expression.

src/main/telemetry/crsf.c[224-251]
src/main/navigation/navigation.c[5128-5136]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Preserve the previous CRSF conversion behavior for estimated negative altitudes. The new integer-centimeter intermediate causes signed integer division to round toward zero, changing the default telemetry output by one meter for negative, non-integral-meter positions.
## Issue Context
The ESTIMATED setting is intended to be behaviorally identical to the old implementation. Keep MSL selection separate while retaining the legacy floating-point conversion semantics or implementing an explicit equivalent rounding rule.
## Fix Focus Areas
- src/main/telemetry/crsf.c[242-251]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View medium (1)
4. Synthetic altitude labeled raw 🐞 Bug ≡ Correctness
Description
The MSL branch reads the post-processed gpsSol.llh.alt, which GPS-fix estimation overwrites with
gpsOrigin.alt + baro.BaroAlt during an eligible GPS outage. Radios can therefore receive synthetic
barometric altitude despite the setting being documented as raw GNSS MSL.
Code

src/main/telemetry/crsf.c[R245-246]

+    if (telemetryConfig()->crsfGpsAltSource == CRSF_GPS_ALT_MSL) {
+        altitudeCm = gpsSol.llh.alt;
Evidence
The repository distinguishes raw gpsSolDRV from consumer-facing gpsSol, copies the former into
the latter, and then runs GPS-fix estimation. Under the supported fixed-wing estimation conditions,
that processing replaces gpsSol.llh.alt with GPS-origin altitude plus barometric relative altitude
before CRSF reads it.

src/main/telemetry/crsf.c[242-251]
src/main/io/gps.c[83-92]
src/main/io/gps.c[217-227]
src/main/io/gps.c[277-327]
src/main/io/gps.c[344-351]
src/main/fc/settings.yaml[2428-2433]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Ensure CRSF MSL telemetry uses a safely retained raw GNSS altitude rather than the processed GPS solution that fix estimation may overwrite.
## Issue Context
`gpsSolDRV` contains driver data but is explicitly unsafe to access asynchronously. Introduce or use a safe snapshot/accessor with clearly defined no-fix behavior rather than reading `gpsSolDRV` directly from telemetry code.
## Fix Focus Areas
- src/main/telemetry/crsf.c[242-251]
- src/main/io/gps.c[83-92]
- src/main/io/gps.c[264-327]
- src/main/io/gps.c[344-351]
- src/main/io/gps.h[124-160]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Tip of the day
💡 Did you know, you can start a comment with 'qodo' or '@qodo' to chat about any finding

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread src/main/telemetry/crsf.c Outdated
Comment thread src/main/telemetry/crsf.c Outdated
Comment on lines +245 to +246
if (telemetryConfig()->crsfGpsAltSource == CRSF_GPS_ALT_MSL) {
altitudeCm = gpsSol.llh.alt;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

2. Synthetic altitude labeled raw 🐞 Bug ≡ Correctness

The MSL branch reads the post-processed gpsSol.llh.alt, which GPS-fix estimation overwrites with
gpsOrigin.alt + baro.BaroAlt during an eligible GPS outage. Radios can therefore receive synthetic
barometric altitude despite the setting being documented as raw GNSS MSL.
Agent Prompt
## Issue description
Ensure CRSF MSL telemetry uses a safely retained raw GNSS altitude rather than the processed GPS solution that fix estimation may overwrite.

## Issue Context
`gpsSolDRV` contains driver data but is explicitly unsafe to access asynchronously. Introduce or use a safe snapshot/accessor with clearly defined no-fix behavior rather than reading `gpsSolDRV` directly from telemetry code.

## Fix Focus Areas
- src/main/telemetry/crsf.c[242-251]
- src/main/io/gps.c[83-92]
- src/main/io/gps.c[264-327]
- src/main/io/gps.c[344-351]
- src/main/io/gps.h[124-160]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@Raffi1202

Copy link
Copy Markdown
Author

Addressed the automated review findings in 9eb30e9:

  • The ESTIMATED path now uses the exact legacy conversion expression again, so the default behaviour is bit-identical to before (the intermediate integer step could round negative altitudes differently by 1 m).
  • Dropped raw from the MSL wording: with GPS fix estimation enabled, gpsSol may carry the estimated fix during a GPS outage. Reading the processed gpsSol is intentional and consistent with the other fields of this frame (lat/lon/speed come from the same solution).

@sensei-hacker sensei-hacker added this to the 10.0 milestone Sep 5, 2026
@sensei-hacker
sensei-hacker changed the base branch from master to maintenance-10.x September 5, 2026 00:25
@Raffi1202

Copy link
Copy Markdown
Author

@sensei-hacker thanks for retargeting to maintenance-10.x. While rebasing I noticed that 10.x already covers this since #11168: with crsf_use_legacy_baro_packet = OFF (default) the GPS frame carries gpsSol.llh.alt, and ON restores the legacy relative altitude. So this PR is effectively superseded.

The only difference is that my setting decouples the GPS-frame altitude source from the baro/vario frame format, which I doubt anyone needs.

Unless you see value in that, I'll close this as superseded.

@Raffi1202

Raffi1202 commented Sep 9, 2026

Copy link
Copy Markdown
Author

Reopened: keeping this open until there is a view on whether decoupling the GPS-frame altitude source from the baro/vario frame format (which #11168 ties together via crsf_use_legacy_baro_packet on maintenance-10.x) is wanted. If not, this can be closed as superseded; if so, I will rebase it onto maintenance-10.x on top of #11168.

@Raffi1202 Raffi1202 closed this Sep 9, 2026
@Raffi1202 Raffi1202 reopened this Sep 9, 2026
Comment on lines +97 to +99
--jq '.[] | select(.tag_name | test("^size-baseline-[0-9a-f]{40}$")) |
[.created_at, .tag_name,
((.body // "") | capture("(?m)^branch: (?<b>[A-Za-z0-9._/-]+)$") | .b // "?")] | @tsv'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

1. Malformed baselines evade retention 🐞 Bug ☼ Reliability

list_per_commit_baselines applies .b // "?" only after capture(...), so notes without a
matching first-line branch: marker never reach the intended fallback bucket and instead disappear
from or fail the release-listing pipeline. Any per-commit release with missing or malformed branch
notes can therefore stop prune before its deletion loop, while the caller only warns about the
failure, preventing both the per-branch limit and global cap from processing old reports.
Agent Prompt
## Issue description
Make baseline listing tolerate per-commit releases whose notes lack a valid first-line `branch:` marker. Ensure every matching release is emitted under the documented `?` fallback bucket instead of disappearing from jq output or causing the listing pipeline to fail and abort pruning; use `try`, optional matching, or group the entire capture pipeline before applying the fallback.

## Issue Context
The pruning policy explicitly intends the `?` bucket and global cap to cover orphaned baselines and note-parse failures. Missing or malformed notes must therefore remain in the pruning input, and coverage should include such a per-commit baseline to verify that retention continues processing all releases; this is especially important because pruning failures are intentionally reduced to warnings after publishing.

## Fix Focus Areas
- .github/scripts/publish-size-baseline.sh[95-100]
- .github/scripts/publish-size-baseline.sh[102-142]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

# Pruning is housekeeping: a failure here must not fail the publish (the
# baseline itself already landed above), or the nightly would look broken
# for a cosmetic reason. Warn loudly instead.
prune || echo "::warning::per-commit baseline pruning failed (see stderr)" >&2

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

2. Pruning api failures stay silent 🐞 Bug ◔ Observability

prune is invoked on the left side of ||, which disables Bash's errexit behavior for commands
inside the function despite set -e, allowing a failed release-list pipeline to continue into
successful empty-input processing. When GitHub release enumeration fails, no baselines are pruned
and the promised warning is not emitted, so repeated retention failures can go unnoticed.
Agent Prompt
## Issue description
The outer `prune || warning` construct suppresses `errexit` within the function, allowing release-list failures to be masked by later successful commands. Explicitly check and return failure from the listing/sorting pipeline so the warning path reliably runs.

## Issue Context
Pruning is intentionally non-fatal, but its failures are supposed to produce a visible warning rather than silently skipping retention enforcement.

## Fix Focus Areas
- .github/scripts/publish-size-baseline.sh[102-114]
- .github/scripts/publish-size-baseline.sh[139-142]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 9eb30e9

…s_alt_source)

On maintenance-10.x the altitude sent in the CRSF GPS frame is tied to the
baro packet format: crsf_use_legacy_baro_packet = OFF sends the GNSS
altitude above mean sea level, ON the estimated altitude above the arming
point. This adds crsf_gps_alt_source to choose the GPS-frame altitude on
its own:

  AUTO       follow crsf_use_legacy_baro_packet (default, unchanged output)
  ESTIMATED  estimated altitude above the arming point
  MSL        GNSS altitude above mean sea level

The conversion expression is the same as before, so AUTO is bit-identical
to the current output. PG_TELEMETRY_CONFIG is bumped to 12 for the new
field; docs/Settings.md regenerated.
@Raffi1202

Copy link
Copy Markdown
Author

Rebased onto maintenance-10.x (97d6d11, single commit) and reworked for the packet-format switch that #11168 introduced: crsf_gps_alt_source is now AUTO | ESTIMATED | MSL, with AUTO (default) following crsf_use_legacy_baro_packet and the conversion expression unchanged, so the default output is bit-identical to today's. PG_TELEMETRY_CONFIG bumped to 12, docs/Settings.md regenerated; the description above is updated accordingly.

CI for the rebased commit on my fork (all targets, SITL on all platforms, unit tests, docs check): https://github.com/Raffi1202/inav/actions/runs/34359457345. The one red job there is the Parameter Group Version Check, which fails on every PR at the moment; #11885 fixes it.

Raffi1202 and others added 2 commits September 9, 2026 18:02
Those files belong to iNavFlight#11885, which replaces check-pg-versions.sh with a
Python checker. Carrying a copy here only produces a conflict once either
lands, and it is unrelated to this change.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants