diff --git a/core/divelist.cpp b/core/divelist.cpp index d198800fc..35679cf61 100644 --- a/core/divelist.cpp +++ b/core/divelist.cpp @@ -96,8 +96,8 @@ std::unique_ptr dive_table::default_dive() auto d = std::make_unique(); d->when = time(nullptr) + gettimezoneoffset() + 3600; d->dcs[0].duration = 40_min; - d->dcs[0].maxdepth.mm = M_OR_FT(15, 45); - d->dcs[0].meandepth.mm = M_OR_FT(13, 39); // this creates a resonable looking safety stop + d->dcs[0].maxdepth = m_or_ft(15, 45); + d->dcs[0].meandepth = m_or_ft(13, 39); // this creates a resonable looking safety stop make_manually_added_dive_dc(&d->dcs[0]); fake_dc(&d->dcs[0]); add_default_cylinder(d.get()); diff --git a/core/equipment.cpp b/core/equipment.cpp index fff8c1fa2..a418e209f 100644 --- a/core/equipment.cpp +++ b/core/equipment.cpp @@ -314,7 +314,7 @@ void reset_cylinders(struct dive *dive, bool track_gas) for (cylinder_t &cyl: dive->cylinders) { if (cyl.depth.mm == 0) /* if the gas doesn't give a mod, calculate based on prefs */ - cyl.depth = dive->gas_mod(cyl.gasmix, decopo2, M_OR_FT(3,10)); + cyl.depth = dive->gas_mod(cyl.gasmix, decopo2, m_or_ft(3, 10).mm); if (track_gas) cyl.start.mbar = cyl.end.mbar = cyl.type.workingpressure.mbar; cyl.gas_used = 0_l; diff --git a/core/planner.cpp b/core/planner.cpp index 69be37dbf..75bc11481 100644 --- a/core/planner.cpp +++ b/core/planner.cpp @@ -660,9 +660,9 @@ std::vector plan(struct deco_state *ds, struct diveplan &diveplan, str * Remark: not reentrant, but the user probably won't change preferences while this is running. */ if (prefs.last_stop) - decostoplevels[1].mm = 0; + decostoplevels[1] = 0_m; else - decostoplevels[1].mm = M_OR_FT(3,10); + decostoplevels[1] = m_or_ft(3, 10); /* Let's start at the last 'sample', i.e. the last manually entered waypoint. */ const struct sample &sample = dc->samples.back(); @@ -1027,7 +1027,7 @@ std::vector plan(struct deco_state *ds, struct diveplan &diveplan, str * otherwise odd things can happen, such as CVA causing the final ascent to start *later* * if the ascent rate is slower, which is completely nonsensical. * Assume final ascent takes 20s, which is the time taken to ascend at 9m/min from 3m */ - ds->deco_time = clock - bottom_time - (M_OR_FT(3,10) * ( prefs.last_stop ? 2 : 1)) / last_ascend_rate + 20; + ds->deco_time = clock - bottom_time - (m_or_ft(3, 10).mm * ( prefs.last_stop ? 2 : 1)) / last_ascend_rate + 20; } while (!is_final_plan && error == PLAN_OK); plan_add_segment(diveplan, clock - previous_point_time, 0, current_cylinder, po2, false, divemode); diff --git a/core/profile.cpp b/core/profile.cpp index 7a85dd660..85c9366e7 100644 --- a/core/profile.cpp +++ b/core/profile.cpp @@ -764,12 +764,12 @@ static void calculate_ndl_tts(struct deco_state *ds, const struct dive *dive, st const int ascent_s_per_deco_step = 1; /* how long time steps in deco calculations? */ const int time_stepsize = 60; - const int deco_stepsize = M_OR_FT(3, 10); + const depth_t deco_stepsize = m_or_ft(3, 10); /* at what depth is the current deco-step? */ depth_t ascent_depth { .mm = entry.depth }; int next_stop = round_up(deco_allowed_depth( tissue_tolerance_calc(ds, dive, dive->depth_to_bar(ascent_depth), in_planner), - surface_pressure, dive, 1).mm, deco_stepsize); + surface_pressure, dive, 1).mm, deco_stepsize.mm); /* at what time should we give up and say that we got enuff NDL? */ /* If iterating through a dive, entry.tts_calc needs to be reset */ entry.tts_calc = 0; @@ -802,14 +802,14 @@ static void calculate_ndl_tts(struct deco_state *ds, const struct dive *dive, st add_segment(ds, dive->depth_to_bar(ascent_depth), gasmix, ascent_s_per_step, entry.o2pressure.mbar, divemode, prefs.decosac, in_planner); next_stop = round_up(deco_allowed_depth(tissue_tolerance_calc(ds, dive, dive->depth_to_bar(ascent_depth), in_planner), - surface_pressure, dive, 1).mm, deco_stepsize); + surface_pressure, dive, 1).mm, deco_stepsize.mm); } ascent_depth.mm = next_stop; /* And how long is the current deco-step? */ entry.stoptime_calc = 0; entry.stopdepth_calc = next_stop; - next_stop -= deco_stepsize; + next_stop -= deco_stepsize.mm; /* And how long is the total TTS */ while (next_stop >= 0) { @@ -829,7 +829,7 @@ static void calculate_ndl_tts(struct deco_state *ds, const struct dive *dive, st add_segment(ds, dive->depth_to_bar(ascent_depth), gasmix, ascent_s_per_deco_step, entry.o2pressure.mbar, divemode, prefs.decosac, in_planner); ascent_depth.mm = next_stop; - next_stop -= deco_stepsize; + next_stop -= deco_stepsize.mm; } } } diff --git a/core/units.cpp b/core/units.cpp index 73e4b0c42..7d855840e 100644 --- a/core/units.cpp +++ b/core/units.cpp @@ -199,3 +199,8 @@ unsigned int get_distance(location_t loc1, location_t loc2) return lrint(6371000 * c); } +depth_t m_or_ft(int m, int ft) +{ + int mm = prefs.units.length == units::METERS ? m * 1000 : feet_to_mm(ft); + return depth_t::from_base(mm); +} diff --git a/core/units.h b/core/units.h index dc32322d7..9636573aa 100644 --- a/core/units.h +++ b/core/units.h @@ -19,8 +19,6 @@ #define HE_DENSITY 166 #define ZERO_C_IN_MKELVIN 273150 // mKelvin -#define M_OR_FT(_m, _f) ((prefs.units.length == units::METERS) ? ((_m) * 1000) : (feet_to_mm(_f))) - /* Salinity is expressed in weight in grams per 10l */ #define SEAWATER_SALINITY 10300 #define EN13319_SALINITY 10200 @@ -193,6 +191,10 @@ static inline depth_t operator""_ft(unsigned long long ft) return depth_t { .mm = static_cast(round(ft * 304.8)) }; } +// Return either the first argument in meters or the second argument in +// feet, depending on use settings. +depth_t m_or_ft(int m, int ft); + struct pressure_t : public unit_base { int32_t mbar = 0; // pressure up to 2000 bar diff --git a/profile-widget/profilewidget2.cpp b/profile-widget/profilewidget2.cpp index 8094fc71b..c58018969 100644 --- a/profile-widget/profilewidget2.cpp +++ b/profile-widget/profilewidget2.cpp @@ -347,8 +347,8 @@ void ProfileWidget2::mouseDoubleClickEvent(QMouseEvent *event) return; int minutes = lrint(profileScene->timeAxis->valueAt(mappedPos) / 60); - int milimeters = lrint(profileScene->profileYAxis->valueAt(mappedPos) / M_OR_FT(1, 1)) * M_OR_FT(1, 1); - plannerModel->addStop(milimeters, minutes * 60); + depth_t depth { .mm = int_cast(profileScene->profileYAxis->valueAt(mappedPos) / m_or_ft(1, 1).mm) * m_or_ft(1, 1).mm }; + plannerModel->addStop(depth, minutes * 60); if (currentState == EDIT) emit stopAdded(); } @@ -938,7 +938,7 @@ void ProfileWidget2::divePlannerHandlerMoved() profileScene->timeAxis->setBounds(0.0, profileScene->timeAxis->maximum() * 1.02); divedatapoint data = plannerModel->at(index); - data.depth.mm = lrint(profileScene->profileYAxis->valueAt(activeHandler->pos()) / M_OR_FT(1, 1)) * M_OR_FT(1, 1); + data.depth.mm = lrint(profileScene->profileYAxis->valueAt(activeHandler->pos()) / m_or_ft(1, 1).mm) * m_or_ft(1, 1).mm; data.time = lrint(profileScene->timeAxis->valueAt(activeHandler->pos())); plannerModel->editStop(index, data); @@ -964,7 +964,7 @@ void ProfileWidget2::keyDownAction() for (int row: handleIndices) { divedatapoint dp = plannerModel->at(row); - dp.depth.mm += M_OR_FT(1, 5); + dp.depth += m_or_ft(1, 5); plannerModel->editStop(row, dp); } if (currentState == EDIT && !handleIndices.empty()) @@ -983,7 +983,7 @@ void ProfileWidget2::keyUpAction() if (dp.depth.mm <= 0) continue; - dp.depth.mm -= M_OR_FT(1, 5); + dp.depth -= m_or_ft(1, 5); plannerModel->editStop(row, dp); } if (currentState == EDIT && !handleIndices.empty()) diff --git a/qt-models/cylindermodel.cpp b/qt-models/cylindermodel.cpp index 1d3513838..62e65d181 100644 --- a/qt-models/cylindermodel.cpp +++ b/qt-models/cylindermodel.cpp @@ -237,13 +237,13 @@ QVariant CylindersModel::data(const QModelIndex &index, int role) const } else { pressure_t modpO2; modpO2.mbar = inPlanner ? prefs.bottompo2 : (int)(prefs.modpO2 * 1000.0); - return get_depth_string(d->gas_mod(cyl->gasmix, modpO2, M_OR_FT(1,1)), true); + return get_depth_string(d->gas_mod(cyl->gasmix, modpO2, m_or_ft(1, 1).mm), true); } case MND: if (cyl->bestmix_he) return QStringLiteral("*"); else - return get_depth_string(d->gas_mnd(cyl->gasmix, prefs.bestmixend, M_OR_FT(1,1)), true); + return get_depth_string(d->gas_mnd(cyl->gasmix, prefs.bestmixend, m_or_ft(1, 1).mm), true); break; case USE: return gettextFromC::tr(cylinderuse_text[cyl->cylinder_use]); @@ -414,7 +414,7 @@ bool CylindersModel::setData(const QModelIndex &index, const QVariant &value, in prefs.o2consumption / prefs.decosac / prefs.pscr_ratio; else modpO2.mbar = prefs.decopo2; - cyl.depth = d->gas_mod(cyl.gasmix, modpO2, M_OR_FT(3, 10)); + cyl.depth = d->gas_mod(cyl.gasmix, modpO2, m_or_ft(3, 10).mm); cyl.bestmix_o2 = false; } type = Command::EditCylinderType::GASMIX; @@ -443,7 +443,7 @@ bool CylindersModel::setData(const QModelIndex &index, const QVariant &value, in } pressure_t modpO2; modpO2.mbar = prefs.decopo2; - cyl.depth = d->gas_mod(cyl.gasmix, modpO2, M_OR_FT(3, 10)); + cyl.depth = d->gas_mod(cyl.gasmix, modpO2, m_or_ft(3, 10).mm); } type = Command::EditCylinderType::GASMIX; break; @@ -649,8 +649,8 @@ void CylindersModel::updateDecoDepths(pressure_t olddecopo2) for (auto &cyl: d->cylinders) { /* If the gas's deco MOD matches the old pO2, it will have been automatically calculated and should be updated. * If they don't match, we should leave the user entered depth as it is */ - if (cyl.depth.mm == d->gas_mod(cyl.gasmix, olddecopo2, M_OR_FT(3, 10)).mm) { - cyl.depth = d->gas_mod(cyl.gasmix, decopo2, M_OR_FT(3, 10)); + if (cyl.depth.mm == d->gas_mod(cyl.gasmix, olddecopo2, m_or_ft(3, 10).mm).mm) { + cyl.depth = d->gas_mod(cyl.gasmix, decopo2, m_or_ft(3, 10).mm); } } emit dataChanged(createIndex(0, 0), createIndex(numRows - 1, COLUMNS - 1)); @@ -680,7 +680,7 @@ bool CylindersModel::updateBestMixes() cyl.gasmix.he.permille = 1000 - get_o2(cyl.gasmix); pressure_t modpO2; modpO2.mbar = prefs.decopo2; - cyl.depth = d->gas_mod(cyl.gasmix, modpO2, M_OR_FT(3, 10)); + cyl.depth = d->gas_mod(cyl.gasmix, modpO2, m_or_ft(3, 10).mm); gasUpdated = true; } if (cyl.bestmix_he) { diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp index 6824011b4..58d155bc5 100644 --- a/qt-models/diveplannermodel.cpp +++ b/qt-models/diveplannermodel.cpp @@ -90,12 +90,12 @@ void DivePlannerPointsModel::createSimpleDive(struct dive *dIn) // If we're in drop_stone_mode, don't add a first point. // It will be added implicitly. if (!prefs.drop_stone_mode) - addStop(M_OR_FT(15, 45), 1 * 60, cylinderid, prefs.defaultsetpoint, true, UNDEF_COMP_TYPE); + addStop(m_or_ft(15, 45), 1 * 60, cylinderid, prefs.defaultsetpoint, true, UNDEF_COMP_TYPE); - addStop(M_OR_FT(15, 45), 20 * 60, 0, prefs.defaultsetpoint, true, UNDEF_COMP_TYPE); + addStop(m_or_ft(15, 45), 20 * 60, 0, prefs.defaultsetpoint, true, UNDEF_COMP_TYPE); if (!isPlanner()) { - addStop(M_OR_FT(5, 15), 42 * 60, cylinderid, prefs.defaultsetpoint, true, UNDEF_COMP_TYPE); - addStop(M_OR_FT(5, 15), 45 * 60, cylinderid, prefs.defaultsetpoint, true, UNDEF_COMP_TYPE); + addStop(m_or_ft(5, 15), 42 * 60, cylinderid, prefs.defaultsetpoint, true, UNDEF_COMP_TYPE); + addStop(m_or_ft(5, 15), 45 * 60, cylinderid, prefs.defaultsetpoint, true, UNDEF_COMP_TYPE); } updateDiveProfile(); } @@ -173,7 +173,8 @@ void DivePlannerPointsModel::loadFromDive(dive *dIn, int dcNrIn) if (newtime.seconds == lastrecordedtime.seconds) newtime.seconds += 10; divemode_t current_divemode = loop.at(newtime.seconds - 1); - addStop(depthsum / samplecount, newtime.seconds, cylinderid, last_sp.mbar, true, current_divemode); + depth_t depth { .mm = depthsum / samplecount }; + addStop(depth, newtime.seconds, cylinderid, last_sp.mbar, true, current_divemode); lastrecordedtime = newtime; } lasttime = newtime; @@ -184,7 +185,7 @@ void DivePlannerPointsModel::loadFromDive(dive *dIn, int dcNrIn) // make sure we get the last point right so the duration is correct divemode_t current_divemode = loop.at(dc->duration.seconds); if (!hasMarkedSamples && !dc->last_manual_time.seconds) - addStop(0, dc->duration.seconds,cylinderid, last_sp.mbar, true, current_divemode); + addStop(0_m, dc->duration.seconds,cylinderid, last_sp.mbar, true, current_divemode); preserved_until = d->duration; updateDiveProfile(); @@ -808,19 +809,19 @@ int DivePlannerPointsModel::lastEnteredPoint() const void DivePlannerPointsModel::addDefaultStop() { removeDeco(); - addStop(0, 0, -1, prefs.defaultsetpoint, true, UNDEF_COMP_TYPE); + addStop(0_m, 0, -1, prefs.defaultsetpoint, true, UNDEF_COMP_TYPE); } -void DivePlannerPointsModel::addStop(int milimeters, int seconds) +void DivePlannerPointsModel::addStop(depth_t depth, int seconds) { removeDeco(); - addStop(milimeters, seconds, -1, prefs.defaultsetpoint, true, UNDEF_COMP_TYPE); + addStop(depth, seconds, -1, prefs.defaultsetpoint, true, UNDEF_COMP_TYPE); updateDiveProfile(); } // cylinderid_in == -1 means same gas as before. // divemode == UNDEF_COMP_TYPE means determine from previous point. -int DivePlannerPointsModel::addStop(int milimeters, int seconds, int cylinderid_in, int ccpoint, bool entered, enum divemode_t divemode) +int DivePlannerPointsModel::addStop(depth_t depth, int seconds, int cylinderid_in, int ccpoint, bool entered, enum divemode_t divemode) { int cylinderid = 0; bool usePrevious = false; @@ -830,16 +831,16 @@ int DivePlannerPointsModel::addStop(int milimeters, int seconds, int cylinderid_ usePrevious = true; int row = divepoints.count(); - if (seconds == 0 && milimeters == 0) { + if (seconds == 0 && depth.mm == 0) { if (row == 0) { - milimeters = M_OR_FT(5, 15); // 5m / 15ft + depth = m_or_ft(5, 15); // 5m / 15ft seconds = 600; // 10 min // Default to the first cylinder cylinderid = 0; } else { /* this is only possible if the user clicked on the 'plus' sign on the DivePoints Table */ const divedatapoint t = divepoints.at(lastEnteredPoint()); - milimeters = t.depth.mm; + depth = t.depth; seconds = t.time + 600; // 10 minutes. cylinderid = t.cylinderid; ccpoint = t.setpoint; @@ -881,7 +882,7 @@ int DivePlannerPointsModel::addStop(int milimeters, int seconds, int cylinderid_ // add the new stop beginInsertRows(QModelIndex(), row, row); - divedatapoint point(seconds, milimeters, cylinderid, ccpoint, entered); + divedatapoint point(seconds, depth.mm, cylinderid, ccpoint, entered); point.divemode = divemode; divepoints.insert(divepoints.begin() + row, point); endInsertRows(); diff --git a/qt-models/diveplannermodel.h b/qt-models/diveplannermodel.h index 1dadfacc7..4358118e8 100644 --- a/qt-models/diveplannermodel.h +++ b/qt-models/diveplannermodel.h @@ -65,7 +65,7 @@ public: struct deco_state final_deco_state; void loadFromDive(dive *d, int dcNr); - void addStop(int millimeters, int seconds); + void addStop(depth_t depth, int seconds); void cylindersChanged(); public slots: @@ -120,7 +120,7 @@ signals: private: explicit DivePlannerPointsModel(QObject *parent = 0); void clear(); - int addStop(int millimeters, int seconds, int cylinderid_in, int ccpoint, bool entered, enum divemode_t); + int addStop(depth_t depth, int seconds, int cylinderid_in, int ccpoint, bool entered, enum divemode_t); void removePoints(const std::vector &rows); void setupStartTime(); void setupCylinders(); diff --git a/tests/testplan.cpp b/tests/testplan.cpp index 8a8b4a7e4..b6029345f 100644 --- a/tests/testplan.cpp +++ b/tests/testplan.cpp @@ -64,11 +64,11 @@ diveplan setupPlan() cyl2->gasmix = oxygen; reset_cylinders(&dive, true); - int droptime = M_OR_FT(79, 260) * 60 / M_OR_FT(23, 75); - plan_add_segment(dp, 0, dive.gas_mod(ean36, po2, M_OR_FT(3, 10)).mm, 1, 0, 1, OC); - plan_add_segment(dp, 0, dive.gas_mod(oxygen, po2, M_OR_FT(3, 10)).mm, 2, 0, 1, OC); - plan_add_segment(dp, droptime, M_OR_FT(79, 260), 0, 0, 1, OC); - plan_add_segment(dp, 30 * 60 - droptime, M_OR_FT(79, 260), 0, 0, 1, OC); + int droptime = m_or_ft(79, 260).mm * 60 / m_or_ft(23, 75).mm; + plan_add_segment(dp, 0, dive.gas_mod(ean36, po2, m_or_ft(3, 10).mm).mm, 1, 0, 1, OC); + plan_add_segment(dp, 0, dive.gas_mod(oxygen, po2, m_or_ft(3, 10).mm).mm, 2, 0, 1, OC); + plan_add_segment(dp, droptime, m_or_ft(79, 260).mm, 0, 0, 1, OC); + plan_add_segment(dp, 30 * 60 - droptime, m_or_ft(79, 260).mm, 0, 0, 1, OC); return dp; } @@ -99,11 +99,11 @@ diveplan setupPlanVpmb45m30mTx() cyl2->gasmix = oxygen; reset_cylinders(&dive, true); - int droptime = M_OR_FT(45, 150) * 60 / M_OR_FT(23, 75); - plan_add_segment(dp, 0, dive.gas_mod(ean50, po2, M_OR_FT(3, 10)).mm, 1, 0, 1, OC); - plan_add_segment(dp, 0, dive.gas_mod(oxygen, po2, M_OR_FT(3, 10)).mm, 2, 0, 1, OC); - plan_add_segment(dp, droptime, M_OR_FT(45, 150), 0, 0, 1, OC); - plan_add_segment(dp, 30 * 60 - droptime, M_OR_FT(45, 150), 0, 0, 1, OC); + int droptime = m_or_ft(45, 150).mm * 60 / m_or_ft(23, 75).mm; + plan_add_segment(dp, 0, dive.gas_mod(ean50, po2, m_or_ft(3, 10).mm).mm, 1, 0, 1, OC); + plan_add_segment(dp, 0, dive.gas_mod(oxygen, po2, m_or_ft(3, 10).mm).mm, 2, 0, 1, OC); + plan_add_segment(dp, droptime, m_or_ft(45, 150).mm, 0, 0, 1, OC); + plan_add_segment(dp, 30 * 60 - droptime, m_or_ft(45, 150).mm, 0, 0, 1, OC); return dp; } @@ -134,11 +134,11 @@ diveplan setupPlanVpmb60m10mTx() cyl2->gasmix = oxygen; reset_cylinders(&dive, true); - int droptime = M_OR_FT(60, 200) * 60 / M_OR_FT(23, 75); - plan_add_segment(dp, 0, dive.gas_mod(tx50_15, po2, M_OR_FT(3, 10)).mm, 1, 0, 1, OC); - plan_add_segment(dp, 0, dive.gas_mod(oxygen, po2, M_OR_FT(3, 10)).mm, 2, 0, 1, OC); - plan_add_segment(dp, droptime, M_OR_FT(60, 200), 0, 0, 1, OC); - plan_add_segment(dp, 10 * 60 - droptime, M_OR_FT(60, 200), 0, 0, 1, OC); + int droptime = m_or_ft(60, 200).mm * 60 / m_or_ft(23, 75).mm; + plan_add_segment(dp, 0, dive.gas_mod(tx50_15, po2, m_or_ft(3, 10).mm).mm, 1, 0, 1, OC); + plan_add_segment(dp, 0, dive.gas_mod(oxygen, po2, m_or_ft(3, 10).mm).mm, 2, 0, 1, OC); + plan_add_segment(dp, droptime, m_or_ft(60, 200).mm, 0, 0, 1, OC); + plan_add_segment(dp, 10 * 60 - droptime, m_or_ft(60, 200).mm, 0, 0, 1, OC); return dp; } @@ -158,9 +158,9 @@ diveplan setupPlanVpmb60m30minAir() dive.surface_pressure = 1_atm; reset_cylinders(&dive, true); - int droptime = M_OR_FT(60, 200) * 60 / M_OR_FT(99, 330); - plan_add_segment(dp, droptime, M_OR_FT(60, 200), 0, 0, 1, OC); - plan_add_segment(dp, 30 * 60 - droptime, M_OR_FT(60, 200), 0, 0, 1, OC); + int droptime = m_or_ft(60, 200).mm * 60 / m_or_ft(99, 330).mm; + plan_add_segment(dp, droptime, m_or_ft(60, 200).mm, 0, 0, 1, OC); + plan_add_segment(dp, 30 * 60 - droptime, m_or_ft(60, 200).mm, 0, 0, 1, OC); return dp; } @@ -187,10 +187,10 @@ diveplan setupPlanVpmb60m30minEan50() dive.surface_pressure = 1_atm; reset_cylinders(&dive, true); - int droptime = M_OR_FT(60, 200) * 60 / M_OR_FT(99, 330); - plan_add_segment(dp, 0, dive.gas_mod(ean50, po2, M_OR_FT(3, 10)).mm, 1, 0, 1, OC); - plan_add_segment(dp, droptime, M_OR_FT(60, 200), 0, 0, 1, OC); - plan_add_segment(dp, 30 * 60 - droptime, M_OR_FT(60, 200), 0, 0, 1, OC); + int droptime = m_or_ft(60, 200).mm * 60 / m_or_ft(99, 330).mm; + plan_add_segment(dp, 0, dive.gas_mod(ean50, po2, m_or_ft(3, 10).mm).mm, 1, 0, 1, OC); + plan_add_segment(dp, droptime, m_or_ft(60, 200).mm, 0, 0, 1, OC); + plan_add_segment(dp, 30 * 60 - droptime, m_or_ft(60, 200).mm, 0, 0, 1, OC); return dp; } @@ -217,10 +217,10 @@ diveplan setupPlanVpmb60m30minTx() dive.surface_pressure = 1_atm; reset_cylinders(&dive, true); - int droptime = M_OR_FT(60, 200) * 60 / M_OR_FT(99, 330); - plan_add_segment(dp, 0, dive.gas_mod(ean50, po2, M_OR_FT(3, 10)).mm, 1, 0, 1, OC); - plan_add_segment(dp, droptime, M_OR_FT(60, 200), 0, 0, 1, OC); - plan_add_segment(dp, 30 * 60 - droptime, M_OR_FT(60, 200), 0, 0, 1, OC); + int droptime = m_or_ft(60, 200).mm * 60 / m_or_ft(99, 330).mm; + plan_add_segment(dp, 0, dive.gas_mod(ean50, po2, m_or_ft(3, 10).mm).mm, 1, 0, 1, OC); + plan_add_segment(dp, droptime, m_or_ft(60, 200).mm, 0, 0, 1, OC); + plan_add_segment(dp, 30 * 60 - droptime, m_or_ft(60, 200).mm, 0, 0, 1, OC); return dp; } @@ -240,11 +240,11 @@ diveplan setupPlanVpmbMultiLevelAir() dive.surface_pressure = 1_atm; reset_cylinders(&dive, true); - int droptime = M_OR_FT(20, 66) * 60 / M_OR_FT(99, 330); - plan_add_segment(dp, droptime, M_OR_FT(20, 66), 0, 0, 1, OC); - plan_add_segment(dp, 10 * 60 - droptime, M_OR_FT(20, 66), 0, 0, 1, OC); - plan_add_segment(dp, 1 * 60, M_OR_FT(60, 200), 0, 0, 1, OC); - plan_add_segment(dp, 29 * 60, M_OR_FT(60, 200), 0, 0, 1, OC); + int droptime = m_or_ft(20, 66).mm * 60 / m_or_ft(99, 330).mm; + plan_add_segment(dp, droptime, m_or_ft(20, 66).mm, 0, 0, 1, OC); + plan_add_segment(dp, 10 * 60 - droptime, m_or_ft(20, 66).mm, 0, 0, 1, OC); + plan_add_segment(dp, 1 * 60, m_or_ft(60, 200).mm, 0, 0, 1, OC); + plan_add_segment(dp, 29 * 60, m_or_ft(60, 200).mm, 0, 0, 1, OC); return dp; } @@ -274,11 +274,11 @@ diveplan setupPlanVpmb100m60min() dive.surface_pressure = 1_atm; reset_cylinders(&dive, true); - int droptime = M_OR_FT(100, 330) * 60 / M_OR_FT(99, 330); - plan_add_segment(dp, 0, dive.gas_mod(ean50, po2, M_OR_FT(3, 10)).mm, 1, 0, 1, OC); - plan_add_segment(dp, 0, dive.gas_mod(oxygen, po2, M_OR_FT(3, 10)).mm, 2, 0, 1, OC); - plan_add_segment(dp, droptime, M_OR_FT(100, 330), 0, 0, 1, OC); - plan_add_segment(dp, 60 * 60 - droptime, M_OR_FT(100, 330), 0, 0, 1, OC); + int droptime = m_or_ft(100, 330).mm * 60 / m_or_ft(99, 330).mm; + plan_add_segment(dp, 0, dive.gas_mod(ean50, po2, m_or_ft(3, 10).mm).mm, 1, 0, 1, OC); + plan_add_segment(dp, 0, dive.gas_mod(oxygen, po2, m_or_ft(3, 10).mm).mm, 2, 0, 1, OC); + plan_add_segment(dp, droptime, m_or_ft(100, 330).mm, 0, 0, 1, OC); + plan_add_segment(dp, 60 * 60 - droptime, m_or_ft(100, 330).mm, 0, 0, 1, OC); return dp; } @@ -308,11 +308,11 @@ diveplan setupPlanVpmb100m10min() dive.surface_pressure = 1_atm; reset_cylinders(&dive, true); - int droptime = M_OR_FT(100, 330) * 60 / M_OR_FT(99, 330); - plan_add_segment(dp, 0, dive.gas_mod(ean50, po2, M_OR_FT(3, 10)).mm, 1, 0, 1, OC); - plan_add_segment(dp, 0, dive.gas_mod(oxygen, po2, M_OR_FT(3, 10)).mm, 2, 0, 1, OC); - plan_add_segment(dp, droptime, M_OR_FT(100, 330), 0, 0, 1, OC); - plan_add_segment(dp, 10 * 60 - droptime, M_OR_FT(100, 330), 0, 0, 1, OC); + int droptime = m_or_ft(100, 330).mm * 60 / m_or_ft(99, 330).mm; + plan_add_segment(dp, 0, dive.gas_mod(ean50, po2, m_or_ft(3, 10).mm).mm, 1, 0, 1, OC); + plan_add_segment(dp, 0, dive.gas_mod(oxygen, po2, m_or_ft(3, 10).mm).mm, 2, 0, 1, OC); + plan_add_segment(dp, droptime, m_or_ft(100, 330).mm, 0, 0, 1, OC); + plan_add_segment(dp, 10 * 60 - droptime, m_or_ft(100, 330).mm, 0, 0, 1, OC); return dp; } @@ -332,9 +332,9 @@ diveplan setupPlanVpmb30m20min() dive.surface_pressure = 1_atm; reset_cylinders(&dive, true); - int droptime = M_OR_FT(30, 100) * 60 / M_OR_FT(18, 60); - plan_add_segment(dp, droptime, M_OR_FT(30, 100), 0, 0, 1, OC); - plan_add_segment(dp, 20 * 60 - droptime, M_OR_FT(30, 100), 0, 0, 1, OC); + int droptime = m_or_ft(30, 100).mm * 60 / m_or_ft(18, 60).mm; + plan_add_segment(dp, droptime, m_or_ft(30, 100).mm, 0, 0, 1, OC); + plan_add_segment(dp, 20 * 60 - droptime, m_or_ft(30, 100).mm, 0, 0, 1, OC); return dp; } @@ -367,14 +367,14 @@ diveplan setupPlanVpmb100mTo70m30min() dive.surface_pressure = 1_atm; reset_cylinders(&dive, true); - int droptime = M_OR_FT(100, 330) * 60 / M_OR_FT(18, 60); - plan_add_segment(dp, 0, dive.gas_mod(tx21_35, po2, M_OR_FT(3, 10)).mm, 1, 0, 1, OC); - plan_add_segment(dp, 0, dive.gas_mod(ean50, po2, M_OR_FT(3, 10)).mm, 2, 0, 1, OC); - plan_add_segment(dp, 0, dive.gas_mod(oxygen, po2, M_OR_FT(3, 10)).mm, 3, 0, 1, OC); - plan_add_segment(dp, droptime, M_OR_FT(100, 330), 0, 0, 1, OC); - plan_add_segment(dp, 20 * 60 - droptime, M_OR_FT(100, 330), 0, 0, 1, OC); - plan_add_segment(dp, 3 * 60, M_OR_FT(70, 230), 0, 0, 1, OC); - plan_add_segment(dp, (30 - 20 - 3) * 60, M_OR_FT(70, 230), 0, 0, 1, OC); + int droptime = m_or_ft(100, 330).mm * 60 / m_or_ft(18, 60).mm; + plan_add_segment(dp, 0, dive.gas_mod(tx21_35, po2, m_or_ft(3, 10).mm).mm, 1, 0, 1, OC); + plan_add_segment(dp, 0, dive.gas_mod(ean50, po2, m_or_ft(3, 10).mm).mm, 2, 0, 1, OC); + plan_add_segment(dp, 0, dive.gas_mod(oxygen, po2, m_or_ft(3, 10).mm).mm, 3, 0, 1, OC); + plan_add_segment(dp, droptime, m_or_ft(100, 330).mm, 0, 0, 1, OC); + plan_add_segment(dp, 20 * 60 - droptime, m_or_ft(100, 330).mm, 0, 0, 1, OC); + plan_add_segment(dp, 3 * 60, m_or_ft(70, 230).mm, 0, 0, 1, OC); + plan_add_segment(dp, (30 - 20 - 3) * 60, m_or_ft(70, 230).mm, 0, 0, 1, OC); return dp; } @@ -431,19 +431,19 @@ diveplan setupPlanCcr() cylinder_t *cyl0 = dive.get_or_create_cylinder(0); cylinder_t *cyl1 = dive.get_or_create_cylinder(1); cyl0->gasmix = diluent; - cyl0->depth = dive.gas_mod(diluent, po2, M_OR_FT(3, 10)); + cyl0->depth = dive.gas_mod(diluent, po2, m_or_ft(3, 10).mm); cyl0->type.size = 3_l; cyl0->type.workingpressure = 200_bar; cyl0->cylinder_use = DILUENT; cyl1->gasmix = ean53; - cyl1->depth = dive.gas_mod(ean53, po2, M_OR_FT(3, 10)); + cyl1->depth = dive.gas_mod(ean53, po2, m_or_ft(3, 10).mm); cyl2->gasmix = tx19_33; - cyl2->depth = dive.gas_mod(tx19_33, po2, M_OR_FT(3, 10)); + cyl2->depth = dive.gas_mod(tx19_33, po2, m_or_ft(3, 10).mm); reset_cylinders(&dive, true); plan_add_segment(dp, 0, cyl1->depth.mm, 1, 0, false, OC); plan_add_segment(dp, 0, cyl2->depth.mm, 2, 0, false, OC); - plan_add_segment(dp, 20 * 60, M_OR_FT(60, 197), 0, 1300, true, CCR); + plan_add_segment(dp, 20 * 60, m_or_ft(60, 197).mm, 0, 1300, true, CCR); return dp; }