diff --git a/src/reefnet_sensus_parser.c b/src/reefnet_sensus_parser.c index 50fd69e..35fb952 100644 --- a/src/reefnet_sensus_parser.c +++ b/src/reefnet_sensus_parser.c @@ -133,7 +133,12 @@ reefnet_sensus_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *dateti unsigned int timestamp = array_uint32_le (abstract->data + 2); - dc_ticks_t ticks = parser->systime - (parser->devtime - timestamp); + dc_ticks_t ticks = parser->systime; + if (timestamp < parser->devtime) { + ticks -= parser->devtime - timestamp; + } else { + ticks += timestamp - parser->devtime; + } if (!dc_datetime_localtime (datetime, ticks)) return DC_STATUS_DATAFORMAT; diff --git a/src/reefnet_sensuspro_parser.c b/src/reefnet_sensuspro_parser.c index 7e68a72..c303ee9 100644 --- a/src/reefnet_sensuspro_parser.c +++ b/src/reefnet_sensuspro_parser.c @@ -132,7 +132,12 @@ reefnet_sensuspro_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *dat unsigned int timestamp = array_uint32_le (abstract->data + 6); - dc_ticks_t ticks = parser->systime - (parser->devtime - timestamp); + dc_ticks_t ticks = parser->systime; + if (timestamp < parser->devtime) { + ticks -= parser->devtime - timestamp; + } else { + ticks += timestamp - parser->devtime; + } if (!dc_datetime_localtime (datetime, ticks)) return DC_STATUS_DATAFORMAT; diff --git a/src/reefnet_sensusultra_parser.c b/src/reefnet_sensusultra_parser.c index 8aaacca..bad5450 100644 --- a/src/reefnet_sensusultra_parser.c +++ b/src/reefnet_sensusultra_parser.c @@ -132,7 +132,12 @@ reefnet_sensusultra_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *d unsigned int timestamp = array_uint32_le (abstract->data + 4); - dc_ticks_t ticks = parser->systime - (parser->devtime - timestamp); + dc_ticks_t ticks = parser->systime; + if (timestamp < parser->devtime) { + ticks -= parser->devtime - timestamp; + } else { + ticks += timestamp - parser->devtime; + } if (!dc_datetime_localtime (datetime, ticks)) return DC_STATUS_DATAFORMAT; diff --git a/src/uwatec_memomouse_parser.c b/src/uwatec_memomouse_parser.c index f36dc6c..386e984 100644 --- a/src/uwatec_memomouse_parser.c +++ b/src/uwatec_memomouse_parser.c @@ -96,7 +96,12 @@ uwatec_memomouse_parser_get_datetime (dc_parser_t *abstract, dc_datetime_t *date unsigned int timestamp = array_uint32_le (abstract->data + 11); - dc_ticks_t ticks = parser->systime - (parser->devtime - timestamp) / 2; + dc_ticks_t ticks = parser->systime; + if (timestamp < parser->devtime) { + ticks -= (parser->devtime - timestamp) / 2; + } else { + ticks += (timestamp - parser->devtime) / 2; + } if (!dc_datetime_localtime (datetime, ticks)) return DC_STATUS_DATAFORMAT;