From 12c77a228e84f1ceed520b6afb53b4b64ea9def6 Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Fri, 23 Apr 2021 21:10:41 +0200 Subject: [PATCH] Add a public api to configure the clock synchronization For dive computers where the reference time (epoch) of the device is unknown, libdivecomputer uses the current time of the device (devtime) and the host system (systime) to synchronize both clocks. Currently, both timestamps are passed directly to the constructor of the parser. With the new public function, the application can adjust the timestamps afterwards. --- include/libdivecomputer/parser.h | 3 +++ src/atomics_cobalt_parser.c | 1 + src/citizen_aqualand_parser.c | 1 + src/cochran_commander_parser.c | 1 + src/cressi_edy_parser.c | 1 + src/cressi_goa_parser.c | 1 + src/cressi_leonardo_parser.c | 1 + src/deepsix_excursion_parser.c | 1 + src/diverite_nitekq_parser.c | 1 + src/divesystem_idive_parser.c | 1 + src/hw_ostc_parser.c | 1 + src/libdivecomputer.symbols | 1 + src/liquivision_lynx_parser.c | 1 + src/mares_darwin_parser.c | 1 + src/mares_iconhd_parser.c | 1 + src/mares_nemo_parser.c | 1 + src/mclean_extreme_parser.c | 1 + src/oceanic_atom2_parser.c | 1 + src/oceanic_veo250_parser.c | 1 + src/oceanic_vtpro_parser.c | 1 + src/parser-private.h | 2 ++ src/parser.c | 13 +++++++++++++ src/reefnet_sensus_parser.c | 13 +++++++++++++ src/reefnet_sensuspro_parser.c | 14 ++++++++++++++ src/reefnet_sensusultra_parser.c | 14 ++++++++++++++ src/seac_screen_parser.c | 1 + src/shearwater_predator_parser.c | 2 ++ src/sporasub_sp2_parser.c | 1 + src/suunto_d9_parser.c | 1 + src/suunto_eon_parser.c | 1 + src/suunto_eonsteel_parser.c | 1 + src/suunto_solution_parser.c | 1 + src/suunto_vyper_parser.c | 1 + src/tecdiving_divecomputereu_parser.c | 1 + src/uwatec_memomouse_parser.c | 14 ++++++++++++++ src/uwatec_smart_parser.c | 1 + 36 files changed, 103 insertions(+) diff --git a/include/libdivecomputer/parser.h b/include/libdivecomputer/parser.h index 2713d9b..6c49d0b 100644 --- a/include/libdivecomputer/parser.h +++ b/include/libdivecomputer/parser.h @@ -270,6 +270,9 @@ 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_clock (dc_parser_t *parser, unsigned int devtime, dc_ticks_t systime); + dc_status_t dc_parser_set_atmospheric (dc_parser_t *parser, double atmospheric); diff --git a/src/atomics_cobalt_parser.c b/src/atomics_cobalt_parser.c index 0b24bee..905b730 100644 --- a/src/atomics_cobalt_parser.c +++ b/src/atomics_cobalt_parser.c @@ -53,6 +53,7 @@ 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 */ atomics_cobalt_parser_get_datetime, /* datetime */ diff --git a/src/citizen_aqualand_parser.c b/src/citizen_aqualand_parser.c index 806578c..5b95555 100644 --- a/src/citizen_aqualand_parser.c +++ b/src/citizen_aqualand_parser.c @@ -45,6 +45,7 @@ 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 */ citizen_aqualand_parser_get_datetime, /* datetime */ diff --git a/src/cochran_commander_parser.c b/src/cochran_commander_parser.c index f1906ae..a4515ea 100644 --- a/src/cochran_commander_parser.c +++ b/src/cochran_commander_parser.c @@ -108,6 +108,7 @@ 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 */ cochran_commander_parser_get_datetime, /* datetime */ diff --git a/src/cressi_edy_parser.c b/src/cressi_edy_parser.c index 9d41635..3817fc7 100644 --- a/src/cressi_edy_parser.c +++ b/src/cressi_edy_parser.c @@ -47,6 +47,7 @@ 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 */ cressi_edy_parser_get_datetime, /* datetime */ diff --git a/src/cressi_goa_parser.c b/src/cressi_goa_parser.c index 8e25d5f..deb44b3 100644 --- a/src/cressi_goa_parser.c +++ b/src/cressi_goa_parser.c @@ -64,6 +64,7 @@ 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 */ cressi_goa_parser_get_datetime, /* datetime */ diff --git a/src/cressi_leonardo_parser.c b/src/cressi_leonardo_parser.c index 1899876..eefebdf 100644 --- a/src/cressi_leonardo_parser.c +++ b/src/cressi_leonardo_parser.c @@ -48,6 +48,7 @@ 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 */ cressi_leonardo_parser_get_datetime, /* datetime */ diff --git a/src/deepsix_excursion_parser.c b/src/deepsix_excursion_parser.c index ad8aca0..8f14708 100644 --- a/src/deepsix_excursion_parser.c +++ b/src/deepsix_excursion_parser.c @@ -54,6 +54,7 @@ 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 */ deepsix_excursion_parser_get_datetime, /* datetime */ diff --git a/src/diverite_nitekq_parser.c b/src/diverite_nitekq_parser.c index a4a13cf..5623769 100644 --- a/src/diverite_nitekq_parser.c +++ b/src/diverite_nitekq_parser.c @@ -58,6 +58,7 @@ 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 */ diverite_nitekq_parser_get_datetime, /* datetime */ diff --git a/src/divesystem_idive_parser.c b/src/divesystem_idive_parser.c index c19bfd4..1d19797 100644 --- a/src/divesystem_idive_parser.c +++ b/src/divesystem_idive_parser.c @@ -91,6 +91,7 @@ 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 */ divesystem_idive_parser_get_datetime, /* datetime */ diff --git a/src/hw_ostc_parser.c b/src/hw_ostc_parser.c index 343cc6d..90994f8 100644 --- a/src/hw_ostc_parser.c +++ b/src/hw_ostc_parser.c @@ -137,6 +137,7 @@ 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 */ hw_ostc_parser_get_datetime, /* datetime */ diff --git a/src/libdivecomputer.symbols b/src/libdivecomputer.symbols index a8cb63c..a9d2d39 100644 --- a/src/libdivecomputer.symbols +++ b/src/libdivecomputer.symbols @@ -87,6 +87,7 @@ dc_custom_open dc_parser_new dc_parser_new2 +dc_parser_set_clock dc_parser_set_atmospheric dc_parser_set_density dc_parser_get_type diff --git a/src/liquivision_lynx_parser.c b/src/liquivision_lynx_parser.c index 8009ff8..764d20e 100644 --- a/src/liquivision_lynx_parser.c +++ b/src/liquivision_lynx_parser.c @@ -126,6 +126,7 @@ 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 */ liquivision_lynx_parser_get_datetime, /* datetime */ diff --git a/src/mares_darwin_parser.c b/src/mares_darwin_parser.c index 3bca55c..88e831c 100644 --- a/src/mares_darwin_parser.c +++ b/src/mares_darwin_parser.c @@ -56,6 +56,7 @@ 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 */ mares_darwin_parser_get_datetime, /* datetime */ diff --git a/src/mares_iconhd_parser.c b/src/mares_iconhd_parser.c index 5398cfc..3b17482 100644 --- a/src/mares_iconhd_parser.c +++ b/src/mares_iconhd_parser.c @@ -273,6 +273,7 @@ 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 */ mares_iconhd_parser_get_datetime, /* datetime */ diff --git a/src/mares_nemo_parser.c b/src/mares_nemo_parser.c index 85957a0..2f26605 100644 --- a/src/mares_nemo_parser.c +++ b/src/mares_nemo_parser.c @@ -68,6 +68,7 @@ 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 */ mares_nemo_parser_get_datetime, /* datetime */ diff --git a/src/mclean_extreme_parser.c b/src/mclean_extreme_parser.c index 5f99fda..694bf60 100644 --- a/src/mclean_extreme_parser.c +++ b/src/mclean_extreme_parser.c @@ -67,6 +67,7 @@ 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 */ mclean_extreme_parser_get_datetime, /* datetime */ diff --git a/src/oceanic_atom2_parser.c b/src/oceanic_atom2_parser.c index 90a9cfc..66bec88 100644 --- a/src/oceanic_atom2_parser.c +++ b/src/oceanic_atom2_parser.c @@ -140,6 +140,7 @@ 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 */ oceanic_atom2_parser_get_datetime, /* datetime */ diff --git a/src/oceanic_veo250_parser.c b/src/oceanic_veo250_parser.c index 1eff473..4e59ede 100644 --- a/src/oceanic_veo250_parser.c +++ b/src/oceanic_veo250_parser.c @@ -57,6 +57,7 @@ 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 */ oceanic_veo250_parser_get_datetime, /* datetime */ diff --git a/src/oceanic_vtpro_parser.c b/src/oceanic_vtpro_parser.c index 6c8d200..1c60e62 100644 --- a/src/oceanic_vtpro_parser.c +++ b/src/oceanic_vtpro_parser.c @@ -53,6 +53,7 @@ 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 */ oceanic_vtpro_parser_get_datetime, /* datetime */ diff --git a/src/parser-private.h b/src/parser-private.h index 73ef161..af1a76e 100644 --- a/src/parser-private.h +++ b/src/parser-private.h @@ -52,6 +52,8 @@ 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_clock) (dc_parser_t *parser, unsigned int devtime, dc_ticks_t systime); + dc_status_t (*set_atmospheric) (dc_parser_t *parser, double atmospheric); dc_status_t (*set_density) (dc_parser_t *parser, double density); diff --git a/src/parser.c b/src/parser.c index 1f74ea8..1ae480a 100644 --- a/src/parser.c +++ b/src/parser.c @@ -270,6 +270,19 @@ dc_parser_get_type (dc_parser_t *parser) } +dc_status_t +dc_parser_set_clock (dc_parser_t *parser, unsigned int devtime, dc_ticks_t systime) +{ + if (parser == NULL) + return DC_STATUS_UNSUPPORTED; + + if (parser->vtable->set_clock == NULL) + return DC_STATUS_UNSUPPORTED; + + return parser->vtable->set_clock (parser, devtime, systime); +} + + dc_status_t dc_parser_set_atmospheric (dc_parser_t *parser, double atmospheric) { diff --git a/src/reefnet_sensus_parser.c b/src/reefnet_sensus_parser.c index 4af1660..a93914b 100644 --- a/src/reefnet_sensus_parser.c +++ b/src/reefnet_sensus_parser.c @@ -49,6 +49,7 @@ 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_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); static dc_status_t reefnet_sensus_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); @@ -59,6 +60,7 @@ 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 */ reefnet_sensus_parser_get_datetime, /* datetime */ @@ -128,6 +130,17 @@ reefnet_sensus_parser_set_calibration (dc_parser_t *abstract, double atmospheric static dc_status_t +reefnet_sensus_parser_set_clock (dc_parser_t *abstract, unsigned int devtime, dc_ticks_t systime) +{ + reefnet_sensus_parser_t *parser = (reefnet_sensus_parser_t *) abstract; + + parser->devtime = devtime; + parser->systime = systime; + + return DC_STATUS_SUCCESS; +} + + reefnet_sensus_parser_set_atmospheric (dc_parser_t *abstract, double atmospheric) { reefnet_sensus_parser_t *parser = (reefnet_sensus_parser_t *) abstract; diff --git a/src/reefnet_sensuspro_parser.c b/src/reefnet_sensuspro_parser.c index f8f23eb..ad371d7 100644 --- a/src/reefnet_sensuspro_parser.c +++ b/src/reefnet_sensuspro_parser.c @@ -48,6 +48,7 @@ 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_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); static dc_status_t reefnet_sensuspro_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); @@ -58,6 +59,7 @@ 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 */ reefnet_sensuspro_parser_get_datetime, /* datetime */ @@ -126,6 +128,18 @@ reefnet_sensuspro_parser_set_calibration (dc_parser_t *abstract, double atmosphe } +static dc_status_t +reefnet_sensuspro_parser_set_clock (dc_parser_t *abstract, unsigned int devtime, dc_ticks_t systime) +{ + reefnet_sensuspro_parser_t *parser = (reefnet_sensuspro_parser_t *) abstract; + + parser->devtime = devtime; + parser->systime = systime; + + return DC_STATUS_SUCCESS; +} + + static dc_status_t reefnet_sensuspro_parser_set_atmospheric (dc_parser_t *abstract, double atmospheric) { diff --git a/src/reefnet_sensusultra_parser.c b/src/reefnet_sensusultra_parser.c index f19364e..bc52f1f 100644 --- a/src/reefnet_sensusultra_parser.c +++ b/src/reefnet_sensusultra_parser.c @@ -48,6 +48,7 @@ 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_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); static dc_status_t reefnet_sensusultra_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime); @@ -58,6 +59,7 @@ 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 */ reefnet_sensusultra_parser_get_datetime, /* datetime */ @@ -126,6 +128,18 @@ reefnet_sensusultra_parser_set_calibration (dc_parser_t *abstract, double atmosp } +static dc_status_t +reefnet_sensusultra_parser_set_clock (dc_parser_t *abstract, unsigned int devtime, dc_ticks_t systime) +{ + reefnet_sensusultra_parser_t *parser = (reefnet_sensusultra_parser_t *) abstract; + + parser->devtime = devtime; + parser->systime = systime; + + return DC_STATUS_SUCCESS; +} + + static dc_status_t reefnet_sensusultra_parser_set_atmospheric (dc_parser_t *abstract, double atmospheric) { diff --git a/src/seac_screen_parser.c b/src/seac_screen_parser.c index 2a8647d..8c588d2 100644 --- a/src/seac_screen_parser.c +++ b/src/seac_screen_parser.c @@ -57,6 +57,7 @@ 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 */ seac_screen_parser_get_datetime, /* datetime */ diff --git a/src/shearwater_predator_parser.c b/src/shearwater_predator_parser.c index b658e6e..3787d0a 100644 --- a/src/shearwater_predator_parser.c +++ b/src/shearwater_predator_parser.c @@ -152,6 +152,7 @@ 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 */ shearwater_predator_parser_get_datetime, /* datetime */ @@ -164,6 +165,7 @@ 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 */ shearwater_predator_parser_get_datetime, /* datetime */ diff --git a/src/sporasub_sp2_parser.c b/src/sporasub_sp2_parser.c index 3869a39..5ac44b8 100644 --- a/src/sporasub_sp2_parser.c +++ b/src/sporasub_sp2_parser.c @@ -46,6 +46,7 @@ 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 */ sporasub_sp2_parser_get_datetime, /* datetime */ diff --git a/src/suunto_d9_parser.c b/src/suunto_d9_parser.c index 164b01e..0abb079 100644 --- a/src/suunto_d9_parser.c +++ b/src/suunto_d9_parser.c @@ -101,6 +101,7 @@ 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 */ suunto_d9_parser_get_datetime, /* datetime */ diff --git a/src/suunto_eon_parser.c b/src/suunto_eon_parser.c index 28d94c2..8e80aca 100644 --- a/src/suunto_eon_parser.c +++ b/src/suunto_eon_parser.c @@ -52,6 +52,7 @@ 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 */ suunto_eon_parser_get_datetime, /* datetime */ diff --git a/src/suunto_eonsteel_parser.c b/src/suunto_eonsteel_parser.c index fa9d880..db24cf3 100644 --- a/src/suunto_eonsteel_parser.c +++ b/src/suunto_eonsteel_parser.c @@ -1525,6 +1525,7 @@ 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 */ suunto_eonsteel_parser_get_datetime, /* datetime */ diff --git a/src/suunto_solution_parser.c b/src/suunto_solution_parser.c index 440a067..59648d5 100644 --- a/src/suunto_solution_parser.c +++ b/src/suunto_solution_parser.c @@ -47,6 +47,7 @@ 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 */ NULL, /* datetime */ diff --git a/src/suunto_vyper_parser.c b/src/suunto_vyper_parser.c index e14ffc8..4970b86 100644 --- a/src/suunto_vyper_parser.c +++ b/src/suunto_vyper_parser.c @@ -53,6 +53,7 @@ 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 */ suunto_vyper_parser_get_datetime, /* datetime */ diff --git a/src/tecdiving_divecomputereu_parser.c b/src/tecdiving_divecomputereu_parser.c index 7b8d76b..d060996 100644 --- a/src/tecdiving_divecomputereu_parser.c +++ b/src/tecdiving_divecomputereu_parser.c @@ -45,6 +45,7 @@ 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 */ tecdiving_divecomputereu_parser_get_datetime, /* datetime */ diff --git a/src/uwatec_memomouse_parser.c b/src/uwatec_memomouse_parser.c index ae2267c..3c818fa 100644 --- a/src/uwatec_memomouse_parser.c +++ b/src/uwatec_memomouse_parser.c @@ -39,6 +39,7 @@ struct uwatec_memomouse_parser_t { }; 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); static dc_status_t uwatec_memomouse_parser_samples_foreach (dc_parser_t *abstract, dc_sample_callback_t callback, void *userdata); @@ -47,6 +48,7 @@ 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 */ uwatec_memomouse_parser_get_datetime, /* datetime */ @@ -88,6 +90,18 @@ uwatec_memomouse_parser_set_data (dc_parser_t *abstract, const unsigned char *da } +static dc_status_t +uwatec_memomouse_parser_set_clock (dc_parser_t *abstract, unsigned int devtime, dc_ticks_t systime) +{ + uwatec_memomouse_parser_t *parser = (uwatec_memomouse_parser_t *) abstract; + + parser->devtime = devtime; + parser->systime = systime; + + return DC_STATUS_SUCCESS; +} + + static dc_status_t uwatec_memomouse_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *datetime) { diff --git a/src/uwatec_smart_parser.c b/src/uwatec_smart_parser.c index ec1a25e..3c4e348 100644 --- a/src/uwatec_smart_parser.c +++ b/src/uwatec_smart_parser.c @@ -167,6 +167,7 @@ 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 */ uwatec_smart_parser_get_datetime, /* datetime */