summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.h2
-rw-r--r--planner.c15
-rw-r--r--planner.h2
-rw-r--r--qt-ui/diveplanner.cpp4
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