]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Only update mean/max depths with computed ones if they are way off
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 3 Sep 2011 20:36:25 +0000 (13:36 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 3 Sep 2011 20:36:25 +0000 (13:36 -0700)
The computer may track "real" max depth more closely than it tracks
samples.  So we trust the non-computed mean/max depths more than the
computed ones.

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

diff --git a/dive.c b/dive.c
index 2ecd10cb0be418f524736c0ab227930d343abc6c..70d6d4269e50f47690ceec905fbd1c1615d9b11c 100644 (file)
--- a/dive.c
+++ b/dive.c
@@ -3,6 +3,30 @@
 
 #include "dive.h"
 
+/*
+ * So when we re-calculate maxdepth and meandepth, we will
+ * not override the old numbers if they are close to the
+ * new ones.
+ *
+ * Why? Because a dive computer may well actually track the
+ * max depth and mean depth at finer granularity than the
+ * samples it stores. So it's possible that the max and mean
+ * have been reported more correctly originally.
+ *
+ * Only if the values calulcated from the samples are clearly
+ * different do we override the normal depth values.
+ *
+ * This considers 1m to be "clearly different". That's
+ * a totally random number.
+ */
+static void update_depth(depth_t *depth, int new)
+{
+       int old = depth->mm;
+
+       if (abs(old - new) > 1000)
+               depth->mm = new;
+}
+
 struct dive *fixup_dive(struct dive *dive)
 {
        int i;
@@ -50,15 +74,16 @@ struct dive *fixup_dive(struct dive *dive)
                return dive;
        dive->duration.seconds = end - start;
        if (start != end)
-               dive->meandepth.mm = depthtime / (end - start);
+               update_depth(&dive->meandepth, depthtime / (end - start));
        if (startpress)
                dive->beginning_pressure.mbar = startpress;
        if (endpress)
                dive->end_pressure.mbar = endpress;
        if (mintemp)
                dive->watertemp.mkelvin = mintemp;
+
        if (maxdepth)
-               dive->maxdepth.mm = maxdepth;
+               update_depth(&dive->maxdepth, maxdepth);
 
        return dive;
 }