From 4e7161efd6738cc50c3879846b5df7d1d58c3c58 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Mon, 12 Sep 2011 13:31:43 -0700 Subject: [PATCH] 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 --- libdivecomputer.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/libdivecomputer.c b/libdivecomputer.c index da9b35b..d2da538 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; } -- 2.43.0