Cache the dive mode internally.
This simply moves the code to the get the dive mode from its own function into the existing caching function.
This commit is contained in:
parent
aa2f670224
commit
f37b4b06db
@ -68,6 +68,7 @@ struct shearwater_predator_parser_t {
|
||||
unsigned int oxygen[NGASMIXES];
|
||||
unsigned int helium[NGASMIXES];
|
||||
unsigned int serial;
|
||||
dc_divemode_t mode;
|
||||
};
|
||||
|
||||
static dc_status_t shearwater_predator_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size);
|
||||
@ -153,6 +154,7 @@ shearwater_common_parser_create (dc_parser_t **out, dc_context_t *context, unsig
|
||||
parser->oxygen[i] = 0;
|
||||
parser->helium[i] = 0;
|
||||
}
|
||||
parser->mode = DC_DIVEMODE_OC;
|
||||
|
||||
*out = (dc_parser_t *) parser;
|
||||
|
||||
@ -188,6 +190,7 @@ shearwater_predator_parser_set_data (dc_parser_t *abstract, const unsigned char
|
||||
parser->oxygen[i] = 0;
|
||||
parser->helium[i] = 0;
|
||||
}
|
||||
parser->mode = DC_DIVEMODE_OC;
|
||||
|
||||
return DC_STATUS_SUCCESS;
|
||||
}
|
||||
@ -240,6 +243,9 @@ shearwater_predator_parser_cache (shearwater_predator_parser_t *parser)
|
||||
}
|
||||
}
|
||||
|
||||
// Default dive mode.
|
||||
dc_divemode_t mode = DC_DIVEMODE_OC;
|
||||
|
||||
// Get the gas mixes.
|
||||
unsigned int ngasmixes = 0;
|
||||
unsigned int oxygen[NGASMIXES] = {0};
|
||||
@ -254,28 +260,9 @@ shearwater_predator_parser_cache (shearwater_predator_parser_t *parser)
|
||||
ngasmixes++;
|
||||
}
|
||||
|
||||
// Cache the data for later use.
|
||||
parser->headersize = headersize;
|
||||
parser->footersize = footersize;
|
||||
parser->ngasmixes = ngasmixes;
|
||||
for (unsigned int i = 0; i < ngasmixes; ++i) {
|
||||
parser->oxygen[i] = oxygen[i];
|
||||
parser->helium[i] = helium[i];
|
||||
}
|
||||
parser->cached = 1;
|
||||
|
||||
return DC_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static dc_divemode_t
|
||||
shearwater_predator_parser_get_divemode (shearwater_predator_parser_t *parser)
|
||||
{
|
||||
dc_parser_t *abstract = (dc_parser_t *) parser;
|
||||
const unsigned char *data = abstract->data;
|
||||
unsigned int size = abstract->size;
|
||||
|
||||
unsigned int offset = parser->headersize;
|
||||
unsigned int length = size - parser->footersize;
|
||||
unsigned int offset = headersize;
|
||||
unsigned int length = size - footersize;
|
||||
while (offset < length) {
|
||||
// Ignore empty samples.
|
||||
if (array_isequal (data + offset, parser->samplesize, 0x00)) {
|
||||
@ -286,13 +273,24 @@ shearwater_predator_parser_get_divemode (shearwater_predator_parser_t *parser)
|
||||
// Status flags.
|
||||
unsigned int status = data[offset + 11];
|
||||
if ((status & OC) == 0) {
|
||||
return DC_DIVEMODE_CC;
|
||||
mode = DC_DIVEMODE_CC;
|
||||
}
|
||||
|
||||
offset += parser->samplesize;
|
||||
}
|
||||
|
||||
return DC_DIVEMODE_OC;
|
||||
// Cache the data for later use.
|
||||
parser->headersize = headersize;
|
||||
parser->footersize = footersize;
|
||||
parser->ngasmixes = ngasmixes;
|
||||
for (unsigned int i = 0; i < ngasmixes; ++i) {
|
||||
parser->oxygen[i] = oxygen[i];
|
||||
parser->helium[i] = helium[i];
|
||||
}
|
||||
parser->mode = mode;
|
||||
parser->cached = 1;
|
||||
|
||||
return DC_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static dc_status_t
|
||||
@ -351,7 +349,7 @@ shearwater_predator_parser_get_field (dc_parser_t *abstract, dc_field_type_t typ
|
||||
*((double *) value) = array_uint16_be (data + 47) / 1000.0;
|
||||
break;
|
||||
case DC_FIELD_DIVEMODE:
|
||||
*((dc_divemode_t *) value) = shearwater_predator_parser_get_divemode (parser);
|
||||
*((dc_divemode_t *) value) = parser->mode;
|
||||
break;
|
||||
case DC_FIELD_STRING:
|
||||
switch(flags) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user