summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.c13
-rw-r--r--dive.h1
-rw-r--r--statistics.c41
3 files changed, 47 insertions, 8 deletions
diff --git a/dive.c b/dive.c
index f6807f3e6..d66eec9a3 100644
--- a/dive.c
+++ b/dive.c
@@ -248,6 +248,17 @@ static void fixup_pressure(struct dive *dive, struct sample *sample)
cyl->sample_end.mbar = pressure;
}
+static void update_min_max_temperatures(struct dive *dive, struct sample *sample)
+{
+ if (sample->temperature.mkelvin) {
+ if (!dive->maxtemp.mkelvin || sample->temperature.mkelvin > dive->maxtemp.mkelvin)
+ dive->maxtemp = sample->temperature;
+ if (!dive->mintemp.mkelvin || sample->temperature.mkelvin < dive->mintemp.mkelvin)
+ dive->mintemp = sample->temperature;
+ }
+}
+
+
/*
* If the cylinder tank pressures are within half a bar
* (about 8 PSI) of the sample pressures, we consider it
@@ -479,6 +490,8 @@ struct dive *fixup_dive(struct dive *dive)
if (!mintemp || temp < mintemp)
mintemp = temp;
}
+ update_min_max_temperatures(dive, sample);
+
depthtime += (time - lasttime) * (lastdepth + depth) / 2;
lastdepth = depth;
lasttime = time;
diff --git a/dive.h b/dive.h
index a6908416d..f1b9dcc52 100644
--- a/dive.h
+++ b/dive.h
@@ -316,6 +316,7 @@ struct dive {
weightsystem_t weightsystem[MAX_WEIGHTSYSTEMS];
char *suit;
int sac, otu, cns, maxcns;
+ temperature_t mintemp, maxtemp;
/* Eventually we'll do multiple dive computers */
struct divecomputer dc;
diff --git a/statistics.c b/statistics.c
index 1050b39ad..0cdbf7146 100644
--- a/statistics.c
+++ b/statistics.c
@@ -107,6 +107,37 @@ enum {
static char * get_time_string(int seconds, int maxdays);
+static void process_temperatures(struct dive *dp, stats_t *stats, const char *unit)
+{
+ int min_temp, mean_temp, max_temp = 0;
+
+ if (dp->maxtemp.mkelvin)
+ max_temp = dp->maxtemp.mkelvin;
+ else
+ max_temp = dp->dc.watertemp.mkelvin;
+
+ if (max_temp && (!stats->max_temp || max_temp > stats->max_temp))
+ stats->max_temp = max_temp;
+
+ if (dp->mintemp.mkelvin)
+ min_temp = dp->mintemp.mkelvin;
+ else
+ min_temp = dp->dc.watertemp.mkelvin;
+
+ if (min_temp && (!stats->min_temp || min_temp < stats->min_temp))
+ stats->min_temp = min_temp;
+
+ if (min_temp || max_temp) {
+ mean_temp = min_temp;
+ if (mean_temp)
+ mean_temp = (mean_temp + max_temp) / 2;
+ else
+ mean_temp = max_temp;
+ stats->combined_temp += get_temp_units(mean_temp, &unit);
+ stats->combined_count++;
+ }
+}
+
static void process_dive(struct dive *dp, stats_t *stats)
{
int old_tt, sac_time = 0;
@@ -122,14 +153,8 @@ static void process_dive(struct dive *dp, stats_t *stats)
stats->max_depth.mm = dp->dc.maxdepth.mm;
if (stats->min_depth.mm == 0 || dp->dc.maxdepth.mm < stats->min_depth.mm)
stats->min_depth.mm = dp->dc.maxdepth.mm;
- if (dp->dc.watertemp.mkelvin) {
- if (stats->min_temp == 0 || dp->dc.watertemp.mkelvin < stats->min_temp)
- stats->min_temp = dp->dc.watertemp.mkelvin;
- if (dp->dc.watertemp.mkelvin > stats->max_temp)
- stats->max_temp = dp->dc.watertemp.mkelvin;
- stats->combined_temp += get_temp_units(dp->dc.watertemp.mkelvin, &unit);
- stats->combined_count++;
- }
+
+ process_temperatures(dp, stats, unit);
/* Maybe we should drop zero-duration dives */
if (!dp->dc.duration.seconds)