Summary
On the Nautic S (141-byte extended-status chunk, device "Ylivieska"), the parser emits no live gradient-factor samples, so there's no per-sample GF surface value. The full-size Nautic/Ocean (195-byte chunk, "Vaasa"/"Porvoo") does record it. Only the GF low/high setting decodes on the Nautic S, from /Summary.
What the captures show
Decoded straight from the corpus .bin files:
| dive |
device |
chunk |
GF samples |
gfSurface |
| 1787752091 |
Vaasa (Nautic) |
195 B |
244 |
up to 109 |
| 1788090406 |
Vaasa (Nautic) |
195 B |
390 |
up to 25 |
| 1787040311 |
Ylivieska (Nautic S) |
141 B |
0 |
— |
| 1787214202 |
Ylivieska (Nautic S) |
141 B |
0 |
— |
| 1787991757 |
Ylivieska (Nautic S) |
141 B |
0 |
— |
| 1788596617 |
Ylivieska (Nautic S) |
141 B |
0 |
— |
Why
In suunto_nautic_parser.c the GF record (vendor kind 5) is emitted only when chunk.size >= 192:
// gf99 @186 and surface @190 sit past the cylinder array; the
// leading-tissue GF @78 is inside that span ...
if (callback && chunk.size >= 192) {
int gf99 = (int16_t) array_uint16_le (chunk.data + 186);
int gf_surf = (int16_t) array_uint16_le (chunk.data + 190);
int gf_lead = (int16_t) array_uint16_le (chunk.data + 78);
...
}
gf99 (@186) and gf_surface (@190) are past the end of the 141-byte Nautic S chunk, so the emission is gated off for that firmware. Offset 78 (leading-tissue GF on the 195 B layout) even falls inside tank slot 2 on the short chunk, so it can't just be shifted down.
Open question
Two possibilities, not yet distinguished:
- The Nautic S (budget model) simply doesn't log real-time tissue/GF telemetry, and the 141-byte chunk carries no GF fields at all.
- It logs GF at some unmapped lower offset in the 141-byte chunk that we haven't reverse-engineered.
The blocker to resolving it: no ground truth. The Suunto app's JSON export contains no gradient-factor field anywhere (only atmospheric SurfacePressure), so even for the 195-byte watches gfSurface is validated only by plausibility, not against an app value.
What would help
A Nautic S dive where the surfacing GF can be read off the watch screen (or app UI) at a known moment, so we can hunt for that value at a specific point in the 141-byte chunk. A raw .bin for such a dive would let us test candidate offsets.
@urbamax if any of your Nautic S dives show a GF/surface-GF number you can note, that would give us the anchor we need.
Summary
On the Nautic S (141-byte extended-status chunk, device "Ylivieska"), the parser emits no live gradient-factor samples, so there's no per-sample GF surface value. The full-size Nautic/Ocean (195-byte chunk, "Vaasa"/"Porvoo") does record it. Only the GF low/high setting decodes on the Nautic S, from
/Summary.What the captures show
Decoded straight from the corpus
.binfiles:Why
In
suunto_nautic_parser.cthe GF record (vendor kind 5) is emitted only whenchunk.size >= 192:gf99 (@186) and gf_surface (@190) are past the end of the 141-byte Nautic S chunk, so the emission is gated off for that firmware. Offset 78 (leading-tissue GF on the 195 B layout) even falls inside tank slot 2 on the short chunk, so it can't just be shifted down.
Open question
Two possibilities, not yet distinguished:
The blocker to resolving it: no ground truth. The Suunto app's JSON export contains no gradient-factor field anywhere (only atmospheric
SurfacePressure), so even for the 195-byte watches gfSurface is validated only by plausibility, not against an app value.What would help
A Nautic S dive where the surfacing GF can be read off the watch screen (or app UI) at a known moment, so we can hunt for that value at a specific point in the 141-byte chunk. A raw
.binfor such a dive would let us test candidate offsets.@urbamax if any of your Nautic S dives show a GF/surface-GF number you can note, that would give us the anchor we need.