]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Do some basic sanity testing on the libdivecomputer gasmix data
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 12 Sep 2011 20:31:43 +0000 (13:31 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 12 Sep 2011 20:31:43 +0000 (13:31 -0700)
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>
libdivecomputer.c

index da9b35bd3c04dd7ff321dd6ac568884f9e81046a..d2da5381d8bd71edb34005460e8f1a6e26bdd97c 100644 (file)
@@ -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;
 }