summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.c3
-rw-r--r--dive.h1
-rw-r--r--libdivecomputer.c12
3 files changed, 16 insertions, 0 deletions
diff --git a/dive.c b/dive.c
index d9193e398..19d3cc5b0 100644
--- a/dive.c
+++ b/dive.c
@@ -1082,6 +1082,9 @@ struct dive *try_to_merge(struct dive *a, struct dive *b, struct dive *next)
MERGE_MAX(res, a, b, number);
MERGE_MAX(res, a, b, maxdepth.mm);
res->meandepth.mm = 0;
+ MERGE_NONZERO(res, a, b, salinity);
+ MERGE_NONZERO(res, a, b, visibility);
+ MERGE_NONZERO(res, a, b, surface_pressure.mbar);
MERGE_MAX(res, a, b, duration.seconds);
MERGE_MAX(res, a, b, surfacetime.seconds);
MERGE_MAX(res, a, b, airtemp.mkelvin);
diff --git a/dive.h b/dive.h
index d303c81b7..1e54e1273 100644
--- a/dive.h
+++ b/dive.h
@@ -267,6 +267,7 @@ struct dive {
int rating;
double latitude, longitude;
depth_t maxdepth, meandepth;
+ int salinity; // kg per 10000 l
duration_t duration, surfacetime;
int visibility; /* 0 - 5 star rating */
temperature_t airtemp, watertemp;
diff --git a/libdivecomputer.c b/libdivecomputer.c
index e3153572a..6a9b07f80 100644
--- a/libdivecomputer.c
+++ b/libdivecomputer.c
@@ -281,6 +281,18 @@ static int dive_cb(const unsigned char *data, unsigned int size,
return rc;
}
+ // Check if the libdivecomputer version already supports salinity
+ double salinity = 1.03;
+#ifdef DC_FIELD_SALINITY
+ rc = dc_parser_get_field(parser, DC_FIELD_SALINITY, 0, &salinity);
+ if (rc != DC_STATUS_SUCCESS && rc != DC_STATUS_UNSUPPORTED) {
+ dev_info(devdata, _("Error obtaining water salinity"));
+ dc_parser_destroy(parser);
+ return rc;
+ }
+#endif
+ dive->salinity = salinity * 10000.0 + 0.5;
+
rc = parse_gasmixes(devdata, dive, parser, ngases);
if (rc != DC_STATUS_SUCCESS) {
dev_info(devdata, _("Error parsing the gas mix"));