Skip to content

fw/services/hrm: stop unserved subscribers pinning the sensor on - #1899

Open
jplexer wants to merge 1 commit into
coredevices:mainfrom
jplexer:jp/mob-11575-firmware-update-causes-excessive-heart-rate-monitoring
Open

fw/services/hrm: stop unserved subscribers pinning the sensor on#1899
jplexer wants to merge 1 commit into
coredevices:mainfrom
jplexer:jp/mob-11575-firmware-update-causes-excessive-heart-rate-monitoring

Conversation

@jplexer

@jplexer jplexer commented Aug 20, 2026

Copy link
Copy Markdown
Member

The manager only considers a subscriber served once it receives a Good-or-better (or OffWrist) BPM sample. A subscriber the sensor cannot serve - poor contact, or the fresh state right after boot where every subscriber is treated as immediately due - would hold the sensor powered indefinitely. Telemetry from MOB-11575 shows a Pebble Time 2 running the sensor for 42 minutes straight after an OTA reboot, then burning ~4-7 min/hour for two days against a 30-minute measurement interval.

Track how long the sensor has been continuously on. Once it exceeds a full serve window (120 s) without producing a valid reading for a subscriber, stamp that subscriber as served so it defers to its next interval instead. Short-interval (live HR) subscribers become due again immediately, so workouts and BLE HR sharing are unaffected; only long-interval duty-cycled subscribers stop pinning the sensor. The gate counts continuous on-time only, so subscribers that went overdue while the sensor was forced off (charging, run level) still get served first.

Fixes MOB-11575

The manager only considers a subscriber served once it receives a
Good-or-better (or OffWrist) BPM sample. A subscriber the sensor cannot
serve - poor contact, or the fresh state right after boot where every
subscriber is treated as immediately due - would hold the sensor powered
indefinitely. Telemetry from MOB-11575 shows a Pebble Time 2 running the
sensor for 42 minutes straight after an OTA reboot, then burning
~4-7 min/hour for two days against a 30-minute measurement interval.

Track how long the sensor has been continuously on. Once it exceeds a
full serve window (120 s) without producing a valid reading for a
subscriber, stamp that subscriber as served so it defers to its next
interval instead. Short-interval (live HR) subscribers become due again
immediately, so workouts and BLE HR sharing are unaffected; only
long-interval duty-cycled subscribers stop pinning the sensor. The gate
counts continuous on-time only, so subscribers that went overdue while
the sensor was forced off (charging, run level) still get served first.

Fixes MOB-11575

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Joshua Jun <lets@throw.rocks>
@jplexer
jplexer requested a review from gmarull as a code owner August 20, 2026 12:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant