BLE Cycling Power meter support #50

Open
opened 2026-08-31 17:25:16 +02:00 by robert · 0 comments
robert commented 2026-08-31 17:25:16 +02:00 (Migrated from git.butzei.de)

Goal

Support a power meter over the standard BLE Cycling Power profile. Unlike cadence this is a genuine addition: a separate profile, its own client and its own derived metrics.

Acceptance criteria

  • Cycling Power service 0x1818 discovered and connected
  • Cycling Power Measurement 0x2A63 parsed, including the variable-length flags field
  • Instantaneous power in watts sent to the watch and shown as a ride data field
  • 3-second rolling average power computed, since raw power is far too jittery to read while riding
  • Normalised power and average power for the ride computed and shown in the summary
  • Crank-based cadence taken from the power meter when it supplies it, in preference to a separate CSC sensor
  • Power written into the recorded GPX
  • Pairing and calibration flow in the companion, including zero-offset where the meter supports it
  • Sits behind the same sensor interface as speed and cadence, so dropout handling is shared

Files

  • companion/.../sensors/CyclingPowerClient.kt
  • watchapp/src/c/view_ride.c

Notes

The flags field makes this parser materially more involved than CSC - fields are optional and their offsets shift. See docs/DECISIONS.md D16.

## Goal Support a power meter over the standard BLE Cycling Power profile. Unlike cadence this is a genuine addition: a separate profile, its own client and its own derived metrics. ## Acceptance criteria - [ ] Cycling Power service `0x1818` discovered and connected - [ ] `Cycling Power Measurement` `0x2A63` parsed, including the variable-length flags field - [ ] Instantaneous power in watts sent to the watch and shown as a ride data field - [ ] 3-second rolling average power computed, since raw power is far too jittery to read while riding - [ ] Normalised power and average power for the ride computed and shown in the summary - [ ] Crank-based cadence taken from the power meter when it supplies it, in preference to a separate CSC sensor - [ ] Power written into the recorded GPX - [ ] Pairing and calibration flow in the companion, including zero-offset where the meter supports it - [ ] Sits behind the same sensor interface as speed and cadence, so dropout handling is shared ## Files - `companion/.../sensors/CyclingPowerClient.kt` - `watchapp/src/c/view_ride.c` ## Notes The flags field makes this parser materially more involved than CSC - fields are optional and their offsets shift. See docs/DECISIONS.md D16.
Sign in to join this conversation.
No description provided.