From 79fdbb8f85b3f5e207859ad8d927967765f9af96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Sun, 19 Jan 2025 21:04:37 +0000 Subject: [PATCH] Xiaomi Watch S1 Active: Fix freestyle and elliptical parsing --- .../activity/impl/WorkoutSummaryParser.java | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/activity/impl/WorkoutSummaryParser.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/activity/impl/WorkoutSummaryParser.java index 3f1d1a1d2..eb1df128e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/activity/impl/WorkoutSummaryParser.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/activity/impl/WorkoutSummaryParser.java @@ -255,6 +255,9 @@ public class WorkoutSummaryParser extends XiaomiActivityParser implements Activi case 5: // for Smart Band 8 Active headerSize = 3; break; + case 7: + headerSize = 5; + break; case 8: case 9: case 10: @@ -274,15 +277,15 @@ public class WorkoutSummaryParser extends XiaomiActivityParser implements Activi builder.addByte(HR_AVG, UNIT_BPM); builder.addByte(HR_MAX, UNIT_BPM); builder.addByte(HR_MIN, UNIT_BPM); - if (version == 5) { - builder.addUnknown(7); // probably training effect aerobic and recovery time? - } else { + if (version > 5) { builder.addUnknown(6); - builder.addFloat(TRAINING_EFFECT_AEROBIC, UNIT_NONE); - builder.addUnknown(1); - builder.addUnknown(1); - builder.addShort(RECOVERY_TIME, UNIT_HOURS); } + builder.addFloat(TRAINING_EFFECT_AEROBIC, UNIT_NONE); + if (version > 6) { + builder.addUnknown(1); + } + builder.addUnknown(1); + builder.addShort(RECOVERY_TIME, UNIT_HOURS); builder.addInt(HR_ZONE_EXTREME, UNIT_SECONDS); builder.addInt(HR_ZONE_ANAEROBIC, UNIT_SECONDS); builder.addInt(HR_ZONE_AEROBIC, UNIT_SECONDS); @@ -305,7 +308,9 @@ public class WorkoutSummaryParser extends XiaomiActivityParser implements Activi builder.addShort("configuredCaloriesGoal", UNIT_KCAL); builder.addShort(WORKOUT_LOAD, UNIT_NONE); builder.addUnknown(1); - builder.addByte("vitality_gain", UNIT_NONE); + if (version > 7) { + builder.addByte("vitality_gain", UNIT_NONE); + } } return builder.build(); } @@ -663,6 +668,7 @@ public class WorkoutSummaryParser extends XiaomiActivityParser implements Activi final int headerSize; switch (version) { case 3: + case 4: headerSize = 4; break; default: @@ -682,12 +688,14 @@ public class WorkoutSummaryParser extends XiaomiActivityParser implements Activi builder.addByte(HR_MAX, UNIT_BPM); builder.addByte(HR_MIN, UNIT_BPM); builder.addUnknown(7); + if (version >= 4) { + builder.addUnknown(1); + } builder.addInt(HR_ZONE_EXTREME, UNIT_SECONDS); builder.addInt(HR_ZONE_ANAEROBIC, UNIT_SECONDS); builder.addInt(HR_ZONE_AEROBIC, UNIT_SECONDS); builder.addInt(HR_ZONE_FAT_BURN, UNIT_SECONDS); builder.addInt(HR_ZONE_WARM_UP, UNIT_SECONDS); - builder.addUnknown(20); return builder.build(); }