From c647a27c27530980e9f9ae49e56ecbbeaea19642 Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Sat, 13 Jun 2015 12:16:25 +0200 Subject: [PATCH] Implement tank pressure samples for the Nemo Air. The tank pressure is stored every third sample as a delta value. --- src/mares_nemo_parser.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/mares_nemo_parser.c b/src/mares_nemo_parser.c index 1663aaa..b997ae4 100644 --- a/src/mares_nemo_parser.c +++ b/src/mares_nemo_parser.c @@ -362,6 +362,13 @@ mares_nemo_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t c unsigned int size = abstract->size; if (parser->mode != parser->freedive) { + // Initial tank pressure. + unsigned int pressure = 0; + if (parser->extra == 12) { + const unsigned char *p = data + 2 + parser->sample_count * parser->sample_size; + pressure = array_uint16_le(p + parser->header + 4); + } + unsigned int time = 0; for (unsigned int i = 0; i < parser->sample_count; ++i) { dc_sample_value_t sample = {0}; @@ -414,6 +421,14 @@ mares_nemo_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t c sample.pressure.tank = 0; sample.pressure.value = data[idx + 2]; if (callback) callback (DC_SAMPLE_PRESSURE, sample, userdata); + } else if (parser->sample_size == 5) { + unsigned int type = (time / 20) % 3; + if (type == 0) { + pressure -= data[idx + 2] * 100; + sample.pressure.tank = 0; + sample.pressure.value = pressure / 100.0; + if (callback) callback (DC_SAMPLE_PRESSURE, sample, userdata); + } } } } else {