Implement the tank and temperature fields.
This commit is contained in:
parent
5a61ffcc2f
commit
7278a70afe
@ -208,6 +208,17 @@ suunto_eon_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsign
|
||||
return rc;
|
||||
|
||||
dc_gasmix_t *gasmix = (dc_gasmix_t *) value;
|
||||
dc_tank_t *tank = (dc_tank_t *) value;
|
||||
|
||||
unsigned int oxygen = 21;
|
||||
unsigned int beginpressure = 0;
|
||||
unsigned int endpressure = 0;
|
||||
if (parser->nitrox) {
|
||||
oxygen = data[0x05];
|
||||
} else {
|
||||
beginpressure = data[5] * 2;
|
||||
endpressure = data[parser->marker + 2] * 2;
|
||||
}
|
||||
|
||||
if (value) {
|
||||
switch (type) {
|
||||
@ -222,12 +233,29 @@ suunto_eon_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsign
|
||||
break;
|
||||
case DC_FIELD_GASMIX:
|
||||
gasmix->helium = 0.0;
|
||||
if (parser->nitrox)
|
||||
gasmix->oxygen = data[0x05] / 100.0;
|
||||
else
|
||||
gasmix->oxygen = 0.21;
|
||||
gasmix->oxygen = oxygen / 100.0;
|
||||
gasmix->nitrogen = 1.0 - gasmix->oxygen - gasmix->helium;
|
||||
break;
|
||||
case DC_FIELD_TANK_COUNT:
|
||||
if (beginpressure == 0 && endpressure == 0)
|
||||
*((unsigned int *) value) = 0;
|
||||
else
|
||||
*((unsigned int *) value) = 1;
|
||||
break;
|
||||
case DC_FIELD_TANK:
|
||||
tank->type = DC_TANKVOLUME_NONE;
|
||||
tank->volume = 0.0;
|
||||
tank->workpressure = 0.0;
|
||||
tank->gasmix = 0;
|
||||
tank->beginpressure = beginpressure;
|
||||
tank->endpressure = endpressure;
|
||||
break;
|
||||
case DC_FIELD_TEMPERATURE_MINIMUM:
|
||||
if (parser->spyder)
|
||||
*((double *) value) = (signed char) data[parser->marker + 1];
|
||||
else
|
||||
*((double *) value) = data[parser->marker + 1] - 40;
|
||||
break;
|
||||
default:
|
||||
return DC_STATUS_UNSUPPORTED;
|
||||
}
|
||||
|
||||
@ -237,6 +237,7 @@ suunto_vyper_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsi
|
||||
unsigned int size = abstract->size;
|
||||
|
||||
dc_gasmix_t *gas = (dc_gasmix_t *) value;
|
||||
dc_tank_t *tank = (dc_tank_t *) value;
|
||||
|
||||
// Cache the data.
|
||||
dc_status_t rc = suunto_vyper_parser_cache (parser);
|
||||
@ -244,6 +245,8 @@ suunto_vyper_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsi
|
||||
return rc;
|
||||
|
||||
unsigned int gauge = data[4] & 0x40;
|
||||
unsigned int beginpressure = data[5] * 2;
|
||||
unsigned int endpressure = data[parser->marker + 3] * 2;
|
||||
|
||||
if (value) {
|
||||
switch (type) {
|
||||
@ -264,6 +267,23 @@ suunto_vyper_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsi
|
||||
gas->oxygen = parser->oxygen[flags] / 100.0;
|
||||
gas->nitrogen = 1.0 - gas->oxygen - gas->helium;
|
||||
break;
|
||||
case DC_FIELD_TANK_COUNT:
|
||||
if (beginpressure == 0 && endpressure == 0)
|
||||
*((unsigned int *) value) = 0;
|
||||
else
|
||||
*((unsigned int *) value) = 1;
|
||||
break;
|
||||
case DC_FIELD_TANK:
|
||||
tank->type = DC_TANKVOLUME_NONE;
|
||||
tank->volume = 0.0;
|
||||
tank->workpressure = 0.0;
|
||||
if (gauge)
|
||||
tank->gasmix = DC_GASMIX_UNKNOWN;
|
||||
else
|
||||
tank->gasmix = 0;
|
||||
tank->beginpressure = beginpressure;
|
||||
tank->endpressure = endpressure;
|
||||
break;
|
||||
case DC_FIELD_TEMPERATURE_SURFACE:
|
||||
*((double *) value) = (signed char) data[8];
|
||||
break;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user