Fix DShot beeper arming feedback loop #11306
Open
+4
−1
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.
Summary
Fixes a feedback loop where the DShot beeper feature prevents arming indefinitely when enabled. When arming fails, the FC plays a confirmation beep using DShot. This sets a guard delay (1.12 seconds) that blocks arming to comply with DShot protocol timing. If the user attempts to arm again within this period, it fails due to ARMING_DISABLED_DSHOT_BEEPER and beeps again, resetting the timer and creating an infinite loop.
Changes
src/main/fc/fc_core.cline 599(armingFlags & ~ARMING_DISABLED_DSHOT_BEEPER)Root Cause
The guard delay is necessary and correct per DShot protocol specification (beep duration + transmission time + minimum spacing = 1.12s). However, beeping to notify the user "you can't arm because I just beeped" provides no value and triggers the loop.
Testing
claude/developer/scripts/testing/inav/dshot/test_dshot_beeper_arming_loop_fix.pyLogical verification confirms:
Impact
Fixes user reports of continuous motor beeping and inability to arm when DShot beeper is enabled. Risk is low - the change is narrowly scoped to prevent only the specific beep that causes the loop.