From f208e6a6fcd24152f1cc6bf2a12a29cad8cb88a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Sat, 13 Dec 2025 16:50:02 +0000 Subject: [PATCH] Zepp OS: Add jump rope stats --- .../zeppos/ZeppOsActivitySummaryParser.java | 18 +++++++++++++++--- app/src/main/proto/huami.proto | 11 +++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/ZeppOsActivitySummaryParser.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/ZeppOsActivitySummaryParser.java index df750c50b8..a656814b69 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/ZeppOsActivitySummaryParser.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/zeppos/ZeppOsActivitySummaryParser.java @@ -84,11 +84,11 @@ public class ZeppOsActivitySummaryParser extends HuamiActivitySummaryParser { return; } + final ActivityKind activityKind; if (summaryProto.hasType()) { final byte typeCode = (byte) summaryProto.getType().getType(); final ZeppOsActivityType activityType = ZeppOsActivityType.fromCode(typeCode); - final ActivityKind activityKind; if (activityType != null) { activityKind = activityType.toActivityKind(); } else { @@ -97,7 +97,10 @@ public class ZeppOsActivitySummaryParser extends HuamiActivitySummaryParser { summaryData.add(ACTIVITY_TYPE_CODE, typeCode, UNIT_NONE); } summary.setActivityKind(activityKind.getCode()); + } else { + activityKind = ActivityKind.UNKNOWN; } + final ActivityKind.CycleUnit cycleUnit = ActivityKind.getCycleUnit(activityKind); if (summaryProto.hasTime()) { int totalDuration = summaryProto.getTime().getTotalDuration(); @@ -121,8 +124,8 @@ public class ZeppOsActivitySummaryParser extends HuamiActivitySummaryParser { } if (summaryProto.hasSteps()) { - summaryData.add(CADENCE_MAX, summaryProto.getSteps().getMaxCadence() * 60, UNIT_SPM); - summaryData.add(CADENCE_AVG, summaryProto.getSteps().getAvgCadence() * 60, UNIT_SPM); + summaryData.addCadenceMax(summaryProto.getSteps().getMaxCadence() * 60, cycleUnit); + summaryData.addCadenceAvg(summaryProto.getSteps().getAvgCadence() * 60, cycleUnit); summaryData.add(STRIDE_AVG, summaryProto.getSteps().getAvgStride(), UNIT_CM); summaryData.add(STEPS, summaryProto.getSteps().getSteps(), UNIT_STEPS); } @@ -136,6 +139,15 @@ public class ZeppOsActivitySummaryParser extends HuamiActivitySummaryParser { summaryData.add(PACE_AVG_SECONDS_KM, summaryProto.getPace().getAvg() * 1000, UNIT_SECONDS_PER_KM); } + if (summaryProto.hasFrequency()) { + summaryData.addCadenceAvg(summaryProto.getFrequency().getAvgFrequency(), cycleUnit); + summaryData.addCadenceMax(summaryProto.getFrequency().getMaxFrequency(), cycleUnit); + } + + if (summaryProto.hasCount()) { + summaryData.add(JUMPS, summaryProto.getCount().getTotalJumps(), UNIT_JUMPS); + } + if (summaryProto.hasCalories()) { summaryData.add(CALORIES_BURNT, summaryProto.getCalories().getCalories(), UNIT_KCAL); } diff --git a/app/src/main/proto/huami.proto b/app/src/main/proto/huami.proto index 83f8885ee9..bb0c81fa1e 100644 --- a/app/src/main/proto/huami.proto +++ b/app/src/main/proto/huami.proto @@ -8,6 +8,7 @@ message WorkoutSummary { Location location = 2; Type type = 3; Distance distance = 4; + Count count = 5; Steps steps = 11; Time time = 7; SwimmingData swimmingData = 9; @@ -15,6 +16,7 @@ message WorkoutSummary { Altitude altitude = 13; HeartRate heartRate = 19; Calories calories = 16; + Frequency frequency = 18; TrainingEffect trainingEffect = 21; HeartRateZones heartRateZones = 22; Elevation elevation = 23; @@ -55,6 +57,10 @@ message Distance { float distance = 1; // meters } +message Count { + uint32 totalJumps = 1; +} + message Time { int32 totalDuration = 1; // seconds int32 workoutDuration = 2; // seconds @@ -79,6 +85,11 @@ message Calories { int32 calories = 1; // kcal } +message Frequency { + uint32 avgFrequency = 1; + uint32 maxFrequency = 2; +} + message HeartRateZones { // TODO 1, is always = 1? // Zones: N/A, Warm-up, Fat-burn time, Aerobic, Anaerobic, Extreme