summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Robert C. Helling <helling@atdotde.de>2017-11-24 14:17:01 +0100
committerGravatar Robert C. Helling <helling@atdotde.de>2017-11-25 20:13:01 +0100
commit088db5e12be569ea85fc2ac34c22413a30090cba (patch)
tree535b7c07ce0652c3d602223699b8e63a4d6ec6a3
parent8e21a65653514d9340ef45c9b9c53dfe5d280350 (diff)
downloadsubsurface-088db5e12be569ea85fc2ac34c22413a30090cba.tar.gz
Hand planner variables to profile
Pass the planner state struct to the profile computation so it can use deco_time and first ceiling to display VPM-B ceiling. Signed-off-by: Robert C. Helling <helling@atdotde.de>
-rw-r--r--core/profile.c12
-rw-r--r--core/profile.h4
-rw-r--r--profile-widget/profilewidget2.cpp2
-rw-r--r--qt-models/diveplannermodel.cpp1
-rw-r--r--qt-models/diveplannermodel.h1
-rw-r--r--qt-models/diveplotdatamodel.cpp3
6 files changed, 15 insertions, 8 deletions
diff --git a/core/profile.c b/core/profile.c
index 5a88e20c6..8821b4363 100644
--- a/core/profile.c
+++ b/core/profile.c
@@ -986,14 +986,18 @@ static void calculate_ndl_tts(struct deco_state *ds, struct dive *dive, struct p
/* Let's try to do some deco calculations.
*/
-void calculate_deco_information(struct deco_state *ds, struct dive *dive, struct divecomputer *dc, struct plot_info *pi, bool print_mode)
+void calculate_deco_information(struct deco_state *ds, struct deco_state *planner_ds, struct dive *dive, struct divecomputer *dc, struct plot_info *pi, bool print_mode)
{
int i, count_iteration = 0;
double surface_pressure = (dc->surface_pressure.mbar ? dc->surface_pressure.mbar : get_surface_pressure_in_mbar(dive, true)) / 1000.0;
bool first_iteration = true;
int prev_deco_time = 10000000, time_deep_ceiling = 0;
- if (!in_planner())
+ if (!in_planner()) {
ds->deco_time = 0;
+ } else {
+ ds->deco_time = planner_ds->deco_time;
+ ds->first_ceiling_pressure = planner_ds->first_ceiling_pressure;
+ }
struct deco_state *cache_data_initial = NULL;
lock_planner();
/* For VPM-B outside the planner, cache the initial deco state for CVA iterations */
@@ -1300,7 +1304,7 @@ static void debug_print_profiledata(struct plot_info *pi)
* sides, so that you can do end-points without having to worry
* about it.
*/
-void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plot_info *pi, bool fast)
+void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plot_info *pi, bool fast, struct deco_state *planner_ds)
{
int o2, he, o2max;
#ifndef SUBSURFACE_MOBILE
@@ -1333,7 +1337,7 @@ void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plo
fill_o2_values(dive, dc, pi); /* .. and insert the O2 sensor data having 0 values. */
calculate_sac(dive, dc, pi); /* Calculate sac */
#ifndef SUBSURFACE_MOBILE
- calculate_deco_information(&plot_deco_state, dive, dc, pi, false); /* and ceiling information, using gradient factor values in Preferences) */
+ calculate_deco_information(&plot_deco_state, planner_ds, dive, dc, pi, false); /* and ceiling information, using gradient factor values in Preferences) */
#endif
calculate_gas_information_new(dive, dc, pi); /* Calculate gas partial pressures */
diff --git a/core/profile.h b/core/profile.h
index bf29362f3..fa92070c6 100644
--- a/core/profile.h
+++ b/core/profile.h
@@ -74,8 +74,8 @@ struct plot_info calculate_max_limits_new(struct dive *dive, struct divecomputer
void compare_samples(struct plot_data *e1, struct plot_data *e2, char *buf, int bufsize, int sum);
struct plot_data *populate_plot_entries(struct dive *dive, struct divecomputer *dc, struct plot_info *pi);
struct plot_info *analyze_plot_info(struct plot_info *pi);
-void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plot_info *pi, bool fast);
-void calculate_deco_information(struct deco_state *ds, struct dive *dive, struct divecomputer *dc, struct plot_info *pi, bool print_mode);
+void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plot_info *pi, bool fast, struct deco_state *planner_ds);
+void calculate_deco_information(struct deco_state *ds, struct deco_state *planner_de, struct dive *dive, struct divecomputer *dc, struct plot_info *pi, bool print_mode);
struct plot_data *get_plot_details_new(struct plot_info *pi, int time, struct membuffer *);
/*
diff --git a/profile-widget/profilewidget2.cpp b/profile-widget/profilewidget2.cpp
index 855ec8544..04d71b6d2 100644
--- a/profile-widget/profilewidget2.cpp
+++ b/profile-widget/profilewidget2.cpp
@@ -640,7 +640,7 @@ void ProfileWidget2::plotDive(struct dive *d, bool force)
* shown.
*/
plotInfo = calculate_max_limits_new(&displayed_dive, currentdc);
- create_plot_info_new(&displayed_dive, currentdc, &plotInfo, !shouldCalculateMaxDepth);
+ create_plot_info_new(&displayed_dive, currentdc, &plotInfo, !shouldCalculateMaxDepth, &DivePlannerPointsModel::instance()->final_deco_state);
int newMaxtime = get_maxtime(&plotInfo);
if (shouldCalculateMaxTime || newMaxtime > maxtime)
maxtime = newMaxtime;
diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp
index 153771c08..96b5b9c0a 100644
--- a/qt-models/diveplannermodel.cpp
+++ b/qt-models/diveplannermodel.cpp
@@ -924,6 +924,7 @@ void DivePlannerPointsModel::createTemporaryPlan()
struct deco_state plan_deco_state;
plan(&plan_deco_state, &diveplan, &displayed_dive, DECOTIMESTEP, stoptable, &cache, isPlanner(), false);
//QtConcurrent::run(this, &DivePlannerPointsModel::computeVariations, &ds_after_previous_dives);
+ final_deco_state = plan_deco_state;
emit calculatedPlanNotes();
}
// throw away the cache
diff --git a/qt-models/diveplannermodel.h b/qt-models/diveplannermodel.h
index 0b714e608..5e04c9d79 100644
--- a/qt-models/diveplannermodel.h
+++ b/qt-models/diveplannermodel.h
@@ -56,6 +56,7 @@ public:
int lastEnteredPoint();
void removeDeco();
static bool addingDeco;
+ struct deco_state final_deco_state;
public
slots:
diff --git a/qt-models/diveplotdatamodel.cpp b/qt-models/diveplotdatamodel.cpp
index ac6cf7cd8..a893cb46b 100644
--- a/qt-models/diveplotdatamodel.cpp
+++ b/qt-models/diveplotdatamodel.cpp
@@ -1,5 +1,6 @@
// SPDX-License-Identifier: GPL-2.0
#include "qt-models/diveplotdatamodel.h"
+#include "qt-models/diveplannermodel.h"
#include "core/dive.h"
#include "core/profile.h"
#include "core/divelist.h"
@@ -232,7 +233,7 @@ void DivePlotDataModel::calculateDecompression()
{
struct divecomputer *dc = select_dc(&displayed_dive);
init_decompression(&plot_deco_state, &displayed_dive);
- calculate_deco_information(&plot_deco_state, &displayed_dive, dc, &pInfo, false);
+ calculate_deco_information(&plot_deco_state, &(DivePlannerPointsModel::instance()->final_deco_state), &displayed_dive, dc, &pInfo, false);
dataChanged(index(0, CEILING), index(pInfo.nr - 1, TISSUE_16));
}
#endif