Split out of #810.
Current state
Per-cell O2 readings reach the chart as o2SensorCurves, but are rendered only as tooltip rows -- Sensor 1/2/3 in the hover tooltip (dive_profile_chart.dart:1227) and the playback tooltip (:2937), both gated behind the ppO2 overlay. There is no LineChartBarData for the cells, no legend entry and no toggle.
The only plotted curve is the aggregate: the computer's voted ppO2, or the average of the cells when the computer logs no aggregate (ppO2FromSensorAverage).
Why it matters
The aggregate is what hides a failing cell. A cell drifting away from its neighbours is visible as a divergence between traces and invisible in a voted average -- which is the reason CCR divers look at cells at all. Shearwater Cloud plots them, and the reporter of #810 expected the same.
Scope
Plot each populated cell as its own line, on the ppO2 axis mapping, behind its own legend toggle.
_buildPpO2Line (dive_profile_chart.dart:4456) is the template: same normalization, same axis.
- Legend needs a
hasO2SensorData config flag, a toggle in ProfileLegendState, and a chip.
- Colours must stay distinct from the aggregate (
0xFF00ACC1) and read as a family; the tooltip bullet currently uses 0xFF80DEEA for every cell, which needs to become per-cell once they are traces.
- Cells are null where a computer reports only some, so segments must break rather than bridge.
Notes
Depends on data actually arriving: #853 (Shearwater Cloud DB import drops the cells) and the libdivecomputer default-calibration guard discussed in #810.
Split out of #810.
Current state
Per-cell O2 readings reach the chart as
o2SensorCurves, but are rendered only as tooltip rows --Sensor 1/2/3in the hover tooltip (dive_profile_chart.dart:1227) and the playback tooltip (:2937), both gated behind the ppO2 overlay. There is noLineChartBarDatafor the cells, no legend entry and no toggle.The only plotted curve is the aggregate: the computer's voted ppO2, or the average of the cells when the computer logs no aggregate (
ppO2FromSensorAverage).Why it matters
The aggregate is what hides a failing cell. A cell drifting away from its neighbours is visible as a divergence between traces and invisible in a voted average -- which is the reason CCR divers look at cells at all. Shearwater Cloud plots them, and the reporter of #810 expected the same.
Scope
Plot each populated cell as its own line, on the ppO2 axis mapping, behind its own legend toggle.
_buildPpO2Line(dive_profile_chart.dart:4456) is the template: same normalization, same axis.hasO2SensorDataconfig flag, a toggle inProfileLegendState, and a chip.0xFF00ACC1) and read as a family; the tooltip bullet currently uses0xFF80DEEAfor every cell, which needs to become per-cell once they are traces.Notes
Depends on data actually arriving: #853 (Shearwater Cloud DB import drops the cells) and the libdivecomputer default-calibration guard discussed in #810.