Skip to content

Nautic S: locate live gradient factors (GF surface) in the 141-byte extended-status chunk #52

Description

@latishab

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:

  1. 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.
  2. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions