]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Make the sample-vs-cylinder pressure check more liberal
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 10 Nov 2011 23:33:38 +0000 (21:33 -0200)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 10 Nov 2011 23:33:38 +0000 (21:33 -0200)
This makes it consider them to be identical if they are within half a
bar of each other.  If you edit the pressures by hand and set them to
the same bar pressure as the samples, they may not be identical to the
last milli-bar, but clearly the manually entered cylinder pressure isn't
significantly different from the sample data, so consider it redundant.

We do want manual overrides of cylinder pressures to take precedence
over sample data (as Dirk so eloquently puts it, some dive computers
really don't have very reliable sample data), but at the same time the
sample data is the one we are expecting to be fairly accurate.  The
starting and ending pressure overrides are for when there is no sample
data, or when the sample data is totally wrong for some reason.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
dive.c

diff --git a/dive.c b/dive.c
index bd1b92619198851b6bdc3f70b162c75f3af7cc48..dad0e237bc8726f0c983ef73fdfa1d47fd8540c4 100644 (file)
--- a/dive.c
+++ b/dive.c
@@ -224,6 +224,16 @@ static void fixup_pressure(struct dive *dive, struct sample *sample)
        cyl->sample_end.mbar = pressure;
 }
 
+/*
+ * If the cylinder tank pressures are within half a bar
+ * (about 8 PSI) of the sample pressures, we consider it
+ * to be a rounding error, and throw them away as redundant.
+ */
+static int same_rounded_pressure(pressure_t a, pressure_t b)
+{
+       return abs(a.mbar - b.mbar) <= 500;
+}
+
 struct dive *fixup_dive(struct dive *dive)
 {
        int i;
@@ -287,9 +297,9 @@ struct dive *fixup_dive(struct dive *dive)
        for (i = 0; i < MAX_CYLINDERS; i++) {
                cylinder_t *cyl = dive->cylinder + i;
                add_cylinder_description(&cyl->type);
-               if (cyl->sample_start.mbar == cyl->start.mbar)
+               if (same_rounded_pressure(cyl->sample_start, cyl->start))
                        cyl->start.mbar = 0;
-               if (cyl->sample_end.mbar == cyl->end.mbar)
+               if (same_rounded_pressure(cyl->sample_end, cyl->end))
                        cyl->end.mbar = 0;
        }