]> git.tdb.fi Git - ext/subsurface.git/blobdiff - dive.c
Merge branch 'sacplot' of git://github.com/dirkhh/subsurface
[ext/subsurface.git] / dive.c
diff --git a/dive.c b/dive.c
index bd1b92619198851b6bdc3f70b162c75f3af7cc48..cd797d27663f6578ea32ea4cc2ae31a63037bde6 100644 (file)
--- a/dive.c
+++ b/dive.c
@@ -224,21 +224,41 @@ 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;
        double depthtime = 0;
        int lasttime = 0;
+       int lastindex = -1;
        int start = -1, end = -1;
        int maxdepth = 0, mintemp = 0;
        int lastdepth = 0;
-       int lasttemp = 0;
+       int lasttemp = 0, lastpressure = 0;
 
        for (i = 0; i < dive->samples; i++) {
                struct sample *sample = dive->sample + i;
                int time = sample->time.seconds;
                int depth = sample->depth.mm;
                int temp = sample->temperature.mkelvin;
+               int pressure = sample->cylinderpressure.mbar;
+               int index = sample->cylinderindex;
+
+               /* Remove duplicate redundant pressure information */
+               if (pressure == lastpressure && index == lastindex)
+                       sample->cylinderpressure.mbar = 0;
+
+               lastindex = index;
+               lastpressure = pressure;
 
                if (lastdepth)
                        end = time;
@@ -287,9 +307,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;
        }