Only update mean/max depths with computed ones if they are way off

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>
This commit is contained in:
Linus Torvalds 2011-09-03 13:36:25 -07:00
parent 1e75ceac0d
commit 2804dc42d8

29
dive.c
View file

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