Repository navigation
chore: 2.12.3 backports - #7687
Merged
Merged
Conversation
pfeerick
force-pushed
the
pfeerick/backport-2.12.3
branch
from
August 21, 2026 00:11
89778fb to
580b282
Compare
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
force-pushed
the
pfeerick/backport-2.12.3
branch
2 times, most recently
from
August 21, 2026 10:38
837d5ae to
92546c6
Compare
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)
(cherry picked from commit 1b12ee9)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> (cherry picked from commit 19708ce)
(cherry picked from commit a82f44a)
…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)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit 36a36c5)
(cherry picked from commit 245da45)
(cherry picked from commit 1d42488)
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
force-pushed
the
pfeerick/backport-2.12.3
branch
from
August 23, 2026 07:58
f22b4f2 to
e5fc394
Compare
(cherry picked from commit 5d69da6)
pfeerick
force-pushed
the
pfeerick/backport-2.12.3
branch
from
August 24, 2026 11:01
e5fc394 to
9e9a999
Compare
(cherry picked from commit da6f73a) (cherry picked from commit 0c09e72adf44360772613a21bf42929399debc8b)
pfeerick
force-pushed
the
pfeerick/backport-2.12.3
branch
from
August 24, 2026 22:26
9e9a999 to
33d7c10
Compare
pfeerick
force-pushed
the
pfeerick/backport-2.12.3
branch
from
August 25, 2026 02:11
33d7c10 to
c1e55b0
Compare
pfeerick
force-pushed
the
pfeerick/backport-2.12.3
branch
from
August 25, 2026 02:40
c1e55b0 to
fc73c78
Compare
Co-authored-by: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> (cherry picked from commit 878f414)
pfeerick
force-pushed
the
pfeerick/backport-2.12.3
branch
from
August 26, 2026 05:39
fc73c78 to
b95b8fa
Compare
pfeerick
force-pushed
the
pfeerick/backport-2.12.3
branch
from
August 26, 2026 09:56
b95b8fa to
56dba48
Compare
pfeerick
force-pushed
the
pfeerick/backport-2.12.3
branch
from
August 27, 2026 00:04
988db34 to
b9d1690
Compare
Collaborator
|
Tested ok both mic recorder items |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Backport series for the 2.12.3 release.
Important: Rebase merge this PR — it is a curated series of
-xcherry-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
mainafter the series was assembled:#7604 was skipped — docs-only, and 2.12 has no
docs/tree.Plus Nine Non-Backport Commits
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.12with milestone2.12.3,2.11.8, or2.11.7against the branch to confirm nothing was missed; found and added #7699, #7706, #7707 above. Firmware rebuilt clean (zero warnings) ontx16smk3(STM32H7, color LCD, PDM mic) andzorro(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
mainand milestoned2.12.3today). #7710 cherry-picked cleanly (byte-identical diff to upstream). #7709 hit one merge conflict inradio/src/storage/modelslist.h: upstream'sModelMap::writeModelLabels()declaration landed in a duplicated public block that no longer exists on this branch (already consolidated toprotected: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, mostlyModelData→ModelHeadersignature threading throughyaml_datastructs_*.cpp) were dropped or altered. Rebuilt firmware clean ontx16sand rangtests-radio(includes the newmodelslist.cppunit test added by #7709) — passing.2026-08-26 update 3: added #7712, #7713, #7714 (all merged to
mainand milestoned2.12.3today). #7712 and #7714 cherry-picked cleanly. #7713 auto-merged cleanly inmodelslist.cpp, but its new unit tests (and #7712's) callModelMap::writeModelLabels()/clear()directly and expect them to be public — true onmain, but only because of an unrelated 3.0-only refactor (#7032, never backported) that made severalModelMapmembers public. Correcting the previous update's characterization: the branch'sprotected:placement for these members isn't a "consolidation" of a duplicate block — it's simply the original 2022 access level, undisturbed sinceModelMapwas introduced;maindiverged from it via #7032. Fix: moved justwriteModelLabels()andclear()(the two the new tests actually call) intopublic:, leavingupdateModelCell()/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 fullgtests-radiosuite (113/113 passing, including the new #7712/#7713 tests) plus a cleantx16sfirmware rebuild.CI on the first push of this batch caught a real break: #7714's cherry-pick brought over
main's no-argRadioMicRecorder::deleteLater()override, but on this branchWindow::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'soverridecheck caught it ongx15. It only surfaced in CI because local verification usedtx16s, which doesn't definePDM_CLOCK, so the guardedRadioMicRecorderclass body was never actually compiled locally. Fixed by matching the branch's two-param signature (the pattern used by every otherdeleteLater()override here), folded into the #7714 commit. Rebuilt clean ongx15,tx16smk3, andtx16s, all 113gtests-radiotests passing; CI is now fully green on this batch.2026-08-27 update: added #7715 (milestoned
2.11.8upstream but also labeledbackport/2.12, added at the user's explicit request). Cherry-picked cleanly (byte-identical diff to upstream, confirmed via Opus review pass), touchingradio/src/storage/modelslist.cppandradio/src/gui/colorlcd/model/model_select.cpp. Rebuilt clean ontx16smk3,gtests-radio113/113 passing.Outstanding Items