diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am index 63f9e85..4ea44de 100644 --- a/doc/man/Makefile.am +++ b/doc/man/Makefile.am @@ -32,7 +32,6 @@ MANPAGES = \ dc_parser_get_field.3 \ dc_parser_new.3 \ dc_parser_samples_foreach.3 \ - dc_parser_set_data.3 \ dc_bluetooth_open.3 \ dc_bluetooth_iterator_new.3 \ dc_bluetooth_device_get_address.3 \ diff --git a/doc/man/dc_device_foreach.3 b/doc/man/dc_device_foreach.3 index a349a72..86782f8 100644 --- a/doc/man/dc_device_foreach.3 +++ b/doc/man/dc_device_foreach.3 @@ -53,7 +53,7 @@ with Each dive invokes .Fa callback with the dive data, which should be parsed with -.Xr dc_parser_set_data 3 , +.Xr dc_parser_new 3 , and the binary fingerprint of the dive. The fingerprint can be used to record the newest dive and stop processing (on subsequent invocations) when the same dive fingerprint is @@ -72,7 +72,7 @@ If returns zero, this will not be reflected in the return value (usually .Dv DC_STATUS_SUCCESS ) . .Sh SEE ALSO -.Xr dc_parser_set_data 3 +.Xr dc_parser_new 3 .Sh AUTHORS The .Lb libdivecomputer diff --git a/doc/man/dc_parser_get_datetime.3 b/doc/man/dc_parser_get_datetime.3 index ba1f365..0b7b707 100644 --- a/doc/man/dc_parser_get_datetime.3 +++ b/doc/man/dc_parser_get_datetime.3 @@ -37,7 +37,7 @@ Extract the date and time of a dive, .Fa parser , previously initialised with -.Xr dc_parser_set_data 3 . +.Xr dc_parser_new 3 . This returns the broken-down time-stamp of the dive in the local time of the dive. .Pp @@ -57,7 +57,7 @@ messages on further failure. .Sh SEE ALSO .Xr dc_datetime_gmtime 3 , .Xr dc_datetime_localtime 3 , -.Xr dc_parser_set_data 3 +.Xr dc_parser_new 3 .Sh AUTHORS The .Lb libdivecomputer diff --git a/doc/man/dc_parser_get_field.3 b/doc/man/dc_parser_get_field.3 index a4c33f2..0f6455d 100644 --- a/doc/man/dc_parser_get_field.3 +++ b/doc/man/dc_parser_get_field.3 @@ -39,7 +39,7 @@ Extract a field from a dive, .Fa parser , previously initialised with -.Xr dc_parser_set_data 3 . +.Xr dc_parser_new 3 . The .Fa value field type depends upon the @@ -187,7 +187,7 @@ if the field was retrieved, if the field is not supported by the device, or other error messages on further failure. .Sh SEE ALSO -.Xr dc_parser_set_data 3 +.Xr dc_parser_new 3 .Sh AUTHORS The .Lb libdivecomputer diff --git a/doc/man/dc_parser_new.3 b/doc/man/dc_parser_new.3 index 4bfe451..e5340f0 100644 --- a/doc/man/dc_parser_new.3 +++ b/doc/man/dc_parser_new.3 @@ -53,10 +53,6 @@ parameter; and .Nm dc_parser_new2 , which is given device values (model, etc.) directly. .Pp -After filling in the -.Fa parser -parameter, one usually sets parser data with -.Xr dc_parser_set_data 3 . The pointer must later be freed with .Xr dc_parser_destroy 3 . .Sh RETURN VALUES diff --git a/doc/man/dc_parser_samples_foreach.3 b/doc/man/dc_parser_samples_foreach.3 index d741a43..69a637f 100644 --- a/doc/man/dc_parser_samples_foreach.3 +++ b/doc/man/dc_parser_samples_foreach.3 @@ -42,7 +42,7 @@ .Fc .Sh DESCRIPTION Extract the samples taken during a dive as previously initialised with -.Xr dc_parser_set_data 3 . +.Xr dc_parser_new 3 . Each sample is passed to .Fa callback with the @@ -184,7 +184,7 @@ Returns .Dv DC_STATUS_OK on success and another code on failure. .Sh SEE ALSO -.Xr dc_parser_set_data 3 +.Xr dc_parser_new 3 .Sh AUTHORS The .Lb libdivecomputer diff --git a/doc/man/dc_parser_set_data.3 b/doc/man/dc_parser_set_data.3 deleted file mode 100644 index 39af43b..0000000 --- a/doc/man/dc_parser_set_data.3 +++ /dev/null @@ -1,65 +0,0 @@ -.\" -.\" libdivecomputer -.\" -.\" Copyright (C) 2017 Kristaps Dzonsons -.\" -.\" This library is free software; you can redistribute it and/or -.\" modify it under the terms of the GNU Lesser General Public -.\" License as published by the Free Software Foundation; either -.\" version 2.1 of the License, or (at your option) any later version. -.\" -.\" This library is distributed in the hope that it will be useful, -.\" but WITHOUT ANY WARRANTY; without even the implied warranty of -.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -.\" Lesser General Public License for more details. -.\" -.\" You should have received a copy of the GNU Lesser General Public -.\" License along with this library; if not, write to the Free Software -.\" Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -.\" MA 02110-1301 USA -.\" -.Dd January 5, 2017 -.Dt DC_PARSER_SET_DATA 3 -.Os -.Sh NAME -.Nm dc_parser_set_data -.Nd assigns parse data to a dive parser -.Sh LIBRARY -.Lb libdivecomputer -.Sh SYNOPSIS -.In libdivecomputer/parser.h -.Ft dc_status_t -.Fo dc_parser_set_data -.Fa "dc_parser_t *parser" -.Fa "const unsigned char *data" -.Fa "unsigned int size" -.Fc -.Sh DESCRIPTION -Assigns the binary sequence -.Fa data -of length -.Fa size -bytes to -.Fa parser , -which was created with -.Xr dc_parser_new 3 . -How the data is parsed depends upon the values provided to -.Xr dc_parser_new 3 . -The data usually comes from the callback assigned to -.Xr dc_device_foreach 3 . -.Sh RETURN VALUES -Returns -.Dv DC_STATUS_OK -on success and another code on failure. -.Sh SEE ALSO -.Xr dc_device_foreach 3 , -.Xr dc_parser_new 3 -.Sh AUTHORS -The -.Lb libdivecomputer -library was written by -.An Jef Driesen , -.Mt jef@libdivecomputer.org . -The manpages were written by -.An Kristaps Dzonsons , -.Mt kristaps@bsd.lv . diff --git a/doc/man/libdivecomputer.3 b/doc/man/libdivecomputer.3 index 4e1f601..cbe22eb 100644 --- a/doc/man/libdivecomputer.3 +++ b/doc/man/libdivecomputer.3 @@ -82,9 +82,7 @@ Iterate over all dives with .Xr dc_device_foreach 3 . .It For each iterated dive, create a new parser with -.Xr dc_parser_new 3 -and set the parsed data with -.Xr dc_parser_set_data 3 . +.Xr dc_parser_new 3 . .It Get attributes of the parsed dive with .Xr dc_parser_get_field 3 . diff --git a/examples/dctool_download.c b/examples/dctool_download.c index 04aedcf..29742e0 100644 --- a/examples/dctool_download.c +++ b/examples/dctool_download.c @@ -80,20 +80,12 @@ dive_cb (const unsigned char *data, unsigned int size, const unsigned char *fing // Create the parser. message ("Creating the parser.\n"); - rc = dc_parser_new (&parser, divedata->device); + rc = dc_parser_new (&parser, divedata->device, data, size); if (rc != DC_STATUS_SUCCESS) { ERROR ("Error creating the parser."); goto cleanup; } - // Register the data. - message ("Registering the data.\n"); - rc = dc_parser_set_data (parser, data, size); - if (rc != DC_STATUS_SUCCESS) { - ERROR ("Error registering the data."); - goto cleanup; - } - // Parse the dive data. message ("Parsing the dive data.\n"); rc = dctool_output_write (divedata->output, parser, data, size, fingerprint, fsize); diff --git a/examples/dctool_parse.c b/examples/dctool_parse.c index 5908d62..4ecf30e 100644 --- a/examples/dctool_parse.c +++ b/examples/dctool_parse.c @@ -54,7 +54,7 @@ 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); + rc = dc_parser_new2 (&parser, context, descriptor, data, size); if (rc != DC_STATUS_SUCCESS) { ERROR ("Error creating the parser."); goto cleanup; @@ -68,14 +68,6 @@ parse (dc_buffer_t *buffer, dc_context_t *context, dc_descriptor_t *descriptor, goto cleanup; } - // Register the data. - message ("Registering the data.\n"); - rc = dc_parser_set_data (parser, data, size); - if (rc != DC_STATUS_SUCCESS) { - ERROR ("Error registering the data."); - goto cleanup; - } - // Parse the dive data. message ("Parsing the dive data.\n"); rc = dctool_output_write (output, parser, data, size, NULL, 0); diff --git a/include/libdivecomputer/parser.h b/include/libdivecomputer/parser.h index 8662499..ee69e42 100644 --- a/include/libdivecomputer/parser.h +++ b/include/libdivecomputer/parser.h @@ -276,10 +276,10 @@ typedef struct dc_parser_t dc_parser_t; typedef void (*dc_sample_callback_t) (dc_sample_type_t type, const dc_sample_value_t *value, void *userdata); dc_status_t -dc_parser_new (dc_parser_t **parser, dc_device_t *device); +dc_parser_new (dc_parser_t **parser, dc_device_t *device, const unsigned char data[], size_t size); dc_status_t -dc_parser_new2 (dc_parser_t **parser, dc_context_t *context, dc_descriptor_t *descriptor); +dc_parser_new2 (dc_parser_t **parser, dc_context_t *context, dc_descriptor_t *descriptor, const unsigned char data[], size_t size); dc_family_t dc_parser_get_type (dc_parser_t *parser); @@ -293,9 +293,6 @@ dc_parser_set_atmospheric (dc_parser_t *parser, double atmospheric); dc_status_t dc_parser_set_density (dc_parser_t *parser, double density); -dc_status_t -dc_parser_set_data (dc_parser_t *parser, const unsigned char *data, unsigned int size); - dc_status_t dc_parser_get_datetime (dc_parser_t *parser, dc_datetime_t *datetime); diff --git a/src/atomics_cobalt.h b/src/atomics_cobalt.h index 09f0226..8c70641 100644 --- a/src/atomics_cobalt.h +++ b/src/atomics_cobalt.h @@ -36,7 +36,7 @@ dc_status_t atomics_cobalt_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -atomics_cobalt_parser_create (dc_parser_t **parser, dc_context_t *context); +atomics_cobalt_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/atomics_cobalt_parser.c b/src/atomics_cobalt_parser.c index f559b7b..7dc407a 100644 --- a/src/atomics_cobalt_parser.c +++ b/src/atomics_cobalt_parser.c @@ -43,7 +43,6 @@ struct atomics_cobalt_parser_t { double hydrostatic; }; -static dc_status_t atomics_cobalt_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t atomics_cobalt_parser_set_density (dc_parser_t *abstract, double density); static dc_status_t atomics_cobalt_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t atomics_cobalt_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); @@ -52,7 +51,6 @@ static dc_status_t atomics_cobalt_parser_samples_foreach (dc_parser_t *abstract, static const dc_parser_vtable_t atomics_cobalt_parser_vtable = { sizeof(atomics_cobalt_parser_t), DC_FAMILY_ATOMICS_COBALT, - atomics_cobalt_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ atomics_cobalt_parser_set_density, /* set_density */ @@ -64,7 +62,7 @@ static const dc_parser_vtable_t atomics_cobalt_parser_vtable = { dc_status_t -atomics_cobalt_parser_create (dc_parser_t **out, dc_context_t *context) +atomics_cobalt_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { atomics_cobalt_parser_t *parser = NULL; @@ -72,7 +70,7 @@ atomics_cobalt_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (atomics_cobalt_parser_t *) dc_parser_allocate (context, &atomics_cobalt_parser_vtable); + parser = (atomics_cobalt_parser_t *) dc_parser_allocate (context, &atomics_cobalt_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -87,13 +85,6 @@ atomics_cobalt_parser_create (dc_parser_t **out, dc_context_t *context) } -static dc_status_t -atomics_cobalt_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - return DC_STATUS_SUCCESS; -} - - static dc_status_t atomics_cobalt_parser_set_density (dc_parser_t *abstract, double density) { diff --git a/src/citizen_aqualand.h b/src/citizen_aqualand.h index ac47cb6..bc23311 100644 --- a/src/citizen_aqualand.h +++ b/src/citizen_aqualand.h @@ -35,7 +35,7 @@ dc_status_t citizen_aqualand_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -citizen_aqualand_parser_create (dc_parser_t **parser, dc_context_t *context); +citizen_aqualand_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/citizen_aqualand_parser.c b/src/citizen_aqualand_parser.c index 32816b4..ff1ea9e 100644 --- a/src/citizen_aqualand_parser.c +++ b/src/citizen_aqualand_parser.c @@ -36,7 +36,6 @@ typedef struct citizen_aqualand_parser_t { dc_parser_t base; } citizen_aqualand_parser_t; -static dc_status_t citizen_aqualand_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t citizen_aqualand_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t citizen_aqualand_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t citizen_aqualand_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -44,7 +43,6 @@ static dc_status_t citizen_aqualand_parser_samples_foreach (dc_parser_t *abstrac static const dc_parser_vtable_t citizen_aqualand_parser_vtable = { sizeof(citizen_aqualand_parser_t), DC_FAMILY_CITIZEN_AQUALAND, - citizen_aqualand_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -56,7 +54,7 @@ static const dc_parser_vtable_t citizen_aqualand_parser_vtable = { dc_status_t -citizen_aqualand_parser_create (dc_parser_t **out, dc_context_t *context) +citizen_aqualand_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { citizen_aqualand_parser_t *parser = NULL; @@ -64,7 +62,7 @@ citizen_aqualand_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (citizen_aqualand_parser_t *) dc_parser_allocate (context, &citizen_aqualand_parser_vtable); + parser = (citizen_aqualand_parser_t *) dc_parser_allocate (context, &citizen_aqualand_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -76,13 +74,6 @@ citizen_aqualand_parser_create (dc_parser_t **out, dc_context_t *context) } -static dc_status_t -citizen_aqualand_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - return DC_STATUS_SUCCESS; -} - - static dc_status_t citizen_aqualand_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/cochran_commander.h b/src/cochran_commander.h index 84a521e..1a36676 100644 --- a/src/cochran_commander.h +++ b/src/cochran_commander.h @@ -35,7 +35,7 @@ dc_status_t cochran_commander_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -cochran_commander_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +cochran_commander_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/cochran_commander_parser.c b/src/cochran_commander_parser.c index 5d2d9b7..aeaf25c 100644 --- a/src/cochran_commander_parser.c +++ b/src/cochran_commander_parser.c @@ -99,7 +99,6 @@ typedef struct cochran_commander_parser_t { unsigned int nevents; } cochran_commander_parser_t ; -static dc_status_t cochran_commander_parser_set_data (dc_parser_t *parser, const unsigned char *data, unsigned int size); static dc_status_t cochran_commander_parser_get_datetime (dc_parser_t *parser, dc_datetime_t *datetime); static dc_status_t cochran_commander_parser_get_field (dc_parser_t *parser, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t cochran_commander_parser_samples_foreach (dc_parser_t *parser, dc_sample_callback_t callback, void *userdata); @@ -107,7 +106,6 @@ static dc_status_t cochran_commander_parser_samples_foreach (dc_parser_t *parser static const dc_parser_vtable_t cochran_commander_parser_vtable = { sizeof(cochran_commander_parser_t), DC_FAMILY_COCHRAN_COMMANDER, - cochran_commander_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -352,7 +350,7 @@ cochran_commander_backparse(cochran_commander_parser_t *parser, const unsigned c dc_status_t -cochran_commander_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +cochran_commander_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { cochran_commander_parser_t *parser = NULL; dc_status_t status = DC_STATUS_SUCCESS; @@ -361,7 +359,7 @@ cochran_commander_parser_create (dc_parser_t **out, dc_context_t *context, unsig return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (cochran_commander_parser_t *) dc_parser_allocate (context, &cochran_commander_parser_vtable); + parser = (cochran_commander_parser_t *) dc_parser_allocate (context, &cochran_commander_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -407,13 +405,6 @@ error_free: } -static dc_status_t -cochran_commander_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - return DC_STATUS_SUCCESS; -} - - static dc_status_t cochran_commander_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/cressi_edy.h b/src/cressi_edy.h index 7aa5a34..238e5df 100644 --- a/src/cressi_edy.h +++ b/src/cressi_edy.h @@ -35,7 +35,7 @@ dc_status_t cressi_edy_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -cressi_edy_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +cressi_edy_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/cressi_edy_parser.c b/src/cressi_edy_parser.c index 182fd11..6d46f63 100644 --- a/src/cressi_edy_parser.c +++ b/src/cressi_edy_parser.c @@ -38,7 +38,6 @@ struct cressi_edy_parser_t { unsigned int model; }; -static dc_status_t cressi_edy_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t cressi_edy_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t cressi_edy_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t cressi_edy_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -46,7 +45,6 @@ static dc_status_t cressi_edy_parser_samples_foreach (dc_parser_t *abstract, dc_ static const dc_parser_vtable_t cressi_edy_parser_vtable = { sizeof(cressi_edy_parser_t), DC_FAMILY_CRESSI_EDY, - cressi_edy_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -73,7 +71,7 @@ cressi_edy_parser_count_gasmixes (const unsigned char *data) } dc_status_t -cressi_edy_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +cressi_edy_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { cressi_edy_parser_t *parser = NULL; @@ -81,7 +79,7 @@ cressi_edy_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (cressi_edy_parser_t *) dc_parser_allocate (context, &cressi_edy_parser_vtable); + parser = (cressi_edy_parser_t *) dc_parser_allocate (context, &cressi_edy_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -96,13 +94,6 @@ cressi_edy_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int } -static dc_status_t -cressi_edy_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - return DC_STATUS_SUCCESS; -} - - static dc_status_t cressi_edy_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/cressi_goa.h b/src/cressi_goa.h index 0a92512..63283a0 100644 --- a/src/cressi_goa.h +++ b/src/cressi_goa.h @@ -35,7 +35,7 @@ dc_status_t cressi_goa_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -cressi_goa_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +cressi_goa_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/cressi_goa_parser.c b/src/cressi_goa_parser.c index d5a9a34..2898662 100644 --- a/src/cressi_goa_parser.c +++ b/src/cressi_goa_parser.c @@ -62,7 +62,6 @@ typedef struct cressi_goa_layout_t { unsigned int temperature; } cressi_goa_layout_t; -static dc_status_t cressi_goa_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t cressi_goa_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t cressi_goa_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t cressi_goa_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -70,7 +69,6 @@ static dc_status_t cressi_goa_parser_samples_foreach (dc_parser_t *abstract, dc_ static const dc_parser_vtable_t cressi_goa_parser_vtable = { sizeof(cressi_goa_parser_t), DC_FAMILY_CRESSI_GOA, - cressi_goa_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -128,7 +126,7 @@ static const cressi_goa_layout_t layouts[] = { }; dc_status_t -cressi_goa_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +cressi_goa_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { cressi_goa_parser_t *parser = NULL; @@ -136,7 +134,7 @@ cressi_goa_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (cressi_goa_parser_t *) dc_parser_allocate (context, &cressi_goa_parser_vtable); + parser = (cressi_goa_parser_t *) dc_parser_allocate (context, &cressi_goa_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -149,12 +147,6 @@ cressi_goa_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int return DC_STATUS_SUCCESS; } -static dc_status_t -cressi_goa_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - return DC_STATUS_SUCCESS; -} - static dc_status_t cressi_goa_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/cressi_leonardo.h b/src/cressi_leonardo.h index 982bb01..2efc4d8 100644 --- a/src/cressi_leonardo.h +++ b/src/cressi_leonardo.h @@ -35,7 +35,7 @@ dc_status_t cressi_leonardo_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -cressi_leonardo_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +cressi_leonardo_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/cressi_leonardo_parser.c b/src/cressi_leonardo_parser.c index 3a6824e..df382c5 100644 --- a/src/cressi_leonardo_parser.c +++ b/src/cressi_leonardo_parser.c @@ -39,7 +39,6 @@ struct cressi_leonardo_parser_t { unsigned int model; }; -static dc_status_t cressi_leonardo_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t cressi_leonardo_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t cressi_leonardo_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t cressi_leonardo_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -47,7 +46,6 @@ static dc_status_t cressi_leonardo_parser_samples_foreach (dc_parser_t *abstract static const dc_parser_vtable_t cressi_leonardo_parser_vtable = { sizeof(cressi_leonardo_parser_t), DC_FAMILY_CRESSI_LEONARDO, - cressi_leonardo_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -59,7 +57,7 @@ static const dc_parser_vtable_t cressi_leonardo_parser_vtable = { dc_status_t -cressi_leonardo_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +cressi_leonardo_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { cressi_leonardo_parser_t *parser = NULL; @@ -67,7 +65,7 @@ cressi_leonardo_parser_create (dc_parser_t **out, dc_context_t *context, unsigne return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (cressi_leonardo_parser_t *) dc_parser_allocate (context, &cressi_leonardo_parser_vtable); + parser = (cressi_leonardo_parser_t *) dc_parser_allocate (context, &cressi_leonardo_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -81,13 +79,6 @@ cressi_leonardo_parser_create (dc_parser_t **out, dc_context_t *context, unsigne } -static dc_status_t -cressi_leonardo_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - return DC_STATUS_SUCCESS; -} - - static dc_status_t cressi_leonardo_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/deepblu_cosmiq.h b/src/deepblu_cosmiq.h index 3587812..0d0c29a 100644 --- a/src/deepblu_cosmiq.h +++ b/src/deepblu_cosmiq.h @@ -36,7 +36,7 @@ dc_status_t deepblu_cosmiq_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -deepblu_cosmiq_parser_create (dc_parser_t **parser, dc_context_t *context); +deepblu_cosmiq_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/deepblu_cosmiq_parser.c b/src/deepblu_cosmiq_parser.c index d744698..95b5ae7 100644 --- a/src/deepblu_cosmiq_parser.c +++ b/src/deepblu_cosmiq_parser.c @@ -41,7 +41,6 @@ typedef struct deepblu_cosmiq_parser_t { double hydrostatic; } deepblu_cosmiq_parser_t; -static dc_status_t deepblu_cosmiq_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t deepblu_cosmiq_parser_set_density (dc_parser_t *abstract, double density); static dc_status_t deepblu_cosmiq_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t deepblu_cosmiq_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); @@ -50,7 +49,6 @@ static dc_status_t deepblu_cosmiq_parser_samples_foreach (dc_parser_t *abstract, static const dc_parser_vtable_t deepblu_cosmiq_parser_vtable = { sizeof(deepblu_cosmiq_parser_t), DC_FAMILY_DEEPBLU_COSMIQ, - deepblu_cosmiq_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ deepblu_cosmiq_parser_set_density, /* set_density */ @@ -61,7 +59,7 @@ static const dc_parser_vtable_t deepblu_cosmiq_parser_vtable = { }; dc_status_t -deepblu_cosmiq_parser_create (dc_parser_t **out, dc_context_t *context) +deepblu_cosmiq_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { deepblu_cosmiq_parser_t *parser = NULL; @@ -69,7 +67,7 @@ deepblu_cosmiq_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (deepblu_cosmiq_parser_t *) dc_parser_allocate (context, &deepblu_cosmiq_parser_vtable); + parser = (deepblu_cosmiq_parser_t *) dc_parser_allocate (context, &deepblu_cosmiq_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -83,12 +81,6 @@ deepblu_cosmiq_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_SUCCESS; } -static dc_status_t -deepblu_cosmiq_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - return DC_STATUS_SUCCESS; -} - static dc_status_t deepblu_cosmiq_parser_set_density (dc_parser_t *abstract, double density) { diff --git a/src/deepsix_excursion.h b/src/deepsix_excursion.h index 42ecffc..839511f 100644 --- a/src/deepsix_excursion.h +++ b/src/deepsix_excursion.h @@ -35,7 +35,7 @@ dc_status_t deepsix_excursion_device_open (dc_device_t **out, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -deepsix_excursion_parser_create (dc_parser_t **parser, dc_context_t *context); +deepsix_excursion_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/deepsix_excursion_parser.c b/src/deepsix_excursion_parser.c index 919fb6a..52d06af 100644 --- a/src/deepsix_excursion_parser.c +++ b/src/deepsix_excursion_parser.c @@ -112,7 +112,6 @@ typedef struct deepsix_excursion_parser_t { deepsix_excursion_gasmix_t gasmix[MAX_GASMIXES]; } deepsix_excursion_parser_t; -static dc_status_t deepsix_excursion_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t deepsix_excursion_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t deepsix_excursion_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t deepsix_excursion_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -122,7 +121,6 @@ static dc_status_t deepsix_excursion_parser_samples_foreach_v1 (dc_parser_t *abs static const dc_parser_vtable_t deepsix_parser_vtable = { sizeof(deepsix_excursion_parser_t), DC_FAMILY_DEEPSIX_EXCURSION, - deepsix_excursion_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -185,7 +183,7 @@ deepsix_excursion_find_gasmix(deepsix_excursion_parser_t *parser, unsigned int o } dc_status_t -deepsix_excursion_parser_create (dc_parser_t **out, dc_context_t *context) +deepsix_excursion_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { deepsix_excursion_parser_t *parser = NULL; @@ -193,7 +191,7 @@ deepsix_excursion_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (deepsix_excursion_parser_t *) dc_parser_allocate (context, &deepsix_parser_vtable); + parser = (deepsix_excursion_parser_t *) dc_parser_allocate (context, &deepsix_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -213,23 +211,6 @@ deepsix_excursion_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_SUCCESS; } -static dc_status_t -deepsix_excursion_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - deepsix_excursion_parser_t *parser = (deepsix_excursion_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->ngasmixes = 0; - for (unsigned int i = 0; i < MAX_GASMIXES; ++i) { - parser->gasmix[i].id = 0; - parser->gasmix[i].oxygen = 0; - parser->gasmix[i].helium = 0; - } - - return DC_STATUS_SUCCESS; -} - static dc_status_t deepsix_excursion_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/diverite_nitekq.h b/src/diverite_nitekq.h index e016cab..9bbf728 100644 --- a/src/diverite_nitekq.h +++ b/src/diverite_nitekq.h @@ -35,7 +35,7 @@ dc_status_t diverite_nitekq_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -diverite_nitekq_parser_create (dc_parser_t **parser, dc_context_t *context); +diverite_nitekq_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/diverite_nitekq_parser.c b/src/diverite_nitekq_parser.c index bb13446..d9f6dcc 100644 --- a/src/diverite_nitekq_parser.c +++ b/src/diverite_nitekq_parser.c @@ -49,7 +49,6 @@ struct diverite_nitekq_parser_t { double maxdepth; }; -static dc_status_t diverite_nitekq_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t diverite_nitekq_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t diverite_nitekq_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t diverite_nitekq_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -57,7 +56,6 @@ static dc_status_t diverite_nitekq_parser_samples_foreach (dc_parser_t *abstract static const dc_parser_vtable_t diverite_nitekq_parser_vtable = { sizeof(diverite_nitekq_parser_t), DC_FAMILY_DIVERITE_NITEKQ, - diverite_nitekq_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -69,7 +67,7 @@ static const dc_parser_vtable_t diverite_nitekq_parser_vtable = { dc_status_t -diverite_nitekq_parser_create (dc_parser_t **out, dc_context_t *context) +diverite_nitekq_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { diverite_nitekq_parser_t *parser = NULL; @@ -77,7 +75,7 @@ diverite_nitekq_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (diverite_nitekq_parser_t *) dc_parser_allocate (context, &diverite_nitekq_parser_vtable); + parser = (diverite_nitekq_parser_t *) dc_parser_allocate (context, &diverite_nitekq_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -101,13 +99,6 @@ diverite_nitekq_parser_create (dc_parser_t **out, dc_context_t *context) } -static dc_status_t -diverite_nitekq_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - return DC_STATUS_SUCCESS; -} - - static dc_status_t diverite_nitekq_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/divesoft_freedom.h b/src/divesoft_freedom.h index db04edb..bca87b7 100644 --- a/src/divesoft_freedom.h +++ b/src/divesoft_freedom.h @@ -35,7 +35,7 @@ dc_status_t divesoft_freedom_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -divesoft_freedom_parser_create (dc_parser_t **parser, dc_context_t *context); +divesoft_freedom_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/divesoft_freedom_parser.c b/src/divesoft_freedom_parser.c index 51a229a..49c0f0f 100644 --- a/src/divesoft_freedom_parser.c +++ b/src/divesoft_freedom_parser.c @@ -254,7 +254,6 @@ typedef struct divesoft_freedom_parser_t { unsigned int calibrated; } divesoft_freedom_parser_t; -static dc_status_t divesoft_freedom_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t divesoft_freedom_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t divesoft_freedom_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t divesoft_freedom_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -262,7 +261,6 @@ static dc_status_t divesoft_freedom_parser_samples_foreach (dc_parser_t *abstrac static const dc_parser_vtable_t divesoft_freedom_parser_vtable = { sizeof(divesoft_freedom_parser_t), DC_FAMILY_DIVESOFT_FREEDOM, - divesoft_freedom_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -643,7 +641,7 @@ divesoft_freedom_cache (divesoft_freedom_parser_t *parser) } dc_status_t -divesoft_freedom_parser_create (dc_parser_t **out, dc_context_t *context) +divesoft_freedom_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { divesoft_freedom_parser_t *parser = NULL; @@ -651,7 +649,7 @@ divesoft_freedom_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (divesoft_freedom_parser_t *) dc_parser_allocate (context, &divesoft_freedom_parser_vtable); + parser = (divesoft_freedom_parser_t *) dc_parser_allocate (context, &divesoft_freedom_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -698,50 +696,6 @@ divesoft_freedom_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_SUCCESS; } -static dc_status_t -divesoft_freedom_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - divesoft_freedom_parser_t *parser = (divesoft_freedom_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->version = 0; - parser->headersize = 0; - parser->divetime = 0; - parser->divemode = 0; - parser->temperature_min = 0; - parser->maxdepth = 0; - parser->atmospheric = 0; - parser->avgdepth = 0; - parser->ngasmixes = 0; - for (unsigned int i = 0; i < NGASMIXES; ++i) { - parser->gasmix[i].oxygen = 0; - parser->gasmix[i].helium = 0; - parser->gasmix[i].type = 0; - parser->gasmix[i].id = 0; - } - parser->diluent = UNDEFINED; - parser->ntanks = 0; - for (unsigned int i = 0; i < NTANKS; ++i) { - parser->tank[i].volume = 0; - parser->tank[i].workpressure = 0; - parser->tank[i].beginpressure = 0; - parser->tank[i].endpressure = 0; - parser->tank[i].transmitter = 0; - parser->tank[i].active = 0; - } - parser->vpm = 0; - parser->gf_lo = 0; - parser->gf_hi = 0; - parser->seawater = 0; - for (unsigned int i = 0; i < NSENSORS; ++i) { - parser->calibration[i] = 0; - } - parser->calibrated = 0; - - return DC_STATUS_SUCCESS; -} - static dc_status_t divesoft_freedom_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/divesystem_idive.h b/src/divesystem_idive.h index 1da80a0..91e1ea9 100644 --- a/src/divesystem_idive.h +++ b/src/divesystem_idive.h @@ -36,7 +36,7 @@ dc_status_t divesystem_idive_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream, unsigned int model); dc_status_t -divesystem_idive_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +divesystem_idive_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/divesystem_idive_parser.c b/src/divesystem_idive_parser.c index 28326a6..c7f5fb4 100644 --- a/src/divesystem_idive_parser.c +++ b/src/divesystem_idive_parser.c @@ -89,7 +89,6 @@ struct divesystem_idive_parser_t { unsigned int gf_high; }; -static dc_status_t divesystem_idive_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t divesystem_idive_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t divesystem_idive_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t divesystem_idive_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -97,7 +96,6 @@ static dc_status_t divesystem_idive_parser_samples_foreach (dc_parser_t *abstrac static const dc_parser_vtable_t divesystem_idive_parser_vtable = { sizeof(divesystem_idive_parser_t), DC_FAMILY_DIVESYSTEM_IDIVE, - divesystem_idive_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -109,7 +107,7 @@ static const dc_parser_vtable_t divesystem_idive_parser_vtable = { dc_status_t -divesystem_idive_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +divesystem_idive_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { divesystem_idive_parser_t *parser = NULL; @@ -117,7 +115,7 @@ divesystem_idive_parser_create (dc_parser_t **out, dc_context_t *context, unsign return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (divesystem_idive_parser_t *) dc_parser_allocate (context, &divesystem_idive_parser_vtable); + parser = (divesystem_idive_parser_t *) dc_parser_allocate (context, &divesystem_idive_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -156,35 +154,6 @@ divesystem_idive_parser_create (dc_parser_t **out, dc_context_t *context, unsign } -static dc_status_t -divesystem_idive_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - divesystem_idive_parser_t *parser = (divesystem_idive_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->divemode = INVALID; - parser->divetime = 0; - parser->maxdepth = 0; - parser->ngasmixes = 0; - parser->ntanks = 0; - for (unsigned int i = 0; i < NGASMIXES; ++i) { - parser->gasmix[i].oxygen = 0; - parser->gasmix[i].helium = 0; - } - for (unsigned int i = 0; i < NTANKS; ++i) { - parser->tank[i].id = 0; - parser->tank[i].beginpressure = 0; - parser->tank[i].endpressure = 0; - } - parser->algorithm = INVALID; - parser->gf_low = INVALID; - parser->gf_high = INVALID; - - return DC_STATUS_SUCCESS; -} - - static dc_status_t divesystem_idive_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/hw_ostc.h b/src/hw_ostc.h index fc45182..55abda9 100644 --- a/src/hw_ostc.h +++ b/src/hw_ostc.h @@ -36,7 +36,7 @@ dc_status_t hw_ostc_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -hw_ostc_parser_create (dc_parser_t **parser, dc_context_t *context); +hw_ostc_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/hw_ostc3.h b/src/hw_ostc3.h index 92cf277..0fddc96 100644 --- a/src/hw_ostc3.h +++ b/src/hw_ostc3.h @@ -36,7 +36,7 @@ dc_status_t hw_ostc3_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -hw_ostc3_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model); +hw_ostc3_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/hw_ostc_parser.c b/src/hw_ostc_parser.c index ca19458..288d28a 100644 --- a/src/hw_ostc_parser.c +++ b/src/hw_ostc_parser.c @@ -132,7 +132,6 @@ typedef struct hw_ostc_parser_t { hw_ostc_gasmix_t gasmix[NGASMIXES]; } hw_ostc_parser_t; -static dc_status_t hw_ostc_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t hw_ostc_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t hw_ostc_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t hw_ostc_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -140,7 +139,6 @@ static dc_status_t hw_ostc_parser_samples_foreach (dc_parser_t *abstract, dc_sam static const dc_parser_vtable_t hw_ostc_parser_vtable = { sizeof(hw_ostc_parser_t), DC_FAMILY_HW_OSTC, - hw_ostc_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -367,7 +365,7 @@ hw_ostc_parser_cache (hw_ostc_parser_t *parser) } static dc_status_t -hw_ostc_parser_create_internal (dc_parser_t **out, dc_context_t *context, unsigned int hwos, unsigned int model) +hw_ostc_parser_create_internal (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int hwos, unsigned int model) { hw_ostc_parser_t *parser = NULL; @@ -375,7 +373,7 @@ hw_ostc_parser_create_internal (dc_parser_t **out, dc_context_t *context, unsign return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (hw_ostc_parser_t *) dc_parser_allocate (context, &hw_ostc_parser_vtable); + parser = (hw_ostc_parser_t *) dc_parser_allocate (context, &hw_ostc_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -408,44 +406,17 @@ hw_ostc_parser_create_internal (dc_parser_t **out, dc_context_t *context, unsign dc_status_t -hw_ostc_parser_create (dc_parser_t **out, dc_context_t *context) +hw_ostc_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { - return hw_ostc_parser_create_internal (out, context, 0, 0); + return hw_ostc_parser_create_internal (out, context, data, size, 0, 0); } dc_status_t -hw_ostc3_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +hw_ostc3_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { - return hw_ostc_parser_create_internal (out, context, 1, model); + return hw_ostc_parser_create_internal (out, context, data, size, 1, model); } -static dc_status_t -hw_ostc_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - hw_ostc_parser_t *parser = (hw_ostc_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->version = 0; - parser->header = 0; - parser->layout = NULL; - parser->ngasmixes = 0; - parser->nfixed = 0; - parser->initial = 0; - parser->initial_setpoint = 0; - parser->initial_cns = 0; - for (unsigned int i = 0; i < NGASMIXES; ++i) { - parser->gasmix[i].oxygen = 0; - parser->gasmix[i].helium = 0; - parser->gasmix[i].type = 0; - parser->gasmix[i].enabled = 0; - parser->gasmix[i].diluent = 0; - } - - return DC_STATUS_SUCCESS; -} - - static dc_status_t hw_ostc_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/libdivecomputer.symbols b/src/libdivecomputer.symbols index e47a5e6..477f1ec 100644 --- a/src/libdivecomputer.symbols +++ b/src/libdivecomputer.symbols @@ -91,7 +91,6 @@ dc_parser_set_clock dc_parser_set_atmospheric dc_parser_set_density dc_parser_get_type -dc_parser_set_data dc_parser_get_datetime dc_parser_get_field dc_parser_samples_foreach diff --git a/src/liquivision_lynx.h b/src/liquivision_lynx.h index 52e7294..dd278b4 100644 --- a/src/liquivision_lynx.h +++ b/src/liquivision_lynx.h @@ -35,7 +35,7 @@ dc_status_t liquivision_lynx_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -liquivision_lynx_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +liquivision_lynx_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/liquivision_lynx_parser.c b/src/liquivision_lynx_parser.c index 0ddb69e..c336b6a 100644 --- a/src/liquivision_lynx_parser.c +++ b/src/liquivision_lynx_parser.c @@ -117,7 +117,6 @@ struct liquivision_lynx_parser_t { liquivision_lynx_tank_t tank[NTANKS]; }; -static dc_status_t liquivision_lynx_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t liquivision_lynx_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t liquivision_lynx_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t liquivision_lynx_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -125,7 +124,6 @@ static dc_status_t liquivision_lynx_parser_samples_foreach (dc_parser_t *abstrac static const dc_parser_vtable_t liquivision_lynx_parser_vtable = { sizeof(liquivision_lynx_parser_t), DC_FAMILY_LIQUIVISION_LYNX, - liquivision_lynx_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -137,7 +135,7 @@ static const dc_parser_vtable_t liquivision_lynx_parser_vtable = { dc_status_t -liquivision_lynx_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +liquivision_lynx_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { liquivision_lynx_parser_t *parser = NULL; @@ -145,7 +143,7 @@ liquivision_lynx_parser_create (dc_parser_t **out, dc_context_t *context, unsign return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (liquivision_lynx_parser_t *) dc_parser_allocate (context, &liquivision_lynx_parser_vtable); + parser = (liquivision_lynx_parser_t *) dc_parser_allocate (context, &liquivision_lynx_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -173,29 +171,6 @@ liquivision_lynx_parser_create (dc_parser_t **out, dc_context_t *context, unsign } -static dc_status_t -liquivision_lynx_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - liquivision_lynx_parser_t *parser = (liquivision_lynx_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->ngasmixes = 0; - parser->ntanks = 0; - for (unsigned int i = 0; i < NGASMIXES; ++i) { - parser->gasmix[i].oxygen = 0; - parser->gasmix[i].helium = 0; - } - for (unsigned int i = 0; i < NTANKS; ++i) { - parser->tank[i].id = 0; - parser->tank[i].beginpressure = 0; - parser->tank[i].endpressure = 0; - } - - return DC_STATUS_SUCCESS; -} - - static dc_status_t liquivision_lynx_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/mares_darwin.h b/src/mares_darwin.h index a902014..35efbcb 100644 --- a/src/mares_darwin.h +++ b/src/mares_darwin.h @@ -35,7 +35,7 @@ dc_status_t mares_darwin_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream, unsigned int model); dc_status_t -mares_darwin_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +mares_darwin_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/mares_darwin_parser.c b/src/mares_darwin_parser.c index 699fbc7..bebd89c 100644 --- a/src/mares_darwin_parser.c +++ b/src/mares_darwin_parser.c @@ -47,7 +47,6 @@ struct mares_darwin_parser_t { unsigned int samplesize; }; -static dc_status_t mares_darwin_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t mares_darwin_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t mares_darwin_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t mares_darwin_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -55,7 +54,6 @@ static dc_status_t mares_darwin_parser_samples_foreach (dc_parser_t *abstract, d static const dc_parser_vtable_t mares_darwin_parser_vtable = { sizeof(mares_darwin_parser_t), DC_FAMILY_MARES_DARWIN, - mares_darwin_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -67,7 +65,7 @@ static const dc_parser_vtable_t mares_darwin_parser_vtable = { dc_status_t -mares_darwin_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +mares_darwin_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { mares_darwin_parser_t *parser = NULL; @@ -75,7 +73,7 @@ mares_darwin_parser_create (dc_parser_t **out, dc_context_t *context, unsigned i return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (mares_darwin_parser_t *) dc_parser_allocate (context, &mares_darwin_parser_vtable); + parser = (mares_darwin_parser_t *) dc_parser_allocate (context, &mares_darwin_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -97,13 +95,6 @@ mares_darwin_parser_create (dc_parser_t **out, dc_context_t *context, unsigned i } -static dc_status_t -mares_darwin_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - return DC_STATUS_SUCCESS; -} - - static dc_status_t mares_darwin_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/mares_iconhd.h b/src/mares_iconhd.h index 55a50d0..1b00c54 100644 --- a/src/mares_iconhd.h +++ b/src/mares_iconhd.h @@ -35,7 +35,7 @@ dc_status_t mares_iconhd_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -mares_iconhd_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +mares_iconhd_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/mares_iconhd_parser.c b/src/mares_iconhd_parser.c index 63a4021..73f32d9 100644 --- a/src/mares_iconhd_parser.c +++ b/src/mares_iconhd_parser.c @@ -264,7 +264,6 @@ static const mares_iconhd_layout_t horizon = { 0x54 + 8, /* tanks */ }; -static dc_status_t mares_iconhd_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t mares_iconhd_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t mares_iconhd_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t mares_iconhd_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -272,7 +271,6 @@ static dc_status_t mares_iconhd_parser_samples_foreach (dc_parser_t *abstract, d static const dc_parser_vtable_t mares_iconhd_parser_vtable = { sizeof(mares_iconhd_parser_t), DC_FAMILY_MARES_ICONHD, - mares_iconhd_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -656,7 +654,7 @@ mares_iconhd_parser_cache (mares_iconhd_parser_t *parser) } dc_status_t -mares_iconhd_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +mares_iconhd_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { mares_iconhd_parser_t *parser = NULL; @@ -664,7 +662,7 @@ mares_iconhd_parser_create (dc_parser_t **out, dc_context_t *context, unsigned i return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (mares_iconhd_parser_t *) dc_parser_allocate (context, &mares_iconhd_parser_vtable); + parser = (mares_iconhd_parser_t *) dc_parser_allocate (context, &mares_iconhd_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -701,41 +699,6 @@ mares_iconhd_parser_create (dc_parser_t **out, dc_context_t *context, unsigned i return DC_STATUS_SUCCESS; } - -static dc_status_t -mares_iconhd_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - mares_iconhd_parser_t *parser = (mares_iconhd_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->logformat = 0; - parser->mode = (parser->model == GENIUS || parser->model == HORIZON) ? GENIUS_AIR : ICONHD_AIR; - parser->nsamples = 0; - parser->samplesize = 0; - parser->headersize = 0; - parser->settings = 0; - parser->surftime = 0; - parser->interval = 0; - parser->samplerate = 0; - parser->ntanks = 0; - parser->ngasmixes = 0; - for (unsigned int i = 0; i < NGASMIXES; ++i) { - parser->gasmix[i].oxygen = 0; - parser->gasmix[i].helium = 0; - } - for (unsigned int i = 0; i < NTANKS; ++i) { - parser->tank[i].volume = 0; - parser->tank[i].workpressure = 0; - parser->tank[i].beginpressure = 0; - parser->tank[i].endpressure = 0; - } - parser->layout = NULL; - - return DC_STATUS_SUCCESS; -} - - static dc_status_t mares_iconhd_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/mares_nemo.h b/src/mares_nemo.h index c7a162b..1847d0f 100644 --- a/src/mares_nemo.h +++ b/src/mares_nemo.h @@ -35,7 +35,7 @@ dc_status_t mares_nemo_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -mares_nemo_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +mares_nemo_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/mares_nemo_parser.c b/src/mares_nemo_parser.c index 4b962ff..cb3e3bf 100644 --- a/src/mares_nemo_parser.c +++ b/src/mares_nemo_parser.c @@ -59,7 +59,6 @@ struct mares_nemo_parser_t { unsigned int extra; }; -static dc_status_t mares_nemo_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t mares_nemo_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t mares_nemo_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t mares_nemo_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -67,7 +66,6 @@ static dc_status_t mares_nemo_parser_samples_foreach (dc_parser_t *abstract, dc_ static const dc_parser_vtable_t mares_nemo_parser_vtable = { sizeof(mares_nemo_parser_t), DC_FAMILY_MARES_NEMO, - mares_nemo_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -79,15 +77,16 @@ static const dc_parser_vtable_t mares_nemo_parser_vtable = { dc_status_t -mares_nemo_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +mares_nemo_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { + dc_status_t status = DC_STATUS_SUCCESS; mares_nemo_parser_t *parser = NULL; if (out == NULL) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (mares_nemo_parser_t *) dc_parser_allocate (context, &mares_nemo_parser_vtable); + parser = (mares_nemo_parser_t *) dc_parser_allocate (context, &mares_nemo_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -98,70 +97,42 @@ mares_nemo_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int if (model == NEMOWIDE || model == NEMOAIR || model == PUCK || model == PUCKAIR) freedive = GAUGE; - // Set the default values. - parser->model = model; - parser->freedive = freedive; - parser->mode = AIR; - parser->length = 0; - parser->sample_count = 0; - parser->sample_size = 0; - parser->header = 0; - parser->extra = 0; - - *out = (dc_parser_t*) parser; - - return DC_STATUS_SUCCESS; -} - - -static dc_status_t -mares_nemo_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - mares_nemo_parser_t *parser = (mares_nemo_parser_t *) abstract; - - // Clear the previous state. - parser->base.data = NULL; - parser->base.size = 0; - parser->mode = AIR; - parser->length = 0; - parser->sample_count = 0; - parser->sample_size = 0; - parser->header = 0; - parser->extra = 0; - - if (size == 0) - return DC_STATUS_SUCCESS; - - if (size < 2 + 3) - return DC_STATUS_DATAFORMAT; + if (size < 2 + 3) { + status = DC_STATUS_DATAFORMAT; + goto error_free; + } unsigned int length = array_uint16_le (data); - if (length > size) - return DC_STATUS_DATAFORMAT; + if (length > size) { + status = DC_STATUS_DATAFORMAT; + goto error_free; + } unsigned int extra = 0; const unsigned char marker[3] = {0xAA, 0xBB, 0xCC}; if (memcmp (data + length - 3, marker, sizeof (marker)) == 0) { - if (parser->model == PUCKAIR) + if (model == PUCKAIR) extra = 7; else extra = 12; } - if (length < 2 + extra + 3) - return DC_STATUS_DATAFORMAT; + if (length < 2 + extra + 3) { + status = DC_STATUS_DATAFORMAT; + goto error_free; + } unsigned int mode = data[length - extra - 1]; unsigned int header_size = 53; unsigned int sample_size = 2; if (extra) { - if (parser->model == PUCKAIR) + if (model == PUCKAIR) sample_size = 3; else sample_size = 5; } - if (mode == parser->freedive) { + if (mode == freedive) { header_size = 28; sample_size = 6; } @@ -169,12 +140,14 @@ mares_nemo_parser_set_data (dc_parser_t *abstract, const unsigned char *data, un unsigned int nsamples = array_uint16_le (data + length - extra - 3); unsigned int nbytes = 2 + nsamples * sample_size + header_size + extra; - if (length != nbytes) - return DC_STATUS_DATAFORMAT; + if (length != nbytes) { + status = DC_STATUS_DATAFORMAT; + goto error_free; + } - // Store the new state. - parser->base.data = data; - parser->base.size = size; + // Set the default values. + parser->model = model; + parser->freedive = freedive; parser->mode = mode; parser->length = length; parser->sample_count = nsamples; @@ -182,7 +155,13 @@ mares_nemo_parser_set_data (dc_parser_t *abstract, const unsigned char *data, un parser->header = header_size; parser->extra = extra; + *out = (dc_parser_t*) parser; + return DC_STATUS_SUCCESS; + +error_free: + dc_parser_deallocate ((dc_parser_t *) parser); + return status; } diff --git a/src/mclean_extreme.h b/src/mclean_extreme.h index c388bd4..fd7c6bc 100644 --- a/src/mclean_extreme.h +++ b/src/mclean_extreme.h @@ -35,7 +35,7 @@ dc_status_t mclean_extreme_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -mclean_extreme_parser_create (dc_parser_t **parser, dc_context_t *context); +mclean_extreme_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/mclean_extreme_parser.c b/src/mclean_extreme_parser.c index 645a909..b9de495 100644 --- a/src/mclean_extreme_parser.c +++ b/src/mclean_extreme_parser.c @@ -58,7 +58,6 @@ struct mclean_extreme_parser_t { unsigned int gasmix[NGASMIXES]; }; -static dc_status_t mclean_extreme_parser_set_data(dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t mclean_extreme_parser_get_datetime(dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t mclean_extreme_parser_get_field(dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t mclean_extreme_parser_samples_foreach(dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -66,7 +65,6 @@ static dc_status_t mclean_extreme_parser_samples_foreach(dc_parser_t *abstract, static const dc_parser_vtable_t mclean_extreme_parser_vtable = { sizeof(mclean_extreme_parser_t), DC_FAMILY_MCLEAN_EXTREME, - mclean_extreme_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -77,7 +75,7 @@ static const dc_parser_vtable_t mclean_extreme_parser_vtable = { }; dc_status_t -mclean_extreme_parser_create(dc_parser_t **out, dc_context_t *context) +mclean_extreme_parser_create(dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { mclean_extreme_parser_t *parser = NULL; @@ -86,7 +84,7 @@ mclean_extreme_parser_create(dc_parser_t **out, dc_context_t *context) } // Allocate memory. - parser = (mclean_extreme_parser_t *)dc_parser_allocate(context, &mclean_extreme_parser_vtable); + parser = (mclean_extreme_parser_t *)dc_parser_allocate(context, &mclean_extreme_parser_vtable, data, size); if (parser == NULL) { ERROR(context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -104,21 +102,6 @@ mclean_extreme_parser_create(dc_parser_t **out, dc_context_t *context) return DC_STATUS_SUCCESS; } -static dc_status_t -mclean_extreme_parser_set_data(dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - mclean_extreme_parser_t *parser = (mclean_extreme_parser_t *)abstract; - - // Reset the cache. - parser->cached = 0; - parser->ngasmixes = 0; - for (unsigned int i = 0; i < NGASMIXES; ++i) { - parser->gasmix[i] = INVALID; - } - - return DC_STATUS_SUCCESS; -} - static dc_status_t mclean_extreme_parser_get_datetime(dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/oceanic_atom2.h b/src/oceanic_atom2.h index 25da953..152c439 100644 --- a/src/oceanic_atom2.h +++ b/src/oceanic_atom2.h @@ -37,7 +37,7 @@ dc_status_t oceanic_atom2_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream, unsigned int model); dc_status_t -oceanic_atom2_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +oceanic_atom2_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/oceanic_atom2_parser.c b/src/oceanic_atom2_parser.c index cb98366..49b2c0c 100644 --- a/src/oceanic_atom2_parser.c +++ b/src/oceanic_atom2_parser.c @@ -59,7 +59,6 @@ struct oceanic_atom2_parser_t { double maxdepth; }; -static dc_status_t oceanic_atom2_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t oceanic_atom2_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t oceanic_atom2_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -67,7 +66,6 @@ static dc_status_t oceanic_atom2_parser_samples_foreach (dc_parser_t *abstract, static const dc_parser_vtable_t oceanic_atom2_parser_vtable = { sizeof(oceanic_atom2_parser_t), DC_FAMILY_OCEANIC_ATOM2, - oceanic_atom2_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -79,7 +77,7 @@ static const dc_parser_vtable_t oceanic_atom2_parser_vtable = { dc_status_t -oceanic_atom2_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +oceanic_atom2_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { oceanic_atom2_parser_t *parser = NULL; @@ -87,7 +85,7 @@ oceanic_atom2_parser_create (dc_parser_t **out, dc_context_t *context, unsigned return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (oceanic_atom2_parser_t *) dc_parser_allocate (context, &oceanic_atom2_parser_vtable); + parser = (oceanic_atom2_parser_t *) dc_parser_allocate (context, &oceanic_atom2_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -153,28 +151,6 @@ oceanic_atom2_parser_create (dc_parser_t **out, dc_context_t *context, unsigned } -static dc_status_t -oceanic_atom2_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - oceanic_atom2_parser_t *parser = (oceanic_atom2_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->header = 0; - parser->footer = 0; - parser->mode = NORMAL; - parser->ngasmixes = 0; - for (unsigned int i = 0; i < NGASMIXES; ++i) { - parser->oxygen[i] = 0; - parser->helium[i] = 0; - } - parser->divetime = 0; - parser->maxdepth = 0.0; - - return DC_STATUS_SUCCESS; -} - - static dc_status_t oceanic_atom2_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/oceanic_veo250.h b/src/oceanic_veo250.h index fc79375..5d24f74 100644 --- a/src/oceanic_veo250.h +++ b/src/oceanic_veo250.h @@ -37,7 +37,7 @@ dc_status_t oceanic_veo250_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -oceanic_veo250_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +oceanic_veo250_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/oceanic_veo250_parser.c b/src/oceanic_veo250_parser.c index ee14061..096e47c 100644 --- a/src/oceanic_veo250_parser.c +++ b/src/oceanic_veo250_parser.c @@ -42,7 +42,6 @@ struct oceanic_veo250_parser_t { double maxdepth; }; -static dc_status_t oceanic_veo250_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t oceanic_veo250_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t oceanic_veo250_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t oceanic_veo250_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -50,7 +49,6 @@ static dc_status_t oceanic_veo250_parser_samples_foreach (dc_parser_t *abstract, static const dc_parser_vtable_t oceanic_veo250_parser_vtable = { sizeof(oceanic_veo250_parser_t), DC_FAMILY_OCEANIC_VEO250, - oceanic_veo250_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -62,7 +60,7 @@ static const dc_parser_vtable_t oceanic_veo250_parser_vtable = { dc_status_t -oceanic_veo250_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +oceanic_veo250_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { oceanic_veo250_parser_t *parser = NULL; @@ -70,7 +68,7 @@ oceanic_veo250_parser_create (dc_parser_t **out, dc_context_t *context, unsigned return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (oceanic_veo250_parser_t *) dc_parser_allocate (context, &oceanic_veo250_parser_vtable); + parser = (oceanic_veo250_parser_t *) dc_parser_allocate (context, &oceanic_veo250_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -88,20 +86,6 @@ oceanic_veo250_parser_create (dc_parser_t **out, dc_context_t *context, unsigned } -static dc_status_t -oceanic_veo250_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - oceanic_veo250_parser_t *parser = (oceanic_veo250_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->divetime = 0; - parser->maxdepth = 0.0; - - return DC_STATUS_SUCCESS; -} - - static dc_status_t oceanic_veo250_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/oceanic_vtpro.h b/src/oceanic_vtpro.h index 6a3c2cd..3928adf 100644 --- a/src/oceanic_vtpro.h +++ b/src/oceanic_vtpro.h @@ -37,7 +37,7 @@ dc_status_t oceanic_vtpro_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream, unsigned int model); dc_status_t -oceanic_vtpro_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +oceanic_vtpro_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/oceanic_vtpro_parser.c b/src/oceanic_vtpro_parser.c index 4902033..ec380b3 100644 --- a/src/oceanic_vtpro_parser.c +++ b/src/oceanic_vtpro_parser.c @@ -42,7 +42,6 @@ struct oceanic_vtpro_parser_t { double maxdepth; }; -static dc_status_t oceanic_vtpro_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t oceanic_vtpro_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t oceanic_vtpro_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t oceanic_vtpro_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -50,7 +49,6 @@ static dc_status_t oceanic_vtpro_parser_samples_foreach (dc_parser_t *abstract, static const dc_parser_vtable_t oceanic_vtpro_parser_vtable = { sizeof(oceanic_vtpro_parser_t), DC_FAMILY_OCEANIC_VTPRO, - oceanic_vtpro_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -62,7 +60,7 @@ static const dc_parser_vtable_t oceanic_vtpro_parser_vtable = { dc_status_t -oceanic_vtpro_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +oceanic_vtpro_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { oceanic_vtpro_parser_t *parser = NULL; @@ -70,7 +68,7 @@ oceanic_vtpro_parser_create (dc_parser_t **out, dc_context_t *context, unsigned return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (oceanic_vtpro_parser_t *) dc_parser_allocate (context, &oceanic_vtpro_parser_vtable); + parser = (oceanic_vtpro_parser_t *) dc_parser_allocate (context, &oceanic_vtpro_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -88,20 +86,6 @@ oceanic_vtpro_parser_create (dc_parser_t **out, dc_context_t *context, unsigned } -static dc_status_t -oceanic_vtpro_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - oceanic_vtpro_parser_t *parser = (oceanic_vtpro_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->divetime = 0; - parser->maxdepth = 0.0; - - return DC_STATUS_SUCCESS; -} - - static dc_status_t oceanic_vtpro_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/oceans_s1.h b/src/oceans_s1.h index 825d309..e5e43f8 100644 --- a/src/oceans_s1.h +++ b/src/oceans_s1.h @@ -36,7 +36,7 @@ dc_status_t oceans_s1_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -oceans_s1_parser_create (dc_parser_t **parser, dc_context_t *context); +oceans_s1_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/oceans_s1_parser.c b/src/oceans_s1_parser.c index c31bfe1..cce5031 100644 --- a/src/oceans_s1_parser.c +++ b/src/oceans_s1_parser.c @@ -58,7 +58,6 @@ struct oceans_s1_parser_t { unsigned int divetime; }; -static dc_status_t oceans_s1_parser_set_data(dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t oceans_s1_parser_get_datetime(dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t oceans_s1_parser_get_field(dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t oceans_s1_parser_samples_foreach(dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -66,7 +65,6 @@ static dc_status_t oceans_s1_parser_samples_foreach(dc_parser_t *abstract, dc_sa static const dc_parser_vtable_t oceans_s1_parser_vtable = { sizeof(oceans_s1_parser_t), DC_FAMILY_OCEANS_S1, - oceans_s1_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -77,7 +75,7 @@ static const dc_parser_vtable_t oceans_s1_parser_vtable = { }; dc_status_t -oceans_s1_parser_create (dc_parser_t **out, dc_context_t *context) +oceans_s1_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { oceans_s1_parser_t *parser = NULL; @@ -85,7 +83,7 @@ oceans_s1_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (oceans_s1_parser_t *) dc_parser_allocate (context, &oceans_s1_parser_vtable); + parser = (oceans_s1_parser_t *) dc_parser_allocate (context, &oceans_s1_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -105,23 +103,6 @@ oceans_s1_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_SUCCESS; } -static dc_status_t -oceans_s1_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - oceans_s1_parser_t *parser = (oceans_s1_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->timestamp = 0; - parser->number = 0; - parser->divemode = 0; - parser->oxygen = 0; - parser->maxdepth = 0; - parser->divetime = 0; - - return DC_STATUS_SUCCESS; -} - static dc_status_t oceans_s1_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/parser-private.h b/src/parser-private.h index 9b8ed7c..73e2e59 100644 --- a/src/parser-private.h +++ b/src/parser-private.h @@ -41,7 +41,7 @@ typedef struct dc_parser_vtable_t dc_parser_vtable_t; struct dc_parser_t { const dc_parser_vtable_t *vtable; dc_context_t *context; - const unsigned char *data; + unsigned char *data; unsigned int size; }; @@ -50,8 +50,6 @@ struct dc_parser_vtable_t { dc_family_t type; - dc_status_t (*set_data) (dc_parser_t *parser, const unsigned char *data, unsigned int size); - dc_status_t (*set_clock) (dc_parser_t *parser, unsigned int devtime, dc_ticks_t systime); dc_status_t (*set_atmospheric) (dc_parser_t *parser, double atmospheric); @@ -68,7 +66,7 @@ struct dc_parser_vtable_t { }; dc_parser_t * -dc_parser_allocate (dc_context_t *context, const dc_parser_vtable_t *vtable); +dc_parser_allocate (dc_context_t *context, const dc_parser_vtable_t *vtable, const unsigned char data[], size_t size); void dc_parser_deallocate (dc_parser_t *parser); diff --git a/src/parser.c b/src/parser.c index 5138e54..011115d 100644 --- a/src/parser.c +++ b/src/parser.c @@ -20,6 +20,7 @@ */ #include +#include #include #include "suunto_d9.h" @@ -72,7 +73,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) +dc_parser_new_internal (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, dc_family_t family, unsigned int model) { dc_status_t rc = DC_STATUS_SUCCESS; dc_parser_t *parser = NULL; @@ -82,126 +83,126 @@ dc_parser_new_internal (dc_parser_t **out, dc_context_t *context, dc_family_t fa switch (family) { case DC_FAMILY_SUUNTO_SOLUTION: - rc = suunto_solution_parser_create (&parser, context); + rc = suunto_solution_parser_create (&parser, context, data, size); break; case DC_FAMILY_SUUNTO_EON: - rc = suunto_eon_parser_create (&parser, context, 0); + rc = suunto_eon_parser_create (&parser, context, data, size, 0); break; case DC_FAMILY_SUUNTO_VYPER: if (model == 0x01) - rc = suunto_eon_parser_create (&parser, context, 1); + rc = suunto_eon_parser_create (&parser, context, data, size, 1); else - rc = suunto_vyper_parser_create (&parser, context); + rc = suunto_vyper_parser_create (&parser, context, data, size); break; case DC_FAMILY_SUUNTO_VYPER2: case DC_FAMILY_SUUNTO_D9: - rc = suunto_d9_parser_create (&parser, context, model); + rc = suunto_d9_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_SUUNTO_EONSTEEL: - rc = suunto_eonsteel_parser_create(&parser, context, model); + rc = suunto_eonsteel_parser_create(&parser, context, data, size, model); break; case DC_FAMILY_UWATEC_ALADIN: case DC_FAMILY_UWATEC_MEMOMOUSE: - rc = uwatec_memomouse_parser_create (&parser, context); + rc = uwatec_memomouse_parser_create (&parser, context, data, size); break; case DC_FAMILY_UWATEC_SMART: - rc = uwatec_smart_parser_create (&parser, context, model); + rc = uwatec_smart_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_REEFNET_SENSUS: - rc = reefnet_sensus_parser_create (&parser, context); + rc = reefnet_sensus_parser_create (&parser, context, data, size); break; case DC_FAMILY_REEFNET_SENSUSPRO: - rc = reefnet_sensuspro_parser_create (&parser, context); + rc = reefnet_sensuspro_parser_create (&parser, context, data, size); break; case DC_FAMILY_REEFNET_SENSUSULTRA: - rc = reefnet_sensusultra_parser_create (&parser, context); + rc = reefnet_sensusultra_parser_create (&parser, context, data, size); break; case DC_FAMILY_OCEANIC_VTPRO: - rc = oceanic_vtpro_parser_create (&parser, context, model); + rc = oceanic_vtpro_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_OCEANIC_VEO250: - rc = oceanic_veo250_parser_create (&parser, context, model); + rc = oceanic_veo250_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_OCEANIC_ATOM2: if (model == REACTPROWHITE) - rc = oceanic_veo250_parser_create (&parser, context, model); + rc = oceanic_veo250_parser_create (&parser, context, data, size, model); else - rc = oceanic_atom2_parser_create (&parser, context, model); + rc = oceanic_atom2_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_MARES_NEMO: case DC_FAMILY_MARES_PUCK: - rc = mares_nemo_parser_create (&parser, context, model); + rc = mares_nemo_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_MARES_DARWIN: - rc = mares_darwin_parser_create (&parser, context, model); + rc = mares_darwin_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_MARES_ICONHD: - rc = mares_iconhd_parser_create (&parser, context, model); + rc = mares_iconhd_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_HW_OSTC: - rc = hw_ostc_parser_create (&parser, context); + rc = hw_ostc_parser_create (&parser, context, data, size); break; case DC_FAMILY_HW_FROG: case DC_FAMILY_HW_OSTC3: - rc = hw_ostc3_parser_create (&parser, context, model); + rc = hw_ostc3_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_CRESSI_EDY: case DC_FAMILY_ZEAGLE_N2ITION3: - rc = cressi_edy_parser_create (&parser, context, model); + rc = cressi_edy_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_CRESSI_LEONARDO: - rc = cressi_leonardo_parser_create (&parser, context, model); + rc = cressi_leonardo_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_CRESSI_GOA: - rc = cressi_goa_parser_create (&parser, context, model); + rc = cressi_goa_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_ATOMICS_COBALT: - rc = atomics_cobalt_parser_create (&parser, context); + rc = atomics_cobalt_parser_create (&parser, context, data, size); break; case DC_FAMILY_SHEARWATER_PREDATOR: - rc = shearwater_predator_parser_create (&parser, context, model); + rc = shearwater_predator_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_SHEARWATER_PETREL: - rc = shearwater_petrel_parser_create (&parser, context, model); + rc = shearwater_petrel_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_DIVERITE_NITEKQ: - rc = diverite_nitekq_parser_create (&parser, context); + rc = diverite_nitekq_parser_create (&parser, context, data, size); break; case DC_FAMILY_CITIZEN_AQUALAND: - rc = citizen_aqualand_parser_create (&parser, context); + rc = citizen_aqualand_parser_create (&parser, context, data, size); break; case DC_FAMILY_DIVESYSTEM_IDIVE: - rc = divesystem_idive_parser_create (&parser, context, model); + rc = divesystem_idive_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_COCHRAN_COMMANDER: - rc = cochran_commander_parser_create (&parser, context, model); + rc = cochran_commander_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_TECDIVING_DIVECOMPUTEREU: - rc = tecdiving_divecomputereu_parser_create (&parser, context); + rc = tecdiving_divecomputereu_parser_create (&parser, context, data, size); break; case DC_FAMILY_MCLEAN_EXTREME: - rc = mclean_extreme_parser_create (&parser, context); + rc = mclean_extreme_parser_create (&parser, context, data, size); break; case DC_FAMILY_LIQUIVISION_LYNX: - rc = liquivision_lynx_parser_create (&parser, context, model); + rc = liquivision_lynx_parser_create (&parser, context, data, size, model); break; case DC_FAMILY_SPORASUB_SP2: - rc = sporasub_sp2_parser_create (&parser, context); + rc = sporasub_sp2_parser_create (&parser, context, data, size); break; case DC_FAMILY_DEEPSIX_EXCURSION: - rc = deepsix_excursion_parser_create (&parser, context); + rc = deepsix_excursion_parser_create (&parser, context, data, size); break; case DC_FAMILY_SEAC_SCREEN: - rc = seac_screen_parser_create (&parser, context); + rc = seac_screen_parser_create (&parser, context, data, size); break; case DC_FAMILY_DEEPBLU_COSMIQ: - rc = deepblu_cosmiq_parser_create (&parser, context); + rc = deepblu_cosmiq_parser_create (&parser, context, data, size); break; case DC_FAMILY_OCEANS_S1: - rc = oceans_s1_parser_create (&parser, context); + rc = oceans_s1_parser_create (&parser, context, data, size); break; case DC_FAMILY_DIVESOFT_FREEDOM: - rc = divesoft_freedom_parser_create (&parser, context); + rc = divesoft_freedom_parser_create (&parser, context, data, size); break; default: return DC_STATUS_INVALIDARGS; @@ -213,7 +214,7 @@ 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_parser_new (dc_parser_t **out, dc_device_t *device, const unsigned char data[], size_t size) { dc_status_t status = DC_STATUS_SUCCESS; dc_parser_t *parser = NULL; @@ -221,7 +222,7 @@ dc_parser_new (dc_parser_t **out, dc_device_t *device) if (device == NULL) return DC_STATUS_INVALIDARGS; - status = dc_parser_new_internal (&parser, device->context, + status = dc_parser_new_internal (&parser, device->context, data, size, dc_device_get_type (device), device->devinfo.model); if (status != DC_STATUS_SUCCESS) goto error_exit; @@ -241,14 +242,14 @@ error_exit: } dc_status_t -dc_parser_new2 (dc_parser_t **out, dc_context_t *context, dc_descriptor_t *descriptor) +dc_parser_new2 (dc_parser_t **out, dc_context_t *context, dc_descriptor_t *descriptor, const unsigned char data[], size_t size) { - return dc_parser_new_internal (out, context, + return dc_parser_new_internal (out, context, data, size, dc_descriptor_get_type (descriptor), dc_descriptor_get_model (descriptor)); } dc_parser_t * -dc_parser_allocate (dc_context_t *context, const dc_parser_vtable_t *vtable) +dc_parser_allocate (dc_context_t *context, const dc_parser_vtable_t *vtable, const unsigned char data[], size_t size) { dc_parser_t *parser = NULL; @@ -265,15 +266,34 @@ dc_parser_allocate (dc_context_t *context, const dc_parser_vtable_t *vtable) // Initialize the base class. parser->vtable = vtable; parser->context = context; - parser->data = NULL; - parser->size = 0; + if (size) { + // Allocate memory for the data. + parser->data = malloc (size); + if (parser->data == NULL) { + ERROR (context, "Failed to allocate memory."); + free (parser); + return NULL; + } + + // Copy the data. + memcpy (parser->data, data, size); + parser->size = size; + } else { + parser->data = NULL; + parser->size = 0; + + } return parser; } void dc_parser_deallocate (dc_parser_t *parser) { + if (parser == NULL) + return; + + free (parser->data); free (parser); } @@ -336,22 +356,6 @@ dc_parser_set_density (dc_parser_t *parser, double density) } -dc_status_t -dc_parser_set_data (dc_parser_t *parser, const unsigned char *data, unsigned int size) -{ - if (parser == NULL) - return DC_STATUS_UNSUPPORTED; - - if (parser->vtable->set_data == NULL) - return DC_STATUS_UNSUPPORTED; - - parser->data = data; - parser->size = size; - - return parser->vtable->set_data (parser, data, size); -} - - dc_status_t dc_parser_get_datetime (dc_parser_t *parser, dc_datetime_t *datetime) { diff --git a/src/reefnet_sensus.h b/src/reefnet_sensus.h index 2ed5cbe..38157dc 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); +reefnet_sensus_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/reefnet_sensus_parser.c b/src/reefnet_sensus_parser.c index 9882778..29e7f46 100644 --- a/src/reefnet_sensus_parser.c +++ b/src/reefnet_sensus_parser.c @@ -48,7 +48,6 @@ struct reefnet_sensus_parser_t { unsigned int maxdepth; }; -static dc_status_t reefnet_sensus_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t reefnet_sensus_parser_set_clock (dc_parser_t *abstract, unsigned int devtime, dc_ticks_t systime); static dc_status_t reefnet_sensus_parser_set_atmospheric (dc_parser_t *abstract, double atmospheric); static dc_status_t reefnet_sensus_parser_set_density (dc_parser_t *abstract, double density); @@ -59,7 +58,6 @@ static dc_status_t reefnet_sensus_parser_samples_foreach (dc_parser_t *abstract, static const dc_parser_vtable_t reefnet_sensus_parser_vtable = { sizeof(reefnet_sensus_parser_t), DC_FAMILY_REEFNET_SENSUS, - reefnet_sensus_parser_set_data, /* set_data */ reefnet_sensus_parser_set_clock, /* set_clock */ reefnet_sensus_parser_set_atmospheric, /* set_atmospheric */ reefnet_sensus_parser_set_density, /* set_density */ @@ -71,7 +69,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) +reefnet_sensus_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { reefnet_sensus_parser_t *parser = NULL; @@ -79,7 +77,7 @@ reefnet_sensus_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (reefnet_sensus_parser_t *) dc_parser_allocate (context, &reefnet_sensus_parser_vtable); + parser = (reefnet_sensus_parser_t *) dc_parser_allocate (context, &reefnet_sensus_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -100,20 +98,6 @@ reefnet_sensus_parser_create (dc_parser_t **out, dc_context_t *context) } -static dc_status_t -reefnet_sensus_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - reefnet_sensus_parser_t *parser = (reefnet_sensus_parser_t*) abstract; - - // Reset the cache. - parser->cached = 0; - parser->divetime = 0; - parser->maxdepth = 0; - - return DC_STATUS_SUCCESS; -} - - static dc_status_t reefnet_sensus_parser_set_clock (dc_parser_t *abstract, unsigned int devtime, dc_ticks_t systime) { diff --git a/src/reefnet_sensuspro.h b/src/reefnet_sensuspro.h index fd21d99..f187f93 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); +reefnet_sensuspro_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/reefnet_sensuspro_parser.c b/src/reefnet_sensuspro_parser.c index 6dc0613..5d6fd5e 100644 --- a/src/reefnet_sensuspro_parser.c +++ b/src/reefnet_sensuspro_parser.c @@ -47,7 +47,6 @@ struct reefnet_sensuspro_parser_t { unsigned int maxdepth; }; -static dc_status_t reefnet_sensuspro_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t reefnet_sensuspro_parser_set_clock (dc_parser_t *abstract, unsigned int devtime, dc_ticks_t systime); static dc_status_t reefnet_sensuspro_parser_set_atmospheric (dc_parser_t *abstract, double atmospheric); static dc_status_t reefnet_sensuspro_parser_set_density (dc_parser_t *abstract, double density); @@ -58,7 +57,6 @@ static dc_status_t reefnet_sensuspro_parser_samples_foreach (dc_parser_t *abstra static const dc_parser_vtable_t reefnet_sensuspro_parser_vtable = { sizeof(reefnet_sensuspro_parser_t), DC_FAMILY_REEFNET_SENSUSPRO, - reefnet_sensuspro_parser_set_data, /* set_data */ reefnet_sensuspro_parser_set_clock, /* set_clock */ reefnet_sensuspro_parser_set_atmospheric, /* set_atmospheric */ reefnet_sensuspro_parser_set_density, /* set_density */ @@ -70,7 +68,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) +reefnet_sensuspro_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { reefnet_sensuspro_parser_t *parser = NULL; @@ -78,7 +76,7 @@ reefnet_sensuspro_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (reefnet_sensuspro_parser_t *) dc_parser_allocate (context, &reefnet_sensuspro_parser_vtable); + parser = (reefnet_sensuspro_parser_t *) dc_parser_allocate (context, &reefnet_sensuspro_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -99,20 +97,6 @@ reefnet_sensuspro_parser_create (dc_parser_t **out, dc_context_t *context) } -static dc_status_t -reefnet_sensuspro_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - reefnet_sensuspro_parser_t *parser = (reefnet_sensuspro_parser_t*) abstract; - - // Reset the cache. - parser->cached = 0; - parser->divetime = 0; - parser->maxdepth = 0; - - return DC_STATUS_SUCCESS; -} - - static dc_status_t reefnet_sensuspro_parser_set_clock (dc_parser_t *abstract, unsigned int devtime, dc_ticks_t systime) { diff --git a/src/reefnet_sensusultra.h b/src/reefnet_sensusultra.h index 054745a..1cefc9c 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); +reefnet_sensusultra_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/reefnet_sensusultra_parser.c b/src/reefnet_sensusultra_parser.c index 5564019..670a0c3 100644 --- a/src/reefnet_sensusultra_parser.c +++ b/src/reefnet_sensusultra_parser.c @@ -47,7 +47,6 @@ struct reefnet_sensusultra_parser_t { unsigned int maxdepth; }; -static dc_status_t reefnet_sensusultra_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t reefnet_sensusultra_parser_set_clock (dc_parser_t *abstract, unsigned int devtime, dc_ticks_t systime); static dc_status_t reefnet_sensusultra_parser_set_atmospheric (dc_parser_t *abstract, double atmospheric); static dc_status_t reefnet_sensusultra_parser_set_density (dc_parser_t *abstract, double density); @@ -58,7 +57,6 @@ static dc_status_t reefnet_sensusultra_parser_samples_foreach (dc_parser_t *abst static const dc_parser_vtable_t reefnet_sensusultra_parser_vtable = { sizeof(reefnet_sensusultra_parser_t), DC_FAMILY_REEFNET_SENSUSULTRA, - reefnet_sensusultra_parser_set_data, /* set_data */ reefnet_sensusultra_parser_set_clock, /* set_clock */ reefnet_sensusultra_parser_set_atmospheric, /* set_atmospheric */ reefnet_sensusultra_parser_set_density, /* set_density */ @@ -70,7 +68,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) +reefnet_sensusultra_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { reefnet_sensusultra_parser_t *parser = NULL; @@ -78,7 +76,7 @@ reefnet_sensusultra_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (reefnet_sensusultra_parser_t *) dc_parser_allocate (context, &reefnet_sensusultra_parser_vtable); + parser = (reefnet_sensusultra_parser_t *) dc_parser_allocate (context, &reefnet_sensusultra_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -99,20 +97,6 @@ reefnet_sensusultra_parser_create (dc_parser_t **out, dc_context_t *context) } -static dc_status_t -reefnet_sensusultra_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - reefnet_sensusultra_parser_t *parser = (reefnet_sensusultra_parser_t*) abstract; - - // Reset the cache. - parser->cached = 0; - parser->divetime = 0; - parser->maxdepth = 0; - - return DC_STATUS_SUCCESS; -} - - static dc_status_t reefnet_sensusultra_parser_set_clock (dc_parser_t *abstract, unsigned int devtime, dc_ticks_t systime) { diff --git a/src/seac_screen.h b/src/seac_screen.h index 64c15b6..4ff05ea 100644 --- a/src/seac_screen.h +++ b/src/seac_screen.h @@ -35,7 +35,7 @@ dc_status_t seac_screen_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -seac_screen_parser_create (dc_parser_t **parser, dc_context_t *context); +seac_screen_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/seac_screen_parser.c b/src/seac_screen_parser.c index c50eaee..07553d6 100644 --- a/src/seac_screen_parser.c +++ b/src/seac_screen_parser.c @@ -48,7 +48,6 @@ struct seac_screen_parser_t { unsigned int gf_high; }; -static dc_status_t seac_screen_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t seac_screen_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t seac_screen_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t seac_screen_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -56,7 +55,6 @@ static dc_status_t seac_screen_parser_samples_foreach (dc_parser_t *abstract, dc static const dc_parser_vtable_t seac_screen_parser_vtable = { sizeof(seac_screen_parser_t), DC_FAMILY_SEAC_SCREEN, - seac_screen_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -67,7 +65,7 @@ static const dc_parser_vtable_t seac_screen_parser_vtable = { }; dc_status_t -seac_screen_parser_create (dc_parser_t **out, dc_context_t *context) +seac_screen_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { seac_screen_parser_t *parser = NULL; @@ -75,7 +73,7 @@ seac_screen_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (seac_screen_parser_t *) dc_parser_allocate (context, &seac_screen_parser_vtable); + parser = (seac_screen_parser_t *) dc_parser_allocate (context, &seac_screen_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -95,23 +93,6 @@ seac_screen_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_SUCCESS; } -static dc_status_t -seac_screen_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - seac_screen_parser_t *parser = (seac_screen_parser_t *)abstract; - - // Reset the cache. - parser->cached = 0; - parser->ngasmixes = 0; - for (unsigned int i = 0; i < NGASMIXES; ++i) { - parser->oxygen[i] = 0; - } - parser->gf_low = 0; - parser->gf_high = 0; - - return DC_STATUS_SUCCESS; -} - static dc_status_t seac_screen_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/shearwater_petrel.h b/src/shearwater_petrel.h index 0a4e756..166007e 100644 --- a/src/shearwater_petrel.h +++ b/src/shearwater_petrel.h @@ -35,7 +35,7 @@ dc_status_t shearwater_petrel_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -shearwater_petrel_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +shearwater_petrel_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/shearwater_predator.h b/src/shearwater_predator.h index 5d1fccb..5d8ef9d 100644 --- a/src/shearwater_predator.h +++ b/src/shearwater_predator.h @@ -35,7 +35,7 @@ dc_status_t shearwater_predator_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -shearwater_predator_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +shearwater_predator_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/shearwater_predator_parser.c b/src/shearwater_predator_parser.c index fe0a6db..749fe3c 100644 --- a/src/shearwater_predator_parser.c +++ b/src/shearwater_predator_parser.c @@ -148,7 +148,6 @@ struct shearwater_predator_parser_t { unsigned int density; }; -static dc_status_t shearwater_predator_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t shearwater_predator_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t shearwater_predator_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t shearwater_predator_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -158,7 +157,6 @@ static dc_status_t shearwater_predator_parser_cache (shearwater_predator_parser_ static const dc_parser_vtable_t shearwater_predator_parser_vtable = { sizeof(shearwater_predator_parser_t), DC_FAMILY_SHEARWATER_PREDATOR, - shearwater_predator_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -171,7 +169,6 @@ static const dc_parser_vtable_t shearwater_predator_parser_vtable = { static const dc_parser_vtable_t shearwater_petrel_parser_vtable = { sizeof(shearwater_predator_parser_t), DC_FAMILY_SHEARWATER_PETREL, - shearwater_predator_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -197,7 +194,7 @@ shearwater_predator_find_gasmix (shearwater_predator_parser_t *parser, unsigned static dc_status_t -shearwater_common_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model, unsigned int petrel) +shearwater_common_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model, unsigned int petrel) { shearwater_predator_parser_t *parser = NULL; const dc_parser_vtable_t *vtable = NULL; @@ -215,7 +212,7 @@ shearwater_common_parser_create (dc_parser_t **out, dc_context_t *context, unsig } // Allocate memory. - parser = (shearwater_predator_parser_t *) dc_parser_allocate (context, vtable); + parser = (shearwater_predator_parser_t *) dc_parser_allocate (context, vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -270,64 +267,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, unsigned int model) +shearwater_predator_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { - return shearwater_common_parser_create (out, context, model, 0); + return shearwater_common_parser_create (out, context, data, size, model, 0); } dc_status_t -shearwater_petrel_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +shearwater_petrel_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { - return shearwater_common_parser_create (out, context, model, 1); -} - - -static dc_status_t -shearwater_predator_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - shearwater_predator_parser_t *parser = (shearwater_predator_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->pnf = 0; - parser->logversion = 0; - parser->headersize = 0; - parser->footersize = 0; - for (unsigned int i = 0; i < NRECORDS; ++i) { - parser->opening[i] = UNDEFINED; - parser->closing[i] = UNDEFINED; - } - parser->final = UNDEFINED; - parser->ngasmixes = 0; - for (unsigned int i = 0; i < NGASMIXES; ++i) { - parser->gasmix[i].oxygen = 0; - parser->gasmix[i].helium = 0; - parser->gasmix[i].diluent = 0; - } - parser->ntanks = 0; - for (unsigned int i = 0; i < NTANKS; ++i) { - parser->tank[i].enabled = 0; - parser->tank[i].active = 0; - parser->tank[i].beginpressure = 0; - parser->tank[i].endpressure = 0; - parser->tank[i].pressure_max = 0; - parser->tank[i].pressure_reserve = 0; - parser->tank[i].serial = 0; - memset (parser->tank[i].name, 0, sizeof (parser->tank[i].name)); - parser->tankidx[i] = i; - } - parser->aimode = AI_OFF; - parser->calibrated = 0; - for (unsigned int i = 0; i < 3; ++i) { - parser->calibration[i] = 0.0; - } - parser->divemode = M_OC_TEC; - parser->units = METRIC; - parser->density = DEF_DENSITY_SALT; - parser->atmospheric = DEF_ATMOSPHERIC / (BAR / 1000); - - return DC_STATUS_SUCCESS; + return shearwater_common_parser_create (out, context, data, size, model, 1); } diff --git a/src/sporasub_sp2.h b/src/sporasub_sp2.h index de2ca42..6b21c45 100644 --- a/src/sporasub_sp2.h +++ b/src/sporasub_sp2.h @@ -35,7 +35,7 @@ dc_status_t sporasub_sp2_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -sporasub_sp2_parser_create (dc_parser_t **parser, dc_context_t *context); +sporasub_sp2_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/sporasub_sp2_parser.c b/src/sporasub_sp2_parser.c index c84a35c..37f0211 100644 --- a/src/sporasub_sp2_parser.c +++ b/src/sporasub_sp2_parser.c @@ -37,7 +37,6 @@ struct sporasub_sp2_parser_t { dc_parser_t base; }; -static dc_status_t sporasub_sp2_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t sporasub_sp2_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t sporasub_sp2_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t sporasub_sp2_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -45,7 +44,6 @@ static dc_status_t sporasub_sp2_parser_samples_foreach (dc_parser_t *abstract, d static const dc_parser_vtable_t sporasub_sp2_parser_vtable = { sizeof(sporasub_sp2_parser_t), DC_FAMILY_SPORASUB_SP2, - sporasub_sp2_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -57,7 +55,7 @@ static const dc_parser_vtable_t sporasub_sp2_parser_vtable = { dc_status_t -sporasub_sp2_parser_create (dc_parser_t **out, dc_context_t *context) +sporasub_sp2_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { sporasub_sp2_parser_t *parser = NULL; @@ -65,7 +63,7 @@ sporasub_sp2_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (sporasub_sp2_parser_t *) dc_parser_allocate (context, &sporasub_sp2_parser_vtable); + parser = (sporasub_sp2_parser_t *) dc_parser_allocate (context, &sporasub_sp2_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -77,13 +75,6 @@ sporasub_sp2_parser_create (dc_parser_t **out, dc_context_t *context) } -static dc_status_t -sporasub_sp2_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - return DC_STATUS_SUCCESS; -} - - static dc_status_t sporasub_sp2_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/suunto_d9.h b/src/suunto_d9.h index 94a782f..e6ae5bd 100644 --- a/src/suunto_d9.h +++ b/src/suunto_d9.h @@ -36,7 +36,7 @@ dc_status_t suunto_d9_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream, unsigned int model); dc_status_t -suunto_d9_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +suunto_d9_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/suunto_d9_parser.c b/src/suunto_d9_parser.c index 43e9ccc..8445d11 100644 --- a/src/suunto_d9_parser.c +++ b/src/suunto_d9_parser.c @@ -92,7 +92,6 @@ typedef struct sample_info_t { unsigned int divisor; } sample_info_t; -static dc_status_t suunto_d9_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t suunto_d9_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t suunto_d9_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t suunto_d9_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -100,7 +99,6 @@ static dc_status_t suunto_d9_parser_samples_foreach (dc_parser_t *abstract, dc_s static const dc_parser_vtable_t suunto_d9_parser_vtable = { sizeof(suunto_d9_parser_t), DC_FAMILY_SUUNTO_D9, - suunto_d9_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -251,7 +249,7 @@ suunto_d9_parser_cache (suunto_d9_parser_t *parser) } dc_status_t -suunto_d9_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +suunto_d9_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { suunto_d9_parser_t *parser = NULL; @@ -259,7 +257,7 @@ suunto_d9_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (suunto_d9_parser_t *) dc_parser_allocate (context, &suunto_d9_parser_vtable); + parser = (suunto_d9_parser_t *) dc_parser_allocate (context, &suunto_d9_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -285,28 +283,6 @@ suunto_d9_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int } -static dc_status_t -suunto_d9_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - suunto_d9_parser_t *parser = (suunto_d9_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->id = 0; - parser->mode = AIR; - parser->ngasmixes = 0; - parser->nccr = 0; - for (unsigned int i = 0; i < NGASMIXES; ++i) { - parser->oxygen[i] = 0; - parser->helium[i] = 0; - } - parser->gasmix = 0; - parser->config = 0; - - return DC_STATUS_SUCCESS; -} - - static dc_status_t suunto_d9_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/suunto_eon.h b/src/suunto_eon.h index 5e99a69..9c605eb 100644 --- a/src/suunto_eon.h +++ b/src/suunto_eon.h @@ -36,7 +36,7 @@ dc_status_t suunto_eon_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -suunto_eon_parser_create (dc_parser_t **parser, dc_context_t *context, int spyder); +suunto_eon_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, int spyder); #ifdef __cplusplus } diff --git a/src/suunto_eon_parser.c b/src/suunto_eon_parser.c index 9bfadda..94370a3 100644 --- a/src/suunto_eon_parser.c +++ b/src/suunto_eon_parser.c @@ -43,7 +43,6 @@ struct suunto_eon_parser_t { unsigned int nitrox; }; -static dc_status_t suunto_eon_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t suunto_eon_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t suunto_eon_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t suunto_eon_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -51,7 +50,6 @@ static dc_status_t suunto_eon_parser_samples_foreach (dc_parser_t *abstract, dc_ static const dc_parser_vtable_t suunto_eon_parser_vtable = { sizeof(suunto_eon_parser_t), DC_FAMILY_SUUNTO_EON, - suunto_eon_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -112,7 +110,7 @@ suunto_eon_parser_cache (suunto_eon_parser_t *parser) } dc_status_t -suunto_eon_parser_create (dc_parser_t **out, dc_context_t *context, int spyder) +suunto_eon_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, int spyder) { suunto_eon_parser_t *parser = NULL; @@ -120,7 +118,7 @@ suunto_eon_parser_create (dc_parser_t **out, dc_context_t *context, int spyder) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (suunto_eon_parser_t *) dc_parser_allocate (context, &suunto_eon_parser_vtable); + parser = (suunto_eon_parser_t *) dc_parser_allocate (context, &suunto_eon_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -140,22 +138,6 @@ suunto_eon_parser_create (dc_parser_t **out, dc_context_t *context, int spyder) } -static dc_status_t -suunto_eon_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - suunto_eon_parser_t *parser = (suunto_eon_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->divetime = 0; - parser->maxdepth = 0; - parser->marker = 0; - parser->nitrox = 0; - - return DC_STATUS_SUCCESS; -} - - static dc_status_t suunto_eon_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/suunto_eonsteel.h b/src/suunto_eonsteel.h index 2800107..cb18296 100644 --- a/src/suunto_eonsteel.h +++ b/src/suunto_eonsteel.h @@ -35,7 +35,7 @@ dc_status_t suunto_eonsteel_device_open(dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream, unsigned int model); dc_status_t -suunto_eonsteel_parser_create(dc_parser_t **parser, dc_context_t *context, unsigned int model); +suunto_eonsteel_parser_create(dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/suunto_eonsteel_parser.c b/src/suunto_eonsteel_parser.c index 5c5c328..d6fd027 100644 --- a/src/suunto_eonsteel_parser.c +++ b/src/suunto_eonsteel_parser.c @@ -1509,18 +1509,6 @@ static void show_all_descriptors(suunto_eonsteel_parser_t *eon) show_descriptor(eon, i, eon->type_desc+i); } -static dc_status_t -suunto_eonsteel_parser_set_data(dc_parser_t *parser, const unsigned char *data, unsigned int size) -{ - suunto_eonsteel_parser_t *eon = (suunto_eonsteel_parser_t *) parser; - - desc_free(eon->type_desc, MAXTYPE); - memset(eon->type_desc, 0, sizeof(eon->type_desc)); - initialize_field_caches(eon); - show_all_descriptors(eon); - return DC_STATUS_SUCCESS; -} - static dc_status_t suunto_eonsteel_parser_destroy(dc_parser_t *parser) { @@ -1534,7 +1522,6 @@ suunto_eonsteel_parser_destroy(dc_parser_t *parser) static const dc_parser_vtable_t suunto_eonsteel_parser_vtable = { sizeof(suunto_eonsteel_parser_t), DC_FAMILY_SUUNTO_EONSTEEL, - suunto_eonsteel_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -1545,14 +1532,14 @@ static const dc_parser_vtable_t suunto_eonsteel_parser_vtable = { }; dc_status_t -suunto_eonsteel_parser_create(dc_parser_t **out, dc_context_t *context, unsigned int model) +suunto_eonsteel_parser_create(dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { suunto_eonsteel_parser_t *parser = NULL; if (out == NULL) return DC_STATUS_INVALIDARGS; - parser = (suunto_eonsteel_parser_t *) dc_parser_allocate (context, &suunto_eonsteel_parser_vtable); + parser = (suunto_eonsteel_parser_t *) dc_parser_allocate (context, &suunto_eonsteel_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -1561,6 +1548,9 @@ suunto_eonsteel_parser_create(dc_parser_t **out, dc_context_t *context, unsigned memset(&parser->type_desc, 0, sizeof(parser->type_desc)); memset(&parser->cache, 0, sizeof(parser->cache)); + initialize_field_caches(parser); + show_all_descriptors(parser); + *out = (dc_parser_t *) parser; return DC_STATUS_SUCCESS; diff --git a/src/suunto_solution.h b/src/suunto_solution.h index 9d9e632..0556ad7 100644 --- a/src/suunto_solution.h +++ b/src/suunto_solution.h @@ -35,7 +35,7 @@ dc_status_t suunto_solution_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -suunto_solution_parser_create (dc_parser_t **parser, dc_context_t *context); +suunto_solution_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/suunto_solution_parser.c b/src/suunto_solution_parser.c index f8320aa..69c6977 100644 --- a/src/suunto_solution_parser.c +++ b/src/suunto_solution_parser.c @@ -39,14 +39,12 @@ struct suunto_solution_parser_t { unsigned int maxdepth; }; -static dc_status_t suunto_solution_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t suunto_solution_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t suunto_solution_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); static const dc_parser_vtable_t suunto_solution_parser_vtable = { sizeof(suunto_solution_parser_t), DC_FAMILY_SUUNTO_SOLUTION, - suunto_solution_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -58,7 +56,7 @@ static const dc_parser_vtable_t suunto_solution_parser_vtable = { dc_status_t -suunto_solution_parser_create (dc_parser_t **out, dc_context_t *context) +suunto_solution_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { suunto_solution_parser_t *parser = NULL; @@ -66,7 +64,7 @@ suunto_solution_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (suunto_solution_parser_t *) dc_parser_allocate (context, &suunto_solution_parser_vtable); + parser = (suunto_solution_parser_t *) dc_parser_allocate (context, &suunto_solution_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -83,20 +81,6 @@ suunto_solution_parser_create (dc_parser_t **out, dc_context_t *context) } -static dc_status_t -suunto_solution_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - suunto_solution_parser_t *parser = (suunto_solution_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->divetime = 0; - parser->maxdepth = 0; - - return DC_STATUS_SUCCESS; -} - - static dc_status_t suunto_solution_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value) { diff --git a/src/suunto_vyper.h b/src/suunto_vyper.h index 858520f..616c094 100644 --- a/src/suunto_vyper.h +++ b/src/suunto_vyper.h @@ -35,7 +35,7 @@ dc_status_t suunto_vyper_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -suunto_vyper_parser_create (dc_parser_t **parser, dc_context_t *context); +suunto_vyper_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/suunto_vyper_parser.c b/src/suunto_vyper_parser.c index fe9bfe2..8311363 100644 --- a/src/suunto_vyper_parser.c +++ b/src/suunto_vyper_parser.c @@ -44,7 +44,6 @@ struct suunto_vyper_parser_t { unsigned int oxygen[NGASMIXES]; }; -static dc_status_t suunto_vyper_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t suunto_vyper_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t suunto_vyper_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t suunto_vyper_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -52,7 +51,6 @@ static dc_status_t suunto_vyper_parser_samples_foreach (dc_parser_t *abstract, d static const dc_parser_vtable_t suunto_vyper_parser_vtable = { sizeof(suunto_vyper_parser_t), DC_FAMILY_SUUNTO_VYPER, - suunto_vyper_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -162,7 +160,7 @@ suunto_vyper_parser_cache (suunto_vyper_parser_t *parser) dc_status_t -suunto_vyper_parser_create (dc_parser_t **out, dc_context_t *context) +suunto_vyper_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { suunto_vyper_parser_t *parser = NULL; @@ -170,7 +168,7 @@ suunto_vyper_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (suunto_vyper_parser_t *) dc_parser_allocate (context, &suunto_vyper_parser_vtable); + parser = (suunto_vyper_parser_t *) dc_parser_allocate (context, &suunto_vyper_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -192,25 +190,6 @@ suunto_vyper_parser_create (dc_parser_t **out, dc_context_t *context) } -static dc_status_t -suunto_vyper_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - suunto_vyper_parser_t *parser = (suunto_vyper_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->divetime = 0; - parser->maxdepth = 0; - parser->marker = 0; - parser->ngasmixes = 0; - for (unsigned int i = 0; i < NGASMIXES; ++i) { - parser->oxygen[i] = 0; - } - - return DC_STATUS_SUCCESS; -} - - static dc_status_t suunto_vyper_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/tecdiving_divecomputereu.h b/src/tecdiving_divecomputereu.h index 714ae43..8eafb4e 100644 --- a/src/tecdiving_divecomputereu.h +++ b/src/tecdiving_divecomputereu.h @@ -35,7 +35,7 @@ dc_status_t tecdiving_divecomputereu_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -tecdiving_divecomputereu_parser_create (dc_parser_t **parser, dc_context_t *context); +tecdiving_divecomputereu_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/tecdiving_divecomputereu_parser.c b/src/tecdiving_divecomputereu_parser.c index b0f1552..4f3f514 100644 --- a/src/tecdiving_divecomputereu_parser.c +++ b/src/tecdiving_divecomputereu_parser.c @@ -36,7 +36,6 @@ struct tecdiving_divecomputereu_parser_t { dc_parser_t base; }; -static dc_status_t tecdiving_divecomputereu_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t tecdiving_divecomputereu_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t tecdiving_divecomputereu_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t tecdiving_divecomputereu_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -44,7 +43,6 @@ static dc_status_t tecdiving_divecomputereu_parser_samples_foreach (dc_parser_t static const dc_parser_vtable_t tecdiving_divecomputereu_parser_vtable = { sizeof(tecdiving_divecomputereu_parser_t), DC_FAMILY_TECDIVING_DIVECOMPUTEREU, - tecdiving_divecomputereu_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -56,7 +54,7 @@ static const dc_parser_vtable_t tecdiving_divecomputereu_parser_vtable = { dc_status_t -tecdiving_divecomputereu_parser_create (dc_parser_t **out, dc_context_t *context) +tecdiving_divecomputereu_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { tecdiving_divecomputereu_parser_t *parser = NULL; @@ -64,7 +62,7 @@ tecdiving_divecomputereu_parser_create (dc_parser_t **out, dc_context_t *context return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (tecdiving_divecomputereu_parser_t *) dc_parser_allocate (context, &tecdiving_divecomputereu_parser_vtable); + parser = (tecdiving_divecomputereu_parser_t *) dc_parser_allocate (context, &tecdiving_divecomputereu_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -76,13 +74,6 @@ tecdiving_divecomputereu_parser_create (dc_parser_t **out, dc_context_t *context } -static dc_status_t -tecdiving_divecomputereu_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - return DC_STATUS_SUCCESS; -} - - static dc_status_t tecdiving_divecomputereu_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/uwatec_memomouse.h b/src/uwatec_memomouse.h index 34ca2d3..e038cf9 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); +uwatec_memomouse_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size); #ifdef __cplusplus } diff --git a/src/uwatec_memomouse_parser.c b/src/uwatec_memomouse_parser.c index 1019c6a..0849a3c 100644 --- a/src/uwatec_memomouse_parser.c +++ b/src/uwatec_memomouse_parser.c @@ -38,7 +38,6 @@ struct uwatec_memomouse_parser_t { dc_ticks_t systime; }; -static dc_status_t uwatec_memomouse_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t uwatec_memomouse_parser_set_clock (dc_parser_t *abstract, unsigned int devtime, dc_ticks_t systime); static dc_status_t uwatec_memomouse_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t uwatec_memomouse_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); @@ -47,7 +46,6 @@ static dc_status_t uwatec_memomouse_parser_samples_foreach (dc_parser_t *abstrac static const dc_parser_vtable_t uwatec_memomouse_parser_vtable = { sizeof(uwatec_memomouse_parser_t), DC_FAMILY_UWATEC_MEMOMOUSE, - uwatec_memomouse_parser_set_data, /* set_data */ uwatec_memomouse_parser_set_clock, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -59,7 +57,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) +uwatec_memomouse_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size) { uwatec_memomouse_parser_t *parser = NULL; @@ -67,7 +65,7 @@ uwatec_memomouse_parser_create (dc_parser_t **out, dc_context_t *context) return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (uwatec_memomouse_parser_t *) dc_parser_allocate (context, &uwatec_memomouse_parser_vtable); + parser = (uwatec_memomouse_parser_t *) dc_parser_allocate (context, &uwatec_memomouse_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -83,13 +81,6 @@ uwatec_memomouse_parser_create (dc_parser_t **out, dc_context_t *context) } -static dc_status_t -uwatec_memomouse_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - return DC_STATUS_SUCCESS; -} - - static dc_status_t uwatec_memomouse_parser_set_clock (dc_parser_t *abstract, unsigned int devtime, dc_ticks_t systime) { diff --git a/src/uwatec_smart.h b/src/uwatec_smart.h index 49013c5..646cc97 100644 --- a/src/uwatec_smart.h +++ b/src/uwatec_smart.h @@ -35,7 +35,7 @@ dc_status_t uwatec_smart_device_open (dc_device_t **device, dc_context_t *context, dc_iostream_t *iostream); dc_status_t -uwatec_smart_parser_create (dc_parser_t **parser, dc_context_t *context, unsigned int model); +uwatec_smart_parser_create (dc_parser_t **parser, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model); #ifdef __cplusplus } diff --git a/src/uwatec_smart_parser.c b/src/uwatec_smart_parser.c index d98801b..c6c356d 100644 --- a/src/uwatec_smart_parser.c +++ b/src/uwatec_smart_parser.c @@ -157,7 +157,6 @@ struct uwatec_smart_parser_t { dc_divemode_t divemode; }; -static dc_status_t uwatec_smart_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size); static dc_status_t uwatec_smart_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t uwatec_smart_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t uwatec_smart_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -167,7 +166,6 @@ static dc_status_t uwatec_smart_parse (uwatec_smart_parser_t *parser, dc_sample_ static const dc_parser_vtable_t uwatec_smart_parser_vtable = { sizeof(uwatec_smart_parser_t), DC_FAMILY_UWATEC_SMART, - uwatec_smart_parser_set_data, /* set_data */ NULL, /* set_clock */ NULL, /* set_atmospheric */ NULL, /* set_density */ @@ -573,7 +571,7 @@ uwatec_smart_parser_cache (uwatec_smart_parser_t *parser) dc_status_t -uwatec_smart_parser_create (dc_parser_t **out, dc_context_t *context, unsigned int model) +uwatec_smart_parser_create (dc_parser_t **out, dc_context_t *context, const unsigned char data[], size_t size, unsigned int model) { dc_status_t status = DC_STATUS_SUCCESS; uwatec_smart_parser_t *parser = NULL; @@ -582,7 +580,7 @@ uwatec_smart_parser_create (dc_parser_t **out, dc_context_t *context, unsigned i return DC_STATUS_INVALIDARGS; // Allocate memory. - parser = (uwatec_smart_parser_t *) dc_parser_allocate (context, &uwatec_smart_parser_vtable); + parser = (uwatec_smart_parser_t *) dc_parser_allocate (context, &uwatec_smart_parser_vtable, data, size); if (parser == NULL) { ERROR (context, "Failed to allocate memory."); return DC_STATUS_NOMEMORY; @@ -707,31 +705,6 @@ error_free: } -static dc_status_t -uwatec_smart_parser_set_data (dc_parser_t *abstract, const unsigned char *data, unsigned int size) -{ - uwatec_smart_parser_t *parser = (uwatec_smart_parser_t *) abstract; - - // Reset the cache. - parser->cached = 0; - parser->ngasmixes = 0; - parser->ntanks = 0; - for (unsigned int i = 0; i < NGASMIXES; ++i) { - parser->gasmix[i].id = 0; - parser->gasmix[i].oxygen = 0; - parser->gasmix[i].helium = 0; - parser->tank[i].id = 0; - parser->tank[i].beginpressure = 0; - parser->tank[i].endpressure = 0; - parser->tank[i].gasmix = 0; - } - parser->watertype = DC_WATER_FRESH; - parser->divemode = DC_DIVEMODE_OC; - - return DC_STATUS_SUCCESS; -} - - static dc_status_t uwatec_smart_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) {