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;
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;
}