From 89046d081528745b38a0b231373ed08a1cd544f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Wed, 1 May 2024 22:17:42 +0100 Subject: [PATCH] Garmin: Improve computed timestamp parsing timestamp16 must be applied against garmin epoch. --- .../service/devices/garmin/fit/RecordData.java | 4 ++-- .../devices/garmin/fit/messages/FitMonitoring.java | 5 ++++- .../devices/garmin/fit/messages/FitStressLevel.java | 11 +++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/RecordData.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/RecordData.java index 905230180..eeb08944c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/RecordData.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/RecordData.java @@ -165,8 +165,8 @@ public class RecordData { tsb.append(globalFITMessage.name()); } - if (computedTimestamp != null) { - tsb.append(new Date(computedTimestamp * 1000L)); + if (getComputedTimestamp() != null) { + tsb.append(new Date(getComputedTimestamp() * 1000L)); } for (FieldData fieldData : fieldDataList) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitMonitoring.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitMonitoring.java index 956ced2e2..bcb8d9148 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitMonitoring.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitMonitoring.java @@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages import androidx.annotation.Nullable; +import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.GarminTimeUtils; import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.RecordData; import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.RecordDefinition; import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.RecordHeader; @@ -77,7 +78,9 @@ public class FitMonitoring extends RecordData { final Integer timestamp16 = getTimestamp16(); final Long computedTimestamp = super.getComputedTimestamp(); if (timestamp16 != null && computedTimestamp != null) { - return (computedTimestamp & ~0xFFFFL) | timestamp16; + return (long) GarminTimeUtils.garminTimestampToUnixTime( + (GarminTimeUtils.unixTimeToGarminTimestamp(computedTimestamp.intValue()) & ~0xFFFF) | (timestamp16 & 0xFFFF) + ); } return computedTimestamp; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitStressLevel.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitStressLevel.java index a2bb12153..51f9986e4 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitStressLevel.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitStressLevel.java @@ -45,4 +45,15 @@ public class FitStressLevel extends RecordData { public Long getStressLevelTime() { return (Long) getFieldByNumber(1); } + + // manual changes below + + @Override + public Long getComputedTimestamp() { + final Long stressTime = getStressLevelTime(); + if (stressTime != null) { + return stressTime; + } + return super.getComputedTimestamp(); + } }