mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	core: turn M_OR_FT macro into a function
No point in this being a macro. Make it return a depth_t - it was unclear that this returns a depth in mm. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
		
							parent
							
								
									0e77dd9a68
								
							
						
					
					
						commit
						bd2f7e72f1
					
				
					 11 changed files with 105 additions and 97 deletions
				
			
		|  | @ -96,8 +96,8 @@ std::unique_ptr<dive> dive_table::default_dive() | |||
| 	auto d = std::make_unique<dive>(); | ||||
| 	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()); | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -660,9 +660,9 @@ std::vector<decostop> 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<decostop> 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); | ||||
|  |  | |||
|  | @ -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; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -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); | ||||
| } | ||||
|  |  | |||
|  | @ -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<int32_t>(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<pressure_t> | ||||
| { | ||||
| 	int32_t mbar = 0; // pressure up to 2000 bar
 | ||||
|  |  | |||
|  | @ -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<int>(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()) | ||||
|  |  | |||
|  | @ -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) { | ||||
|  |  | |||
|  | @ -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(); | ||||
|  |  | |||
|  | @ -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<int> &rows); | ||||
| 	void setupStartTime(); | ||||
| 	void setupCylinders(); | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue