Skip to content

chore: 2.12.3 backports - #7687

Merged
pfeerick merged 55 commits into
2.12from
pfeerick/backport-2.12.3
Aug 28, 2026
Merged

pfeerick merged 55 commits into
2.12from
pfeerick/backport-2.12.3

Conversation

@pfeerick

@pfeerick pfeerick commented Aug 21, 2026 •

Copy link
Copy Markdown
Member

Backport series for the 2.12.3 release.

Important: Rebase merge this PR — it is a curated series of -x cherry-picks, and squashing would destroy the upstream trail.

Backported PRs

Cherry-picked in ascending PR order:

Then, out of numeric order because they merged to main after the series was assembled:

#7604 was skipped — docs-only, and 2.12 has no docs/ tree.

Plus Nine Non-Backport Commits

  • fix(build): use the renamed STICK_DEAD_ZONE option on gx15 and t15pro
  • fix(cpn): V12 missing from the STM32H7 board list
  • chore(ci): update actions to their current major versions
  • fix(color): sign-compare warning
  • fix(cli): drop dead spModuleInit/DeInit compiled on EXTERNAL_MODULE-only targets
  • fix(keys): guard key-lock combo state behind KEYS_LOCK_KEY1/2
  • fix(lua): avoid always-true BLING_LED_STRIP_LENGTH comparison on bling-less targets
  • fix(pa01): avoid always-true LED_CHARGING_START comparison in ledChargingInfo
  • chore: bump version

Adaptations

Several commits required hand-porting due to divergence between branches. Key adaptations include modifications to LCD driver flush contracts, RTC voltage reading on V14, YAML generation for multiple targets, and simulator error handling for 2.12's non-WASM architecture.

Testing

Firmware builds verified across 16 targets. Simulator linking tested. Companion configuration tested on Linux. Hardware smoke tests performed on select radio models. Warning-fix commits rebuilt cleanly on affected targets with zero warnings.

2026-08-26 update: re-swept all PRs labeled backport/2.12 with milestone 2.12.3, 2.11.8, or 2.11.7 against the branch to confirm nothing was missed; found and added #7699, #7706, #7707 above. Firmware rebuilt clean (zero warnings) on tx16smk3 (STM32H7, color LCD, PDM mic) and zorro (STM32F4, monochrome) — chosen to cover both the trainer/serial driver changes (#7699, common STM32 UART/DMA code) and the mic trim (#7706) / manage-models (#7707) color-LCD UI changes across differing hardware families.

2026-08-26 update 2: added #7710 and #7709 (both merged to main and milestoned 2.12.3 today). #7710 cherry-picked cleanly (byte-identical diff to upstream). #7709 hit one merge conflict in radio/src/storage/modelslist.h: upstream's ModelMap::writeModelLabels() declaration landed in a duplicated public block that no longer exists on this branch (already consolidated to protected: by earlier 2.12-only refactors) — resolved by adding just the new declaration to the branch's existing protected block, verified reachable from both call sites. Verified with an Opus review pass against the source PRs: no other files affected by the auto-merge (28 files, mostly ModelData→ModelHeader signature threading through yaml_datastructs_*.cpp) were dropped or altered. Rebuilt firmware clean on tx16s and ran gtests-radio (includes the new modelslist.cpp unit test added by #7709) — passing.

2026-08-26 update 3: added #7712, #7713, #7714 (all merged to main and milestoned 2.12.3 today). #7712 and #7714 cherry-picked cleanly. #7713 auto-merged cleanly in modelslist.cpp, but its new unit tests (and #7712's) call ModelMap::writeModelLabels()/clear() directly and expect them to be public — true on main, but only because of an unrelated 3.0-only refactor (#7032, never backported) that made several ModelMap members public. Correcting the previous update's characterization: the branch's protected: placement for these members isn't a "consolidation" of a duplicate block — it's simply the original 2022 access level, undisturbed since ModelMap was introduced; main diverged from it via #7032. Fix: moved just writeModelLabels() and clear() (the two the new tests actually call) into public:, leaving updateModelCell()/removeModels() protected: as before — folded into the #7713 commit since it's a direct consequence of that cherry-pick. Verified via Opus review pass (confirmed the relocation is a pure move with no text changes, and that widening access can't break existing callers) and by running the full gtests-radio suite (113/113 passing, including the new #7712/#7713 tests) plus a clean tx16s firmware rebuild.

CI on the first push of this batch caught a real break: #7714's cherry-pick brought over main's no-arg RadioMicRecorder::deleteLater() override, but on this branch Window::deleteLater() still takes (bool detach = true, bool trash = true) (main simplified it via the same unbackported #7032 refactor noted above) — so it silently stopped being an override rather than failing to compile until GCC's override check caught it on gx15. It only surfaced in CI because local verification used tx16s, which doesn't define PDM_CLOCK, so the guarded RadioMicRecorder class body was never actually compiled locally. Fixed by matching the branch's two-param signature (the pattern used by every other deleteLater() override here), folded into the #7714 commit. Rebuilt clean on gx15, tx16smk3, and tx16s, all 113 gtests-radio tests passing; CI is now fully green on this batch.

2026-08-27 update: added #7715 (milestoned 2.11.8 upstream but also labeled backport/2.12, added at the user's explicit request). Cherry-picked cleanly (byte-identical diff to upstream, confirmed via Opus review pass), touching radio/src/storage/modelslist.cpp and radio/src/gui/colorlcd/model/model_select.cpp. Rebuilt clean on tx16smk3, gtests-radio 113/113 passing.

Outstanding Items

@pfeerick pfeerick added bug/regression ↩️ A new version of EdgeTX broke something enhancement ✨ New feature or request color Related generally to color LCD radios B&W (bw) Related generally to black and white LCD radios companion (cpn) Related to the companion software ci/cd 🔧 Related to GitHub Actions and similar issues labels Aug 21, 2026
@pfeerick pfeerick added this to the 2.12.3 milestone Aug 21, 2026
@pfeerick pfeerick added telemetry 📶 storage Related to loading, saving, converting needs: testing labels Aug 21, 2026
@pfeerick
pfeerick force-pushed the pfeerick/backport-2.12.3 branch from 89778fb to 580b282 Compare August 21, 2026 00:11
pfeerick added a commit that referenced this pull request Aug 21, 2026
actions/checkout was spread across v5, v6 and v7 in different workflows;
everything is now on one version.

  actions/checkout             v5, v6, v7  -> v7
  actions/download-artifact    v7          -> v8
  actions/setup-python         v6          -> v7
  actions/stale                v10         -> v11
  softprops/action-gh-release  v2          -> v3
  astral-sh/setup-uv           v7          -> v10.0.1
  repolevedavaj/install-nsis   v1.2.1      -> v1

Already current: actions/cache@v6, actions/upload-artifact@v7,
actions/upload-artifact/merge@v7, dorny/paths-filter@v4,
montudor/action-zip@v1, orhun/git-cliff-action@v4 and
jdpurcell/install-qt-action@v5. That last one publishes its major versions
as branches rather than tags, so v5 is the moving reference even though the
newest tag reads v4.1.1.

setup-uv is pinned to a full version rather than a major. Its bare major
tags stop at v7 - there is no v8, v9 or v10 - so a major reference cannot
follow it any further. Everything else has a moving major and uses it;
install-nsis v1 currently resolves to the same commit as v1.3.0.

The note against action-gh-release in nightly.yml pointing at its PR 670 as
the way to clear a Node.js warning goes too - v3 is what it suggested.

The equivalent sweep for 2.12 is in #7687, which is where this started:
build_fw there was warning that upload-artifact/merge@v4 targets Node.js 20
and was being forced onto Node.js 24. main was already past that one.

Worth an eye on the first run: action-gh-release crosses a major and is what
publishes the nightly release, and setup-uv crosses three.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@pfeerick
pfeerick force-pushed the pfeerick/backport-2.12.3 branch 2 times, most recently from 837d5ae to 92546c6 Compare August 21, 2026 10:38
richardclli and others added 14 commits August 23, 2026 04:24
Co-authored-by: xlong <984929678@qq.com>
Co-authored-by: Peter Feerick <peter.feerick@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
(cherry picked from commit 256dc98)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
(cherry picked from commit 19aa6d5)
This changes the flush contract: flushLcd() no longer calls
lv_disp_flush_ready() after invoking the driver callback, so each LCD
driver must now signal completion itself via lcdFlushed(). Upstream
updated every driver that needed it, but two on 2.12 were missed:

  - boards/helloradio-h750/lcd_driver.cpp (v12) already had the call on
    main, added there by work that never reached 2.12, so it was not part
    of the upstream diff. The call is added here, making startLcdRefresh
    byte-identical to main's.

  - targets/c14/lcd_driver.cpp is missing the call on main as well, so
    c14 is affected upstream too and needs the same fix there.

Both are synchronous busy-wait drivers that relied on flushLcd() readying
the display for them. Without the call LVGL never learns the flush
completed and the display pipeline stalls after the first frame - the
radio reaches the splash screen and stops, and because boot_lcd.cpp
carries the same contract change, the bootloader stops redrawing too and
so never appears to notice a USB connection.

Also drops trailing whitespace on one line of startLcdRefresh to match
main; the remaining whitespace drift in the commented-out init block is
left alone to keep this diff focused.

LCD_VERTICAL_INVERT is tested with defined() rather than for a non-zero
value: on 2.12 it is a bare #define on PCBX10/TX16S, so upstream's
'#if LCD_VERTICAL_INVERT' would silently take the wrong branch here.

The simulator hunk targets opentxsimulator.cpp rather than main's
simulib.cpp, which does not exist on 2.12.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
(cherry picked from commit 50d12c7)
…ds (#7549)

Co-authored-by: Sergey Yugoman <sergey.yugoman@armenotech.com>
Co-authored-by: Peter Feerick <5500713+pfeerick@users.noreply.github.com>
(cherry picked from commit fcdf92d)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
(cherry picked from commit 19708ce)
…ched (#7599)

Adapted for 2.12, which has no virtual Window::doKeyShortcut(). Upstream
overrides that single virtual with an empty body to neutralise the SYS/MDL/
TELE shortcuts on this page; on 2.12 Page overrides the six onPress*/
onLongPress* hooks directly, so those six are neutralised individually
instead. Without this the build fails on every colour target with
"marked 'override', but does not override".

(cherry picked from commit cffcbc4)
…ipts (#7603)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
(cherry picked from commit 81db17e)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit 36a36c5)
isExternalModuleAvailable()'s DSMP-disabled guard referenced
MODULE_TYPE_DSMP, which doesn't exist as an enum value (only
MODULE_TYPE_LEMON_DSMP does). Currently dead since DSMP is always
defined on STM32 targets, but would fail to compile if DSMP were
ever disabled. This restores the fix from d584237, which was
accidentally reverted by 853adfd ("chore: formatting") before
PR #7469 was squash-merged.
@pfeerick
pfeerick force-pushed the pfeerick/backport-2.12.3 branch from f22b4f2 to e5fc394 Compare August 23, 2026 07:58
@pfeerick
pfeerick force-pushed the pfeerick/backport-2.12.3 branch from e5fc394 to 9e9a999 Compare August 24, 2026 11:01
(cherry picked from commit da6f73a)
(cherry picked from commit 0c09e72adf44360772613a21bf42929399debc8b)
@pfeerick
pfeerick force-pushed the pfeerick/backport-2.12.3 branch from 9e9a999 to 33d7c10 Compare August 24, 2026 22:26
…80 LCD size (#7695)

(cherry picked from commit faa6095)
(cherry picked from commit 4ef75e2d1adbe41eb78b3f237ffc7ba1d785bc6d)
…g labels (#7705)

(cherry picked from commit 7f6bbd1)
(cherry picked from commit 92f73a207aac9d2a50a93ba81197b620159afffa)
@pfeerick
pfeerick force-pushed the pfeerick/backport-2.12.3 branch from 33d7c10 to c1e55b0 Compare August 25, 2026 02:11
… position is wrong (#7670)

(cherry picked from commit 298e6e6)
(cherry picked from commit 6f7befb5f6bec91ffb92633f57743064effad130)
@pfeerick
pfeerick force-pushed the pfeerick/backport-2.12.3 branch from c1e55b0 to fc73c78 Compare August 25, 2026 02:40
raphaelcoeffic and others added 3 commits August 26, 2026 05:32
Co-authored-by: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com>
(cherry picked from commit 878f414)
…hen tapping or clicking stop (#7706)

(cherry picked from commit ccc8387)
@pfeerick
pfeerick force-pushed the pfeerick/backport-2.12.3 branch from fc73c78 to b95b8fa Compare August 26, 2026 05:39
3djc and others added 3 commits August 26, 2026 09:48
Co-authored-by: philmoz <phil.a.mitchell@gmail.com>
Co-authored-by: Peter Feerick <peter.feerick@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
(cherry picked from commit 35662d0)
(cherry picked from commit e5fc394)
(cherry picked from commit 9e9a999)
(cherry picked from commit 33d7c10)
(cherry picked from commit c1e55b0)
@pfeerick
pfeerick force-pushed the pfeerick/backport-2.12.3 branch from b95b8fa to 56dba48 Compare August 26, 2026 09:56
pfeerick and others added 4 commits August 26, 2026 23:21
…el edits (#7712)

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
(cherry picked from commit d219690)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
(cherry picked from commit 3562502)
…der (#7714)

(cherry picked from commit 2b9b8fd)

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
(cherry picked from commit e5fc394)
(cherry picked from commit 9e9a999)
(cherry picked from commit 33d7c10)
(cherry picked from commit c1e55b0)
@pfeerick
pfeerick force-pushed the pfeerick/backport-2.12.3 branch from 988db34 to b9d1690 Compare August 27, 2026 00:04
@3djc

3djc commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

Tested ok both mic recorder items

philmoz and others added 2 commits August 27, 2026 12:09
(cherry picked from commit e5fc394)
(cherry picked from commit 9e9a999)
(cherry picked from commit 33d7c10)
(cherry picked from commit c1e55b0)
@pfeerick
pfeerick marked this pull request as ready for review August 27, 2026 12:38
@pfeerick
pfeerick merged commit bb6a29b into 2.12 Aug 28, 2026
115 of 118 checks passed
@pfeerick
pfeerick deleted the pfeerick/backport-2.12.3 branch August 28, 2026 06:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

B&W (bw) Related generally to black and white LCD radios bug/regression ↩️ A new version of EdgeTX broke something ci/cd 🔧 Related to GitHub Actions and similar issues color Related generally to color LCD radios companion (cpn) Related to the companion software enhancement ✨ New feature or request needs: testing storage Related to loading, saving, converting telemetry 📶

Projects

None yet

Development

Successfully merging this pull request may close these issues.