From 56535e4b3b9c2324f42674f385ee7bda2b9028eb Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Wed, 18 Sep 2013 22:40:34 -0500 Subject: [PATCH] Only calculate deco stops in planner mode In add dive mode simply bring the diver safely back to the surface (currently with a fixed ascent rate of 30ft/min (or 9m/min)). We should make that rate configurable (for the planner as well as the dive add function). Also, the dive add function should offer to automatically include a safety stop. Signed-off-by: Dirk Hohndel --- dive.h | 2 +- planner.c | 15 ++++++++++++++- planner.h | 2 +- qt-ui/diveplanner.cpp | 4 ++-- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/dive.h b/dive.h index 53b2d0a98..ed0dd52fe 100644 --- a/dive.h +++ b/dive.h @@ -719,7 +719,7 @@ void free_dps(struct divedatapoint *dp); void get_gas_string(int o2, int he, char *buf, int len); struct divedatapoint *create_dp(int time_incr, int depth, int o2, int he, int po2); void dump_plan(struct diveplan *diveplan); -void plan(struct diveplan *diveplan, char **cached_datap, struct dive **divep, char **error_string_p); +void plan(struct diveplan *diveplan, char **cached_datap, struct dive **divep, bool add_deco, char **error_string_p); void delete_single_dive(int idx); struct event *get_next_event(struct event *event, char *name); diff --git a/planner.c b/planner.c index 7c77555ac..6ed7030c7 100644 --- a/planner.c +++ b/planner.c @@ -594,7 +594,7 @@ static void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive) } #endif -void plan(struct diveplan *diveplan, char **cached_datap, struct dive **divep, char **error_string_p) +void plan(struct diveplan *diveplan, char **cached_datap, struct dive **divep, bool add_deco, char **error_string_p) { struct dive *dive; struct sample *sample; @@ -623,6 +623,19 @@ void plan(struct diveplan *diveplan, char **cached_datap, struct dive **divep, c get_gas_from_events(&dive->dc, sample->time.seconds, &o2, &he); po2 = dive->dc.sample[dive->dc.samples - 1].po2; depth = dive->dc.sample[dive->dc.samples - 1].depth.mm; + + /* if all we wanted was the dive just get us back to the surface */ + if (!add_deco) { + transitiontime = depth / 150; /* this still needs to be made configurable */ + plan_add_segment(diveplan, transitiontime, 0, o2, he, po2); + /* re-create the dive */ + delete_single_dive(dive_table.nr - 1); + *divep = dive = create_dive_from_plan(diveplan, error_string_p); + if (dive) + record_dive(dive); + return; + } + tissue_tolerance = tissue_at_end(dive, cached_datap, error_string_p); ceiling = deco_allowed_depth(tissue_tolerance, diveplan->surface_pressure / 1000.0, dive, 1); #if DEBUG_PLAN & 4 diff --git a/planner.h b/planner.h index d97a21fa7..fbff88ad8 100644 --- a/planner.h +++ b/planner.h @@ -6,7 +6,7 @@ extern "C" { #endif -extern void plan(struct diveplan *diveplan, char **cache_datap, struct dive **divep, char **error_string_p); +extern void plan(struct diveplan *diveplan, char **cache_datap, struct dive **divep, bool add_plan, char **error_string_p); extern int validate_gas(const char *text, int *o2_p, int *he_p); extern int validate_time(const char *text, int *sec_p, int *rel_p); extern int validate_depth(const char *text, int *mm_p); diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index 20dbabd68..d634aadf8 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -1148,7 +1148,7 @@ void DivePlannerPointsModel::createTemporaryPlan() char *cache = NULL; tempDive = NULL; char *errorString = NULL; - plan(&diveplan, &cache, &tempDive, &errorString); + plan(&diveplan, &cache, &tempDive, isPlanner(), &errorString); #if DEBUG_PLAN dump_plan(&diveplan); #endif @@ -1181,7 +1181,7 @@ void DivePlannerPointsModel::createPlan() char *errorString = NULL; createTemporaryPlan(); - plan(&diveplan, &cache, &tempDive, &errorString); + plan(&diveplan, &cache, &tempDive, isPlanner(), &errorString); mark_divelist_changed(TRUE); // Remove and clean the diveplan, so we don't delete