summaryrefslogtreecommitdiffstats
path: root/libdivecomputer.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-12 13:31:43 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-12 13:31:43 -0700
commit4e7161efd6738cc50c3879846b5df7d1d58c3c58 (patch)
tree78ade631127f34371f0f1648dc03063de254b601 /libdivecomputer.c
parent42f627b8b1cf7e929a30c0a07a5fb44a4cec9e1f (diff)
downloadsubsurface-4e7161efd6738cc50c3879846b5df7d1d58c3c58.tar.gz
Do some basic sanity testing on the libdivecomputer gasmix data
It's quite often obvious crap for the "doesn't exist" or "plain air" case. So if it's reporting 100% O2, we just ignore it. Sure, it could be right, but for the dives I have I know it's just libdivecomputer being wrong. Same goes for obvious crap like 255% Helium. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'libdivecomputer.c')
-rw-r--r--libdivecomputer.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/libdivecomputer.c b/libdivecomputer.c
index da9b35bd3..d2da5381d 100644
--- a/libdivecomputer.c
+++ b/libdivecomputer.c
@@ -124,6 +124,7 @@ static int parse_gasmixes(struct dive *dive, parser_t *parser, int ngases)
for (i = 0; i < ngases; i++) {
int rc;
gasmix_t gasmix = {0};
+ int o2, he;
rc = parser_get_field(parser, FIELD_TYPE_GASMIX, i, &gasmix);
if (rc != PARSER_STATUS_SUCCESS && rc != PARSER_STATUS_UNSUPPORTED)
@@ -132,8 +133,17 @@ static int parse_gasmixes(struct dive *dive, parser_t *parser, int ngases)
if (i >= MAX_CYLINDERS)
continue;
- dive->cylinder[i].gasmix.o2.permille = gasmix.oxygen * 1000 + 0.5;
- dive->cylinder[i].gasmix.he.permille = gasmix.helium * 1000 + 0.5;
+ o2 = gasmix.oxygen * 1000 + 0.5;
+ he = gasmix.helium * 1000 + 0.5;
+
+ /* Ignore bogus data - libdivecomputer does some crazy stuff */
+ if (o2 < 210 || o2 >= 1000)
+ o2 = 0;
+ if (he < 0 || he >= 800 || o2+he >= 1000)
+ he = 0;
+
+ dive->cylinder[i].gasmix.o2.permille = o2;
+ dive->cylinder[i].gasmix.he.permille = he;
}
return PARSER_STATUS_SUCCESS;
}