From 6ab140461a3a85fba3803283070427f3be413c79 Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Fri, 23 Apr 2021 20:10:23 +0200 Subject: [PATCH] Add a public api to configure the depth calibration Some dive computers store the depth as an absolute pressure value (in bar). To convert to a depth value (in meters), the atmospheric pressure and water density are required. For dive computers that do not have those values available, libdivecomputer uses a default value. With the new public api functions, applications can adjust those default values. Some dive computers already provided a backend specific calibration function. Those functions are now deprecated. They are kept around to maintain backwards compatibility for now, but they will be removed in the next version. --- include/libdivecomputer/parser.h | 6 ++++++ src/atomics_cobalt_parser.c | 14 ++++++++++++++ src/citizen_aqualand_parser.c | 2 ++ src/cochran_commander_parser.c | 2 ++ src/cressi_edy_parser.c | 2 ++ src/cressi_goa_parser.c | 2 ++ src/cressi_leonardo_parser.c | 2 ++ src/deepsix_excursion_parser.c | 2 ++ src/diverite_nitekq_parser.c | 2 ++ src/divesystem_idive_parser.c | 2 ++ src/hw_ostc_parser.c | 2 ++ src/libdivecomputer.symbols | 2 ++ src/liquivision_lynx_parser.c | 2 ++ src/mares_darwin_parser.c | 2 ++ src/mares_iconhd_parser.c | 2 ++ src/mares_nemo_parser.c | 2 ++ src/mclean_extreme_parser.c | 2 ++ src/oceanic_atom2_parser.c | 2 ++ src/oceanic_veo250_parser.c | 2 ++ src/oceanic_vtpro_parser.c | 2 ++ src/parser-private.h | 4 ++++ src/parser.c | 26 ++++++++++++++++++++++++++ src/reefnet_sensus_parser.c | 26 ++++++++++++++++++++++++++ src/reefnet_sensuspro_parser.c | 26 ++++++++++++++++++++++++++ src/reefnet_sensusultra_parser.c | 26 ++++++++++++++++++++++++++ src/seac_screen_parser.c | 2 ++ src/shearwater_predator_parser.c | 4 ++++ src/sporasub_sp2_parser.c | 2 ++ src/suunto_d9_parser.c | 2 ++ src/suunto_eon_parser.c | 2 ++ src/suunto_eonsteel_parser.c | 2 ++ src/suunto_solution_parser.c | 2 ++ src/suunto_vyper_parser.c | 2 ++ src/tecdiving_divecomputereu_parser.c | 2 ++ src/uwatec_memomouse_parser.c | 2 ++ src/uwatec_smart_parser.c | 2 ++ 36 files changed, 188 insertions(+) diff --git a/include/libdivecomputer/parser.h b/include/libdivecomputer/parser.h index dc81317..2713d9b 100644 --- a/include/libdivecomputer/parser.h +++ b/include/libdivecomputer/parser.h @@ -270,6 +270,12 @@ dc_parser_new2 (dc_parser_t **parser, dc_context_t *context, dc_descriptor_t *de dc_family_t dc_parser_get_type (dc_parser_t *parser); +dc_status_t +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); diff --git a/src/atomics_cobalt_parser.c b/src/atomics_cobalt_parser.c index 545b500..0b24bee 100644 --- a/src/atomics_cobalt_parser.c +++ b/src/atomics_cobalt_parser.c @@ -44,6 +44,7 @@ struct atomics_cobalt_parser_t { }; 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); static dc_status_t atomics_cobalt_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -52,6 +53,8 @@ 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_atmospheric */ + atomics_cobalt_parser_set_density, /* set_density */ atomics_cobalt_parser_get_datetime, /* datetime */ atomics_cobalt_parser_get_field, /* fields */ atomics_cobalt_parser_samples_foreach, /* samples_foreach */ @@ -104,6 +107,17 @@ atomics_cobalt_parser_set_calibration (dc_parser_t *abstract, double atmospheric } +static dc_status_t +atomics_cobalt_parser_set_density (dc_parser_t *abstract, double density) +{ + atomics_cobalt_parser_t *parser = (atomics_cobalt_parser_t *) abstract; + + parser->hydrostatic = density * GRAVITY; + + return DC_STATUS_SUCCESS; +} + + static dc_status_t atomics_cobalt_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/citizen_aqualand_parser.c b/src/citizen_aqualand_parser.c index 319dcf7..806578c 100644 --- a/src/citizen_aqualand_parser.c +++ b/src/citizen_aqualand_parser.c @@ -45,6 +45,8 @@ 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_atmospheric */ + NULL, /* set_density */ citizen_aqualand_parser_get_datetime, /* datetime */ citizen_aqualand_parser_get_field, /* fields */ citizen_aqualand_parser_samples_foreach, /* samples_foreach */ diff --git a/src/cochran_commander_parser.c b/src/cochran_commander_parser.c index 853b01b..f1906ae 100644 --- a/src/cochran_commander_parser.c +++ b/src/cochran_commander_parser.c @@ -108,6 +108,8 @@ 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_atmospheric */ + NULL, /* set_density */ cochran_commander_parser_get_datetime, /* datetime */ cochran_commander_parser_get_field, /* fields */ cochran_commander_parser_samples_foreach, /* samples_foreach */ diff --git a/src/cressi_edy_parser.c b/src/cressi_edy_parser.c index eaf55c3..9d41635 100644 --- a/src/cressi_edy_parser.c +++ b/src/cressi_edy_parser.c @@ -47,6 +47,8 @@ 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_atmospheric */ + NULL, /* set_density */ cressi_edy_parser_get_datetime, /* datetime */ cressi_edy_parser_get_field, /* fields */ cressi_edy_parser_samples_foreach, /* samples_foreach */ diff --git a/src/cressi_goa_parser.c b/src/cressi_goa_parser.c index 53263b1..8e25d5f 100644 --- a/src/cressi_goa_parser.c +++ b/src/cressi_goa_parser.c @@ -64,6 +64,8 @@ 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_atmospheric */ + NULL, /* set_density */ cressi_goa_parser_get_datetime, /* datetime */ cressi_goa_parser_get_field, /* fields */ cressi_goa_parser_samples_foreach, /* samples_foreach */ diff --git a/src/cressi_leonardo_parser.c b/src/cressi_leonardo_parser.c index d4f37f5..1899876 100644 --- a/src/cressi_leonardo_parser.c +++ b/src/cressi_leonardo_parser.c @@ -48,6 +48,8 @@ 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_atmospheric */ + NULL, /* set_density */ cressi_leonardo_parser_get_datetime, /* datetime */ cressi_leonardo_parser_get_field, /* fields */ cressi_leonardo_parser_samples_foreach, /* samples_foreach */ diff --git a/src/deepsix_excursion_parser.c b/src/deepsix_excursion_parser.c index a5d312d..ad8aca0 100644 --- a/src/deepsix_excursion_parser.c +++ b/src/deepsix_excursion_parser.c @@ -54,6 +54,8 @@ 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_atmospheric */ + NULL, /* set_density */ deepsix_excursion_parser_get_datetime, /* datetime */ deepsix_excursion_parser_get_field, /* fields */ deepsix_excursion_parser_samples_foreach, /* samples_foreach */ diff --git a/src/diverite_nitekq_parser.c b/src/diverite_nitekq_parser.c index a09b0e5..a4a13cf 100644 --- a/src/diverite_nitekq_parser.c +++ b/src/diverite_nitekq_parser.c @@ -58,6 +58,8 @@ 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_atmospheric */ + NULL, /* set_density */ diverite_nitekq_parser_get_datetime, /* datetime */ diverite_nitekq_parser_get_field, /* fields */ diverite_nitekq_parser_samples_foreach, /* samples_foreach */ diff --git a/src/divesystem_idive_parser.c b/src/divesystem_idive_parser.c index f0d7700..c19bfd4 100644 --- a/src/divesystem_idive_parser.c +++ b/src/divesystem_idive_parser.c @@ -91,6 +91,8 @@ 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_atmospheric */ + NULL, /* set_density */ divesystem_idive_parser_get_datetime, /* datetime */ divesystem_idive_parser_get_field, /* fields */ divesystem_idive_parser_samples_foreach, /* samples_foreach */ diff --git a/src/hw_ostc_parser.c b/src/hw_ostc_parser.c index 06470d7..343cc6d 100644 --- a/src/hw_ostc_parser.c +++ b/src/hw_ostc_parser.c @@ -137,6 +137,8 @@ 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_atmospheric */ + NULL, /* set_density */ hw_ostc_parser_get_datetime, /* datetime */ hw_ostc_parser_get_field, /* fields */ hw_ostc_parser_samples_foreach, /* samples_foreach */ diff --git a/src/libdivecomputer.symbols b/src/libdivecomputer.symbols index 800e217..a8cb63c 100644 --- a/src/libdivecomputer.symbols +++ b/src/libdivecomputer.symbols @@ -87,6 +87,8 @@ dc_custom_open dc_parser_new dc_parser_new2 +dc_parser_set_atmospheric +dc_parser_set_density dc_parser_get_type dc_parser_set_data dc_parser_get_datetime diff --git a/src/liquivision_lynx_parser.c b/src/liquivision_lynx_parser.c index 2ff52cb..8009ff8 100644 --- a/src/liquivision_lynx_parser.c +++ b/src/liquivision_lynx_parser.c @@ -126,6 +126,8 @@ 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_atmospheric */ + NULL, /* set_density */ liquivision_lynx_parser_get_datetime, /* datetime */ liquivision_lynx_parser_get_field, /* fields */ liquivision_lynx_parser_samples_foreach, /* samples_foreach */ diff --git a/src/mares_darwin_parser.c b/src/mares_darwin_parser.c index ba0382f..3bca55c 100644 --- a/src/mares_darwin_parser.c +++ b/src/mares_darwin_parser.c @@ -56,6 +56,8 @@ 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_atmospheric */ + NULL, /* set_density */ mares_darwin_parser_get_datetime, /* datetime */ mares_darwin_parser_get_field, /* fields */ mares_darwin_parser_samples_foreach, /* samples_foreach */ diff --git a/src/mares_iconhd_parser.c b/src/mares_iconhd_parser.c index 93cc5f2..5398cfc 100644 --- a/src/mares_iconhd_parser.c +++ b/src/mares_iconhd_parser.c @@ -273,6 +273,8 @@ 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_atmospheric */ + NULL, /* set_density */ mares_iconhd_parser_get_datetime, /* datetime */ mares_iconhd_parser_get_field, /* fields */ mares_iconhd_parser_samples_foreach, /* samples_foreach */ diff --git a/src/mares_nemo_parser.c b/src/mares_nemo_parser.c index c0ab03b..85957a0 100644 --- a/src/mares_nemo_parser.c +++ b/src/mares_nemo_parser.c @@ -68,6 +68,8 @@ 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_atmospheric */ + NULL, /* set_density */ mares_nemo_parser_get_datetime, /* datetime */ mares_nemo_parser_get_field, /* fields */ mares_nemo_parser_samples_foreach, /* samples_foreach */ diff --git a/src/mclean_extreme_parser.c b/src/mclean_extreme_parser.c index 5fef8aa..5f99fda 100644 --- a/src/mclean_extreme_parser.c +++ b/src/mclean_extreme_parser.c @@ -67,6 +67,8 @@ 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_atmospheric */ + NULL, /* set_density */ mclean_extreme_parser_get_datetime, /* datetime */ mclean_extreme_parser_get_field, /* fields */ mclean_extreme_parser_samples_foreach, /* samples_foreach */ diff --git a/src/oceanic_atom2_parser.c b/src/oceanic_atom2_parser.c index bd89f9c..90a9cfc 100644 --- a/src/oceanic_atom2_parser.c +++ b/src/oceanic_atom2_parser.c @@ -140,6 +140,8 @@ 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_atmospheric */ + NULL, /* set_density */ oceanic_atom2_parser_get_datetime, /* datetime */ oceanic_atom2_parser_get_field, /* fields */ oceanic_atom2_parser_samples_foreach, /* samples_foreach */ diff --git a/src/oceanic_veo250_parser.c b/src/oceanic_veo250_parser.c index fc7c6ed..1eff473 100644 --- a/src/oceanic_veo250_parser.c +++ b/src/oceanic_veo250_parser.c @@ -57,6 +57,8 @@ 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_atmospheric */ + NULL, /* set_density */ oceanic_veo250_parser_get_datetime, /* datetime */ oceanic_veo250_parser_get_field, /* fields */ oceanic_veo250_parser_samples_foreach, /* samples_foreach */ diff --git a/src/oceanic_vtpro_parser.c b/src/oceanic_vtpro_parser.c index fff7389..6c8d200 100644 --- a/src/oceanic_vtpro_parser.c +++ b/src/oceanic_vtpro_parser.c @@ -53,6 +53,8 @@ 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_atmospheric */ + NULL, /* set_density */ oceanic_vtpro_parser_get_datetime, /* datetime */ oceanic_vtpro_parser_get_field, /* fields */ oceanic_vtpro_parser_samples_foreach, /* samples_foreach */ diff --git a/src/parser-private.h b/src/parser-private.h index 497b1b1..73ef161 100644 --- a/src/parser-private.h +++ b/src/parser-private.h @@ -52,6 +52,10 @@ struct dc_parser_vtable_t { dc_status_t (*set_data) (dc_parser_t *parser, const unsigned char *data, unsigned int size); + dc_status_t (*set_atmospheric) (dc_parser_t *parser, double atmospheric); + + dc_status_t (*set_density) (dc_parser_t *parser, double density); + dc_status_t (*datetime) (dc_parser_t *parser, dc_datetime_t *datetime); dc_status_t (*field) (dc_parser_t *parser, dc_field_type_t type, unsigned int flags, void *value); diff --git a/src/parser.c b/src/parser.c index 0750eb1..1f74ea8 100644 --- a/src/parser.c +++ b/src/parser.c @@ -270,6 +270,32 @@ dc_parser_get_type (dc_parser_t *parser) } +dc_status_t +dc_parser_set_atmospheric (dc_parser_t *parser, double atmospheric) +{ + if (parser == NULL) + return DC_STATUS_UNSUPPORTED; + + if (parser->vtable->set_atmospheric == NULL) + return DC_STATUS_UNSUPPORTED; + + return parser->vtable->set_atmospheric (parser, atmospheric); +} + + +dc_status_t +dc_parser_set_density (dc_parser_t *parser, double density) +{ + if (parser == NULL) + return DC_STATUS_UNSUPPORTED; + + if (parser->vtable->set_density == NULL) + return DC_STATUS_UNSUPPORTED; + + return parser->vtable->set_density (parser, density); +} + + dc_status_t dc_parser_set_data (dc_parser_t *parser, const unsigned char *data, unsigned int size) { diff --git a/src/reefnet_sensus_parser.c b/src/reefnet_sensus_parser.c index 5b3cf7b..4af1660 100644 --- a/src/reefnet_sensus_parser.c +++ b/src/reefnet_sensus_parser.c @@ -49,6 +49,8 @@ struct reefnet_sensus_parser_t { }; 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_atmospheric (dc_parser_t *abstract, double atmospheric); +static dc_status_t reefnet_sensus_parser_set_density (dc_parser_t *abstract, double density); static dc_status_t reefnet_sensus_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t reefnet_sensus_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t reefnet_sensus_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -57,6 +59,8 @@ 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_atmospheric, /* set_atmospheric */ + reefnet_sensus_parser_set_density, /* set_density */ reefnet_sensus_parser_get_datetime, /* datetime */ reefnet_sensus_parser_get_field, /* fields */ reefnet_sensus_parser_samples_foreach, /* samples_foreach */ @@ -123,6 +127,28 @@ reefnet_sensus_parser_set_calibration (dc_parser_t *abstract, double atmospheric } +static dc_status_t +reefnet_sensus_parser_set_atmospheric (dc_parser_t *abstract, double atmospheric) +{ + reefnet_sensus_parser_t *parser = (reefnet_sensus_parser_t *) abstract; + + parser->atmospheric = atmospheric; + + return DC_STATUS_SUCCESS; +} + + +static dc_status_t +reefnet_sensus_parser_set_density (dc_parser_t *abstract, double density) +{ + reefnet_sensus_parser_t *parser = (reefnet_sensus_parser_t *) abstract; + + parser->hydrostatic = density * GRAVITY; + + return DC_STATUS_SUCCESS; +} + + static dc_status_t reefnet_sensus_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/reefnet_sensuspro_parser.c b/src/reefnet_sensuspro_parser.c index 267c99e..f8f23eb 100644 --- a/src/reefnet_sensuspro_parser.c +++ b/src/reefnet_sensuspro_parser.c @@ -48,6 +48,8 @@ struct reefnet_sensuspro_parser_t { }; 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_atmospheric (dc_parser_t *abstract, double atmospheric); +static dc_status_t reefnet_sensuspro_parser_set_density (dc_parser_t *abstract, double density); static dc_status_t reefnet_sensuspro_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t reefnet_sensuspro_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t reefnet_sensuspro_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -56,6 +58,8 @@ 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_atmospheric, /* set_atmospheric */ + reefnet_sensuspro_parser_set_density, /* set_density */ reefnet_sensuspro_parser_get_datetime, /* datetime */ reefnet_sensuspro_parser_get_field, /* fields */ reefnet_sensuspro_parser_samples_foreach, /* samples_foreach */ @@ -122,6 +126,28 @@ reefnet_sensuspro_parser_set_calibration (dc_parser_t *abstract, double atmosphe } +static dc_status_t +reefnet_sensuspro_parser_set_atmospheric (dc_parser_t *abstract, double atmospheric) +{ + reefnet_sensuspro_parser_t *parser = (reefnet_sensuspro_parser_t *) abstract; + + parser->atmospheric = atmospheric; + + return DC_STATUS_SUCCESS; +} + + +static dc_status_t +reefnet_sensuspro_parser_set_density (dc_parser_t *abstract, double density) +{ + reefnet_sensuspro_parser_t *parser = (reefnet_sensuspro_parser_t *) abstract; + + parser->hydrostatic = density * GRAVITY; + + return DC_STATUS_SUCCESS; +} + + static dc_status_t reefnet_sensuspro_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/reefnet_sensusultra_parser.c b/src/reefnet_sensusultra_parser.c index da86180..f19364e 100644 --- a/src/reefnet_sensusultra_parser.c +++ b/src/reefnet_sensusultra_parser.c @@ -48,6 +48,8 @@ struct reefnet_sensusultra_parser_t { }; 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_atmospheric (dc_parser_t *abstract, double atmospheric); +static dc_status_t reefnet_sensusultra_parser_set_density (dc_parser_t *abstract, double density); static dc_status_t reefnet_sensusultra_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); static dc_status_t reefnet_sensusultra_parser_get_field (dc_parser_t *abstract, dc_field_type_t type, unsigned int flags, void *value); static dc_status_t reefnet_sensusultra_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -56,6 +58,8 @@ 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_atmospheric, /* set_atmospheric */ + reefnet_sensusultra_parser_set_density, /* set_density */ reefnet_sensusultra_parser_get_datetime, /* datetime */ reefnet_sensusultra_parser_get_field, /* fields */ reefnet_sensusultra_parser_samples_foreach, /* samples_foreach */ @@ -122,6 +126,28 @@ reefnet_sensusultra_parser_set_calibration (dc_parser_t *abstract, double atmosp } +static dc_status_t +reefnet_sensusultra_parser_set_atmospheric (dc_parser_t *abstract, double atmospheric) +{ + reefnet_sensusultra_parser_t *parser = (reefnet_sensusultra_parser_t *) abstract; + + parser->atmospheric = atmospheric; + + return DC_STATUS_SUCCESS; +} + + +static dc_status_t +reefnet_sensusultra_parser_set_density (dc_parser_t *abstract, double density) +{ + reefnet_sensusultra_parser_t *parser = (reefnet_sensusultra_parser_t *) abstract; + + parser->hydrostatic = density * GRAVITY; + + return DC_STATUS_SUCCESS; +} + + static dc_status_t reefnet_sensusultra_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/seac_screen_parser.c b/src/seac_screen_parser.c index 46e3303..2a8647d 100644 --- a/src/seac_screen_parser.c +++ b/src/seac_screen_parser.c @@ -57,6 +57,8 @@ 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_atmospheric */ + NULL, /* set_density */ seac_screen_parser_get_datetime, /* datetime */ seac_screen_parser_get_field, /* fields */ seac_screen_parser_samples_foreach, /* samples_foreach */ diff --git a/src/shearwater_predator_parser.c b/src/shearwater_predator_parser.c index e1334d7..b658e6e 100644 --- a/src/shearwater_predator_parser.c +++ b/src/shearwater_predator_parser.c @@ -152,6 +152,8 @@ 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_atmospheric */ + NULL, /* set_density */ shearwater_predator_parser_get_datetime, /* datetime */ shearwater_predator_parser_get_field, /* fields */ shearwater_predator_parser_samples_foreach, /* samples_foreach */ @@ -162,6 +164,8 @@ 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_atmospheric */ + NULL, /* set_density */ shearwater_predator_parser_get_datetime, /* datetime */ shearwater_predator_parser_get_field, /* fields */ shearwater_predator_parser_samples_foreach, /* samples_foreach */ diff --git a/src/sporasub_sp2_parser.c b/src/sporasub_sp2_parser.c index 42cde0c..3869a39 100644 --- a/src/sporasub_sp2_parser.c +++ b/src/sporasub_sp2_parser.c @@ -46,6 +46,8 @@ 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_atmospheric */ + NULL, /* set_density */ sporasub_sp2_parser_get_datetime, /* datetime */ sporasub_sp2_parser_get_field, /* fields */ sporasub_sp2_parser_samples_foreach, /* samples_foreach */ diff --git a/src/suunto_d9_parser.c b/src/suunto_d9_parser.c index 32e28ea..164b01e 100644 --- a/src/suunto_d9_parser.c +++ b/src/suunto_d9_parser.c @@ -101,6 +101,8 @@ 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_atmospheric */ + NULL, /* set_density */ suunto_d9_parser_get_datetime, /* datetime */ suunto_d9_parser_get_field, /* fields */ suunto_d9_parser_samples_foreach, /* samples_foreach */ diff --git a/src/suunto_eon_parser.c b/src/suunto_eon_parser.c index 2106c69..28d94c2 100644 --- a/src/suunto_eon_parser.c +++ b/src/suunto_eon_parser.c @@ -52,6 +52,8 @@ 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_atmospheric */ + NULL, /* set_density */ suunto_eon_parser_get_datetime, /* datetime */ suunto_eon_parser_get_field, /* fields */ suunto_eon_parser_samples_foreach, /* samples_foreach */ diff --git a/src/suunto_eonsteel_parser.c b/src/suunto_eonsteel_parser.c index cc9276a..fa9d880 100644 --- a/src/suunto_eonsteel_parser.c +++ b/src/suunto_eonsteel_parser.c @@ -1525,6 +1525,8 @@ 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_atmospheric */ + NULL, /* set_density */ suunto_eonsteel_parser_get_datetime, /* datetime */ suunto_eonsteel_parser_get_field, /* fields */ suunto_eonsteel_parser_samples_foreach, /* samples_foreach */ diff --git a/src/suunto_solution_parser.c b/src/suunto_solution_parser.c index 34aab7d..440a067 100644 --- a/src/suunto_solution_parser.c +++ b/src/suunto_solution_parser.c @@ -47,6 +47,8 @@ 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_atmospheric */ + NULL, /* set_density */ NULL, /* datetime */ suunto_solution_parser_get_field, /* fields */ suunto_solution_parser_samples_foreach, /* samples_foreach */ diff --git a/src/suunto_vyper_parser.c b/src/suunto_vyper_parser.c index d7af05c..e14ffc8 100644 --- a/src/suunto_vyper_parser.c +++ b/src/suunto_vyper_parser.c @@ -53,6 +53,8 @@ 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_atmospheric */ + NULL, /* set_density */ suunto_vyper_parser_get_datetime, /* datetime */ suunto_vyper_parser_get_field, /* fields */ suunto_vyper_parser_samples_foreach, /* samples_foreach */ diff --git a/src/tecdiving_divecomputereu_parser.c b/src/tecdiving_divecomputereu_parser.c index a3006ea..7b8d76b 100644 --- a/src/tecdiving_divecomputereu_parser.c +++ b/src/tecdiving_divecomputereu_parser.c @@ -45,6 +45,8 @@ 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_atmospheric */ + NULL, /* set_density */ tecdiving_divecomputereu_parser_get_datetime, /* datetime */ tecdiving_divecomputereu_parser_get_field, /* fields */ tecdiving_divecomputereu_parser_samples_foreach, /* samples_foreach */ diff --git a/src/uwatec_memomouse_parser.c b/src/uwatec_memomouse_parser.c index 386e984..ae2267c 100644 --- a/src/uwatec_memomouse_parser.c +++ b/src/uwatec_memomouse_parser.c @@ -47,6 +47,8 @@ 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 */ + NULL, /* set_atmospheric */ + NULL, /* set_density */ uwatec_memomouse_parser_get_datetime, /* datetime */ uwatec_memomouse_parser_get_field, /* fields */ uwatec_memomouse_parser_samples_foreach, /* samples_foreach */ diff --git a/src/uwatec_smart_parser.c b/src/uwatec_smart_parser.c index 74e6317..ec1a25e 100644 --- a/src/uwatec_smart_parser.c +++ b/src/uwatec_smart_parser.c @@ -167,6 +167,8 @@ 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_atmospheric */ + NULL, /* set_density */ uwatec_smart_parser_get_datetime, /* datetime */ uwatec_smart_parser_get_field, /* fields */ uwatec_smart_parser_samples_foreach, /* samples_foreach */