diff options
-rw-r--r-- | dive.h | 5 | ||||
-rw-r--r-- | equipment.c | 2 | ||||
-rw-r--r-- | profile.c | 2 | ||||
-rw-r--r-- | qt-ui/diveplanner.cpp | 20 | ||||
-rw-r--r-- | qt-ui/diveplanner.h | 2 | ||||
-rw-r--r-- | qt-ui/models.cpp | 4 | ||||
-rw-r--r-- | qt-ui/plannerSettings.ui | 46 | ||||
-rw-r--r-- | subsurfacestartup.c | 4 |
8 files changed, 58 insertions, 27 deletions
@@ -134,9 +134,10 @@ static inline int interpolate(int a, int b, int part, int whole) return rint(x / whole); } -static inline depth_t gas_mod(struct gasmix *mix, pressure_t po2_limit) { +/* MOD rounded to multiples of roundto mm */ +static inline depth_t gas_mod(struct gasmix *mix, pressure_t po2_limit, int roundto) { depth_t depth; - depth.mm = po2_limit.mbar * 1000 / get_o2(mix) * 10 - 10000; + depth.mm = ((po2_limit.mbar * 1000 / get_o2(mix) * 10 - 10000) / roundto) * roundto; return depth; } diff --git a/equipment.c b/equipment.c index 020168064..6d09e6fab 100644 --- a/equipment.c +++ b/equipment.c @@ -241,7 +241,7 @@ void reset_cylinders(struct dive *dive) if (cylinder_none(cyl)) continue; if (cyl->depth.mm == 0) /* if the gas doesn't give a mod, assume conservative pO2 */ - cyl->depth = gas_mod(&cyl->gasmix, pO2); + cyl->depth = gas_mod(&cyl->gasmix, pO2, 3000); if (cyl->type.workingpressure.mbar) cyl->start.mbar = cyl->end.mbar = cyl->type.workingpressure.mbar; cyl->gas_used.mliter = 0; @@ -1163,7 +1163,7 @@ static void calculate_gas_information_new(struct dive *dive, struct plot_info *p * END takes O₂ + N₂ (air) into account ("Narcotic" for trimix dives) * EAD just uses N₂ ("Air" for nitrox dives) */ pressure_t modpO2 = { .mbar = (int) (prefs.modpO2 * 1000) }; - entry->mod = (double) gas_mod(&dive->cylinder[cylinderindex].gasmix, modpO2).mm; + entry->mod = (double) gas_mod(&dive->cylinder[cylinderindex].gasmix, modpO2, 1).mm; entry->end = (entry->depth + 10000) * (1000 - fhe) / 1000.0 - 10000; entry->ead = (entry->depth + 10000) * (1000 - fo2 - fhe) / (double)N2_IN_AIR - 10000; entry->eadd = (entry->depth + 10000) * diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index 1ba00a7f9..57438eb39 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -347,6 +347,8 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f) ui.ascRateStops->setValue(prefs.ascratestops / UNIT_FACTOR); ui.ascRateLast6m->setValue(prefs.ascratelast6m / UNIT_FACTOR); ui.descRate->setValue(prefs.descrate / UNIT_FACTOR); + ui.bottompo2->setValue(prefs.bottompo2 / 1000.0); + ui.decopo2->setValue(prefs.decopo2 / 1000.0); connect(ui.lastStop, SIGNAL(toggled(bool)), plannerModel, SLOT(setLastStop6m(bool))); connect(ui.verbatim_plan, SIGNAL(toggled(bool)), plannerModel, SLOT(setVerbatim(bool))); @@ -363,6 +365,8 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f) connect(ui.ascRateLast6m, SIGNAL(valueChanged(int)), plannerModel, SLOT(emitDataChanged())); connect(ui.descRate, SIGNAL(valueChanged(int)), this, SLOT(setDescRate(int))); connect(ui.descRate, SIGNAL(valueChanged(int)), plannerModel, SLOT(emitDataChanged())); + connect(ui.bottompo2, SIGNAL(valueChanged(double)), this, SLOT(setBottomPo2(double))); + connect(ui.decopo2, SIGNAL(valueChanged(double)), this, SLOT(setDecoPo2(double))); setMinimumWidth(0); setMinimumHeight(0); @@ -413,6 +417,17 @@ void PlannerSettingsWidget::setDescRate(int rate) prefs.descrate = rate * UNIT_FACTOR; } +void PlannerSettingsWidget::setBottomPo2(double po2) +{ + prefs.bottompo2 = (int) (po2 * 1000.0); +} + +void PlannerSettingsWidget::setDecoPo2(double po2) +{ + prefs.decopo2 = (int) (po2 * 1000.0); +} + + void DivePlannerPointsModel::setPlanMode(Mode m) { mode = m; @@ -678,8 +693,9 @@ bool DivePlannerPointsModel::addGas(struct gasmix mix) /* The depth to change to that gas is given by the depth where its pO₂ is 1.6 bar. * The user should be able to change this depth manually. */ pressure_t modpO2; - modpO2.mbar = 1600; - cyl->depth = gas_mod(&mix, modpO2); + modpO2.mbar = prefs.decopo2; + cyl->depth = gas_mod(&mix, modpO2, 3000); + CylindersModel::instance()->setDive(stagingDive); return true; } diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h index 9f6052b4a..5955a5a8f 100644 --- a/qt-ui/diveplanner.h +++ b/qt-ui/diveplanner.h @@ -164,6 +164,8 @@ slots: void setAscRateStops(int rate); void setAscRateLast6m(int rate); void setDescRate(int rate); + void setBottomPo2(double po2); + void setDecoPo2(double po2); private: Ui::plannerSettingsWidget ui; diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp index 167f54813..a5a1f5bff 100644 --- a/qt-ui/models.cpp +++ b/qt-ui/models.cpp @@ -250,8 +250,8 @@ bool CylindersModel::setData(const QModelIndex &index, const QVariant &value, in if (CHANGED()) { cyl->gasmix.o2 = string_to_fraction(vString.toUtf8().data()); pressure_t modpO2; - modpO2.mbar = 1600; - cyl->depth = gas_mod(&cyl->gasmix, modpO2); + modpO2.mbar = prefs.decopo2; + cyl->depth = gas_mod(&cyl->gasmix, modpO2, 3000); changed = true; } break; diff --git a/qt-ui/plannerSettings.ui b/qt-ui/plannerSettings.ui index 519f3ea7c..57814eabb 100644 --- a/qt-ui/plannerSettings.ui +++ b/qt-ui/plannerSettings.ui @@ -72,16 +72,6 @@ </property> </widget> </item> - <item row="1" column="1"> - <widget class="QPlainTextEdit" name="bottompo2"> - <property name="maximumSize"> - <size> - <width>16777215</width> - <height>20</height> - </size> - </property> - </widget> - </item> <item row="2" column="0"> <widget class="QLabel" name="label_7"> <property name="text"> @@ -90,12 +80,34 @@ </widget> </item> <item row="2" column="1"> - <widget class="QPlainTextEdit" name="decopo2"> - <property name="maximumSize"> - <size> - <width>16777215</width> - <height>20</height> - </size> + <widget class="QDoubleSpinBox" name="decopo2"> + <property name="suffix"> + <string>bar</string> + </property> + <property name="maximum"> + <double>2.000000000000000</double> + </property> + <property name="singleStep"> + <double>0.100000000000000</double> + </property> + <property name="value"> + <double>1.600000000000000</double> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QDoubleSpinBox" name="bottompo2"> + <property name="suffix"> + <string>bar</string> + </property> + <property name="maximum"> + <double>2.000000000000000</double> + </property> + <property name="singleStep"> + <double>0.100000000000000</double> + </property> + <property name="value"> + <double>1.400000000000000</double> </property> </widget> </item> @@ -299,8 +311,6 @@ <tabstop>display_transitions</tabstop> <tabstop>lastStop</tabstop> <tabstop>backgasBreaks</tabstop> - <tabstop>bottompo2</tabstop> - <tabstop>decopo2</tabstop> <tabstop>descRate</tabstop> </tabstops> <resources/> diff --git a/subsurfacestartup.c b/subsurfacestartup.c index 463aea63a..8d8d848f2 100644 --- a/subsurfacestartup.c +++ b/subsurfacestartup.c @@ -37,7 +37,9 @@ struct preferences default_prefs = { .ascrate50 = 6000 / 60, .ascratestops = 6000 / 60, .ascratelast6m = 1000 / 60, - .descrate = 18000 / 60 + .descrate = 18000 / 60, + .bottompo2 = 1400, + .decopo2 = 1600 }; int run_survey; |