diff --git a/include/libdivecomputer/shearwater_petrel.h b/include/libdivecomputer/shearwater_petrel.h index 5092127..18a4bce 100644 --- a/include/libdivecomputer/shearwater_petrel.h +++ b/include/libdivecomputer/shearwater_petrel.h @@ -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 } diff --git a/include/libdivecomputer/shearwater_predator.h b/include/libdivecomputer/shearwater_predator.h index 40c7ae2..28163e2 100644 --- a/include/libdivecomputer/shearwater_predator.h +++ b/include/libdivecomputer/shearwater_predator.h @@ -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 } diff --git a/src/parser.c b/src/parser.c index 16f626a..6471e3f 100644 --- a/src/parser.c +++ b/src/parser.c @@ -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); diff --git a/src/shearwater_predator_parser.c b/src/shearwater_predator_parser.c index d011a90..2436cb3 100644 --- a/src/shearwater_predator_parser.c +++ b/src/shearwater_predator_parser.c @@ -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; }