From 35d2d310931ce3dac95981c03a84b04ec1282089 Mon Sep 17 00:00:00 2001 From: Thomas Kuehne Date: Mon, 13 Apr 2026 19:24:59 +0000 Subject: [PATCH] Garmin: map more Session, Lap, Monitoring, Record and EcgSummary fit fields --- .../devices/garmin/fit/NativeFITMessage.java | 37 +++++- .../garmin/fit/messages/FitEcgSummary.java | 16 +-- .../devices/garmin/fit/messages/FitLap.java | 60 +++++++++ .../garmin/fit/messages/FitMonitoring.java | 20 +++ .../garmin/fit/messages/FitRecord.java | 70 ++++++++++ .../garmin/fit/messages/FitSession.java | 120 ++++++++++++++++++ 6 files changed, 310 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/NativeFITMessage.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/NativeFITMessage.java index 97e225a0e6..5736bd084d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/NativeFITMessage.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/NativeFITMessage.java @@ -281,6 +281,7 @@ public class NativeFITMessage { new FieldDefinitionPrimitive(69, BaseType.UINT32, "avg_lap_time", 1000, 0), // s new FieldDefinitionPrimitive(70, BaseType.UINT16, "best_lap_index"), new FieldDefinitionPrimitive(71, BaseType.UINT16, "min_altitude", 5, 500), // m + new FieldDefinitionPrimitive(78, BaseType.UINT32, "work_time"), // ms new FieldDefinitionPrimitive(79, BaseType.UINT16, "avg_swim_cadence", 10, 0), // rpm new FieldDefinitionPrimitive(80, BaseType.UINT16, "avg_swolf"), new FieldDefinitionPrimitive(82, BaseType.UINT16, "player_score"), @@ -347,6 +348,8 @@ public class NativeFITMessage { new FieldDefinitionPrimitive(148, BaseType.UINT8, "max_respiration_rate"), new FieldDefinitionPrimitive(149, BaseType.UINT8, "min_respiration_rate"), new FieldDefinitionPrimitive(150, BaseType.SINT8, "min_temperature"), // C + new FieldDefinitionPrimitive(151, BaseType.UINT16, "total_sets"), + new FieldDefinitionPrimitive(152, BaseType.UINT32, "volume", 100, 0), // kg new FieldDefinitionPrimitive(155, BaseType.UINT16, "o2_toxicity"), // OTUs new FieldDefinitionPrimitive(156, BaseType.UINT32, "dive_number"), new FieldDefinitionPrimitive(168, BaseType.SINT32, "training_load_peak", 65536, 0), @@ -359,6 +362,7 @@ public class NativeFITMessage { new FieldDefinitionPrimitive(181, BaseType.FLOAT32, "total_grit"), new FieldDefinitionPrimitive(182, BaseType.FLOAT32, "total_flow"), new FieldDefinitionPrimitive(183, BaseType.UINT16, "jump_count"), + new FieldDefinitionPrimitive(185, BaseType.UINT8, "execution_score"), // % new FieldDefinitionPrimitive(186, BaseType.FLOAT32, "avg_grit"), new FieldDefinitionPrimitive(187, BaseType.FLOAT32, "avg_flow"), new FieldDefinitionPrimitive(188, BaseType.ENUM, "primary_benefit"), // 1 recovery @@ -380,8 +384,16 @@ public class NativeFITMessage { new FieldDefinitionPrimitive(208, BaseType.UINT16, "avg_core_temperature", 100, 0), // °C new FieldDefinitionPrimitive(209, BaseType.UINT16, "min_core_temperature", 100, 0), // °C new FieldDefinitionPrimitive(210, BaseType.UINT16, "max_core_temperature", 100, 0), // °C + new FieldDefinitionPrimitive(211, BaseType.UINT32, "grade_adjusted_speed", 1000, 0), // m/s + new FieldDefinitionPrimitive(212, BaseType.ENUM, "wind_data"), + new FieldDefinitionPrimitive(215, BaseType.UINT8, "beginning_body_battery"), + new FieldDefinitionPrimitive(216, BaseType.UINT8, "ending_body_battery"), + new FieldDefinitionPrimitive(220, BaseType.UINT16, "pack_weight", 10, 0), // kg new FieldDefinitionPrimitive(222, BaseType.UINT16, "step_speed_loss", 100, 0), new FieldDefinitionPrimitive(223, BaseType.UINT16, "step_speed_loss_percentage", 100, 0), + new FieldDefinitionPrimitive(224, BaseType.SINT32, "avg_force", 1000, 0), // N + new FieldDefinitionPrimitive(225, BaseType.SINT32, "max_force", 1000, 0), // N + new FieldDefinitionPrimitive(226, BaseType.SINT32, "normalized_force", 1000, 0), // N new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP), new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index") )); @@ -414,6 +426,10 @@ public class NativeFITMessage { new FieldDefinitionPrimitive(24, BaseType.ENUM, "lap_trigger"), // 0 manual new FieldDefinitionPrimitive(25, BaseType.ENUM, "sport"), // 5 swimming new FieldDefinitionPrimitive(26, BaseType.UINT8, "event_group"), + new FieldDefinitionPrimitive(25, BaseType.SINT32, "nec_lat", FieldDefinitionFactory.FIELD.COORDINATE), + new FieldDefinitionPrimitive(26, BaseType.SINT32, "nec_long", FieldDefinitionFactory.FIELD.COORDINATE), + new FieldDefinitionPrimitive(27, BaseType.SINT32, "swc_lat", FieldDefinitionFactory.FIELD.COORDINATE), + new FieldDefinitionPrimitive(28, BaseType.SINT32, "swc_long", FieldDefinitionFactory.FIELD.COORDINATE), new FieldDefinitionPrimitive(32, BaseType.UINT16, "num_lengths"), new FieldDefinitionPrimitive(33, BaseType.UINT16, "normalized_power"), // watt new FieldDefinitionPrimitive(34, BaseType.UINT16, "left_right_balance"), @@ -497,11 +513,13 @@ public class NativeFITMessage { new FieldDefinitionPrimitive(124, BaseType.SINT8, "min_temperature"), // °C new FieldDefinitionPrimitive(136, BaseType.UINT16, "enhanced_avg_respiration_rate", 100, 0), // breath / min new FieldDefinitionPrimitive(137, BaseType.UINT16, "enhanced_max_respiration_rate", 100, 0), // breath / min + new FieldDefinitionPrimitive(145, BaseType.UINT16, "est_sweat_loss"), new FieldDefinitionPrimitive(147, BaseType.UINT8, "avg_respiration_rate"), new FieldDefinitionPrimitive(148, BaseType.UINT8, "max_respiration_rate"), new FieldDefinitionPrimitive(149, BaseType.FLOAT32, "total_grit"), new FieldDefinitionPrimitive(150, BaseType.FLOAT32, "total_flow"), new FieldDefinitionPrimitive(151, BaseType.UINT16, "jump_count"), + new FieldDefinitionPrimitive(152, BaseType.UINT8, "execution_score"), new FieldDefinitionPrimitive(153, BaseType.FLOAT32, "avg_grit"), new FieldDefinitionPrimitive(154, BaseType.FLOAT32, "avg_flow"), new FieldDefinitionPrimitive(156, BaseType.UINT8, "total_fractional_ascent", 100, 0), // m @@ -573,6 +591,7 @@ public class NativeFITMessage { new FieldDefinitionPrimitive(84, BaseType.UINT16, "stance_time_balance", 100, 0), // % new FieldDefinitionPrimitive(85, BaseType.UINT16, "step_length", 10, 0), // mm new FieldDefinitionPrimitive(87, BaseType.UINT16, "cycle_length16", 100, 0), // m + new FieldDefinitionPrimitive(90, BaseType.SINT8, "performance_condition"), new FieldDefinitionPrimitive(91, BaseType.UINT32, "absolute_pressure", 1, 0), // Pa new FieldDefinitionPrimitive(92, BaseType.UINT32, "depth", 1000, 0), // m new FieldDefinitionPrimitive(93, BaseType.UINT32, "next_stop_depth", 1000, 0), // m @@ -590,17 +609,23 @@ public class NativeFITMessage { new FieldDefinitionPrimitive(118, BaseType.UINT8, "ebike_battery_level"), // % new FieldDefinitionPrimitive(119, BaseType.UINT8, "ebike_assist_mode"), new FieldDefinitionPrimitive(120, BaseType.UINT8, "ebike_assist_level_percent"), // % + new FieldDefinitionPrimitive(121, BaseType.UINT16, "total_ascent"), // m new FieldDefinitionPrimitive(123, BaseType.UINT32, "air_time_remaining"), // s new FieldDefinitionPrimitive(124, BaseType.UINT16, "pressure_sac", 100, 0), // bar / min new FieldDefinitionPrimitive(125, BaseType.UINT16, "volume_sac", 100, 0), // liter / min new FieldDefinitionPrimitive(126, BaseType.UINT16, "rmv", 100, 0), // liter / min new FieldDefinitionPrimitive(127, BaseType.SINT32, "ascent_rate", 1000, 0), // m/s new FieldDefinitionPrimitive(129, BaseType.UINT8, "po2", 100, 0), // % - new FieldDefinitionPrimitive(136, BaseType.UINT8, "wrist_heart_rate"), + new FieldDefinitionPrimitive(136, BaseType.UINT8, "wrist_heart_rate"), // BPM new FieldDefinitionPrimitive(137, BaseType.UINT8, "stamina_potential"), // % new FieldDefinitionPrimitive(138, BaseType.UINT8, "stamina"), // % new FieldDefinitionPrimitive(139, BaseType.UINT16, "core_temperature", 100, 0), // °C + new FieldDefinitionPrimitive(140, BaseType.UINT32, "grade_adjusted_speed", 1000, 0), // m/s new FieldDefinitionPrimitive(143, BaseType.UINT8, "body_battery"), + new FieldDefinitionPrimitive(144, BaseType.UINT8, "external_heart_rate"), // BPM + new FieldDefinitionPrimitive(146, BaseType.UINT16, "step_speed_loss_distance", 100, 0), // cm/s + new FieldDefinitionPrimitive(147, BaseType.UINT16, "step_speed_loss_percentage", 100, 0), // % + new FieldDefinitionPrimitive(148, BaseType.SINT32, "force", 1000, 0), // N new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP) )); @@ -861,6 +886,8 @@ public class NativeFITMessage { new FieldDefinitionPrimitive(32, BaseType.UINT32, "descent", 1000, 0), // m new FieldDefinitionPrimitive(33, BaseType.UINT16, "moderate_activity_minutes"), new FieldDefinitionPrimitive(34, BaseType.UINT16, "vigorous_activity_minutes"), + new FieldDefinitionPrimitive(35, BaseType.UINT32, "total_ascent", 1000, 0), // m + new FieldDefinitionPrimitive(36, BaseType.UINT32, "total_descent", 1000, 0), // m new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP) )); @@ -1811,15 +1838,15 @@ public class NativeFITMessage { public static NativeFITMessage ECG_SUMMARY = new NativeFITMessage(336, "ECG_SUMMARY", Arrays.asList( new FieldDefinitionPrimitive(0, BaseType.UINT16, "unknown_0"), // 10103 new FieldDefinitionPrimitive(1, BaseType.ENUM, "unknown_1"), // 3 - new FieldDefinitionPrimitive(2, BaseType.FLOAT32, "unknown_2"), // 512 - new FieldDefinitionPrimitive(3, BaseType.FLOAT32, "unknown_3"), // 128 + new FieldDefinitionPrimitive(2, BaseType.FLOAT32, "raw_sample_rate"), // 512 + new FieldDefinitionPrimitive(3, BaseType.FLOAT32, "smooth_sample_rate"), // 128 new FieldDefinitionPrimitive(4, BaseType.UINT32, "ecg_timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP), new FieldDefinitionPrimitive(5, BaseType.UINT32, "local_timestamp"), // garmin timestamp, but in user timezone new FieldDefinitionPrimitive(6, BaseType.ENUM, "unknown_6"), // 1 new FieldDefinitionPrimitive(7, BaseType.FLOAT32, "average_heart_rate"), // bpm new FieldDefinitionPrimitive(10, BaseType.STRING, "unknown_10"), // ? - new FieldDefinitionPrimitive(11, BaseType.UINT16, "unknown_11"), // 30 - new FieldDefinitionPrimitive(12, BaseType.UINT8, "unknown_12") // 39 + new FieldDefinitionPrimitive(11, BaseType.UINT16, "sample_time"), // s + new FieldDefinitionPrimitive(12, BaseType.UINT8, "sdrr_hrv") // ms )); public static NativeFITMessage ECG_RAW_SAMPLE = new NativeFITMessage(337, "ECG_RAW_SAMPLE", Arrays.asList( diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitEcgSummary.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitEcgSummary.java index 6843dc2053..8084dda7e1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitEcgSummary.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitEcgSummary.java @@ -50,12 +50,12 @@ public class FitEcgSummary extends RecordData { } @Nullable - public Float getUnknown2() { + public Float getRawSampleRate() { return getFieldByNumber(2, Float.class); } @Nullable - public Float getUnknown3() { + public Float getSmoothSampleRate() { return getFieldByNumber(3, Float.class); } @@ -85,12 +85,12 @@ public class FitEcgSummary extends RecordData { } @Nullable - public Integer getUnknown11() { + public Integer getSampleTime() { return getFieldByNumber(11, Integer.class); } @Nullable - public Integer getUnknown12() { + public Integer getSdrrHrv() { return getFieldByNumber(12, Integer.class); } @@ -112,12 +112,12 @@ public class FitEcgSummary extends RecordData { return this; } - public Builder setUnknown2(final Float value) { + public Builder setRawSampleRate(final Float value) { setFieldByNumber(2, value); return this; } - public Builder setUnknown3(final Float value) { + public Builder setSmoothSampleRate(final Float value) { setFieldByNumber(3, value); return this; } @@ -147,12 +147,12 @@ public class FitEcgSummary extends RecordData { return this; } - public Builder setUnknown11(final Integer value) { + public Builder setSampleTime(final Integer value) { setFieldByNumber(11, value); return this; } - public Builder setUnknown12(final Integer value) { + public Builder setSdrrHrv(final Integer value) { setFieldByNumber(12, value); return this; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitLap.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitLap.java index fe0c32230c..59dd9fc6a8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitLap.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitLap.java @@ -175,6 +175,26 @@ public class FitLap extends RecordData { return getFieldByNumber(26, Integer.class); } + @Nullable + public Double getNecLat() { + return getFieldByNumber(25, Double.class); + } + + @Nullable + public Double getNecLong() { + return getFieldByNumber(26, Double.class); + } + + @Nullable + public Double getSwcLat() { + return getFieldByNumber(27, Double.class); + } + + @Nullable + public Double getSwcLong() { + return getFieldByNumber(28, Double.class); + } + @Nullable public Integer getNumLengths() { return getFieldByNumber(32, Integer.class); @@ -590,6 +610,11 @@ public class FitLap extends RecordData { return getFieldByNumber(137, Float.class); } + @Nullable + public Integer getEstSweatLoss() { + return getFieldByNumber(145, Integer.class); + } + @Nullable public Integer getAvgRespirationRate() { return getFieldByNumber(147, Integer.class); @@ -615,6 +640,11 @@ public class FitLap extends RecordData { return getFieldByNumber(151, Integer.class); } + @Nullable + public Integer getExecutionScore() { + return getFieldByNumber(152, Integer.class); + } + @Nullable public Float getAvgGrit() { return getFieldByNumber(153, Float.class); @@ -803,6 +833,26 @@ public class FitLap extends RecordData { return this; } + public Builder setNecLat(final Double value) { + setFieldByNumber(25, value); + return this; + } + + public Builder setNecLong(final Double value) { + setFieldByNumber(26, value); + return this; + } + + public Builder setSwcLat(final Double value) { + setFieldByNumber(27, value); + return this; + } + + public Builder setSwcLong(final Double value) { + setFieldByNumber(28, value); + return this; + } + public Builder setNumLengths(final Integer value) { setFieldByNumber(32, value); return this; @@ -1218,6 +1268,11 @@ public class FitLap extends RecordData { return this; } + public Builder setEstSweatLoss(final Integer value) { + setFieldByNumber(145, value); + return this; + } + public Builder setAvgRespirationRate(final Integer value) { setFieldByNumber(147, value); return this; @@ -1243,6 +1298,11 @@ public class FitLap extends RecordData { return this; } + public Builder setExecutionScore(final Integer value) { + setFieldByNumber(152, value); + return this; + } + public Builder setAvgGrit(final Float value) { setFieldByNumber(153, value); return this; 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 378c22553a..c7006bb4fb 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 @@ -182,6 +182,16 @@ public class FitMonitoring extends RecordData { return getFieldByNumber(34, Integer.class); } + @Nullable + public Double getTotalAscent() { + return getFieldByNumber(35, Double.class); + } + + @Nullable + public Double getTotalDescent() { + return getFieldByNumber(36, Double.class); + } + @Nullable public Long getTimestamp() { return getFieldByNumber(253, Long.class); @@ -335,6 +345,16 @@ public class FitMonitoring extends RecordData { return this; } + public Builder setTotalAscent(final Double value) { + setFieldByNumber(35, value); + return this; + } + + public Builder setTotalDescent(final Double value) { + setFieldByNumber(36, value); + return this; + } + public Builder setTimestamp(final Long value) { setFieldByNumber(253, value); return this; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitRecord.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitRecord.java index 08b045c54c..132e2d8c8b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitRecord.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitRecord.java @@ -335,6 +335,11 @@ public class FitRecord extends RecordData { return getFieldByNumber(87, Float.class); } + @Nullable + public Integer getPerformanceCondition() { + return getFieldByNumber(90, Integer.class); + } + @Nullable public Long getAbsolutePressure() { return getFieldByNumber(91, Long.class); @@ -420,6 +425,11 @@ public class FitRecord extends RecordData { return getFieldByNumber(120, Integer.class); } + @Nullable + public Integer getTotalAscent() { + return getFieldByNumber(121, Integer.class); + } + @Nullable public Long getAirTimeRemaining() { return getFieldByNumber(123, Long.class); @@ -470,11 +480,36 @@ public class FitRecord extends RecordData { return getFieldByNumber(139, Float.class); } + @Nullable + public Double getGradeAdjustedSpeed() { + return getFieldByNumber(140, Double.class); + } + @Nullable public Integer getBodyBattery() { return getFieldByNumber(143, Integer.class); } + @Nullable + public Integer getExternalHeartRate() { + return getFieldByNumber(144, Integer.class); + } + + @Nullable + public Float getStepSpeedLossDistance() { + return getFieldByNumber(146, Float.class); + } + + @Nullable + public Float getStepSpeedLossPercentage() { + return getFieldByNumber(147, Float.class); + } + + @Nullable + public Double getForce() { + return getFieldByNumber(148, Double.class); + } + @Nullable public Long getTimestamp() { return getFieldByNumber(253, Long.class); @@ -783,6 +818,11 @@ public class FitRecord extends RecordData { return this; } + public Builder setPerformanceCondition(final Integer value) { + setFieldByNumber(90, value); + return this; + } + public Builder setAbsolutePressure(final Long value) { setFieldByNumber(91, value); return this; @@ -868,6 +908,11 @@ public class FitRecord extends RecordData { return this; } + public Builder setTotalAscent(final Integer value) { + setFieldByNumber(121, value); + return this; + } + public Builder setAirTimeRemaining(final Long value) { setFieldByNumber(123, value); return this; @@ -918,11 +963,36 @@ public class FitRecord extends RecordData { return this; } + public Builder setGradeAdjustedSpeed(final Double value) { + setFieldByNumber(140, value); + return this; + } + public Builder setBodyBattery(final Integer value) { setFieldByNumber(143, value); return this; } + public Builder setExternalHeartRate(final Integer value) { + setFieldByNumber(144, value); + return this; + } + + public Builder setStepSpeedLossDistance(final Float value) { + setFieldByNumber(146, value); + return this; + } + + public Builder setStepSpeedLossPercentage(final Float value) { + setFieldByNumber(147, value); + return this; + } + + public Builder setForce(final Double value) { + setFieldByNumber(148, value); + return this; + } + public Builder setTimestamp(final Long value) { setFieldByNumber(253, value); return this; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitSession.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitSession.java index 0e3077d08c..1f1484fdb1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitSession.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/fit/messages/FitSession.java @@ -395,6 +395,11 @@ public class FitSession extends RecordData { return getFieldByNumber(71, Float.class); } + @Nullable + public Long getWorkTime() { + return getFieldByNumber(78, Long.class); + } + @Nullable public Float getAvgSwimCadence() { return getFieldByNumber(79, Float.class); @@ -725,6 +730,16 @@ public class FitSession extends RecordData { return getFieldByNumber(150, Integer.class); } + @Nullable + public Integer getTotalSets() { + return getFieldByNumber(151, Integer.class); + } + + @Nullable + public Double getVolume() { + return getFieldByNumber(152, Double.class); + } + @Nullable public Integer getO2Toxicity() { return getFieldByNumber(155, Integer.class); @@ -785,6 +800,11 @@ public class FitSession extends RecordData { return getFieldByNumber(183, Integer.class); } + @Nullable + public Integer getExecutionScore() { + return getFieldByNumber(185, Integer.class); + } + @Nullable public Float getAvgGrit() { return getFieldByNumber(186, Float.class); @@ -890,6 +910,31 @@ public class FitSession extends RecordData { return getFieldByNumber(210, Float.class); } + @Nullable + public Double getGradeAdjustedSpeed() { + return getFieldByNumber(211, Double.class); + } + + @Nullable + public Integer getWindData() { + return getFieldByNumber(212, Integer.class); + } + + @Nullable + public Integer getBeginningBodyBattery() { + return getFieldByNumber(215, Integer.class); + } + + @Nullable + public Integer getEndingBodyBattery() { + return getFieldByNumber(216, Integer.class); + } + + @Nullable + public Float getPackWeight() { + return getFieldByNumber(220, Float.class); + } + @Nullable public Float getStepSpeedLoss() { return getFieldByNumber(222, Float.class); @@ -900,6 +945,21 @@ public class FitSession extends RecordData { return getFieldByNumber(223, Float.class); } + @Nullable + public Double getAvgForce() { + return getFieldByNumber(224, Double.class); + } + + @Nullable + public Double getMaxForce() { + return getFieldByNumber(225, Double.class); + } + + @Nullable + public Double getNormalizedForce() { + return getFieldByNumber(226, Double.class); + } + @Nullable public Long getTimestamp() { return getFieldByNumber(253, Long.class); @@ -1268,6 +1328,11 @@ public class FitSession extends RecordData { return this; } + public Builder setWorkTime(final Long value) { + setFieldByNumber(78, value); + return this; + } + public Builder setAvgSwimCadence(final Float value) { setFieldByNumber(79, value); return this; @@ -1598,6 +1663,16 @@ public class FitSession extends RecordData { return this; } + public Builder setTotalSets(final Integer value) { + setFieldByNumber(151, value); + return this; + } + + public Builder setVolume(final Double value) { + setFieldByNumber(152, value); + return this; + } + public Builder setO2Toxicity(final Integer value) { setFieldByNumber(155, value); return this; @@ -1658,6 +1733,11 @@ public class FitSession extends RecordData { return this; } + public Builder setExecutionScore(final Integer value) { + setFieldByNumber(185, value); + return this; + } + public Builder setAvgGrit(final Float value) { setFieldByNumber(186, value); return this; @@ -1763,6 +1843,31 @@ public class FitSession extends RecordData { return this; } + public Builder setGradeAdjustedSpeed(final Double value) { + setFieldByNumber(211, value); + return this; + } + + public Builder setWindData(final Integer value) { + setFieldByNumber(212, value); + return this; + } + + public Builder setBeginningBodyBattery(final Integer value) { + setFieldByNumber(215, value); + return this; + } + + public Builder setEndingBodyBattery(final Integer value) { + setFieldByNumber(216, value); + return this; + } + + public Builder setPackWeight(final Float value) { + setFieldByNumber(220, value); + return this; + } + public Builder setStepSpeedLoss(final Float value) { setFieldByNumber(222, value); return this; @@ -1773,6 +1878,21 @@ public class FitSession extends RecordData { return this; } + public Builder setAvgForce(final Double value) { + setFieldByNumber(224, value); + return this; + } + + public Builder setMaxForce(final Double value) { + setFieldByNumber(225, value); + return this; + } + + public Builder setNormalizedForce(final Double value) { + setFieldByNumber(226, value); + return this; + } + public Builder setTimestamp(final Long value) { setFieldByNumber(253, value); return this;