From f5f855d4284a84d5249462c46a9c4f6107a12b09 Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Thu, 7 Mar 2024 19:29:53 +0100 Subject: [PATCH] Discard pressure samples from invalid tanks Keeping the one based tank number interally allows to easily discard the pressure samples from invalid tanks. This avoid returning a huge tank number (e.g. 0xFFFFFFFF) when the internal tank number happens to be zero. --- src/oceanic_atom2_parser.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/oceanic_atom2_parser.c b/src/oceanic_atom2_parser.c index 9b50fd6..6de04f2 100644 --- a/src/oceanic_atom2_parser.c +++ b/src/oceanic_atom2_parser.c @@ -645,7 +645,7 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ } // Initial tank pressure. - unsigned int tank = 0; + unsigned int tank = 1; unsigned int pressure = 0; if (have_pressure) { unsigned int idx = 2; @@ -700,17 +700,17 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ if (sampletype == 0xAA) { if (parser->model == DATAMASK || parser->model == COMPUMASK) { // Tank pressure (1 psi) and number - tank = 0; + tank = 1; pressure = (((data[offset + 7] << 8) + data[offset + 6]) & 0x0FFF); } else if (parser->model == A300CS || parser->model == VTX || parser->model == I750TC || parser->model == SAGE || parser->model == BEACON) { // Tank pressure (1 psi) and number (one based index) - tank = (data[offset + 1] & 0x03) - 1; + tank = data[offset + 1] & 0x03; pressure = ((data[offset + 7] << 8) + data[offset + 6]) & 0x0FFF; } else { // Tank pressure (2 psi) and number (one based index) - tank = (data[offset + 1] & 0x03) - 1; + tank = data[offset + 1] & 0x03; if (parser->model == ATOM2 || parser->model == EPICA || parser->model == EPICB) pressure = (((data[offset + 3] << 8) + data[offset + 4]) & 0x0FFF) * 2; else @@ -852,9 +852,11 @@ oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_ pressure = array_uint16_le (data + offset + 4); else pressure -= data[offset + 1]; - sample.pressure.tank = tank; - sample.pressure.value = pressure * PSI / BAR; - if (callback) callback (DC_SAMPLE_PRESSURE, &sample, userdata); + if (tank) { + sample.pressure.tank = tank - 1; + sample.pressure.value = pressure * PSI / BAR; + if (callback) callback (DC_SAMPLE_PRESSURE, &sample, userdata); + } } // Depth (1/16 ft)