mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-19 14:25:27 +00:00
Indicate a repetitive dive in the diveplan
Fixes #1095 Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
fb2ba72e42
commit
c1ef59c540
4 changed files with 19 additions and 11 deletions
|
@ -860,6 +860,7 @@ struct diveplan {
|
||||||
short vpmb_conservatism;
|
short vpmb_conservatism;
|
||||||
struct divedatapoint *dp;
|
struct divedatapoint *dp;
|
||||||
int eff_gflow, eff_gfhigh;
|
int eff_gflow, eff_gfhigh;
|
||||||
|
bool repetitive;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct divedatapoint *plan_add_segment(struct diveplan *diveplan, int duration, int depth, int cylinderid, int po2, bool entered);
|
struct divedatapoint *plan_add_segment(struct diveplan *diveplan, int duration, int depth, int cylinderid, int po2, bool entered);
|
||||||
|
|
|
@ -360,7 +360,8 @@ int get_divesite_idx(struct dive_site *ds)
|
||||||
static struct gasmix air = { .o2.permille = O2_IN_AIR, .he.permille = 0 };
|
static struct gasmix air = { .o2.permille = O2_IN_AIR, .he.permille = 0 };
|
||||||
|
|
||||||
/* take into account previous dives until there is a 48h gap between dives */
|
/* take into account previous dives until there is a 48h gap between dives */
|
||||||
double init_decompression(struct dive *dive)
|
/* return true if this is a repetitive dive */
|
||||||
|
bool init_decompression(struct dive *dive)
|
||||||
{
|
{
|
||||||
int i, divenr = -1;
|
int i, divenr = -1;
|
||||||
unsigned int surface_time;
|
unsigned int surface_time;
|
||||||
|
@ -369,7 +370,7 @@ double init_decompression(struct dive *dive)
|
||||||
double surface_pressure;
|
double surface_pressure;
|
||||||
|
|
||||||
if (!dive)
|
if (!dive)
|
||||||
return 0.0;
|
return false;
|
||||||
|
|
||||||
surface_pressure = get_surface_pressure_in_mbar(dive, true) / 1000.0;
|
surface_pressure = get_surface_pressure_in_mbar(dive, true) / 1000.0;
|
||||||
divenr = get_divenr(dive);
|
divenr = get_divenr(dive);
|
||||||
|
@ -445,7 +446,9 @@ double init_decompression(struct dive *dive)
|
||||||
dump_tissues();
|
dump_tissues();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return tissue_tolerance_calc(dive, surface_pressure);
|
// I do not dare to remove this call. We don't need the result but it might have side effects. Bummer.
|
||||||
|
tissue_tolerance_calc(dive, surface_pressure);
|
||||||
|
return deco_init;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_cylinder_related_info(struct dive *dive)
|
void update_cylinder_related_info(struct dive *dive)
|
||||||
|
|
|
@ -14,7 +14,7 @@ extern void update_cylinder_related_info(struct dive *);
|
||||||
extern void mark_divelist_changed(int);
|
extern void mark_divelist_changed(int);
|
||||||
extern int unsaved_changes(void);
|
extern int unsaved_changes(void);
|
||||||
extern void remove_autogen_trips(void);
|
extern void remove_autogen_trips(void);
|
||||||
extern double init_decompression(struct dive *dive);
|
extern bool init_decompression(struct dive *dive);
|
||||||
|
|
||||||
/* divelist core logic functions */
|
/* divelist core logic functions */
|
||||||
extern void process_dives(bool imported, bool prefer_imported);
|
extern void process_dives(bool imported, bool prefer_imported);
|
||||||
|
|
|
@ -128,7 +128,7 @@ void interpolate_transition(struct dive *dive, duration_t t0, duration_t t1, dep
|
||||||
}
|
}
|
||||||
|
|
||||||
/* returns the tissue tolerance at the end of this (partial) dive */
|
/* returns the tissue tolerance at the end of this (partial) dive */
|
||||||
void tissue_at_end(struct dive *dive, char **cached_datap)
|
bool tissue_at_end(struct dive *dive, char **cached_datap)
|
||||||
{
|
{
|
||||||
struct divecomputer *dc;
|
struct divecomputer *dc;
|
||||||
struct sample *sample, *psample;
|
struct sample *sample, *psample;
|
||||||
|
@ -136,18 +136,19 @@ void tissue_at_end(struct dive *dive, char **cached_datap)
|
||||||
depth_t lastdepth = {};
|
depth_t lastdepth = {};
|
||||||
duration_t t0 = {}, t1 = {};
|
duration_t t0 = {}, t1 = {};
|
||||||
struct gasmix gas;
|
struct gasmix gas;
|
||||||
|
bool repetitive = false;
|
||||||
|
|
||||||
if (!dive)
|
if (!dive)
|
||||||
return;
|
return false;
|
||||||
if (*cached_datap) {
|
if (*cached_datap) {
|
||||||
restore_deco_state(*cached_datap);
|
restore_deco_state(*cached_datap);
|
||||||
} else {
|
} else {
|
||||||
init_decompression(dive);
|
repetitive = init_decompression(dive);
|
||||||
cache_deco_state(cached_datap);
|
cache_deco_state(cached_datap);
|
||||||
}
|
}
|
||||||
dc = &dive->dc;
|
dc = &dive->dc;
|
||||||
if (!dc->samples)
|
if (!dc->samples)
|
||||||
return;
|
return false;
|
||||||
psample = sample = dc->sample;
|
psample = sample = dc->sample;
|
||||||
|
|
||||||
for (i = 0; i < dc->samples; i++, sample++) {
|
for (i = 0; i < dc->samples; i++, sample++) {
|
||||||
|
@ -190,6 +191,7 @@ void tissue_at_end(struct dive *dive, char **cached_datap)
|
||||||
psample = sample;
|
psample = sample;
|
||||||
t0 = t1;
|
t0 = t1;
|
||||||
}
|
}
|
||||||
|
return repetitive;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -594,8 +596,10 @@ static void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive, bool
|
||||||
snprintf(temp, sz_temp, translate("gettextFromC", "recreational mode based on Bühlmann ZHL-16B with GFlow = %d and GFhigh = %d"),
|
snprintf(temp, sz_temp, translate("gettextFromC", "recreational mode based on Bühlmann ZHL-16B with GFlow = %d and GFhigh = %d"),
|
||||||
diveplan->gflow, diveplan->gfhigh);
|
diveplan->gflow, diveplan->gfhigh);
|
||||||
}
|
}
|
||||||
len += snprintf(buffer + len, sz_buffer - len, "<div><b>%s</b><br>%s</div>",
|
len += snprintf(buffer + len, sz_buffer - len, "<div><b>%s%s</b><br>%s</div>",
|
||||||
translate("gettextFromC", "Subsurface dive plan"), temp);
|
translate("gettextFromC", "Subsurface dive plan"),
|
||||||
|
diveplan->repetitive ? translate("gettextFromC", " (repetitive)") : "",
|
||||||
|
temp);
|
||||||
len += snprintf(buffer + len, sz_buffer - len, translate("gettextFromC", "<div>Runtime: %dmin</div><br>"),
|
len += snprintf(buffer + len, sz_buffer - len, translate("gettextFromC", "<div>Runtime: %dmin</div><br>"),
|
||||||
diveplan_duration(diveplan));
|
diveplan_duration(diveplan));
|
||||||
|
|
||||||
|
@ -1082,7 +1086,7 @@ bool plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool
|
||||||
gi = gaschangenr - 1;
|
gi = gaschangenr - 1;
|
||||||
|
|
||||||
/* Set tissue tolerance and initial vpmb gradient at start of ascent phase */
|
/* Set tissue tolerance and initial vpmb gradient at start of ascent phase */
|
||||||
tissue_at_end(&displayed_dive, cached_datap);
|
diveplan->repetitive = tissue_at_end(&displayed_dive, cached_datap);
|
||||||
nuclear_regeneration(clock);
|
nuclear_regeneration(clock);
|
||||||
vpmb_start_gradient();
|
vpmb_start_gradient();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue