>From b98d836bd78e67e0471cdb13351f74ebb789eaed Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Thu, 2 Oct 2014 10:47:57 -0700 Subject: [PATCH 6/6] Aeris A300CS: detect the number of cylinders used The A300CS actually tells us how many of the cylinders it considers "in use". Signed-off-by: Dirk Hohndel --- src/oceanic_atom2_parser.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/oceanic_atom2_parser.c b/src/oceanic_atom2_parser.c index 9e3f351aa2fd..baf137439a84 100644 --- a/src/oceanic_atom2_parser.c +++ b/src/oceanic_atom2_parser.c @@ -352,14 +352,33 @@ oceanic_atom2_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, uns *((double *) value) = array_uint16_le (data + footer + 4) / 16.0 * FEET; break; case DC_FIELD_GASMIX_COUNT: - if (parser->model == DATAMASK || parser->model == COMPUMASK) + if (parser->model == DATAMASK || parser->model == COMPUMASK) { *((unsigned int *) value) = 1; - else if (parser->model == VT4 || parser->model == VT41 || parser->model == OCI || parser->model == A300CS) + } else if (parser->model == VT4 || parser->model == VT41 || parser->model == OCI) { *((unsigned int *) value) = 4; - else if (parser->model == TX1) + } else if (parser->model == TX1) { *((unsigned int *) value) = 6; - else + } else if (parser->model == A300CS) { + switch(data[0x39] & 0x1C) { + case 0x04: + case 0x0C: + case 0x14: + case 0x1C: + *((unsigned int *) value) = 1; + break; + case 0x08: + case 0x18: + *((unsigned int *) value) = 2; + break; + case 0x10: + *((unsigned int *) value) = 3; + break; + default: /* 0x00 */ + *((unsigned int *) value) = 4; + } + } else { *((unsigned int *) value) = 3; + } break; case DC_FIELD_GASMIX: if (parser->model == DATAMASK || parser->model == COMPUMASK) { -- 1.8.0.rc0.18.gf84667d