diff options
-rw-r--r-- | planner.c | 28 | ||||
-rw-r--r-- | pref.h | 1 | ||||
-rw-r--r-- | qt-ui/diveplanner.cpp | 7 | ||||
-rw-r--r-- | qt-ui/diveplanner.h | 1 | ||||
-rw-r--r-- | subsurfacestartup.c | 3 |
5 files changed, 39 insertions, 1 deletions
@@ -721,6 +721,9 @@ void plan(struct diveplan *diveplan, char **cached_datap, bool add_deco, bool sh int last_ascend_rate; int best_first_ascend_cylinder; struct gasmix gas; + int o2time = 0; + int breaktime = -1; + int breakcylinder; set_gf(diveplan->gflow, diveplan->gfhigh, prefs.gf_low_at_maxdepth); if (!diveplan->surface_pressure) @@ -862,6 +865,31 @@ void plan(struct diveplan *diveplan, char **cached_datap, bool add_deco, bool sh DECOTIMESTEP, po2, &displayed_dive); cache_deco_state(tissue_tolerance, &trial_cache); clock += DECOTIMESTEP; + if (prefs.doo2breaks) { + if (get_o2(&displayed_dive.cylinder[current_cylinder].gasmix) == 1000) { + o2time += DECOTIMESTEP; + if (o2time >= 12 * 60) { + breaktime = 0; + breakcylinder = current_cylinder; + plan_add_segment(diveplan, clock - previous_point_time, depth, gas, po2, false); + previous_point_time = clock; + current_cylinder = 0; + gas = displayed_dive.cylinder[current_cylinder].gasmix; + } + } else { + if (breaktime >= 0) { + breaktime += DECOTIMESTEP; + if (breaktime >= 6 * 60) { + o2time = 0; + plan_add_segment(diveplan, clock - previous_point_time, depth, gas, po2, false); + previous_point_time = clock; + current_cylinder = breakcylinder; + gas = displayed_dive.cylinder[current_cylinder].gasmix; + breaktime = -1; + } + } + } + } trial_depth = depth; } if (stopping) { @@ -61,6 +61,7 @@ struct preferences { short proxy_auth; char *proxy_user; char *proxy_pass; + bool doo2breaks; }; enum unit_system_values { METRIC, diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index d0f208010..3661fab15 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -378,6 +378,7 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f) ui.descRate->setValue(prefs.descrate / UNIT_FACTOR); ui.bottompo2->setValue(prefs.bottompo2 / 1000.0); ui.decopo2->setValue(prefs.decopo2 / 1000.0); + ui.backgasBreaks->setChecked(prefs.doo2breaks); connect(ui.lastStop, SIGNAL(toggled(bool)), plannerModel, SLOT(setLastStop6m(bool))); @@ -402,6 +403,7 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f) connect(ui.decoStopSAC, SIGNAL(valueChanged(int)), this, SLOT(decoSacChanged(int))); connect(ui.gfhigh, SIGNAL(valueChanged(int)), plannerModel, SLOT(setGFHigh(int))); connect(ui.gflow, SIGNAL(valueChanged(int)), plannerModel, SLOT(setGFLow(int))); + connect(ui.backgasBreaks, SIGNAL(toggled(bool)), this, SLOT(setBackgasBreaks(bool))); ui.bottomSAC->setValue(20); ui.decoStopSAC->setValue(17); @@ -475,6 +477,11 @@ void PlannerSettingsWidget::setDecoPo2(double po2) prefs.decopo2 = (int) (po2 * 1000.0); } +void PlannerSettingsWidget::setBackgasBreaks(bool dobreaks) +{ + prefs.doo2breaks = dobreaks; +} + void DivePlannerPointsModel::setPlanMode(Mode m) { diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h index f2ed4f582..d9173be6f 100644 --- a/qt-ui/diveplanner.h +++ b/qt-ui/diveplanner.h @@ -168,6 +168,7 @@ slots: void setDescRate(int rate); void setBottomPo2(double po2); void setDecoPo2(double po2); + void setBackgasBreaks(bool dobreaks); private: Ui::plannerSettingsWidget ui; diff --git a/subsurfacestartup.c b/subsurfacestartup.c index 8d8d848f2..a451c2ba3 100644 --- a/subsurfacestartup.c +++ b/subsurfacestartup.c @@ -39,7 +39,8 @@ struct preferences default_prefs = { .ascratelast6m = 1000 / 60, .descrate = 18000 / 60, .bottompo2 = 1400, - .decopo2 = 1600 + .decopo2 = 1600, + .doo2breaks = false }; int run_survey; |