From 16fb1c18695acbd3ee442cbba1f7ab44a236a975 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Tue, 30 Sep 2014 12:35:04 -0700 Subject: [PATCH] Aeris A300CS: add support for NDL / deco data Encoded in every sample. The depth is in multiples of 10 feet which gives somewhat odd metric stop depth - but rounding to full meters would take care of that. Signed-off-by: Dirk Hohndel --- src/oceanic_atom2_parser.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/oceanic_atom2_parser.c b/src/oceanic_atom2_parser.c index 8afa6ea..3abbae0 100644 --- a/src/oceanic_atom2_parser.c +++ b/src/oceanic_atom2_parser.c @@ -634,6 +634,22 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ sample.depth = depth / 16.0 * FEET; if (callback) callback (DC_SAMPLE_DEPTH, sample, userdata); + // NDL / Deco + // bits 6..4 of byte 15 encode deco state & depth + // bytes 6 & 7 encode minutes of NDL / deco + if (parser->model == A300CS) { + unsigned int deco = (data[offset + 15] & 0x70) >> 4; + if (deco) { + sample.deco.type = DC_DECO_DECOSTOP; + sample.deco.depth = deco * 10 * FEET; + } else { + sample.deco.type = DC_DECO_NDL; + sample.deco.depth = 0.0; + } + sample.deco.time = array_uint16_le(data + offset + 6) & 0x03FF; + if (callback) callback (DC_SAMPLE_DECO, sample, userdata); + } + complete = 1; }