diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2011-09-15 09:10:08 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-15 09:33:13 -0700 |
commit | efb1fa44b81419841d7c92104a69987c256a0028 (patch) | |
tree | 4ce7bda83b774a3587dd78725cb213823b5d9f95 /profile.c | |
parent | b49c878a74c7232994efba4bf56d309d8d224821 (diff) | |
download | subsurface-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.c | 39 |
1 files changed, 27 insertions, 12 deletions
@@ -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); } } |