mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-17 20:36:15 +00:00
Only do safety stop of dive has at least max depth of 10m
Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
cc8d601422
commit
61ff7c5f8b
3 changed files with 10 additions and 9 deletions
11
dive.c
11
dive.c
|
@ -2838,15 +2838,14 @@ void set_userid(char *rUserId)
|
||||||
prefs.userid[30]='\0';
|
prefs.userid[30]='\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
int average_depth(struct diveplan *dive)
|
void average_max_depth(struct diveplan *dive, int *avg_depth, int *max_depth)
|
||||||
{
|
{
|
||||||
int integral = 0;
|
int integral = 0;
|
||||||
int last_time = 0;
|
int last_time = 0;
|
||||||
int last_depth = 0;
|
int last_depth = 0;
|
||||||
struct divedatapoint *dp = dive->dp;
|
struct divedatapoint *dp = dive->dp;
|
||||||
|
|
||||||
if (!dp)
|
*max_depth = 0;
|
||||||
return 0;
|
|
||||||
|
|
||||||
while (dp) {
|
while (dp) {
|
||||||
if (dp->time) {
|
if (dp->time) {
|
||||||
|
@ -2854,13 +2853,15 @@ int average_depth(struct diveplan *dive)
|
||||||
integral += (dp->depth + last_depth) * (dp->time - last_time) / 2;
|
integral += (dp->depth + last_depth) * (dp->time - last_time) / 2;
|
||||||
last_time = dp->time;
|
last_time = dp->time;
|
||||||
last_depth = dp->depth;
|
last_depth = dp->depth;
|
||||||
|
if (dp->depth > *max_depth)
|
||||||
|
*max_depth = dp->depth;
|
||||||
}
|
}
|
||||||
dp = dp->next;
|
dp = dp->next;
|
||||||
}
|
}
|
||||||
if (last_time)
|
if (last_time)
|
||||||
return integral / last_time;
|
*avg_depth = integral / last_time;
|
||||||
else
|
else
|
||||||
return 0;
|
*avg_depth = *max_depth = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct picture *alloc_picture()
|
struct picture *alloc_picture()
|
||||||
|
|
2
dive.h
2
dive.h
|
@ -872,7 +872,7 @@ extern depth_t string_to_depth(const char *str);
|
||||||
extern pressure_t string_to_pressure(const char *str);
|
extern pressure_t string_to_pressure(const char *str);
|
||||||
extern volume_t string_to_volume(const char *str, pressure_t workp);
|
extern volume_t string_to_volume(const char *str, pressure_t workp);
|
||||||
extern fraction_t string_to_fraction(const char *str);
|
extern fraction_t string_to_fraction(const char *str);
|
||||||
extern int average_depth(struct diveplan *dive);
|
extern void average_max_depth(struct diveplan *dive, int *avg_depth, int *max_depth);
|
||||||
|
|
||||||
#include "pref.h"
|
#include "pref.h"
|
||||||
|
|
||||||
|
|
|
@ -840,7 +840,7 @@ int plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool s
|
||||||
bool stopping = false;
|
bool stopping = false;
|
||||||
bool clear_to_ascend;
|
bool clear_to_ascend;
|
||||||
int clock, previous_point_time;
|
int clock, previous_point_time;
|
||||||
int avg_depth, bottom_time = 0;
|
int avg_depth, max_depth, bottom_time = 0;
|
||||||
int last_ascend_rate;
|
int last_ascend_rate;
|
||||||
int best_first_ascend_cylinder;
|
int best_first_ascend_cylinder;
|
||||||
struct gasmix gas;
|
struct gasmix gas;
|
||||||
|
@ -865,7 +865,7 @@ int plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool s
|
||||||
current_cylinder = 0;
|
current_cylinder = 0;
|
||||||
}
|
}
|
||||||
depth = displayed_dive.dc.sample[displayed_dive.dc.samples - 1].depth.mm;
|
depth = displayed_dive.dc.sample[displayed_dive.dc.samples - 1].depth.mm;
|
||||||
avg_depth = average_depth(diveplan);
|
average_max_depth(diveplan, &avg_depth, &max_depth);
|
||||||
last_ascend_rate = ascend_velocity(depth, avg_depth, bottom_time);
|
last_ascend_rate = ascend_velocity(depth, avg_depth, bottom_time);
|
||||||
|
|
||||||
/* if all we wanted was the dive just get us back to the surface */
|
/* if all we wanted was the dive just get us back to the surface */
|
||||||
|
@ -905,7 +905,7 @@ int plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool s
|
||||||
bottom_time = clock = previous_point_time = displayed_dive.dc.sample[displayed_dive.dc.samples - 1].time.seconds;
|
bottom_time = clock = previous_point_time = displayed_dive.dc.sample[displayed_dive.dc.samples - 1].time.seconds;
|
||||||
gi = gaschangenr - 1;
|
gi = gaschangenr - 1;
|
||||||
if(prefs.recreational_mode) {
|
if(prefs.recreational_mode) {
|
||||||
bool safety_stop = prefs.safetystop;
|
bool safety_stop = prefs.safetystop && max_depth >= 10000;
|
||||||
// How long can we stay at the current depth and still directly ascent to the surface?
|
// How long can we stay at the current depth and still directly ascent to the surface?
|
||||||
while (trial_ascent(depth, 0, avg_depth, bottom_time, tissue_tolerance, &displayed_dive.cylinder[current_cylinder].gasmix,
|
while (trial_ascent(depth, 0, avg_depth, bottom_time, tissue_tolerance, &displayed_dive.cylinder[current_cylinder].gasmix,
|
||||||
po2, diveplan->surface_pressure / 1000.0)) {
|
po2, diveplan->surface_pressure / 1000.0)) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue