From ebb36b170255f29f46ef39fe09a3277bfe9ff54b Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Sun, 8 Feb 2026 12:04:00 +1300 Subject: [PATCH 1/2] Garmin: Standardise the Firmware Version Reporting. Standardise on 'FW Version' as the Extra Info key to report the firmware under, because Subsurface is using this key to look up the firmware version. Signed-off-by: Michael Keller --- include/libdivecomputer/parser.h | 2 ++ src/garmin_parser.c | 2 +- src/hw_ostc_parser.c | 2 +- src/shearwater_predator_parser.c | 2 +- src/suunto_eonsteel_parser.c | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/libdivecomputer/parser.h b/include/libdivecomputer/parser.h index 7964f865..19ce10b6 100644 --- a/include/libdivecomputer/parser.h +++ b/include/libdivecomputer/parser.h @@ -108,6 +108,8 @@ typedef enum parser_sample_event_t { /* To let the compile know we have this */ #define SAMPLE_EVENT_STRING SAMPLE_EVENT_STRING +#define STRING_KEY_FIRMWARE_VERSION "FW Version" + /* For backwards compatibility */ #define SAMPLE_EVENT_UNKNOWN SAMPLE_EVENT_FLOOR diff --git a/src/garmin_parser.c b/src/garmin_parser.c index 0dd5bec9..e348cee1 100644 --- a/src/garmin_parser.c +++ b/src/garmin_parser.c @@ -1663,7 +1663,7 @@ garmin_parser_set_data (garmin_parser_t *garmin, const unsigned char *data, unsi if (garmin->dive.serial) dc_field_add_string_fmt(&garmin->cache, "Serial", "%u", garmin->dive.serial); if (garmin->dive.firmware) - dc_field_add_string_fmt(&garmin->cache, "Firmware", "%u.%02u", + dc_field_add_string_fmt(&garmin->cache, STRING_KEY_FIRMWARE_VERSION, "%u.%02u", garmin->dive.firmware / 100, garmin->dive.firmware % 100); if (garmin->dive.product) { unsigned i; diff --git a/src/hw_ostc_parser.c b/src/hw_ostc_parser.c index f7642130..96a2c3ed 100644 --- a/src/hw_ostc_parser.c +++ b/src/hw_ostc_parser.c @@ -772,7 +772,7 @@ hw_ostc_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned array_uint16_le (data + layout->desat) % 60); break; case 3: /* firmware */ - string->desc = "FW Version"; + string->desc = STRING_KEY_FIRMWARE_VERSION; /* OSTC4 stores firmware as XXXX XYYY YYZZ ZZZB, -> X.Y.Z beta? */ if (parser->model == OSTC4) { int firmwareOnDevice = array_uint16_le (data + layout->firmware); diff --git a/src/shearwater_predator_parser.c b/src/shearwater_predator_parser.c index 9b86b6c8..32041c33 100644 --- a/src/shearwater_predator_parser.c +++ b/src/shearwater_predator_parser.c @@ -893,7 +893,7 @@ shearwater_predator_parser_cache (shearwater_predator_parser_t *parser) dc_field_add_string_fmt(&parser->cache, "Serial", "%08x", parser->serial); // bytes 1-31 are identical in all formats - dc_field_add_string_fmt(&parser->cache, "FW Version", "%2x", data[19]); + dc_field_add_string_fmt(&parser->cache, STRING_KEY_FIRMWARE_VERSION, "%2x", data[19]); add_deco_model(parser, data); add_battery_type(parser, data); dc_field_add_string_fmt(&parser->cache, "Battery at end", "%.1f V", data[9] / 10.0); diff --git a/src/suunto_eonsteel_parser.c b/src/suunto_eonsteel_parser.c index e2b2a26e..f6470787 100644 --- a/src/suunto_eonsteel_parser.c +++ b/src/suunto_eonsteel_parser.c @@ -1208,7 +1208,7 @@ static dc_status_t traverse_device_fields(suunto_eonsteel_parser_t *eon, if (!strcmp(name, "Info.HW")) return dc_field_add_string(&eon->cache, "HW Version", data); if (!strcmp(name, "Info.SW")) - return dc_field_add_string(&eon->cache, "FW Version", data); + return dc_field_add_string(&eon->cache, STRING_KEY_FIRMWARE_VERSION, data); if (!strcmp(name, "Info.BatteryAtStart")) return dc_field_add_string(&eon->cache, "Battery at start", data); if (!strcmp(name, "Info.BatteryAtEnd")) From f59823bf8394d4df58511db0ca985cad13d468e4 Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Sun, 8 Feb 2026 12:59:23 +1300 Subject: [PATCH 2/2] Add a Constant for the Serial Number Key. Signed-off-by: Michael Keller --- include/libdivecomputer/parser.h | 1 + src/atomics_cobalt_parser.c | 2 +- src/garmin_parser.c | 2 +- src/hw_ostc_parser.c | 2 +- src/mares_iconhd_parser.c | 2 +- src/oceanic_atom2_parser.c | 2 +- src/suunto_d9_parser.c | 2 +- src/suunto_vyper_parser.c | 2 +- 8 files changed, 8 insertions(+), 7 deletions(-) diff --git a/include/libdivecomputer/parser.h b/include/libdivecomputer/parser.h index 19ce10b6..88eb912a 100644 --- a/include/libdivecomputer/parser.h +++ b/include/libdivecomputer/parser.h @@ -109,6 +109,7 @@ typedef enum parser_sample_event_t { #define SAMPLE_EVENT_STRING SAMPLE_EVENT_STRING #define STRING_KEY_FIRMWARE_VERSION "FW Version" +#define STRING_KEY_SERIAL_NUMBER "Serial" /* For backwards compatibility */ #define SAMPLE_EVENT_UNKNOWN SAMPLE_EVENT_FLOOR diff --git a/src/atomics_cobalt_parser.c b/src/atomics_cobalt_parser.c index ef54579d..3a21a934 100644 --- a/src/atomics_cobalt_parser.c +++ b/src/atomics_cobalt_parser.c @@ -212,7 +212,7 @@ atomics_cobalt_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, un case DC_FIELD_STRING: switch(flags) { case 0: // Serialnr - string->desc = "Serial"; + string->desc = STRING_KEY_SERIAL_NUMBER; snprintf(buf, BUFLEN, "%c%c%c%c-%c%c%c%c", p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11]); break; case 1: // Program Version diff --git a/src/garmin_parser.c b/src/garmin_parser.c index e348cee1..a06fb777 100644 --- a/src/garmin_parser.c +++ b/src/garmin_parser.c @@ -1661,7 +1661,7 @@ garmin_parser_set_data (garmin_parser_t *garmin, const unsigned char *data, unsi // Device information if (garmin->dive.serial) - dc_field_add_string_fmt(&garmin->cache, "Serial", "%u", garmin->dive.serial); + dc_field_add_string_fmt(&garmin->cache, STRING_KEY_SERIAL_NUMBER, "%u", garmin->dive.serial); if (garmin->dive.firmware) dc_field_add_string_fmt(&garmin->cache, STRING_KEY_FIRMWARE_VERSION, "%u.%02u", garmin->dive.firmware / 100, garmin->dive.firmware % 100); diff --git a/src/hw_ostc_parser.c b/src/hw_ostc_parser.c index 96a2c3ed..3838d934 100644 --- a/src/hw_ostc_parser.c +++ b/src/hw_ostc_parser.c @@ -751,7 +751,7 @@ hw_ostc_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned case DC_FIELD_STRING: switch(flags) { case 0: /* serial */ - string->desc = "Serial"; + string->desc = STRING_KEY_SERIAL_NUMBER; snprintf(buf, BUFLEN, "%u", parser->serial); break; case 1: /* battery */ diff --git a/src/mares_iconhd_parser.c b/src/mares_iconhd_parser.c index 5be9c969..73f28fae 100644 --- a/src/mares_iconhd_parser.c +++ b/src/mares_iconhd_parser.c @@ -907,7 +907,7 @@ mares_iconhd_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsi case DC_FIELD_STRING: switch(flags) { case 0: /* serial */ - string->desc = "Serial"; + string->desc = STRING_KEY_SERIAL_NUMBER; snprintf(buf, BUFLEN, "%u", parser->serial); break; default: diff --git a/src/oceanic_atom2_parser.c b/src/oceanic_atom2_parser.c index 8b317f87..e09be3a6 100644 --- a/src/oceanic_atom2_parser.c +++ b/src/oceanic_atom2_parser.c @@ -626,7 +626,7 @@ oceanic_atom2_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, uns case DC_FIELD_STRING: switch(flags) { case 0: /* Serial */ - string->desc = "Serial"; + string->desc = STRING_KEY_SERIAL_NUMBER; snprintf(buf, BUF_LEN, "%06u", parser->serial); break; default: diff --git a/src/suunto_d9_parser.c b/src/suunto_d9_parser.c index bda7f6ea..0bbf3b6b 100644 --- a/src/suunto_d9_parser.c +++ b/src/suunto_d9_parser.c @@ -414,7 +414,7 @@ suunto_d9_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigne case DC_FIELD_STRING: switch (flags) { case 0: /* serial */ - string->desc = "Serial"; + string->desc = STRING_KEY_SERIAL_NUMBER; snprintf(buf, BUFLEN, "%08u", parser->serial); break; default: diff --git a/src/suunto_vyper_parser.c b/src/suunto_vyper_parser.c index 9252b2c6..a383a729 100644 --- a/src/suunto_vyper_parser.c +++ b/src/suunto_vyper_parser.c @@ -296,7 +296,7 @@ suunto_vyper_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsi case DC_FIELD_STRING: switch(flags) { case 0: /* serial */ - string->desc = "Serial"; + string->desc = STRING_KEY_SERIAL_NUMBER; snprintf(buf, BUFLEN, "%u", parser->serial); break; default: