summaryrefslogtreecommitdiffstats
path: root/core/planner.c
diff options
context:
space:
mode:
authorGravatar Robert C. Helling <helling@atdotde.de>2017-01-07 03:01:14 +0100
committerGravatar Subsurface <dirk@subsurface-divelog.org>2017-01-06 20:43:23 -0800
commitbb4bf639c333bee28d398c3670f52797d726b126 (patch)
treec28fe4eb2f51dc226931ee16e58edade6bf644ea /core/planner.c
parent4e375f56a8b15212b96e0ce5b7ca4724dc268612 (diff)
downloadsubsurface-bb4bf639c333bee28d398c3670f52797d726b126.tar.gz
Fix deco_mode confusion
We have two prefernces determining the deco_mode (BUEHLMANN vs VPMB vs RECREATIONAL): One for the planner (deco_mode) and one for displaying dives (display_deco_mode). The former is set in the planner settings while the latter is set in the preferences. This patch clears up a confusion which of the two to use by introducing a helper function that selects the correct variable. Signed-off-by: Robert C. Helling <helling@atdotde.de>
Diffstat (limited to 'core/planner.c')
-rw-r--r--core/planner.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/core/planner.c b/core/planner.c
index cb11bfbaa..118ad751d 100644
--- a/core/planner.c
+++ b/core/planner.c
@@ -14,6 +14,7 @@
#include "planner.h"
#include "gettext.h"
#include "libdivecomputer/parser.h"
+#include "qthelperfromc.h"
#define TIMESTEP 2 /* second */
#define DECOTIMESTEP 60 /* seconds. Unit of deco stop times */
@@ -173,7 +174,7 @@ unsigned int tissue_at_end(struct dive *dive, char **cached_datap)
* portion of the dive.
* Remember the value for later.
*/
- if ((prefs.deco_mode == VPMB) && (lastdepth.mm > sample->depth.mm)) {
+ if ((decoMode() == VPMB) && (lastdepth.mm > sample->depth.mm)) {
pressure_t ceiling_pressure;
nuclear_regeneration(t0.seconds);
vpmb_start_gradient();
@@ -548,7 +549,7 @@ static void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive, bool
plan_display_duration = prefs.display_duration;
plan_display_transitions = prefs.display_transitions;
- if (prefs.deco_mode == VPMB) {
+ if (decoMode() == VPMB) {
deco = "VPM-B";
} else {
deco = "BUHLMANN";
@@ -579,10 +580,10 @@ static void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive, bool
}
len = show_disclaimer ? snprintf(buffer, sz_buffer, "<div><b>%s<b></div><br>", disclaimer) : 0;
- if (prefs.deco_mode == BUEHLMANN){
+ if (decoMode() == BUEHLMANN){
snprintf(temp, sz_temp, translate("gettextFromC", "based on Bühlmann ZHL-16C with GFlow = %d and GFhigh = %d"),
diveplan->gflow, diveplan->gfhigh);
- } else if (prefs.deco_mode == VPMB){
+ } else if (decoMode() == VPMB){
int temp_len;
if (diveplan->vpmb_conservatism == 0)
temp_len = snprintf(temp, sz_temp, "%s", translate("gettextFromC", "based on VPM-B at nominal conservatism"));
@@ -592,7 +593,7 @@ static void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive, bool
temp_len += snprintf(temp + temp_len, sz_temp - temp_len, translate("gettextFromC", ", effective GF=%d/%d"), diveplan->eff_gflow
, diveplan->eff_gfhigh);
- } else if (prefs.deco_mode == RECREATIONAL){
+ } else if (decoMode() == RECREATIONAL){
snprintf(temp, sz_temp, translate("gettextFromC", "recreational mode based on Bühlmann ZHL-16B with GFlow = %d and GFhigh = %d"),
diveplan->gflow, diveplan->gfhigh);
}
@@ -938,7 +939,7 @@ bool trial_ascent(int trial_depth, int stoplevel, int avg_depth, int bottom_time
// For consistency with other VPM-B implementations, we should not start the ascent while the ceiling is
// deeper than the next stop (thus the offgasing during the ascent is ignored).
// However, we still need to make sure we don't break the ceiling due to on-gassing during ascent.
- if (prefs.deco_mode == VPMB && (deco_allowed_depth(tissue_tolerance_calc(&displayed_dive,
+ if (decoMode() == VPMB && (deco_allowed_depth(tissue_tolerance_calc(&displayed_dive,
depth_to_bar(stoplevel, &displayed_dive)),
surface_pressure, &displayed_dive, 1) > stoplevel))
return false;
@@ -1096,7 +1097,7 @@ bool plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool
nuclear_regeneration(clock);
vpmb_start_gradient();
- if(prefs.deco_mode == RECREATIONAL) {
+ if(decoMode() == RECREATIONAL) {
bool safety_stop = prefs.safetystop && max_depth >= 10000;
track_ascent_gas(depth, &displayed_dive.cylinder[current_cylinder], avg_depth, bottom_time, safety_stop);
// How long can we stay at the current depth and still directly ascent to the surface?
@@ -1172,7 +1173,7 @@ bool plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool
//CVA
do {
- is_final_plan = (prefs.deco_mode == BUEHLMANN) || (previous_deco_time - deco_time < 10); // CVA time converges
+ is_final_plan = (decoMode() == BUEHLMANN) || (previous_deco_time - deco_time < 10); // CVA time converges
if (deco_time != 10000000)
vpmb_next_gradient(deco_time, diveplan->surface_pressure / 1000.0);
@@ -1372,7 +1373,7 @@ bool plan(struct diveplan *diveplan, char **cached_datap, bool is_planner, bool
} while (!is_final_plan);
plan_add_segment(diveplan, clock - previous_point_time, 0, current_cylinder, po2, false);
- if(prefs.deco_mode == VPMB) {
+ if(decoMode() == VPMB) {
diveplan->eff_gfhigh = rint(100.0 * regressionb());
diveplan->eff_gflow = rint(100*(regressiona() * first_stop_depth + regressionb()));
}