feat(train): a ride reads the bike's speed and cadence sensor and power meter (ADR 0030, D49)

11d, its sensors: a ride's Record sheet offers the CSC sensor (0x1816)
and the power meter (0x1818), found nearby and remembered as the strap
is; the person's devices are now one map of DeviceKind to DeviceStore.
The service parses CSC and Cycling Power measurements (JVM-tested,
counters' rollover, coasting), writes the wheel's revolutions, the
crank's cadence and the watts to the file and to series of their own.
The recording screen shows cadence and watts; the page the power's
chart, average, highest and normalised power and the cadence's chart and
average; GPX, TCX and FIT carry them. A plan's watts target reads the
power meter too.

The wheel's speed and distance follow. Not tried with a real sensor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-29 15:11:20 +01:00
commit 5c13e6f3c5
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -1165,6 +1165,23 @@ Strava. What was found, 27 Oct:
a fraction of a metre). A workout recorded before keeps GPS's altitudes. Not tried
on a phone yet: weather fronts over a long ride (a change of 1 hPa an hour reads as
some 8 m), and pockets' gusts.
- Built: 11d's sensors. A ride's Record sheet offers the speed and cadence sensor and the
power meter, each found nearby and remembered as the strap is (`speed_sensor.json`,
`power_meter.json`; the person's devices now one map, `DeviceKind` to `DeviceStore`).
The service reads them on Android's Bluetooth API as it reads the strap
(`CyclingSensors.kt`, tested on the JVM: CSC Measurement 0x2A5B, Cycling Power
Measurement 0x2A63 with the fields before the crank's skipped as the flags say, the
crank's cadence from two events over both counters' rollover, 0 after 3 s without a
turn, the wheel's revolutions counted from the first frame); the file's `w`, `c`,
`pw`, `csc` and `power` lines, the series `wheel`, `pedalling` and `power`. The crank's
cadence comes from the sensor, else from the power meter. A plan's watts target reads
the power meter too. The recording screen shows the cadence and the watts of the last
5 s; the page the power's chart, average and highest (as the rower's), the normalised
power (Coggan's: the watts a second, the last reading held 5 s, their 30 s rolling
mean, the fourth root of its fourth powers' mean; none under a minute) and the
cadence's chart and average (coasting left out of the average); the files out carry
the crank's cadence and the watts. Not yet: the wheel's speed and distance (next),
Health Connect's power and cadence records. Not tried with a real sensor yet.
## Consequences