Repository navigation
fix(ble): Apple one-shot buzz on WHOOP 5/MG no longer sends RUN_ALARM - #2797
Open
JohanStefanes wants to merge 1 commit into
Open
JohanStefanes wants to merge 1 commit into
JohanStefanes wants to merge 1 commit into
Conversation
On a 5/MG, BLEManager.buzzStrapOnce sent RUN_ALARM REVISION_2 [0x02, 0x01] after the maverick 0x13 buzz. Per docs/PROTOCOL_ALARMS.md, RUN [2, ID] runs the alarm stored in that slot and then clears it, so pressing "Buzz strap" (or running the Buzz Strap shortcut) could fire and remove an armed wake alarm in slot 1. The maverick buzz is hardware-confirmed on its own (ryanbr#926), and Android already stops there on a 5/MG. This removes one write and adds none. The WHOOP 4.0 sequence (79 + 68 [0x01]) is unchanged. The golden test now pins only the buzz frame for 5/MG; the runAlarmRev2 encoder stays pinned in the parity goldens. Refs ryanbr#2796, Refs ryanbr#921, Refs ryanbr#926 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Summary
Refs #2796. On a WHOOP 5.0/MG, the Apple one-shot buzz (
BLEManager.buzzStrapOnce, used by the Live "Buzz strap" button and the Buzz Strap App Intent) sentRUN_ALARMREVISION_2[0x02, 0x01]after the maverick0x13buzz. Perdocs/PROTOCOL_ALARMS.md,RUN [2, ID]runs the alarm stored in that slot and then clears it, so pressing the button could fire and remove an armed wake alarm in slot 1.This PR drops that write on 5/MG. The one-shot is now the maverick buzz alone, which is hardware-confirmed on its own (#926) and is exactly what Android already sends (
WhoopBleClient.buzzStrapOnce, pinned byFramingTest).79 [2,3,0,0,0]+68 [0x01].testPuffinOneShotBuzzSequenceGoldensnow pins only the buzz frame for 5/MG. TherunAlarmRev2encoder stays pinned intestPuffinAlarmFramesMatchKotlinParityGoldens.BLEManager.buzzStrapOnceandAppModel.buzzStrapOnceupdated.Out of scope, possibly a separate decision:
.runAlarmis still on the Apple 5/MG allowlist (Android excludes it). Nothing on Apple sends it on 5/MG after this change.Verification
Hardware (iOS, iPhone 17 Pro, WHOOP 5/MG, Protocol probes on). Strap alarm armed two minutes ahead, then "Buzz strap" pressed while it was armed. Relevant strap-log lines, unedited:
Strap firmware version was not recorded. The before-fix behaviour (slot 1 consumed by the RUN) was not reproduced on hardware; the risk in #2796 comes from the documented RUN semantics.
Automated:
swift testinPackages/WhoopProtocol: 816 tests, 0 failures.xcodebuildscheme Strand (macOS) and NOOPiOS (iOS Simulator): build succeeded.Tools/doc_comment_lint.py: pass.Android is unchanged (already sends only the buzz on 5/MG).
🤖 Generated with Claude Code