1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2025-02-04 14:07:32 +01:00

Mi Band 9 Pro: Fix treadmill parsing

This commit is contained in:
José Rebelo 2025-01-31 19:01:01 +00:00
parent f277fbe9e5
commit 769ceded1c
2 changed files with 27 additions and 7 deletions

View File

@ -21,6 +21,7 @@ import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.ALTITUDE_MAX;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.ALTITUDE_MIN;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.CADENCE_AVG;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.CADENCE_MAX;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.CALORIES_BURNT;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.DISTANCE_METERS;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.ELEVATION_GAIN;
@ -34,7 +35,6 @@ import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.HR_ZONE_FAT_BURN;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.HR_ZONE_WARM_UP;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.LAPS;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.LAP_PACE_AVERAGE;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.MAXIMUM_OXYGEN_UPTAKE;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.PACE_AVG_SECONDS_KM;
import static nodomain.freeyourgadget.gadgetbridge.model.ActivitySummaryEntries.PACE_MAX;
@ -749,6 +749,9 @@ public class WorkoutSummaryParser extends XiaomiActivityParser implements Activi
case 5:
headerSize = 4;
break;
case 11:
headerSize = 9;
break;
default:
LOG.warn("Unable to parse workout summary version {}", fileId.getVersion());
return null;
@ -761,20 +764,35 @@ public class WorkoutSummaryParser extends XiaomiActivityParser implements Activi
builder.addInt(ACTIVE_SECONDS, UNIT_SECONDS);
builder.addInt(DISTANCE_METERS, UNIT_METERS);
builder.addShort(CALORIES_BURNT, UNIT_KCAL);
builder.addUnknown(4);
builder.addUnknown(4);
if (version >= 11) {
builder.addInt(PACE_AVG_SECONDS_KM, UNIT_SECONDS_PER_KM);
}
builder.addInt(PACE_MAX, UNIT_SECONDS_PER_KM);
builder.addInt(PACE_MIN, UNIT_SECONDS_PER_KM);
builder.addInt(STEPS, UNIT_STEPS);
builder.addUnknown(2); // MAX_STEPS_PER_MINUTE, UNIT_STEPS_PER_MINUTE
if (version >= 11) {
builder.addUnknown(2);
builder.addShort(CADENCE_AVG, UNIT_SPM);
}
builder.addShort(CADENCE_MAX, UNIT_SPM);
builder.addByte(HR_AVG, UNIT_BPM);
builder.addByte(HR_MAX, UNIT_BPM);
builder.addByte(HR_MIN, UNIT_BPM);
builder.addUnknown(8);
builder.addFloat(TRAINING_EFFECT_AEROBIC, UNIT_NONE);
if (version >= 11) {
builder.addUnknown(1);
}
builder.addByte(MAXIMUM_OXYGEN_UPTAKE, UNIT_ML_KG_MIN);
if (version >= 11) {
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);
builder.addInt(HR_ZONE_FAT_BURN, UNIT_SECONDS);
builder.addInt(HR_ZONE_WARM_UP, UNIT_SECONDS);
builder.addUnknown(32);
return builder.build();
}

View File

@ -8,7 +8,9 @@ import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
public class XiaomiActivityParserTest {
import nodomain.freeyourgadget.gadgetbridge.test.TestBase;
public class XiaomiActivityParserTest extends TestBase {
@Test
@Ignore("helper test for development, remove this while debugging")
public void localTest() throws IOException {