From 1a040134538b7733f3088ea34f101cfedecc2c64 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Sun, 1 Jun 2014 12:07:29 -0700 Subject: Encapsulate the horrid gas encoding in gas change events We should never pass permille values around as integers. And we shouldn't have to decode the stupid value in more than one place. This doesn't tackle all the places where we access O2 and He "too early" and should instead keep passing around a gaxmix. But it's a first step. Signed-off-by: Dirk Hohndel --- dive.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'dive.c') diff --git a/dive.c b/dive.c index 0d8f48754..6545fecab 100644 --- a/dive.c +++ b/dive.c @@ -6,6 +6,7 @@ #include #include "gettext.h" #include "dive.h" +#include "libdivecomputer.h" struct tag_entry *g_tag_list = NULL; @@ -76,6 +77,19 @@ void remove_event(struct event* event) } } +/* this returns a pointer to static variable - so use it right away after calling */ +struct gasmix *get_gasmix_from_event(struct event *ev) +{ + static struct gasmix g; + g.o2.permille = g.he.permille = 0; + if (ev && (ev->type == SAMPLE_EVENT_GASCHANGE || ev->type == SAMPLE_EVENT_GASCHANGE2)) { + g.o2.permille = 10 * ev->value & 0xffff; + if (ev->type == SAMPLE_EVENT_GASCHANGE2) + g.he.permille = 10 * (ev->value >> 16); + } + return &g; +} + int get_pressure_units(int mb, const char **units) { int pressure; -- cgit v1.2.3-70-g09d2