Skip to content

Follow-ups to PR #647: HWCDC comment + upload-path reboot prompt#652

Merged
sritchie merged 2 commits into
masterfrom
fix/647-followups
May 31, 2026
Merged

Follow-ups to PR #647: HWCDC comment + upload-path reboot prompt#652
sritchie merged 2 commits into
masterfrom
fix/647-followups

Conversation

@sritchie
Copy link
Copy Markdown
Collaborator

Two post-merge follow-ups to PR #647

Both surfaced in the post-merge bulldog review. Each is small and independently revertable.

Fix 1: HardwareMap.h boom-UART comment no longer recommends `Serial.end()` (closes #650)

The existing boom-UART pin comment hypothesized that UART0 could re-claim GPIO 3 after a framework upgrade, and recommended `Serial.end()` as the fix. After PR #647's bench-bisected HWCDC use-after-free finding, that advice is actively dangerous — `HWCDC::end()` deletes `tx_lock` without waiting for in-flight writers, producing a wedge-on-boot with no recovery path.

Replaced the recommendation with a pointer to the explanation comment in `Helpers.cpp::_softRestart` and noted the correct resolutions if the hypothetical scenario ever fires (`Serial0.end` on the real UART0 handle, or explicit GPIO-matrix detach).

Fix 2: Config-upload path now surfaces the 416-boundary reboot prompt (closes #651)

PR #647's reboot prompt only fires from `HandleConfigSave` (dropdown-form path). `HandleConfigUpload` calls `LoadConfigFromString` → `ApplyPostParseSideEffects` directly and bypasses every per-field `rebootRequired` setter. Net effect: pilot uploads a 416-Hz config XML to a 208-Hz running box → no banner → next power cycle silently jumps to 416 Hz.

Added a `bUploadCrossedBoundary416` flag set in `HandleConfigUpload`'s `UPLOAD_FILE_END` branch on a true 416-boundary crossing. `HandleFinalUpload` reads the flag and serves the same "Reboot Now" prompt that `HandleConfigSave` uses for the dropdown path.

Verification

```
pio run -e esp32s3-v4p # SUCCESS
pio test -e native # 1168 passed, 1 skipped — no regressions
```

Bench testing

Not yet — both fixes are textual + a single page handler. Sam will bench the upload path on the next session; the comment fix is doc-only and doesn't need bench validation.

Related

sritchie and others added 2 commits May 25, 2026 08:29
…loses #650)

The boom UART pin comment hypothesized that a future framework upgrade
could let UART0 silently re-claim GPIO 3 and recommended Serial.end()
as the fix. PR #647's bench-bisected HWCDC use-after-free finding makes
that advice dangerous: on this hardware Serial is HWCDC over USB-OTG,
and HWCDC::end() deletes tx_lock without waiting for in-flight writers
— wedge-on-boot territory with no recovery path.

Replace with a pointer to the Helpers.cpp explanation and note the
correct resolutions if the hypothetical re-claim ever fires (Serial0.end
on the real UART0 handle, or GPIO-matrix detach).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ry (closes #651)

PR #647 added the 416-boundary reboot prompt to HandleConfigSave (the
dropdown-form path). HandleConfigUpload (XML upload via
/aoaconfigupload) bypassed it: LoadConfigFromString mutates
g_Config.iLogRate directly and never runs through the per-field
rebootRequired setters, so a pilot uploading a 416-Hz config to a
208-Hz running box would get a silent rate transition on the next
power cycle.

HandleConfigUpload now snapshots iLogRate's 416-ness before
LoadConfigFromString and sets the new bUploadCrossedBoundary416 flag
on a true crossing. HandleFinalUpload reads the flag and, if set,
serves the same "Reboot Now" prompt that HandleConfigSave uses for
the dropdown path. Banner wording mirrors HandleConfigSave for
consistency.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

Firmware Artifacts

Main firmware (Gen3 box)

Variant Download
V4P (Phil's box) onspeed-V4P-4.23.1-dev.11+905b363.zip
V4B (Bob's box) onspeed-V4B-4.23.1-dev.11+905b363.zip

Each .zip contains three files: firmware.bin, bootloader.bin, and partitions.bin.
For an OTA update, you only need firmware.bin — upload it at http://onspeed.local/upgrade.
For a USB flash (initial setup or recovery), you need all three — see the flashing docs.

External display firmware

Board Download
M5Stack Basic m5-display-basic-4.23.1-dev.11+905b363.zip
M5Stack Core2 m5-display-core2-4.23.1-dev.11+905b363.zip
huVVer-AVI ⚠️ unverified — see #298 m5-display-huvver-avi-4.23.1-dev.11+905b363.zip

Each .zip contains firmware.bin, bootloader.bin, and partitions.bin. For an OTA update on M5Stack, hold Button B during boot to enter WiFi update mode and upload firmware.bin. For a USB flash, see the external display docs.

The huVVer-AVI binary is built but not yet validated on real hardware — see the bring-up checklist for what to verify on first flash.

X-Plane plugin

Platform Download
macOS AOA-Tone-FlyOnSpeed-mac_x64.xpl
Windows AOA-Tone-FlyOnSpeed-win_x64.xpl
Linux AOA-Tone-FlyOnSpeed-lin_x64.xpl

Drop the .xpl into X-Plane 12/Resources/plugins/AOA-Tone-FlyOnSpeed/<arch>/. Restart X-Plane to load. See the X-Plane plugin docs for install details and usage.


Built from fix/647-followups at bd4a3487a3503b39db6dee2fa91cb921116a0d72.

Downloading these artifacts requires a GitHub login. Artifacts expire after 30 days.

@sritchie sritchie merged commit 0ea6fa6 into master May 31, 2026
24 checks passed
@sritchie sritchie deleted the fix/647-followups branch May 31, 2026 10:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant