Fix the clock synchronization
For dives with a timestamp that is larger than the current device time (e.g. in the future), the clock synchronization produces incorrect values. In that case, the time difference suddenly becomes negative, which corresponds to a large positive value as an unsigned integer. Under normal circumstances, this scenario can't happen. But sometimes actions such as battery replacements or firmware upgrades can cause the internal clock to reset. The Reefnet devices shouldn't need this fix, because their internal clock can't be changed, but it doesn't hurt either.
This commit is contained in:
parent
e6f091909b
commit
be5bb9e690
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user