Add functions to calculate best mix

Best mix O2 calculated based on planner Bottom O2 preference
Best mix He calculated based on EAD of 30m (should be made user-configurable)

Signed-off-by: Rick Walsh <rickmwalsh@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Rick Walsh 2016-05-21 19:32:07 +10:00 committed by Dirk Hohndel
parent a6c8d0028e
commit b61b3a8d28
2 changed files with 26 additions and 0 deletions

View file

@ -3639,3 +3639,26 @@ int get_depth_at_time(struct divecomputer *dc, unsigned int time)
}
return depth;
}
//Calculate O2 in best mix
fraction_t best_o2(depth_t depth, struct dive *dive)
{
fraction_t fo2;
fo2.permille = (prefs.bottompo2 * 100 / depth_to_mbar(depth.mm, dive)) * 10; //use integer arithmetic to round down to nearest percent
return fo2;
}
//Calculate He in best mix. O2 is considered narcopic
fraction_t best_He(depth_t depth, struct dive *dive)
{
fraction_t fhe;
int ead = 30000; //this should be user-configurable
int pnarcotic, ambient;
pnarcotic = depth_to_mbar(ead, dive);
ambient = depth_to_mbar(depth.mm, dive);
fhe.permille = (100 - 100 * pnarcotic / ambient) * 10; //use integer arithmetic to round up to nearest percent
if (fhe.permille < 0)
fhe.permille = 0;
return fhe;
}

View file

@ -402,6 +402,9 @@ extern void picture_free(struct picture *picture);
extern int explicit_first_cylinder(struct dive *dive, struct divecomputer *dc);
extern int get_depth_at_time(struct divecomputer *dc, unsigned int time);
extern fraction_t best_o2(depth_t depth, struct dive *dive);
extern fraction_t best_He(depth_t depth, struct dive *dive);
static inline int get_surface_pressure_in_mbar(const struct dive *dive, bool non_null)
{
int mbar = dive->surface_pressure.mbar;