mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
Split the cylinder pressure analysis into a second loop
For the dive computers that give cylinder change events, we want to re-write the cylinder index and pressure information with the event information before we start analyzing the pressures. So instead of filling the plot info and analyzing in one loop, split it up into two phases. We'll do the "fix up cylinder pressure info based on events" in between those phases. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
41a1cf4b19
commit
2b2b6775de
1 changed files with 21 additions and 13 deletions
34
profile.c
34
profile.c
|
@ -887,9 +887,6 @@ static struct plot_info *create_plot_info(struct dive *dive)
|
|||
sec = 0;
|
||||
lastindex = 0;
|
||||
lastdepth = -1;
|
||||
for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) /* initialize the start pressures */
|
||||
track_pr[cyl] = pr_track_alloc(dive->cylinder[cyl].start.mbar, -1);
|
||||
current = track_pr[dive->sample[0].cylinderindex];
|
||||
for (i = 0; i < dive->samples; i++) {
|
||||
int depth;
|
||||
struct sample *sample = dive->sample+i;
|
||||
|
@ -897,9 +894,27 @@ static struct plot_info *create_plot_info(struct dive *dive)
|
|||
entry = pi->entry + i + 2;
|
||||
sec = entry->sec = sample->time.seconds;
|
||||
depth = entry->depth = sample->depth.mm;
|
||||
entry->same_cylinder = sample->cylinderindex == cylinderindex;
|
||||
entry->cylinderindex = cylinderindex = sample->cylinderindex;
|
||||
entry->cylinderindex = sample->cylinderindex;
|
||||
SENSOR_PRESSURE(entry) = sample->cylinderpressure.mbar;
|
||||
entry->temperature = sample->temperature.mkelvin;
|
||||
|
||||
if (depth || lastdepth)
|
||||
lastindex = i+2;
|
||||
|
||||
lastdepth = depth;
|
||||
if (depth > pi->maxdepth)
|
||||
pi->maxdepth = depth;
|
||||
}
|
||||
|
||||
for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) /* initialize the start pressures */
|
||||
track_pr[cyl] = pr_track_alloc(dive->cylinder[cyl].start.mbar, -1);
|
||||
current = track_pr[dive->sample[0].cylinderindex];
|
||||
for (i = 0; i < dive->samples; i++) {
|
||||
entry = pi->entry + i + 2;
|
||||
|
||||
entry->same_cylinder = entry->cylinderindex == cylinderindex;
|
||||
cylinderindex = entry->cylinderindex;
|
||||
|
||||
/* track the segments per cylinder and their pressure/time integral */
|
||||
if (!entry->same_cylinder) {
|
||||
current->end = SENSOR_PRESSURE(entry-1);
|
||||
|
@ -921,15 +936,8 @@ static struct plot_info *create_plot_info(struct dive *dive)
|
|||
current->pressure_time += (entry->sec - (entry-1)->sec) *
|
||||
(1 + entry->depth / 10000.0);
|
||||
missing_pr |= !SENSOR_PRESSURE(entry);
|
||||
entry->temperature = sample->temperature.mkelvin;
|
||||
|
||||
if (depth || lastdepth)
|
||||
lastindex = i+2;
|
||||
|
||||
lastdepth = depth;
|
||||
if (depth > pi->maxdepth)
|
||||
pi->maxdepth = depth;
|
||||
}
|
||||
|
||||
current->t_end = entry->sec;
|
||||
for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) { /* initialize the end pressures */
|
||||
int pr = dive->cylinder[cyl].end.mbar;
|
||||
|
|
Loading…
Reference in a new issue