Use a struct for the gasmix data

This commit is contained in:
Jef Driesen 2019-09-23 21:09:07 +02:00
parent 41b24adfcb
commit 03ff5d32f2

View File

@ -77,6 +77,11 @@
typedef struct shearwater_predator_parser_t shearwater_predator_parser_t; typedef struct shearwater_predator_parser_t shearwater_predator_parser_t;
typedef struct shearwater_predator_gasmix_t {
unsigned int oxygen;
unsigned int helium;
} shearwater_predator_gasmix_t;
struct shearwater_predator_parser_t { struct shearwater_predator_parser_t {
dc_parser_t base; dc_parser_t base;
unsigned int model; unsigned int model;
@ -92,8 +97,7 @@ struct shearwater_predator_parser_t {
unsigned int closing[NRECORDS]; unsigned int closing[NRECORDS];
unsigned int final; unsigned int final;
unsigned int ngasmixes; unsigned int ngasmixes;
unsigned int oxygen[NGASMIXES]; shearwater_predator_gasmix_t gasmix[NGASMIXES];
unsigned int helium[NGASMIXES];
unsigned int calibrated; unsigned int calibrated;
double calibration[3]; double calibration[3];
dc_divemode_t mode; dc_divemode_t mode;
@ -135,7 +139,7 @@ shearwater_predator_find_gasmix (shearwater_predator_parser_t *parser, unsigned
{ {
unsigned int i = 0; unsigned int i = 0;
while (i < parser->ngasmixes) { while (i < parser->ngasmixes) {
if (o2 == parser->oxygen[i] && he == parser->helium[i]) if (o2 == parser->gasmix[i].oxygen && he == parser->gasmix[i].helium)
break; break;
i++; i++;
} }
@ -185,8 +189,8 @@ shearwater_common_parser_create (dc_parser_t **out, dc_context_t *context, unsig
parser->final = UNDEFINED; parser->final = UNDEFINED;
parser->ngasmixes = 0; parser->ngasmixes = 0;
for (unsigned int i = 0; i < NGASMIXES; ++i) { for (unsigned int i = 0; i < NGASMIXES; ++i) {
parser->oxygen[i] = 0; parser->gasmix[i].oxygen = 0;
parser->helium[i] = 0; parser->gasmix[i].helium = 0;
} }
parser->calibrated = 0; parser->calibrated = 0;
for (unsigned int i = 0; i < 3; ++i) { for (unsigned int i = 0; i < 3; ++i) {
@ -235,8 +239,8 @@ shearwater_predator_parser_set_data (dc_parser_t *abstract, const unsigned char
parser->final = UNDEFINED; parser->final = UNDEFINED;
parser->ngasmixes = 0; parser->ngasmixes = 0;
for (unsigned int i = 0; i < NGASMIXES; ++i) { for (unsigned int i = 0; i < NGASMIXES; ++i) {
parser->oxygen[i] = 0; parser->gasmix[i].oxygen = 0;
parser->helium[i] = 0; parser->gasmix[i].helium = 0;
} }
parser->calibrated = 0; parser->calibrated = 0;
for (unsigned int i = 0; i < 3; ++i) { for (unsigned int i = 0; i < 3; ++i) {
@ -333,8 +337,7 @@ shearwater_predator_parser_cache (shearwater_predator_parser_t *parser)
// Get the gas mixes. // Get the gas mixes.
unsigned int ngasmixes = 0; unsigned int ngasmixes = 0;
unsigned int oxygen[NGASMIXES] = {0}; shearwater_predator_gasmix_t gasmix[NGASMIXES] = {0};
unsigned int helium[NGASMIXES] = {0};
unsigned int o2_previous = 0, he_previous = 0; unsigned int o2_previous = 0, he_previous = 0;
unsigned int offset = headersize; unsigned int offset = headersize;
@ -363,7 +366,7 @@ shearwater_predator_parser_cache (shearwater_predator_parser_t *parser)
// Find the gasmix in the list. // Find the gasmix in the list.
unsigned int idx = 0; unsigned int idx = 0;
while (idx < ngasmixes) { while (idx < ngasmixes) {
if (o2 == oxygen[idx] && he == helium[idx]) if (o2 == gasmix[idx].oxygen && he == gasmix[idx].helium)
break; break;
idx++; idx++;
} }
@ -374,8 +377,8 @@ shearwater_predator_parser_cache (shearwater_predator_parser_t *parser)
ERROR (abstract->context, "Maximum number of gas mixes reached."); ERROR (abstract->context, "Maximum number of gas mixes reached.");
return DC_STATUS_NOMEMORY; return DC_STATUS_NOMEMORY;
} }
oxygen[idx] = o2; gasmix[idx].oxygen = o2;
helium[idx] = he; gasmix[idx].helium = he;
ngasmixes = idx + 1; ngasmixes = idx + 1;
} }
@ -450,8 +453,7 @@ shearwater_predator_parser_cache (shearwater_predator_parser_t *parser)
parser->footersize = footersize; parser->footersize = footersize;
parser->ngasmixes = ngasmixes; parser->ngasmixes = ngasmixes;
for (unsigned int i = 0; i < ngasmixes; ++i) { for (unsigned int i = 0; i < ngasmixes; ++i) {
parser->oxygen[i] = oxygen[i]; parser->gasmix[i] = gasmix[i];
parser->helium[i] = helium[i];
} }
parser->mode = mode; parser->mode = mode;
parser->units = data[parser->opening[0] + 8]; parser->units = data[parser->opening[0] + 8];
@ -497,8 +499,8 @@ shearwater_predator_parser_get_field (dc_parser_t *abstract, dc_field_type_t typ
*((unsigned int *) value) = parser->ngasmixes; *((unsigned int *) value) = parser->ngasmixes;
break; break;
case DC_FIELD_GASMIX: case DC_FIELD_GASMIX:
gasmix->oxygen = parser->oxygen[flags] / 100.0; gasmix->oxygen = parser->gasmix[flags].oxygen / 100.0;
gasmix->helium = parser->helium[flags] / 100.0; gasmix->helium = parser->gasmix[flags].helium / 100.0;
gasmix->nitrogen = 1.0 - gasmix->oxygen - gasmix->helium; gasmix->nitrogen = 1.0 - gasmix->oxygen - gasmix->helium;
break; break;
case DC_FIELD_SALINITY: case DC_FIELD_SALINITY: