Remove the clock parameters from the constructor

Only a few dive computer backends (reefnet, aladin and memomouse)
require the clock parameters for parsing the date/time. Therefore,
those parameters are removed from the constructor function and
applications should set the clock parameters with the
dc_parser_set_clock() function instead.
This commit is contained in:
Jef Driesen 2021-04-23 21:27:12 +02:00
parent 0a4f37770f
commit 679db0bae6
12 changed files with 53 additions and 31 deletions

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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 *

View File

@ -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
}

View File

@ -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;

View File

@ -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
}

View File

@ -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;

View File

@ -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
}

View File

@ -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;

View File

@ -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
}

View File

@ -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;