summaryrefslogtreecommitdiffstats
path: root/profile.c
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2011-09-15 09:10:08 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-15 09:33:13 -0700
commitefb1fa44b81419841d7c92104a69987c256a0028 (patch)
tree4ce7bda83b774a3587dd78725cb213823b5d9f95 /profile.c
parentb49c878a74c7232994efba4bf56d309d8d224821 (diff)
downloadsubsurface-efb1fa44b81419841d7c92104a69987c256a0028.tar.gz
Print the end temperature of the dive
Currently we print the temperature every five minutes. Especially with dive computers that keep rather frequent temperature samples that means that we have one more interesting data point that we don't label: the surface temperature at the end of the dive. This patch adds some logic to try to print the last temperature sample that was recorded before the dive ended - unless that same value has already been printed (to avoid silly duplications on dive computers with less frequent sampling) Signed-off-by: Dirk Hohndel <dirk@hohndel.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'profile.c')
-rw-r--r--profile.c39
1 files changed, 27 insertions, 12 deletions
diff --git a/profile.c b/profile.c
index a4608c518..fdbbcdf16 100644
--- a/profile.c
+++ b/profile.c
@@ -328,35 +328,50 @@ static int setup_temperature_limits(struct dive *dive, struct graphics_context *
return maxtemp > mintemp;
}
-static void plot_temperature_text(struct dive *dive, struct graphics_context *gc)
+static void plot_single_temp_text(struct graphics_context *gc, int sec, temperature_t temperature)
{
- int i;
+ int deg;
+ const char *unit;
static const text_render_options_t tro = {12, 0.2, 0.2, 1.0, LEFT, TOP};
+ if (output_units.temperature == FAHRENHEIT) {
+ deg = to_F(temperature);
+ unit = "F";
+ } else {
+ deg = to_C(temperature);
+ unit = "C";
+ }
+ plot_text(gc, &tro, sec, temperature.mkelvin, "%d %s", deg, unit);
+}
+
+static void plot_temperature_text(struct dive *dive, struct graphics_context *gc)
+{
+ int i;
int last = 0;
+ temperature_t last_temperature, last_printed_temp;
if (!setup_temperature_limits(dive, gc))
return;
for (i = 0; i < dive->samples; i++) {
- const char *unit;
struct sample *sample = dive->sample+i;
+ if (sample->time.seconds > dive->duration.seconds)
+ break; /* let's not plot surface temp events */
int mkelvin = sample->temperature.mkelvin;
- int sec, deg;
+ int sec;
if (!mkelvin)
continue;
+ last_temperature = sample->temperature;
sec = sample->time.seconds;
if (sec < last)
continue;
last = sec + 300;
- if (output_units.temperature == FAHRENHEIT) {
- deg = to_F(sample->temperature);
- unit = "F";
- } else {
- deg = to_C(sample->temperature);
- unit = "C";
- }
- plot_text(gc, &tro, sec, mkelvin, "%d %s", deg, unit);
+ plot_single_temp_text(gc,sec,sample->temperature);
+ last_printed_temp = last_temperature ;
+ }
+ /* it would be nice to print the end temperature, if it's different */
+ if (last_temperature.mkelvin != last_printed_temp.mkelvin) {
+ plot_single_temp_text(gc,dive->duration.seconds,last_temperature);
}
}