diff --git a/doc/man/dc_parser_new.3 b/doc/man/dc_parser_new.3 index 9f879cd..4bfe451 100644 --- a/doc/man/dc_parser_new.3 +++ b/doc/man/dc_parser_new.3 @@ -39,8 +39,6 @@ .Fa "dc_parser_t **parser" .Fa "dc_context_t *context" .Fa "dc_descriptor_t *descriptor" -.Fa "unsigned int devtime" -.Fa "dc_ticks_t systime" .Fc .Sh DESCRIPTION Creates a parser for a single dive extracted from the dive computer with diff --git a/examples/dctool_parse.c b/examples/dctool_parse.c index b898b5c..5908d62 100644 --- a/examples/dctool_parse.c +++ b/examples/dctool_parse.c @@ -54,12 +54,20 @@ parse (dc_buffer_t *buffer, dc_context_t *context, dc_descriptor_t *descriptor, // Create the parser. message ("Creating the parser.\n"); - rc = dc_parser_new2 (&parser, context, descriptor, devtime, systime); + rc = dc_parser_new2 (&parser, context, descriptor); if (rc != DC_STATUS_SUCCESS) { ERROR ("Error creating the parser."); goto cleanup; } + // Set the clock. + message ("Setting the clock.\n"); + rc = dc_parser_set_clock (parser, devtime, systime); + if (rc != DC_STATUS_SUCCESS && rc != DC_STATUS_UNSUPPORTED) { + ERROR ("Error setting the clock."); + goto cleanup; + } + // Register the data. message ("Registering the data.\n"); rc = dc_parser_set_data (parser, data, size); diff --git a/include/libdivecomputer/parser.h b/include/libdivecomputer/parser.h index fbc67c0..8662499 100644 --- a/include/libdivecomputer/parser.h +++ b/include/libdivecomputer/parser.h @@ -279,7 +279,7 @@ dc_status_t dc_parser_new (dc_parser_t **parser, dc_device_t *device); dc_status_t -dc_parser_new2 (dc_parser_t **parser, dc_context_t *context, dc_descriptor_t *descriptor, unsigned int devtime, dc_ticks_t systime); +dc_parser_new2 (dc_parser_t **parser, dc_context_t *context, dc_descriptor_t *descriptor); dc_family_t dc_parser_get_type (dc_parser_t *parser); diff --git a/src/parser.c b/src/parser.c index 8a74cb1..5138e54 100644 --- a/src/parser.c +++ b/src/parser.c @@ -72,7 +72,7 @@ #define REACTPROWHITE 0x4354 static dc_status_t -dc_parser_new_internal (dc_parser_t **out, dc_context_t *context, dc_family_t family, unsigned int model, unsigned int devtime, dc_ticks_t systime) +dc_parser_new_internal (dc_parser_t **out, dc_context_t *context, dc_family_t family, unsigned int model) { dc_status_t rc = DC_STATUS_SUCCESS; dc_parser_t *parser = NULL; @@ -102,19 +102,19 @@ dc_parser_new_internal (dc_parser_t **out, dc_context_t *context, dc_family_t fa break; case DC_FAMILY_UWATEC_ALADIN: case DC_FAMILY_UWATEC_MEMOMOUSE: - rc = uwatec_memomouse_parser_create (&parser, context, devtime, systime); + rc = uwatec_memomouse_parser_create (&parser, context); break; case DC_FAMILY_UWATEC_SMART: rc = uwatec_smart_parser_create (&parser, context, model); break; case DC_FAMILY_REEFNET_SENSUS: - rc = reefnet_sensus_parser_create (&parser, context, devtime, systime); + rc = reefnet_sensus_parser_create (&parser, context); break; case DC_FAMILY_REEFNET_SENSUSPRO: - rc = reefnet_sensuspro_parser_create (&parser, context, devtime, systime); + rc = reefnet_sensuspro_parser_create (&parser, context); break; case DC_FAMILY_REEFNET_SENSUSULTRA: - rc = reefnet_sensusultra_parser_create (&parser, context, devtime, systime); + rc = reefnet_sensusultra_parser_create (&parser, context); break; case DC_FAMILY_OCEANIC_VTPRO: rc = oceanic_vtpro_parser_create (&parser, context, model); @@ -215,20 +215,36 @@ dc_parser_new_internal (dc_parser_t **out, dc_context_t *context, dc_family_t fa dc_status_t dc_parser_new (dc_parser_t **out, dc_device_t *device) { + dc_status_t status = DC_STATUS_SUCCESS; + dc_parser_t *parser = NULL; + if (device == NULL) return DC_STATUS_INVALIDARGS; - return dc_parser_new_internal (out, device->context, - dc_device_get_type (device), device->devinfo.model, - device->clock.devtime, device->clock.systime); + status = dc_parser_new_internal (&parser, device->context, + dc_device_get_type (device), device->devinfo.model); + if (status != DC_STATUS_SUCCESS) + goto error_exit; + + status = dc_parser_set_clock (parser, device->clock.devtime, device->clock.systime); + if (status != DC_STATUS_SUCCESS && status != DC_STATUS_UNSUPPORTED) + goto error_free; + + *out = parser; + + return DC_STATUS_SUCCESS; + +error_free: + dc_parser_deallocate (parser); +error_exit: + return status; } dc_status_t -dc_parser_new2 (dc_parser_t **out, dc_context_t *context, dc_descriptor_t *descriptor, unsigned int devtime, dc_ticks_t systime) +dc_parser_new2 (dc_parser_t **out, dc_context_t *context, dc_descriptor_t *descriptor) { return dc_parser_new_internal (out, context, - dc_descriptor_get_type (descriptor), dc_descriptor_get_model (descriptor), - devtime, systime); + dc_descriptor_get_type (descriptor), dc_descriptor_get_model (descriptor)); } dc_parser_t * diff --git a/src/reefnet_sensus.h b/src/reefnet_sensus.h index a021b86..2ed5cbe 100644 --- a/src/reefnet_sensus.h +++ b/src/reefnet_sensus.h @@ -36,7 +36,7 @@ dc_status_t reefnet_sensus_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -reefnet_sensus_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int devtime, dc_ticks_t systime); +reefnet_sensus_parser_create (dc_parser_t **parser, dc_context_t *context); #ifdef __cplusplus } diff --git a/src/reefnet_sensus_parser.c b/src/reefnet_sensus_parser.c index b63a11a..9882778 100644 --- a/src/reefnet_sensus_parser.c +++ b/src/reefnet_sensus_parser.c @@ -71,7 +71,7 @@ static const dc_parser_vtable_t reefnet_sensus_parser_vtable = { dc_status_t -reefnet_sensus_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int devtime, dc_ticks_t systime) +reefnet_sensus_parser_create (dc_parser_t **out, dc_context_t *context) { reefnet_sensus_parser_t *parser = NULL; @@ -88,8 +88,8 @@ reefnet_sensus_parser_create (dc_parser_t **out, dc_context_t *context, unsigned // Set the default values. parser->atmospheric = DEF_ATMOSPHERIC; parser->hydrostatic = DEF_DENSITY_SALT * GRAVITY; - parser->devtime = devtime; - parser->systime = systime; + parser->devtime = 0; + parser->systime = 0; parser->cached = 0; parser->divetime = 0; parser->maxdepth = 0; diff --git a/src/reefnet_sensuspro.h b/src/reefnet_sensuspro.h index 9932515..fd21d99 100644 --- a/src/reefnet_sensuspro.h +++ b/src/reefnet_sensuspro.h @@ -36,7 +36,7 @@ dc_status_t reefnet_sensuspro_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -reefnet_sensuspro_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int devtime, dc_ticks_t systime); +reefnet_sensuspro_parser_create (dc_parser_t **parser, dc_context_t *context); #ifdef __cplusplus } diff --git a/src/reefnet_sensuspro_parser.c b/src/reefnet_sensuspro_parser.c index fa4308c..6dc0613 100644 --- a/src/reefnet_sensuspro_parser.c +++ b/src/reefnet_sensuspro_parser.c @@ -70,7 +70,7 @@ static const dc_parser_vtable_t reefnet_sensuspro_parser_vtable = { dc_status_t -reefnet_sensuspro_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int devtime, dc_ticks_t systime) +reefnet_sensuspro_parser_create (dc_parser_t **out, dc_context_t *context) { reefnet_sensuspro_parser_t *parser = NULL; @@ -87,8 +87,8 @@ reefnet_sensuspro_parser_create (dc_parser_t **out, dc_context_t *context, unsig // Set the default values. parser->atmospheric = DEF_ATMOSPHERIC; parser->hydrostatic = DEF_DENSITY_SALT * GRAVITY; - parser->devtime = devtime; - parser->systime = systime; + parser->devtime = 0; + parser->systime = 0; parser->cached = 0; parser->divetime = 0; parser->maxdepth = 0; diff --git a/src/reefnet_sensusultra.h b/src/reefnet_sensusultra.h index af73c8a..054745a 100644 --- a/src/reefnet_sensusultra.h +++ b/src/reefnet_sensusultra.h @@ -36,7 +36,7 @@ dc_status_t reefnet_sensusultra_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -reefnet_sensusultra_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int devtime, dc_ticks_t systime); +reefnet_sensusultra_parser_create (dc_parser_t **parser, dc_context_t *context); #ifdef __cplusplus } diff --git a/src/reefnet_sensusultra_parser.c b/src/reefnet_sensusultra_parser.c index 63530c0..5564019 100644 --- a/src/reefnet_sensusultra_parser.c +++ b/src/reefnet_sensusultra_parser.c @@ -70,7 +70,7 @@ static const dc_parser_vtable_t reefnet_sensusultra_parser_vtable = { dc_status_t -reefnet_sensusultra_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int devtime, dc_ticks_t systime) +reefnet_sensusultra_parser_create (dc_parser_t **out, dc_context_t *context) { reefnet_sensusultra_parser_t *parser = NULL; @@ -87,8 +87,8 @@ reefnet_sensusultra_parser_create (dc_parser_t **out, dc_context_t *context, uns // Set the default values. parser->atmospheric = DEF_ATMOSPHERIC; parser->hydrostatic = DEF_DENSITY_SALT * GRAVITY; - parser->devtime = devtime; - parser->systime = systime; + parser->devtime = 0; + parser->systime = 0; parser->cached = 0; parser->divetime = 0; parser->maxdepth = 0; diff --git a/src/uwatec_memomouse.h b/src/uwatec_memomouse.h index 49ecf9e..34ca2d3 100644 --- a/src/uwatec_memomouse.h +++ b/src/uwatec_memomouse.h @@ -35,7 +35,7 @@ dc_status_t uwatec_memomouse_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -uwatec_memomouse_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int devtime, dc_ticks_t systime); +uwatec_memomouse_parser_create (dc_parser_t **parser, dc_context_t *context); #ifdef __cplusplus } diff --git a/src/uwatec_memomouse_parser.c b/src/uwatec_memomouse_parser.c index 7b28396..1019c6a 100644 --- a/src/uwatec_memomouse_parser.c +++ b/src/uwatec_memomouse_parser.c @@ -59,7 +59,7 @@ static const dc_parser_vtable_t uwatec_memomouse_parser_vtable = { dc_status_t -uwatec_memomouse_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int devtime, dc_ticks_t systime) +uwatec_memomouse_parser_create (dc_parser_t **out, dc_context_t *context) { uwatec_memomouse_parser_t *parser = NULL; @@ -74,8 +74,8 @@ uwatec_memomouse_parser_create (dc_parser_t **out, dc_context_t *context, unsign } // Set the default values. - parser->devtime = devtime; - parser->systime = systime; + parser->devtime = 0; + parser->systime = 0; *out = (dc_parser_t*) parser;