summaryrefslogtreecommitdiffstats
path: root/profile.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-16 08:47:13 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-16 08:53:12 -0700
commit7c5c9e202408bf4ec86c84826ebc7b2ba0d00c2d (patch)
treec2db2830e5b8d92b5483a36d5a926bf43e5a8712 /profile.c
parentadda1c6e86b911c268559a05affd2418767ed239 (diff)
downloadsubsurface-7c5c9e202408bf4ec86c84826ebc7b2ba0d00c2d.tar.gz
Do min/max pressure and temperature based on the non-surface data
Do the min/max calculations only *after* we have removed the extra surface events at the end. The Uemis data in particular has a lot of surface events after the dive, and we don't really want to take them into account since we won't be plotting them anyway. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'profile.c')
-rw-r--r--profile.c54
1 files changed, 32 insertions, 22 deletions
diff --git a/profile.c b/profile.c
index 1409f53ff..2400321ce 100644
--- a/profile.c
+++ b/profile.c
@@ -614,6 +614,27 @@ static struct plot_info *analyze_plot_info(struct plot_info *pi)
int i;
int nr = pi->nr;
+ /* Do pressure min/max based on the non-surface data */
+ for (i = 0; i < nr; i++) {
+ struct plot_data *entry = pi->entry+i;
+ int pressure = entry->pressure;
+ int temperature = entry->temperature;
+
+ if (pressure) {
+ if (!pi->minpressure || pressure < pi->minpressure)
+ pi->minpressure = pressure;
+ if (pressure > pi->maxpressure)
+ pi->maxpressure = pressure;
+ }
+
+ if (temperature) {
+ if (!pi->mintemp || temperature < pi->mintemp)
+ pi->mintemp = temperature;
+ if (temperature > pi->maxtemp)
+ pi->maxtemp = temperature;
+ }
+ }
+
/* Smoothing function: 5-point triangular smooth */
for (i = 2; i < nr-2; i++) {
struct plot_data *entry = pi->entry+i;
@@ -641,7 +662,7 @@ static struct plot_info *analyze_plot_info(struct plot_info *pi)
*/
static struct plot_info *create_plot_info(struct dive *dive)
{
- int lastdepth, maxtime;
+ int lastdepth, lastindex;
int i, nr = dive->samples + 4, sec;
size_t alloc_size = plot_info_size(nr);
struct plot_info *pi;
@@ -652,45 +673,34 @@ static struct plot_info *create_plot_info(struct dive *dive)
memset(pi, 0, alloc_size);
pi->nr = nr;
sec = 0;
- maxtime = 0;
+ lastindex = 0;
lastdepth = -1;
for (i = 0; i < dive->samples; i++) {
- int depth, pressure, temperature;
+ int depth;
struct sample *sample = dive->sample+i;
struct plot_data *entry = pi->entry + i + 2;
sec = entry->sec = sample->time.seconds;
depth = entry->val = sample->depth.mm;
- pressure = entry->pressure = sample->cylinderpressure.mbar;
- temperature = entry->temperature = sample->temperature.mkelvin;
+ entry->pressure = sample->cylinderpressure.mbar;
+ entry->temperature = sample->temperature.mkelvin;
if (depth || lastdepth)
- maxtime = sec;
+ lastindex = i+2;
+
lastdepth = depth;
if (depth > pi->maxdepth)
pi->maxdepth = depth;
-
- if (pressure) {
- if (!pi->minpressure || pressure < pi->minpressure)
- pi->minpressure = pressure;
- if (pressure > pi->maxpressure)
- pi->maxpressure = pressure;
- }
-
- if (temperature) {
- if (!pi->mintemp || temperature < pi->mintemp)
- pi->mintemp = temperature;
- if (temperature > pi->maxtemp)
- pi->maxtemp = temperature;
- }
}
if (lastdepth)
- maxtime = sec + 20;
+ lastindex = i + 2;
/* Fill in the last two entries with empty values but valid times */
i = dive->samples + 2;
pi->entry[i].sec = sec + 20;
pi->entry[i+1].sec = sec + 40;
- pi->maxtime = maxtime;
+
+ pi->nr = lastindex+1;
+ pi->maxtime = pi->entry[lastindex].sec;
return analyze_plot_info(pi);
}