aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/deco.h
diff options
context:
space:
mode:
authorGravatar Tim Segers <tsegers@pm.me>2022-09-29 19:12:32 +0200
committerGravatar Tim Segers <tsegers@pm.me>2022-09-30 11:35:37 +0200
commitb5dfedd376c2ac89f7c3d14a6f5db0b5ca1d994d (patch)
treedebac6d237969a0d2fa09fb5b0544714d902760c /deco.h
parent98d9fc18c782d8fe78e4cd45d807da10ffd0e15d (diff)
downloadopendeco-b5dfedd376c2ac89f7c3d14a6f5db0b5ca1d994d.tar.gz
Initial commitv0.1
Diffstat (limited to 'deco.h')
-rw-r--r--deco.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/deco.h b/deco.h
new file mode 100644
index 0000000..5860591
--- /dev/null
+++ b/deco.h
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: MIT-0 */
+
+#ifndef DECO_H
+#define DECO_H
+
+#include <stddef.h>
+
+#define max(X, Y) (((X) > (Y)) ? (X) : (Y))
+#define min(X, Y) (((X) < (Y)) ? (X) : (Y))
+#define len(X) (sizeof(X) / sizeof((X)[0]))
+
+#define P_WV_BUHL 0.0627 /* Buhlmann value, Rq = 1.0, least conservative */
+#define P_WV_NAVY 0.0567 /* US. Navy value, Rq = 0.9 */
+#define P_WV_SCHR 0.0493 /* Schreiner value, Rq = 0.8, most conservative */
+#define P_WV P_WV_BUHL
+
+#define SURFACE_PRESSURE 1.01325
+#define MOD_AUTO 0
+
+enum ALGO {
+ ZHL_16A = 0,
+ ZHL_16B = 1,
+ ZHL_16C = 2,
+};
+
+typedef struct decostate_t {
+ double pn2[16];
+ double phe[16];
+ unsigned char gflo;
+ unsigned char gfhi;
+ double firststop;
+ double max_depth;
+ double ceil_multiple;
+} decostate_t;
+
+typedef struct gas_t {
+ unsigned char o2;
+ unsigned char he;
+ unsigned char n2;
+ double mod;
+} gas_t;
+
+double bar_to_msw(const double bar);
+double msw_to_bar(const double msw);
+double abs_depth(const double gd);
+double gauge_depth(const double ad);
+
+gas_t gas_new(const unsigned char o2, const unsigned char he, double mod);
+int gas_equal(const gas_t *g1, const gas_t *g2);
+unsigned char gas_o2(const gas_t *gas);
+unsigned char gas_he(const gas_t *gas);
+unsigned char gas_n2(const gas_t *gas);
+double gas_mod(const gas_t *gas);
+
+double add_segment_ascdec(decostate_t *ds, const double dstart, const double dend, const double time,
+ const gas_t *gas);
+double add_segment_const(decostate_t *ds, const double depth, const double time, const gas_t *gas);
+double get_gf(const decostate_t *ds, const double depth);
+double ceiling(const decostate_t *ds, double gf);
+double round_ceiling(const decostate_t *ds, const double c);
+
+void init_decostate(decostate_t *ds, const unsigned char gflo, const unsigned char gfhi, const double ceil_multiple);
+
+double ppO2(double depth, const gas_t *gas);
+double end(double depth, const gas_t *gas);
+double ead(double depth, const gas_t *gas);
+
+#endif /* end of include guard: DECO_H */