Support firmware and serial number for Shearwater Petrel

This should work with the Predator as well.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2014-11-21 13:56:43 -08:00
parent f459155b54
commit 06426af656
4 changed files with 20 additions and 9 deletions

View File

@ -34,7 +34,7 @@ dc_status_t
shearwater_petrel_device_open (dc_device_t **device, dc_context_t *context, const char *name);
dc_status_t
shearwater_petrel_parser_create (dc_parser_t **parser, dc_context_t *context);
shearwater_petrel_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int serial);
#ifdef __cplusplus
}

View File

@ -37,7 +37,7 @@ dc_status_t
shearwater_predator_extract_dives (dc_device_t *device, const unsigned char data[], unsigned int size, dc_dive_callback_t callback, void *userdata);
dc_status_t
shearwater_predator_parser_create (dc_parser_t **parser, dc_context_t *context);
shearwater_predator_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int serial);
#ifdef __cplusplus
}

View File

@ -128,10 +128,10 @@ dc_parser_new (dc_parser_t **out, dc_device_t *device)
rc = atomics_cobalt_parser_create (&parser, context);
break;
case DC_FAMILY_SHEARWATER_PREDATOR:
rc = shearwater_predator_parser_create (&parser, context);
rc = shearwater_predator_parser_create (&parser, context, device->devinfo.serial);
break;
case DC_FAMILY_SHEARWATER_PETREL:
rc = shearwater_petrel_parser_create (&parser, context);
rc = shearwater_petrel_parser_create (&parser, context, device->devinfo.serial);
break;
case DC_FAMILY_DIVERITE_NITEKQ:
rc = diverite_nitekq_parser_create (&parser, context);

View File

@ -67,6 +67,7 @@ struct shearwater_predator_parser_t {
unsigned int ngasmixes;
unsigned int oxygen[NGASMIXES];
unsigned int helium[NGASMIXES];
unsigned int serial;
};
static dc_status_t shearwater_predator_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size);
@ -95,7 +96,7 @@ static const dc_parser_vtable_t shearwater_petrel_parser_vtable = {
dc_status_t
shearwater_common_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int petrel)
shearwater_common_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int serial, unsigned int petrel)
{
if (out == NULL)
return DC_STATUS_INVALIDARGS;
@ -109,6 +110,7 @@ shearwater_common_parser_create (dc_parser_t **out, dc_context_t *context, unsig
// Initialize the base class.
parser->petrel = petrel;
parser->serial = serial;
if (petrel) {
parser_init (&parser->base, context, &shearwater_petrel_parser_vtable);
parser->samplesize = SZ_SAMPLE_PETREL;
@ -134,16 +136,16 @@ shearwater_common_parser_create (dc_parser_t **out, dc_context_t *context, unsig
dc_status_t
shearwater_predator_parser_create (dc_parser_t **out, dc_context_t *context)
shearwater_predator_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int serial)
{
return shearwater_common_parser_create (out, context, 0);
return shearwater_common_parser_create (out, context, serial, 0);
}
dc_status_t
shearwater_petrel_parser_create (dc_parser_t **out, dc_context_t *context)
shearwater_petrel_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int serial)
{
return shearwater_common_parser_create (out, context, 1);
return shearwater_common_parser_create (out, context, serial, 1);
}
@ -341,6 +343,15 @@ shearwater_predator_parser_get_field (dc_parser_t *abstract, dc_field_type_t typ
case 0: // Battery
string->desc = "Battery at end";
snprintf(buf, BUFLEN, "%.1f", data[9] / 10.0);
break;
case 1: // Serial
string->desc = "Serial";
snprintf(buf, BUFLEN, "%08x", parser->serial);
break;
case 2: // FW Version
string->desc = "FW Version";
snprintf(buf, BUFLEN, "%2x", data[19]);
break;
default:
return DC_STATUS_UNSUPPORTED;
}