diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/dive.c | 8 | ||||
-rw-r--r-- | core/dive.h | 2 | ||||
-rw-r--r-- | core/pref.h | 1 | ||||
-rw-r--r-- | core/settings/qPrefDivePlanner.cpp | 2 | ||||
-rw-r--r-- | core/settings/qPrefDivePlanner.h | 5 | ||||
-rw-r--r-- | core/subsurfacestartup.c | 1 |
6 files changed, 16 insertions, 3 deletions
diff --git a/core/dive.c b/core/dive.c index d845d8077..9788e64c7 100644 --- a/core/dive.c +++ b/core/dive.c @@ -3761,13 +3761,17 @@ fraction_t best_o2(depth_t depth, const struct dive *dive) } //Calculate He in best mix. O2 is considered narcopic -fraction_t best_he(depth_t depth, const struct dive *dive) +fraction_t best_he(depth_t depth, const struct dive *dive, bool o2narcotic, fraction_t fo2) { fraction_t fhe; int pnarcotic, ambient; pnarcotic = depth_to_mbar(prefs.bestmixend.mm, 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 (o2narcotic) { + fhe.permille = (100 - 100 * pnarcotic / ambient) * 10; //use integer arithmetic to round up to nearest percent + } else { + fhe.permille = 1000 - fo2.permille - N2_IN_AIR * pnarcotic / ambient; + } if (fhe.permille < 0) fhe.permille = 0; return fhe; diff --git a/core/dive.h b/core/dive.h index 87aa3e5fd..6d1bd450d 100644 --- a/core/dive.h +++ b/core/dive.h @@ -226,7 +226,7 @@ extern int explicit_first_cylinder(const struct dive *dive, const struct divecom extern int get_depth_at_time(const struct divecomputer *dc, unsigned int time); extern fraction_t best_o2(depth_t depth, const struct dive *dive); -extern fraction_t best_he(depth_t depth, const struct dive *dive); +extern fraction_t best_he(depth_t depth, const struct dive *dive, bool o2narcotic, fraction_t fo2); extern int get_surface_pressure_in_mbar(const struct dive *dive, bool non_null); extern int calculate_depth_to_mbar(int depth, pressure_t surface_pressure, int salinity); diff --git a/core/pref.h b/core/pref.h index 50e13a117..f7af35415 100644 --- a/core/pref.h +++ b/core/pref.h @@ -160,6 +160,7 @@ struct preferences { bool display_variations; bool doo2breaks; bool dobailout; + bool o2narcotic; bool drop_stone_mode; bool last_stop; // At 6m? int min_switch_duration; // seconds diff --git a/core/settings/qPrefDivePlanner.cpp b/core/settings/qPrefDivePlanner.cpp index f33b390cf..e094bfed0 100644 --- a/core/settings/qPrefDivePlanner.cpp +++ b/core/settings/qPrefDivePlanner.cpp @@ -35,6 +35,7 @@ void qPrefDivePlanner::loadSync(bool doSync) disk_display_variations(doSync); disk_doo2breaks(doSync); disk_dobailout(doSync); + disk_o2narcotic(doSync); disk_drop_stone_mode(doSync); disk_last_stop(doSync); disk_min_switch_duration(doSync); @@ -76,6 +77,7 @@ HANDLE_PREFERENCE_BOOL(DivePlanner, "display_variations", display_variations); HANDLE_PREFERENCE_BOOL(DivePlanner, "doo2breaks", doo2breaks); HANDLE_PREFERENCE_BOOL(DivePlanner, "dobailbout", dobailout); +HANDLE_PREFERENCE_BOOL(DivePlanner, "o2narcotic", o2narcotic); HANDLE_PREFERENCE_BOOL(DivePlanner, "drop_stone_mode", drop_stone_mode); diff --git a/core/settings/qPrefDivePlanner.h b/core/settings/qPrefDivePlanner.h index 09d8fabae..7a75fa4ce 100644 --- a/core/settings/qPrefDivePlanner.h +++ b/core/settings/qPrefDivePlanner.h @@ -23,6 +23,7 @@ class qPrefDivePlanner : public QObject { Q_PROPERTY(bool display_variations READ display_variations WRITE set_display_variations NOTIFY display_variationsChanged); Q_PROPERTY(bool doo2breaks READ doo2breaks WRITE set_doo2breaks NOTIFY doo2breaksChanged); Q_PROPERTY(bool dobailout READ dobailout WRITE set_dobailout NOTIFY dobailoutChanged); + Q_PROPERTY(bool o2narcotic READ o2narcotic WRITE set_o2narcotic NOTIFY o2narcoticChanged) Q_PROPERTY(bool drop_stone_mode READ drop_stone_mode WRITE set_drop_stone_mode NOTIFY drop_stone_modeChanged); Q_PROPERTY(bool last_stop READ last_stop WRITE set_last_stop NOTIFY last_stopChanged); Q_PROPERTY(int min_switch_duration READ min_switch_duration WRITE set_min_switch_duration NOTIFY min_switch_durationChanged); @@ -60,6 +61,7 @@ public: static bool display_variations() { return prefs.display_variations; } static bool doo2breaks() { return prefs.doo2breaks; } static bool dobailout() { return prefs.dobailout; } + static bool o2narcotic() { return prefs.o2narcotic; } static bool drop_stone_mode() { return prefs.drop_stone_mode; } static bool last_stop() { return prefs.last_stop; } static int min_switch_duration() { return prefs.min_switch_duration; } @@ -89,6 +91,7 @@ public slots: static void set_display_variations(bool value); static void set_doo2breaks(bool value); static void set_dobailout(bool value); + static void set_o2narcotic(bool value); static void set_drop_stone_mode(bool value); static void set_last_stop(bool value); static void set_min_switch_duration(int value); @@ -118,6 +121,7 @@ signals: void display_variationsChanged(bool value); void doo2breaksChanged(bool value); void dobailoutChanged(bool value); + void o2narcoticChanged(bool value); void drop_stone_modeChanged(bool value); void last_stopChanged(bool value); void min_switch_durationChanged(int value); @@ -148,6 +152,7 @@ private: static void disk_display_variations(bool doSync); static void disk_doo2breaks(bool doSync); static void disk_dobailout(bool doSync); + static void disk_o2narcotic(bool doSync); static void disk_drop_stone_mode(bool doSync); static void disk_last_stop(bool doSync); static void disk_min_switch_duration(bool doSync); diff --git a/core/subsurfacestartup.c b/core/subsurfacestartup.c index 8b7c14179..920285b14 100644 --- a/core/subsurfacestartup.c +++ b/core/subsurfacestartup.c @@ -73,6 +73,7 @@ struct preferences default_prefs = { .display_duration = true, .display_transitions = true, .display_variations = false, + .o2narcotic = true, .safetystop = true, .bottomsac = 20000, .decosac = 17000, |