Garmin: Introduce FitRecordDataBuilder, add Builders to all messages

This commit is contained in:
José Rebelo
2025-07-26 18:30:58 +01:00
parent 48993982e8
commit 88fd21cf35
50 changed files with 2811 additions and 163 deletions
@@ -0,0 +1,62 @@
package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit;
import java.nio.ByteOrder;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages.FitRecordDataFactory;
public class FitRecordDataBuilder {
private final GlobalFITMessage globalMessage;
private final Map<String, Object[]> values = new LinkedHashMap<>();
public FitRecordDataBuilder(final GlobalFITMessage globalMessage) {
this.globalMessage = globalMessage;
}
public FitRecordDataBuilder(final int globalMessageNumber) {
this.globalMessage = GlobalFITMessage.KNOWN_MESSAGES.get(globalMessageNumber);
if (this.globalMessage == null) {
throw new IllegalArgumentException("Unknown global message " + globalMessageNumber);
}
}
public FitRecordDataBuilder setFieldByNumber(final int number, final Object... value) {
final List<FieldDefinition> fieldDefinition = globalMessage.getFieldDefinitions(number);
if (fieldDefinition == null || fieldDefinition.isEmpty()) {
throw new IllegalArgumentException("Unknown field number " + number + " for " + globalMessage);
}
setFieldByName(fieldDefinition.get(0).getName(), value);
return this;
}
public FitRecordDataBuilder setFieldByName(final String name, final Object... value) {
values.put(name, value);
return this;
}
public RecordData build() {
final RecordData recordData = FitRecordDataFactory.create(
new RecordDefinition(
new RecordHeader((byte) 0x40),
ByteOrder.BIG_ENDIAN,
globalMessage,
values.keySet().stream().map(globalMessage::getFieldDefinition).collect(Collectors.toList()),
null
),
new RecordHeader((byte) 0x00)
);
for (final Map.Entry<String, Object[]> e : values.entrySet()) {
recordData.setFieldByName(e.getKey(), e.getValue());
}
return recordData;
}
}
@@ -400,7 +400,15 @@ public class GlobalFITMessage {
));
public static GlobalFITMessage ALARM_SETTINGS = new GlobalFITMessage(222, "ALARM_SETTINGS", Arrays.asList(
new FieldDefinitionPrimitive(0, BaseType.UINT16, "time", FieldDefinitionFactory.FIELD.ALARM)
new FieldDefinitionPrimitive(0, BaseType.UINT16, "time", FieldDefinitionFactory.FIELD.ALARM),
new FieldDefinitionPrimitive(1, BaseType.UINT32Z, "repeat"), // 31 weekday 96 weekend 126 all except mon 127 daily 128 once
new FieldDefinitionPrimitive(2, BaseType.ENUM, "enabled"), // 0/1
new FieldDefinitionPrimitive(3, BaseType.ENUM, "sound"), // 0 none 1 sound 2 vibrate 3 sound+vibrate
new FieldDefinitionPrimitive(4, BaseType.ENUM, "unknown4"), // 1
new FieldDefinitionPrimitive(5, BaseType.UINT32, "some_timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP),
new FieldDefinitionPrimitive(7, BaseType.UINT8, "unknown7"), // 0
new FieldDefinitionPrimitive(8, BaseType.ENUM, "label"), // 0 none 2 workout 3 reminder 4 appointment 6 class 7 meditate 8 bedtime
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
));
public static GlobalFITMessage SET = new GlobalFITMessage(225, "SET", Arrays.asList(
@@ -547,7 +555,7 @@ public class GlobalFITMessage {
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
));
public static Map<Integer, GlobalFITMessage> KNOWN_MESSAGES = new HashMap<Integer, GlobalFITMessage>() {{
public static Map<Integer, GlobalFITMessage> KNOWN_MESSAGES = new HashMap<>() {{
put(0, FILE_ID);
put(2, DEVICE_SETTINGS);
put(3, USER_PROFILE);
@@ -651,6 +659,25 @@ public class GlobalFITMessage {
return subset;
}
public FieldDefinition getFieldDefinition(final String name) {
for (FieldDefinitionPrimitive fieldDefinitionPrimitive :
fieldDefinitionPrimitives) {
if (name.equals(fieldDefinitionPrimitive.name)) {
return FieldDefinitionFactory.create(
fieldDefinitionPrimitive.number,
fieldDefinitionPrimitive.size,
fieldDefinitionPrimitive.type,
fieldDefinitionPrimitive.baseType,
fieldDefinitionPrimitive.name,
fieldDefinitionPrimitive.scale,
fieldDefinitionPrimitive.offset
);
}
}
throw new IllegalArgumentException("Unknown field name " + name);
}
@Nullable
public FieldDefinition getFieldDefinition(int id, int size) {
if (null == fieldDefinitionPrimitives)
@@ -2,7 +2,6 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.codegen;
import android.os.Build;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
@@ -11,8 +10,8 @@ import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.time.DayOfWeek;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashSet;
@@ -39,7 +38,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.fieldDefi
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.fieldDefinitions.FieldDefinitionWeatherCondition;
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
// This class is only used to generate code, and will not be packaged in the final apk
/** @noinspection ReadWriteStringCanBeUsed*/ // This class is only used to generate code, and will not be packaged in the final apk
@RequiresApi(api = Build.VERSION_CODES.O)
public class FitCodeGen {
public static void main(final String[] args) throws Exception {
@@ -60,6 +59,7 @@ public class FitCodeGen {
sbFactory.append("package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages;\n");
sbFactory.append("\n");
sbFactory.append("import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;\n");
sbFactory.append("import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.RecordData;\n");
sbFactory.append("import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.RecordDefinition;\n");
sbFactory.append("import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.RecordHeader;\n");
@@ -74,22 +74,20 @@ public class FitCodeGen {
sbFactory.append(" }\n");
sbFactory.append("\n");
sbFactory.append(" public static RecordData create(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {\n");
sbFactory.append(" switch (recordDefinition.getGlobalFITMessage().getNumber()) {\n");
sbFactory.append(" return switch (recordDefinition.getGlobalFITMessage().getNumber()) {\n");
final ArrayList<GlobalFITMessage> globalFITMessages = new ArrayList<>(GlobalFITMessage.KNOWN_MESSAGES.values());
Collections.sort(globalFITMessages, Comparator.comparingInt(GlobalFITMessage::getNumber));
for (final GlobalFITMessage value : globalFITMessages) {
final String className = "Fit" + capitalize(toCamelCase(value.name()));
sbFactory.append(" case ").append(value.getNumber()).append(":\n");
sbFactory.append(" return new ").append(className).append("(recordDefinition, recordHeader);\n");
sbFactory.append(" case ").append(value.getNumber()).append(" -> ")
.append("new ").append(className).append("(recordDefinition, recordHeader);\n");
process(value);
}
sbFactory.append(" }\n");
sbFactory.append("\n");
sbFactory.append(" return new RecordData(recordDefinition, recordHeader);\n");
sbFactory.append(" default -> new RecordData(recordDefinition, recordHeader);\n");
sbFactory.append(" };\n");
sbFactory.append(" }\n");
sbFactory.append("}\n");
@@ -223,6 +221,32 @@ public class FitCodeGen {
//sb.append(" .build();\n");
//sb.append(" }\n");
//
// Builder
//
sb.append("\n");
sb.append(" public static class Builder extends FitRecordDataBuilder {\n");
sb.append(" public Builder() {\n");
sb.append(" super(").append(globalFITMessage.getNumber()).append(");\n");
sb.append(" }\n");
for (final GlobalFITMessage.FieldDefinitionPrimitive primitive : globalFITMessage.getFieldDefinitionPrimitives()) {
final Class<?> fieldType = getFieldType(primitive);
final String fieldTypeName = fieldType.getSimpleName();
sb.append("\n");
sb.append(" public Builder").append(method(" set", primitive)).append("(final ").append(fieldTypeName).append(" value) {\n");
sb.append(" setFieldByNumber(").append(primitive.getNumber()).append(", value);\n");
sb.append(" return this;\n");
sb.append(" }\n");
}
sb.append("\n");
sb.append(" @Override\n");
sb.append(" public ").append(className).append(" build() {\n");
sb.append(" return (").append(className).append(") super.build();\n");
sb.append(" }\n");
sb.append(" }\n");
if (outputFile.exists()) {
// Keep manual changes if any
final String fileContents = new String(Files.readAllBytes(outputFile.toPath()), StandardCharsets.UTF_8);
@@ -243,48 +267,27 @@ public class FitCodeGen {
public Class<?> getFieldType(final GlobalFITMessage.FieldDefinitionPrimitive primitive) {
if (primitive.getType() != null) {
switch (primitive.getType()) {
case ALARM:
return Calendar.class;
case ARRAY:
return Number[].class;
case DAY_OF_WEEK:
return DayOfWeek.class;
case EXERCISE_CATEGORY:
return FieldDefinitionExerciseCategory.ExerciseCategory[].class;
case FILE_TYPE:
return FileType.FILETYPE.class;
case GOAL_SOURCE:
return FieldDefinitionGoalSource.Source.class;
case GOAL_TYPE:
return FieldDefinitionGoalType.Type.class;
case HRV_STATUS:
return FieldDefinitionHrvStatus.HrvStatus.class;
case HR_TIME_IN_ZONE:
return Double[].class;
case HR_ZONE_HIGH_BOUNDARY:
return Integer[].class;
case MEASUREMENT_SYSTEM:
return FieldDefinitionMeasurementSystem.Type.class;
case TEMPERATURE:
return Integer.class;
case TIMESTAMP:
return Long.class;
case WEATHER_CONDITION:
return FieldDefinitionWeatherCondition.Condition.class;
case LANGUAGE:
return FieldDefinitionLanguage.Language.class;
case SLEEP_STAGE:
return FieldDefinitionSleepStage.SleepStage.class;
case WEATHER_AQI:
return FieldDefinitionWeatherAqi.AQI_LEVELS.class;
case COORDINATE:
return Double.class;
case SWIM_STYLE:
return FieldDefinitionSwimStyle.SwimStyle.class;
}
throw new RuntimeException("Unknown field type " + primitive.getType());
return switch (primitive.getType()) {
case ALARM -> LocalTime.class;
case ARRAY -> Number[].class;
case DAY_OF_WEEK -> DayOfWeek.class;
case EXERCISE_CATEGORY -> FieldDefinitionExerciseCategory.ExerciseCategory[].class;
case FILE_TYPE -> FileType.FILETYPE.class;
case GOAL_SOURCE -> FieldDefinitionGoalSource.Source.class;
case GOAL_TYPE -> FieldDefinitionGoalType.Type.class;
case HRV_STATUS -> FieldDefinitionHrvStatus.HrvStatus.class;
case HR_TIME_IN_ZONE -> Double[].class;
case HR_ZONE_HIGH_BOUNDARY -> Integer[].class;
case MEASUREMENT_SYSTEM -> FieldDefinitionMeasurementSystem.Type.class;
case TEMPERATURE -> Integer.class;
case TIMESTAMP -> Long.class;
case WEATHER_CONDITION -> FieldDefinitionWeatherCondition.Condition.class;
case LANGUAGE -> FieldDefinitionLanguage.Language.class;
case SLEEP_STAGE -> FieldDefinitionSleepStage.SleepStage.class;
case WEATHER_AQI -> FieldDefinitionWeatherAqi.AQI_LEVELS.class;
case COORDINATE -> Double.class;
case SWIM_STYLE -> FieldDefinitionSwimStyle.SwimStyle.class;
};
}
switch (primitive.getBaseType()) {
@@ -1,7 +1,7 @@
package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.fieldDefinitions;
import java.nio.ByteBuffer;
import java.util.Calendar;
import java.time.LocalTime;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FieldDefinition;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.baseTypes.BaseType;
@@ -13,21 +13,18 @@ public class FieldDefinitionAlarm extends FieldDefinition {
@Override
public Object decode(ByteBuffer byteBuffer) {
final Object rawObj = baseType.decode(byteBuffer, scale, offset);
if (rawObj != null) {
final int raw = (int) rawObj;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, raw / 60);
calendar.set(Calendar.MINUTE, raw % 60);
return calendar;
final Object rawValue = baseType.decode(byteBuffer, scale, offset);
if (rawValue == null) {
return null;
}
return null;
final int value = (int) rawValue;
return LocalTime.of(value / 60, value % 60);
}
@Override
public void encode(ByteBuffer byteBuffer, Object o) {
if (o instanceof Calendar) {
baseType.encode(byteBuffer, ((Calendar) o).get(Calendar.HOUR_OF_DAY) * 60 + ((Calendar) o).get(Calendar.MINUTE), scale, offset);
if (o instanceof LocalTime localTime) {
baseType.encode(byteBuffer, localTime.getHour() * 60 + localTime.getMinute(), scale, offset);
return;
}
baseType.encode(byteBuffer, o, scale, offset);
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -54,4 +55,50 @@ public class FitActivity extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(34);
}
public Builder setTotalTimerTime(final Long value) {
setFieldByNumber(0, value);
return this;
}
public Builder setNumSessions(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setType(final Integer value) {
setFieldByNumber(2, value);
return this;
}
public Builder setEvent(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setEventType(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setLocalTimestamp(final Long value) {
setFieldByNumber(5, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitActivity build() {
return (FitActivity) super.build();
}
}
}
@@ -2,8 +2,9 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import java.util.Calendar;
import java.time.LocalTime;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -23,7 +24,103 @@ public class FitAlarmSettings extends RecordData {
}
@Nullable
public Calendar getTime() {
return (Calendar) getFieldByNumber(0);
public LocalTime getTime() {
return (LocalTime) getFieldByNumber(0);
}
@Nullable
public Long getRepeat() {
return (Long) getFieldByNumber(1);
}
@Nullable
public Integer getEnabled() {
return (Integer) getFieldByNumber(2);
}
@Nullable
public Integer getSound() {
return (Integer) getFieldByNumber(3);
}
@Nullable
public Integer getUnknown4() {
return (Integer) getFieldByNumber(4);
}
@Nullable
public Long getSomeTimestamp() {
return (Long) getFieldByNumber(5);
}
@Nullable
public Integer getUnknown7() {
return (Integer) getFieldByNumber(7);
}
@Nullable
public Integer getLabel() {
return (Integer) getFieldByNumber(8);
}
@Nullable
public Integer getMessageIndex() {
return (Integer) getFieldByNumber(254);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(222);
}
public Builder setTime(final LocalTime value) {
setFieldByNumber(0, value);
return this;
}
public Builder setRepeat(final Long value) {
setFieldByNumber(1, value);
return this;
}
public Builder setEnabled(final Integer value) {
setFieldByNumber(2, value);
return this;
}
public Builder setSound(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setUnknown4(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setSomeTimestamp(final Long value) {
setFieldByNumber(5, value);
return this;
}
public Builder setUnknown7(final Integer value) {
setFieldByNumber(7, value);
return this;
}
public Builder setLabel(final Integer value) {
setFieldByNumber(8, value);
return this;
}
public Builder setMessageIndex(final Integer value) {
setFieldByNumber(254, value);
return this;
}
@Override
public FitAlarmSettings build() {
return (FitAlarmSettings) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -64,4 +65,60 @@ public class FitConnectivity extends RecordData {
public Integer getGpsEphemerisDownloadEnabled() {
return (Integer) getFieldByNumber(10);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(127);
}
public Builder setBluetoothEnabled(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setName(final String value) {
setFieldByNumber(3, value);
return this;
}
public Builder setLiveTrackingEnabled(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setWeatherConditionsEnabled(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setWeatherAlertsEnabled(final Integer value) {
setFieldByNumber(6, value);
return this;
}
public Builder setAutoActivityUploadEnabled(final Integer value) {
setFieldByNumber(7, value);
return this;
}
public Builder setCourseDownloadEnabled(final Integer value) {
setFieldByNumber(8, value);
return this;
}
public Builder setWorkoutDownloadEnabled(final Integer value) {
setFieldByNumber(9, value);
return this;
}
public Builder setGpsEphemerisDownloadEnabled(final Integer value) {
setFieldByNumber(10, value);
return this;
}
@Override
public FitConnectivity build() {
return (FitConnectivity) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -29,4 +30,25 @@ public class FitCourse extends RecordData {
public String getName() {
return (String) getFieldByNumber(5);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(31);
}
public Builder setSport(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setName(final String value) {
setFieldByNumber(5, value);
return this;
}
@Override
public FitCourse build() {
return (FitCourse) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -29,4 +30,25 @@ public class FitDeveloperData extends RecordData {
public Integer getDeveloperDataIndex() {
return (Integer) getFieldByNumber(3);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(207);
}
public Builder setApplicationId(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setDeveloperDataIndex(final Integer value) {
setFieldByNumber(3, value);
return this;
}
@Override
public FitDeveloperData build() {
return (FitDeveloperData) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -44,4 +45,40 @@ public class FitDeviceInfo extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(23);
}
public Builder setManufacturer(final Integer value) {
setFieldByNumber(2, value);
return this;
}
public Builder setSerialNumber(final Long value) {
setFieldByNumber(3, value);
return this;
}
public Builder setProduct(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setSoftwareVersion(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitDeviceInfo build() {
return (FitDeviceInfo) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -99,4 +100,95 @@ public class FitDeviceSettings extends RecordData {
public Long getAutoActivityDetect() {
return (Long) getFieldByNumber(90);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(2);
}
public Builder setActiveTimeZone(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setUtcOffset(final Long value) {
setFieldByNumber(1, value);
return this;
}
public Builder setTimeOffset(final Long value) {
setFieldByNumber(2, value);
return this;
}
public Builder setTimeMode(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setTimeZoneOffset(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setBacklightMode(final Integer value) {
setFieldByNumber(12, value);
return this;
}
public Builder setActivityTrackerEnabled(final Integer value) {
setFieldByNumber(36, value);
return this;
}
public Builder setMoveAlertEnabled(final Integer value) {
setFieldByNumber(46, value);
return this;
}
public Builder setDateMode(final Integer value) {
setFieldByNumber(47, value);
return this;
}
public Builder setDisplayOrientation(final Integer value) {
setFieldByNumber(55, value);
return this;
}
public Builder setMountingSide(final Integer value) {
setFieldByNumber(56, value);
return this;
}
public Builder setDefaultPage(final Integer value) {
setFieldByNumber(57, value);
return this;
}
public Builder setAutosyncMinSteps(final Integer value) {
setFieldByNumber(58, value);
return this;
}
public Builder setAutosyncMinTime(final Integer value) {
setFieldByNumber(59, value);
return this;
}
public Builder setBleAutoUploadEnabled(final Integer value) {
setFieldByNumber(86, value);
return this;
}
public Builder setAutoActivityDetect(final Long value) {
setFieldByNumber(90, value);
return this;
}
@Override
public FitDeviceSettings build() {
return (FitDeviceSettings) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -39,4 +40,35 @@ public class FitDiveGas extends RecordData {
public Integer getMessageIndex() {
return (Integer) getFieldByNumber(254);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(259);
}
public Builder setHeliumContent(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setOxygenContent(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setStatus(final Integer value) {
setFieldByNumber(2, value);
return this;
}
public Builder setMessageIndex(final Integer value) {
setFieldByNumber(254, value);
return this;
}
@Override
public FitDiveGas build() {
return (FitDiveGas) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -84,4 +85,80 @@ public class FitDiveSummary extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(268);
}
public Builder setReferenceMesg(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setReferenceIndex(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setAvgDepth(final Double value) {
setFieldByNumber(2, value);
return this;
}
public Builder setMaxDepth(final Double value) {
setFieldByNumber(3, value);
return this;
}
public Builder setSurfaceInterval(final Long value) {
setFieldByNumber(4, value);
return this;
}
public Builder setStartCns(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setEndCns(final Integer value) {
setFieldByNumber(6, value);
return this;
}
public Builder setStartN2(final Integer value) {
setFieldByNumber(7, value);
return this;
}
public Builder setEndN2(final Integer value) {
setFieldByNumber(8, value);
return this;
}
public Builder setO2Toxicity(final Integer value) {
setFieldByNumber(9, value);
return this;
}
public Builder setDiveNumber(final Long value) {
setFieldByNumber(10, value);
return this;
}
public Builder setBottomTime(final Double value) {
setFieldByNumber(11, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitDiveSummary build() {
return (FitDiveSummary) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -44,4 +45,40 @@ public class FitEvent extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(21);
}
public Builder setEvent(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setEventType(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setData(final Long value) {
setFieldByNumber(3, value);
return this;
}
public Builder setEventGroup(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitEvent build() {
return (FitEvent) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -44,4 +45,40 @@ public class FitFieldDescription extends RecordData {
public String getUnits() {
return (String) getFieldByNumber(8);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(206);
}
public Builder setDeveloperDataIndex(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setFieldDefinitionNumber(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setFitBaseTypeId(final Integer value) {
setFieldByNumber(2, value);
return this;
}
public Builder setFieldName(final String value) {
setFieldByNumber(3, value);
return this;
}
public Builder setUnits(final String value) {
setFieldByNumber(8, value);
return this;
}
@Override
public FitFieldDescription build() {
return (FitFieldDescription) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -29,4 +30,25 @@ public class FitFileCreator extends RecordData {
public Integer getHardwareVersion() {
return (Integer) getFieldByNumber(1);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(49);
}
public Builder setSoftwareVersion(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setHardwareVersion(final Integer value) {
setFieldByNumber(1, value);
return this;
}
@Override
public FitFileCreator build() {
return (FitFileCreator) super.build();
}
}
}
@@ -3,6 +3,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.FileType.FILETYPE;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -60,4 +61,55 @@ public class FitFileId extends RecordData {
public String getProductName() {
return (String) getFieldByNumber(8);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(0);
}
public Builder setType(final FILETYPE value) {
setFieldByNumber(0, value);
return this;
}
public Builder setManufacturer(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setProduct(final Integer value) {
setFieldByNumber(2, value);
return this;
}
public Builder setSerialNumber(final Long value) {
setFieldByNumber(3, value);
return this;
}
public Builder setTimeCreated(final Long value) {
setFieldByNumber(4, value);
return this;
}
public Builder setNumber(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setManufacturerPartner(final Integer value) {
setFieldByNumber(6, value);
return this;
}
public Builder setProductName(final String value) {
setFieldByNumber(8, value);
return this;
}
@Override
public FitFileId build() {
return (FitFileId) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -36,4 +37,30 @@ public class FitGoals extends RecordData {
public Source getSource() {
return (Source) getFieldByNumber(11);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(15);
}
public Builder setType(final Type value) {
setFieldByNumber(4, value);
return this;
}
public Builder setTargetValue(final Long value) {
setFieldByNumber(7, value);
return this;
}
public Builder setSource(final Source value) {
setFieldByNumber(11, value);
return this;
}
@Override
public FitGoals build() {
return (FitGoals) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -29,4 +30,25 @@ public class FitGpsMetadata extends RecordData {
public Long getEnhancedSpeed() {
return (Long) getFieldByNumber(4);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(160);
}
public Builder setEnhancedAltitude(final Long value) {
setFieldByNumber(3, value);
return this;
}
public Builder setEnhancedSpeed(final Long value) {
setFieldByNumber(4, value);
return this;
}
@Override
public FitGpsMetadata build() {
return (FitGpsMetadata) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -60,4 +61,55 @@ public class FitHrvSummary extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(370);
}
public Builder setWeeklyAverage(final Float value) {
setFieldByNumber(0, value);
return this;
}
public Builder setLastNightAverage(final Float value) {
setFieldByNumber(1, value);
return this;
}
public Builder setLastNight5MinHigh(final Float value) {
setFieldByNumber(2, value);
return this;
}
public Builder setBaselineLowUpper(final Float value) {
setFieldByNumber(3, value);
return this;
}
public Builder setBaselineBalancedLower(final Float value) {
setFieldByNumber(4, value);
return this;
}
public Builder setBaselineBalancedUpper(final Float value) {
setFieldByNumber(5, value);
return this;
}
public Builder setStatus(final HrvStatus value) {
setFieldByNumber(6, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitHrvSummary build() {
return (FitHrvSummary) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -29,4 +30,25 @@ public class FitHrvValue extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(371);
}
public Builder setValue(final Float value) {
setFieldByNumber(0, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitHrvValue build() {
return (FitHrvValue) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -165,4 +166,160 @@ public class FitLap extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(19);
}
public Builder setEvent(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setEventType(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setStartTime(final Long value) {
setFieldByNumber(2, value);
return this;
}
public Builder setStartLat(final Double value) {
setFieldByNumber(3, value);
return this;
}
public Builder setStartLong(final Double value) {
setFieldByNumber(4, value);
return this;
}
public Builder setEndLat(final Double value) {
setFieldByNumber(5, value);
return this;
}
public Builder setEndLong(final Double value) {
setFieldByNumber(6, value);
return this;
}
public Builder setTotalElapsedTime(final Double value) {
setFieldByNumber(7, value);
return this;
}
public Builder setTotalTimerTime(final Double value) {
setFieldByNumber(8, value);
return this;
}
public Builder setTotalDistance(final Double value) {
setFieldByNumber(9, value);
return this;
}
public Builder setTotalCycles(final Long value) {
setFieldByNumber(10, value);
return this;
}
public Builder setTotalCalores(final Integer value) {
setFieldByNumber(11, value);
return this;
}
public Builder setAvgHeartRate(final Integer value) {
setFieldByNumber(15, value);
return this;
}
public Builder setMaxHeartRate(final Integer value) {
setFieldByNumber(16, value);
return this;
}
public Builder setAvgCadence(final Integer value) {
setFieldByNumber(17, value);
return this;
}
public Builder setTotalAscent(final Integer value) {
setFieldByNumber(21, value);
return this;
}
public Builder setTotalDescent(final Integer value) {
setFieldByNumber(22, value);
return this;
}
public Builder setLapTrigger(final Integer value) {
setFieldByNumber(24, value);
return this;
}
public Builder setSport(final Integer value) {
setFieldByNumber(25, value);
return this;
}
public Builder setNumLengths(final Integer value) {
setFieldByNumber(32, value);
return this;
}
public Builder setFirstLengthIndex(final Integer value) {
setFieldByNumber(35, value);
return this;
}
public Builder setAvgStrokeDistance(final Integer value) {
setFieldByNumber(37, value);
return this;
}
public Builder setSwimStyle(final SwimStyle value) {
setFieldByNumber(38, value);
return this;
}
public Builder setSubSport(final Integer value) {
setFieldByNumber(39, value);
return this;
}
public Builder setNumActiveLengths(final Integer value) {
setFieldByNumber(40, value);
return this;
}
public Builder setAvgSwolf(final Integer value) {
setFieldByNumber(73, value);
return this;
}
public Builder setEnhancedAvgSpeed(final Double value) {
setFieldByNumber(110, value);
return this;
}
public Builder setEnhancedMaxSpeed(final Double value) {
setFieldByNumber(111, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitLap build() {
return (FitLap) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -49,4 +50,45 @@ public class FitMaxMetData extends RecordData {
public Integer getCalibratedData() {
return (Integer) getFieldByNumber(9);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(229);
}
public Builder setUpdateTime(final Long value) {
setFieldByNumber(0, value);
return this;
}
public Builder setVo2Max(final Float value) {
setFieldByNumber(2, value);
return this;
}
public Builder setSport(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setSubSport(final Integer value) {
setFieldByNumber(6, value);
return this;
}
public Builder setMaxMetCategory(final Integer value) {
setFieldByNumber(8, value);
return this;
}
public Builder setCalibratedData(final Integer value) {
setFieldByNumber(9, value);
return this;
}
@Override
public FitMaxMetData build() {
return (FitMaxMetData) super.build();
}
}
}
@@ -5,6 +5,7 @@ import androidx.annotation.Nullable;
import java.util.Optional;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.GarminTimeUtils;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -83,6 +84,77 @@ public class FitMonitoring extends RecordData {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(55);
}
public Builder setDistance(final Long value) {
setFieldByNumber(2, value);
return this;
}
public Builder setCycles(final Long value) {
setFieldByNumber(3, value);
return this;
}
public Builder setActiveTime(final Long value) {
setFieldByNumber(4, value);
return this;
}
public Builder setActivityType(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setActiveCalories(final Integer value) {
setFieldByNumber(19, value);
return this;
}
public Builder setDurationMin(final Integer value) {
setFieldByNumber(29, value);
return this;
}
public Builder setCurrentActivityTypeIntensity(final Integer value) {
setFieldByNumber(24, value);
return this;
}
public Builder setTimestamp16(final Integer value) {
setFieldByNumber(26, value);
return this;
}
public Builder setHeartRate(final Integer value) {
setFieldByNumber(27, value);
return this;
}
public Builder setModerateActivityMinutes(final Integer value) {
setFieldByNumber(33, value);
return this;
}
public Builder setVigorousActivityMinutes(final Integer value) {
setFieldByNumber(34, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitMonitoring build() {
return (FitMonitoring) super.build();
}
}
// manual changes below
public Long computeTimestamp(final Long lastMonitoringTimestamp) {
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -34,4 +35,30 @@ public class FitMonitoringHrData extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(211);
}
public Builder setRestingHeartRate(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setCurrentDayRestingHeartRate(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitMonitoringHrData build() {
return (FitMonitoringHrData) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -70,4 +71,45 @@ public class FitMonitoringInfo extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(103);
}
public Builder setLocalTimestamp(final Long value) {
setFieldByNumber(0, value);
return this;
}
public Builder setActivityType(final Number[] value) {
setFieldByNumber(1, value);
return this;
}
public Builder setStepsToDistance(final Number[] value) {
setFieldByNumber(3, value);
return this;
}
public Builder setStepsToCalories(final Number[] value) {
setFieldByNumber(4, value);
return this;
}
public Builder setRestingMetabolicRate(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitMonitoringInfo build() {
return (FitMonitoringInfo) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -59,4 +60,55 @@ public class FitNap extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(412);
}
public Builder setStartTimestamp(final Long value) {
setFieldByNumber(0, value);
return this;
}
public Builder setUnknown1(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setEndTimestamp(final Long value) {
setFieldByNumber(2, value);
return this;
}
public Builder setUnknown3(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setUnknown4(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setUnknown6(final Integer value) {
setFieldByNumber(6, value);
return this;
}
public Builder setTimestamp7(final Long value) {
setFieldByNumber(7, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitNap build() {
return (FitNap) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -49,4 +50,45 @@ public class FitPhysiologicalMetrics extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(140);
}
public Builder setAerobicEffect(final Float value) {
setFieldByNumber(4, value);
return this;
}
public Builder setMetMax(final Double value) {
setFieldByNumber(7, value);
return this;
}
public Builder setRecoveryTime(final Integer value) {
setFieldByNumber(9, value);
return this;
}
public Builder setLactateThresholdHeartRate(final Integer value) {
setFieldByNumber(14, value);
return this;
}
public Builder setAnaerobicEffect(final Float value) {
setFieldByNumber(20, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitPhysiologicalMetrics build() {
return (FitPhysiologicalMetrics) super.build();
}
}
}
@@ -6,7 +6,7 @@ import java.util.Date;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityPoint;
import nodomain.freeyourgadget.gadgetbridge.model.GPSCoordinate;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.GarminUtils;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -170,6 +170,162 @@ public class FitRecord extends RecordData {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(20);
}
public Builder setLatitude(final Double value) {
setFieldByNumber(0, value);
return this;
}
public Builder setLongitude(final Double value) {
setFieldByNumber(1, value);
return this;
}
public Builder setAltitude(final Float value) {
setFieldByNumber(2, value);
return this;
}
public Builder setHeartRate(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setCadence(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setDistance(final Double value) {
setFieldByNumber(5, value);
return this;
}
public Builder setSpeed(final Float value) {
setFieldByNumber(6, value);
return this;
}
public Builder setPower(final Integer value) {
setFieldByNumber(7, value);
return this;
}
public Builder setTemperature(final Integer value) {
setFieldByNumber(13, value);
return this;
}
public Builder setAccumulatedPower(final Long value) {
setFieldByNumber(29, value);
return this;
}
public Builder setOscillation(final Float value) {
setFieldByNumber(39, value);
return this;
}
public Builder setActivity(final Integer value) {
setFieldByNumber(42, value);
return this;
}
public Builder setFractionalCadence(final Float value) {
setFieldByNumber(53, value);
return this;
}
public Builder setEnhancedSpeed(final Double value) {
setFieldByNumber(73, value);
return this;
}
public Builder setEnhancedAltitude(final Double value) {
setFieldByNumber(78, value);
return this;
}
public Builder setVerticalRatio(final Float value) {
setFieldByNumber(83, value);
return this;
}
public Builder setStepLength(final Float value) {
setFieldByNumber(85, value);
return this;
}
public Builder setAbsolutePressure(final Long value) {
setFieldByNumber(91, value);
return this;
}
public Builder setDepth(final Double value) {
setFieldByNumber(92, value);
return this;
}
public Builder setNextStopDepth(final Double value) {
setFieldByNumber(93, value);
return this;
}
public Builder setNextStopTime(final Long value) {
setFieldByNumber(94, value);
return this;
}
public Builder setTimeToSurface(final Long value) {
setFieldByNumber(95, value);
return this;
}
public Builder setNdlTime(final Long value) {
setFieldByNumber(96, value);
return this;
}
public Builder setCnsLoad(final Integer value) {
setFieldByNumber(97, value);
return this;
}
public Builder setN2Load(final Integer value) {
setFieldByNumber(98, value);
return this;
}
public Builder setEnhancedRespirationRate(final Integer value) {
setFieldByNumber(108, value);
return this;
}
public Builder setWristHeartRate(final Integer value) {
setFieldByNumber(136, value);
return this;
}
public Builder setBodyBattery(final Integer value) {
setFieldByNumber(143, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitRecord build() {
return (FitRecord) super.build();
}
}
// manual changes below
public ActivityPoint toActivityPoint() {
@@ -1,5 +1,6 @@
package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -14,99 +15,53 @@ public class FitRecordDataFactory {
}
public static RecordData create(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
switch (recordDefinition.getGlobalFITMessage().getNumber()) {
case 0:
return new FitFileId(recordDefinition, recordHeader);
case 2:
return new FitDeviceSettings(recordDefinition, recordHeader);
case 3:
return new FitUserProfile(recordDefinition, recordHeader);
case 7:
return new FitZonesTarget(recordDefinition, recordHeader);
case 12:
return new FitSport(recordDefinition, recordHeader);
case 15:
return new FitGoals(recordDefinition, recordHeader);
case 18:
return new FitSession(recordDefinition, recordHeader);
case 19:
return new FitLap(recordDefinition, recordHeader);
case 20:
return new FitRecord(recordDefinition, recordHeader);
case 21:
return new FitEvent(recordDefinition, recordHeader);
case 23:
return new FitDeviceInfo(recordDefinition, recordHeader);
case 26:
return new FitWorkout(recordDefinition, recordHeader);
case 31:
return new FitCourse(recordDefinition, recordHeader);
case 34:
return new FitActivity(recordDefinition, recordHeader);
case 49:
return new FitFileCreator(recordDefinition, recordHeader);
case 55:
return new FitMonitoring(recordDefinition, recordHeader);
case 103:
return new FitMonitoringInfo(recordDefinition, recordHeader);
case 127:
return new FitConnectivity(recordDefinition, recordHeader);
case 128:
return new FitWeather(recordDefinition, recordHeader);
case 140:
return new FitPhysiologicalMetrics(recordDefinition, recordHeader);
case 159:
return new FitWatchfaceSettings(recordDefinition, recordHeader);
case 160:
return new FitGpsMetadata(recordDefinition, recordHeader);
case 162:
return new FitTimestampCorrelation(recordDefinition, recordHeader);
case 206:
return new FitFieldDescription(recordDefinition, recordHeader);
case 207:
return new FitDeveloperData(recordDefinition, recordHeader);
case 211:
return new FitMonitoringHrData(recordDefinition, recordHeader);
case 216:
return new FitTimeInZone(recordDefinition, recordHeader);
case 222:
return new FitAlarmSettings(recordDefinition, recordHeader);
case 225:
return new FitSet(recordDefinition, recordHeader);
case 227:
return new FitStressLevel(recordDefinition, recordHeader);
case 229:
return new FitMaxMetData(recordDefinition, recordHeader);
case 259:
return new FitDiveGas(recordDefinition, recordHeader);
case 268:
return new FitDiveSummary(recordDefinition, recordHeader);
case 269:
return new FitSpo2(recordDefinition, recordHeader);
case 273:
return new FitSleepDataInfo(recordDefinition, recordHeader);
case 274:
return new FitSleepDataRaw(recordDefinition, recordHeader);
case 275:
return new FitSleepStage(recordDefinition, recordHeader);
case 297:
return new FitRespirationRate(recordDefinition, recordHeader);
case 346:
return new FitSleepStats(recordDefinition, recordHeader);
case 370:
return new FitHrvSummary(recordDefinition, recordHeader);
case 371:
return new FitHrvValue(recordDefinition, recordHeader);
case 378:
return new FitTrainingLoad(recordDefinition, recordHeader);
case 397:
return new FitSkinTempRaw(recordDefinition, recordHeader);
case 398:
return new FitSkinTempOvernight(recordDefinition, recordHeader);
case 412:
return new FitNap(recordDefinition, recordHeader);
}
return new RecordData(recordDefinition, recordHeader);
return switch (recordDefinition.getGlobalFITMessage().getNumber()) {
case 0 -> new FitFileId(recordDefinition, recordHeader);
case 2 -> new FitDeviceSettings(recordDefinition, recordHeader);
case 3 -> new FitUserProfile(recordDefinition, recordHeader);
case 7 -> new FitZonesTarget(recordDefinition, recordHeader);
case 12 -> new FitSport(recordDefinition, recordHeader);
case 15 -> new FitGoals(recordDefinition, recordHeader);
case 18 -> new FitSession(recordDefinition, recordHeader);
case 19 -> new FitLap(recordDefinition, recordHeader);
case 20 -> new FitRecord(recordDefinition, recordHeader);
case 21 -> new FitEvent(recordDefinition, recordHeader);
case 23 -> new FitDeviceInfo(recordDefinition, recordHeader);
case 26 -> new FitWorkout(recordDefinition, recordHeader);
case 31 -> new FitCourse(recordDefinition, recordHeader);
case 34 -> new FitActivity(recordDefinition, recordHeader);
case 49 -> new FitFileCreator(recordDefinition, recordHeader);
case 55 -> new FitMonitoring(recordDefinition, recordHeader);
case 103 -> new FitMonitoringInfo(recordDefinition, recordHeader);
case 127 -> new FitConnectivity(recordDefinition, recordHeader);
case 128 -> new FitWeather(recordDefinition, recordHeader);
case 140 -> new FitPhysiologicalMetrics(recordDefinition, recordHeader);
case 159 -> new FitWatchfaceSettings(recordDefinition, recordHeader);
case 160 -> new FitGpsMetadata(recordDefinition, recordHeader);
case 162 -> new FitTimestampCorrelation(recordDefinition, recordHeader);
case 206 -> new FitFieldDescription(recordDefinition, recordHeader);
case 207 -> new FitDeveloperData(recordDefinition, recordHeader);
case 211 -> new FitMonitoringHrData(recordDefinition, recordHeader);
case 216 -> new FitTimeInZone(recordDefinition, recordHeader);
case 222 -> new FitAlarmSettings(recordDefinition, recordHeader);
case 225 -> new FitSet(recordDefinition, recordHeader);
case 227 -> new FitStressLevel(recordDefinition, recordHeader);
case 229 -> new FitMaxMetData(recordDefinition, recordHeader);
case 259 -> new FitDiveGas(recordDefinition, recordHeader);
case 268 -> new FitDiveSummary(recordDefinition, recordHeader);
case 269 -> new FitSpo2(recordDefinition, recordHeader);
case 273 -> new FitSleepDataInfo(recordDefinition, recordHeader);
case 274 -> new FitSleepDataRaw(recordDefinition, recordHeader);
case 275 -> new FitSleepStage(recordDefinition, recordHeader);
case 297 -> new FitRespirationRate(recordDefinition, recordHeader);
case 346 -> new FitSleepStats(recordDefinition, recordHeader);
case 370 -> new FitHrvSummary(recordDefinition, recordHeader);
case 371 -> new FitHrvValue(recordDefinition, recordHeader);
case 378 -> new FitTrainingLoad(recordDefinition, recordHeader);
case 397 -> new FitSkinTempRaw(recordDefinition, recordHeader);
case 398 -> new FitSkinTempOvernight(recordDefinition, recordHeader);
case 412 -> new FitNap(recordDefinition, recordHeader);
default -> new RecordData(recordDefinition, recordHeader);
};
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -29,4 +30,25 @@ public class FitRespirationRate extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(297);
}
public Builder setRespirationRate(final Float value) {
setFieldByNumber(0, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitRespirationRate build() {
return (FitRespirationRate) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -485,4 +486,425 @@ public class FitSession extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(18);
}
public Builder setEvent(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setEventType(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setStartTime(final Long value) {
setFieldByNumber(2, value);
return this;
}
public Builder setStartLatitude(final Double value) {
setFieldByNumber(3, value);
return this;
}
public Builder setStartLongitude(final Double value) {
setFieldByNumber(4, value);
return this;
}
public Builder setSport(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setSubSport(final Integer value) {
setFieldByNumber(6, value);
return this;
}
public Builder setTotalElapsedTime(final Long value) {
setFieldByNumber(7, value);
return this;
}
public Builder setTotalTimerTime(final Long value) {
setFieldByNumber(8, value);
return this;
}
public Builder setTotalDistance(final Long value) {
setFieldByNumber(9, value);
return this;
}
public Builder setTotalCycles(final Long value) {
setFieldByNumber(10, value);
return this;
}
public Builder setTotalCalories(final Integer value) {
setFieldByNumber(11, value);
return this;
}
public Builder setAverageHeartRate(final Integer value) {
setFieldByNumber(16, value);
return this;
}
public Builder setMaxHeartRate(final Integer value) {
setFieldByNumber(17, value);
return this;
}
public Builder setAvgCadence(final Integer value) {
setFieldByNumber(18, value);
return this;
}
public Builder setMaxCadence(final Integer value) {
setFieldByNumber(19, value);
return this;
}
public Builder setAvgPower(final Integer value) {
setFieldByNumber(20, value);
return this;
}
public Builder setMaxPower(final Integer value) {
setFieldByNumber(21, value);
return this;
}
public Builder setTotalAscent(final Integer value) {
setFieldByNumber(22, value);
return this;
}
public Builder setTotalDescent(final Integer value) {
setFieldByNumber(23, value);
return this;
}
public Builder setTotalTrainingEffect(final Float value) {
setFieldByNumber(24, value);
return this;
}
public Builder setFirstLapIndex(final Integer value) {
setFieldByNumber(25, value);
return this;
}
public Builder setNumLaps(final Integer value) {
setFieldByNumber(26, value);
return this;
}
public Builder setNecLatitude(final Double value) {
setFieldByNumber(29, value);
return this;
}
public Builder setNecLongitude(final Double value) {
setFieldByNumber(30, value);
return this;
}
public Builder setSwcLatitude(final Double value) {
setFieldByNumber(31, value);
return this;
}
public Builder setSwcLongitude(final Double value) {
setFieldByNumber(32, value);
return this;
}
public Builder setNumLengths(final Integer value) {
setFieldByNumber(33, value);
return this;
}
public Builder setNormalizedPower(final Integer value) {
setFieldByNumber(34, value);
return this;
}
public Builder setTrainingStressScore(final Float value) {
setFieldByNumber(35, value);
return this;
}
public Builder setIntensityFactor(final Float value) {
setFieldByNumber(36, value);
return this;
}
public Builder setLeftRightBalance(final Integer value) {
setFieldByNumber(37, value);
return this;
}
public Builder setEndLatitude(final Double value) {
setFieldByNumber(38, value);
return this;
}
public Builder setEndLongitude(final Double value) {
setFieldByNumber(39, value);
return this;
}
public Builder setPoolLength(final Float value) {
setFieldByNumber(44, value);
return this;
}
public Builder setThresholdPower(final Integer value) {
setFieldByNumber(45, value);
return this;
}
public Builder setNumActiveLengths(final Integer value) {
setFieldByNumber(47, value);
return this;
}
public Builder setTotalWork(final Long value) {
setFieldByNumber(48, value);
return this;
}
public Builder setAvgSwimCadence(final Float value) {
setFieldByNumber(79, value);
return this;
}
public Builder setAvgSwolf(final Integer value) {
setFieldByNumber(80, value);
return this;
}
public Builder setAvgVerticalOscillation(final Float value) {
setFieldByNumber(89, value);
return this;
}
public Builder setAvgStanceTimePercent(final Float value) {
setFieldByNumber(90, value);
return this;
}
public Builder setAvgStanceTime(final Float value) {
setFieldByNumber(91, value);
return this;
}
public Builder setAvgFractionalCadence(final Float value) {
setFieldByNumber(92, value);
return this;
}
public Builder setMaxFractionalCadence(final Float value) {
setFieldByNumber(93, value);
return this;
}
public Builder setAvgLeftTorqueEffectiveness(final Float value) {
setFieldByNumber(101, value);
return this;
}
public Builder setAvgRightTorqueEffectiveness(final Float value) {
setFieldByNumber(102, value);
return this;
}
public Builder setAvgLeftPedalSmoothness(final Float value) {
setFieldByNumber(103, value);
return this;
}
public Builder setAvgRightPedalSmoothness(final Float value) {
setFieldByNumber(104, value);
return this;
}
public Builder setFrontShifts(final Integer value) {
setFieldByNumber(107, value);
return this;
}
public Builder setRearShifts(final Integer value) {
setFieldByNumber(108, value);
return this;
}
public Builder setSportProfileName(final String value) {
setFieldByNumber(110, value);
return this;
}
public Builder setStandTime(final Long value) {
setFieldByNumber(112, value);
return this;
}
public Builder setStandCount(final Integer value) {
setFieldByNumber(113, value);
return this;
}
public Builder setAvgLeftPco(final Integer value) {
setFieldByNumber(114, value);
return this;
}
public Builder setAvgRightPco(final Integer value) {
setFieldByNumber(115, value);
return this;
}
public Builder setAvgLeftPowerPhase(final Number[] value) {
setFieldByNumber(116, value);
return this;
}
public Builder setAvgLeftPowerPhasePeak(final Number[] value) {
setFieldByNumber(117, value);
return this;
}
public Builder setAvgRightPowerPhase(final Number[] value) {
setFieldByNumber(118, value);
return this;
}
public Builder setAvgRightPowerPhasePeak(final Number[] value) {
setFieldByNumber(119, value);
return this;
}
public Builder setAvgPowerPosition(final Number[] value) {
setFieldByNumber(120, value);
return this;
}
public Builder setMaxPowerPosition(final Number[] value) {
setFieldByNumber(121, value);
return this;
}
public Builder setAvgCadencePosition(final Number[] value) {
setFieldByNumber(122, value);
return this;
}
public Builder setMaxCadencePosition(final Number[] value) {
setFieldByNumber(123, value);
return this;
}
public Builder setEnhancedAvgSpeed(final Double value) {
setFieldByNumber(124, value);
return this;
}
public Builder setEnhancedMaxSpeed(final Double value) {
setFieldByNumber(125, value);
return this;
}
public Builder setAvgVerticalRatio(final Float value) {
setFieldByNumber(132, value);
return this;
}
public Builder setAvgStanceTimeBalance(final Float value) {
setFieldByNumber(133, value);
return this;
}
public Builder setAvgStepLength(final Float value) {
setFieldByNumber(134, value);
return this;
}
public Builder setTotalAnaerobicTrainingEffect(final Float value) {
setFieldByNumber(137, value);
return this;
}
public Builder setTrainingLoadPeak(final Double value) {
setFieldByNumber(168, value);
return this;
}
public Builder setEnhancedAvgRespirationRate(final Float value) {
setFieldByNumber(169, value);
return this;
}
public Builder setEnhancedMaxRespirationRate(final Float value) {
setFieldByNumber(170, value);
return this;
}
public Builder setEstimatedSweatLoss(final Integer value) {
setFieldByNumber(178, value);
return this;
}
public Builder setEnhancedMinRespirationRate(final Float value) {
setFieldByNumber(180, value);
return this;
}
public Builder setPrimaryBenefit(final Integer value) {
setFieldByNumber(188, value);
return this;
}
public Builder setAvgSpo2(final Integer value) {
setFieldByNumber(194, value);
return this;
}
public Builder setAvgStress(final Integer value) {
setFieldByNumber(195, value);
return this;
}
public Builder setRestingCalories(final Integer value) {
setFieldByNumber(196, value);
return this;
}
public Builder setHrvSdrr(final Integer value) {
setFieldByNumber(197, value);
return this;
}
public Builder setHrvRmssd(final Integer value) {
setFieldByNumber(198, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitSession build() {
return (FitSession) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -67,4 +68,55 @@ public class FitSet extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(254);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(225);
}
public Builder setDuration(final Double value) {
setFieldByNumber(0, value);
return this;
}
public Builder setRepetitions(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setWeight(final Float value) {
setFieldByNumber(4, value);
return this;
}
public Builder setSetType(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setStartTime(final Long value) {
setFieldByNumber(6, value);
return this;
}
public Builder setCategory(final ExerciseCategory[] value) {
setFieldByNumber(7, value);
return this;
}
public Builder setMessageIndex(final Integer value) {
setFieldByNumber(10, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(254, value);
return this;
}
@Override
public FitSet build() {
return (FitSet) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -44,4 +45,40 @@ public class FitSkinTempOvernight extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(398);
}
public Builder setLocalTimestamp(final Long value) {
setFieldByNumber(0, value);
return this;
}
public Builder setAverageDeviation(final Float value) {
setFieldByNumber(1, value);
return this;
}
public Builder setAverage7DayDeviation(final Float value) {
setFieldByNumber(2, value);
return this;
}
public Builder setUnk3(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitSkinTempOvernight build() {
return (FitSkinTempOvernight) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -29,4 +30,25 @@ public class FitSkinTempRaw extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(397);
}
public Builder setDeviation(final Float value) {
setFieldByNumber(1, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitSkinTempRaw build() {
return (FitSkinTempRaw) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -49,4 +50,45 @@ public class FitSleepDataInfo extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(273);
}
public Builder setUnk0(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setSampleLength(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setLocalTimestamp(final Long value) {
setFieldByNumber(2, value);
return this;
}
public Builder setUnk3(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setVersion(final String value) {
setFieldByNumber(4, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitSleepDataInfo build() {
return (FitSleepDataInfo) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -24,4 +25,20 @@ public class FitSleepDataRaw extends RecordData {
public Integer getBytes() {
return (Integer) getFieldByNumber(0);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(274);
}
public Builder setBytes(final Integer value) {
setFieldByNumber(0, value);
return this;
}
@Override
public FitSleepDataRaw build() {
return (FitSleepDataRaw) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -30,4 +31,25 @@ public class FitSleepStage extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(275);
}
public Builder setSleepStage(final SleepStage value) {
setFieldByNumber(0, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitSleepStage build() {
return (FitSleepStage) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -104,4 +105,100 @@ public class FitSleepStats extends RecordData {
public Integer getUnk16() {
return (Integer) getFieldByNumber(16);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(346);
}
public Builder setCombinedAwakeScore(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setAwakeTimeScore(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setAwakeningsCountScore(final Integer value) {
setFieldByNumber(2, value);
return this;
}
public Builder setDeepSleepScore(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setSleepDurationScore(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setLightSleepScore(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setOverallSleepScore(final Integer value) {
setFieldByNumber(6, value);
return this;
}
public Builder setSleepQualityScore(final Integer value) {
setFieldByNumber(7, value);
return this;
}
public Builder setSleepRecoveryScore(final Integer value) {
setFieldByNumber(8, value);
return this;
}
public Builder setRemSleepScore(final Integer value) {
setFieldByNumber(9, value);
return this;
}
public Builder setSleepRestlessnessScore(final Integer value) {
setFieldByNumber(10, value);
return this;
}
public Builder setAwakeningsCount(final Integer value) {
setFieldByNumber(11, value);
return this;
}
public Builder setUnk12(final Integer value) {
setFieldByNumber(12, value);
return this;
}
public Builder setUnk13(final Integer value) {
setFieldByNumber(13, value);
return this;
}
public Builder setInterruptionsScore(final Integer value) {
setFieldByNumber(14, value);
return this;
}
public Builder setAverageStressDuringSleep(final Float value) {
setFieldByNumber(15, value);
return this;
}
public Builder setUnk16(final Integer value) {
setFieldByNumber(16, value);
return this;
}
@Override
public FitSleepStats build() {
return (FitSleepStats) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -39,4 +40,35 @@ public class FitSpo2 extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(269);
}
public Builder setReadingSpo2(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setReadingConfidence(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setMode(final Integer value) {
setFieldByNumber(2, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitSpo2 build() {
return (FitSpo2) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -34,4 +35,30 @@ public class FitSport extends RecordData {
public String getName() {
return (String) getFieldByNumber(3);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(12);
}
public Builder setSport(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setSubSport(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setName(final String value) {
setFieldByNumber(3, value);
return this;
}
@Override
public FitSport build() {
return (FitSport) super.build();
}
}
}
@@ -18,6 +18,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -51,6 +52,32 @@ public class FitStressLevel extends RecordData {
return (Integer) getFieldByNumber(3);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(227);
}
public Builder setStressLevelValue(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setStressLevelTime(final Long value) {
setFieldByNumber(1, value);
return this;
}
public Builder setBodyEnergy(final Integer value) {
setFieldByNumber(3, value);
return this;
}
@Override
public FitStressLevel build() {
return (FitStressLevel) super.build();
}
}
// manual changes below
@Override
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -78,4 +79,60 @@ public class FitTimeInZone extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(216);
}
public Builder setReferenceMessage(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setReferenceIndex(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setTimeInZone(final Double[] value) {
setFieldByNumber(2, value);
return this;
}
public Builder setHrZoneHighBoundary(final Integer[] value) {
setFieldByNumber(6, value);
return this;
}
public Builder setHrCalcType(final Integer value) {
setFieldByNumber(10, value);
return this;
}
public Builder setMaxHeartRate(final Integer value) {
setFieldByNumber(11, value);
return this;
}
public Builder setRestingHeartRate(final Integer value) {
setFieldByNumber(12, value);
return this;
}
public Builder setThresholdHeartRate(final Integer value) {
setFieldByNumber(13, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitTimeInZone build() {
return (FitTimeInZone) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -29,4 +30,25 @@ public class FitTimestampCorrelation extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(162);
}
public Builder setLocalTimestamp(final Long value) {
setFieldByNumber(3, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitTimestampCorrelation build() {
return (FitTimestampCorrelation) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -34,4 +35,30 @@ public class FitTrainingLoad extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(378);
}
public Builder setTrainingLoadAcute(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setTrainingLoadChronic(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitTrainingLoad build() {
return (FitTrainingLoad) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -136,4 +137,130 @@ public class FitUserProfile extends RecordData {
public Integer getUserWalkingStepLength() {
return (Integer) getFieldByNumber(32);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(3);
}
public Builder setFriendlyName(final String value) {
setFieldByNumber(0, value);
return this;
}
public Builder setGender(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setAge(final Integer value) {
setFieldByNumber(2, value);
return this;
}
public Builder setHeight(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setWeight(final Float value) {
setFieldByNumber(4, value);
return this;
}
public Builder setLanguage(final Language value) {
setFieldByNumber(5, value);
return this;
}
public Builder setElevSetting(final Type value) {
setFieldByNumber(6, value);
return this;
}
public Builder setWeightSetting(final Type value) {
setFieldByNumber(7, value);
return this;
}
public Builder setRestingHeartRate(final Integer value) {
setFieldByNumber(8, value);
return this;
}
public Builder setDefaultMaxBikingHeartRate(final Integer value) {
setFieldByNumber(10, value);
return this;
}
public Builder setDefaultMaxHeartRate(final Integer value) {
setFieldByNumber(11, value);
return this;
}
public Builder setHrSetting(final Integer value) {
setFieldByNumber(12, value);
return this;
}
public Builder setSpeedSetting(final Type value) {
setFieldByNumber(13, value);
return this;
}
public Builder setDistSetting(final Type value) {
setFieldByNumber(14, value);
return this;
}
public Builder setPowerSetting(final Integer value) {
setFieldByNumber(16, value);
return this;
}
public Builder setActivityClass(final Integer value) {
setFieldByNumber(17, value);
return this;
}
public Builder setPositionSetting(final Integer value) {
setFieldByNumber(18, value);
return this;
}
public Builder setTemperatureSetting(final Type value) {
setFieldByNumber(21, value);
return this;
}
public Builder setWakeTime(final Long value) {
setFieldByNumber(28, value);
return this;
}
public Builder setSleepTime(final Long value) {
setFieldByNumber(29, value);
return this;
}
public Builder setHeightSetting(final Type value) {
setFieldByNumber(30, value);
return this;
}
public Builder setUserRunningStepLength(final Integer value) {
setFieldByNumber(31, value);
return this;
}
public Builder setUserWalkingStepLength(final Integer value) {
setFieldByNumber(32, value);
return this;
}
@Override
public FitUserProfile build() {
return (FitUserProfile) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -29,4 +30,25 @@ public class FitWatchfaceSettings extends RecordData {
public Integer getLayout() {
return (Integer) getFieldByNumber(1);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(159);
}
public Builder setMode(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setLayout(final Integer value) {
setFieldByNumber(1, value);
return this;
}
@Override
public FitWatchfaceSettings build() {
return (FitWatchfaceSettings) super.build();
}
}
}
@@ -4,6 +4,7 @@ import androidx.annotation.Nullable;
import java.time.DayOfWeek;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -118,4 +119,110 @@ public class FitWeather extends RecordData {
public Long getTimestamp() {
return (Long) getFieldByNumber(253);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(128);
}
public Builder setWeatherReport(final Integer value) {
setFieldByNumber(0, value);
return this;
}
public Builder setTemperature(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setCondition(final Condition value) {
setFieldByNumber(2, value);
return this;
}
public Builder setWindDirection(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setWindSpeed(final Float value) {
setFieldByNumber(4, value);
return this;
}
public Builder setPrecipitationProbability(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setTemperatureFeelsLike(final Integer value) {
setFieldByNumber(6, value);
return this;
}
public Builder setRelativeHumidity(final Integer value) {
setFieldByNumber(7, value);
return this;
}
public Builder setLocation(final String value) {
setFieldByNumber(8, value);
return this;
}
public Builder setObservedAtTime(final Long value) {
setFieldByNumber(9, value);
return this;
}
public Builder setObservedLocationLat(final Long value) {
setFieldByNumber(10, value);
return this;
}
public Builder setObservedLocationLong(final Long value) {
setFieldByNumber(11, value);
return this;
}
public Builder setDayOfWeek(final DayOfWeek value) {
setFieldByNumber(12, value);
return this;
}
public Builder setHighTemperature(final Integer value) {
setFieldByNumber(13, value);
return this;
}
public Builder setLowTemperature(final Integer value) {
setFieldByNumber(14, value);
return this;
}
public Builder setDewPoint(final Integer value) {
setFieldByNumber(15, value);
return this;
}
public Builder setUvIndex(final Float value) {
setFieldByNumber(16, value);
return this;
}
public Builder setAirQuality(final AQI_LEVELS value) {
setFieldByNumber(17, value);
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitWeather build() {
return (FitWeather) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -49,4 +50,45 @@ public class FitWorkout extends RecordData {
public String getNotes() {
return (String) getFieldByNumber(17);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(26);
}
public Builder setSport(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setCapabilities(final Long value) {
setFieldByNumber(5, value);
return this;
}
public Builder setNumValidSteps(final Integer value) {
setFieldByNumber(6, value);
return this;
}
public Builder setName(final String value) {
setFieldByNumber(8, value);
return this;
}
public Builder setSubSport(final Integer value) {
setFieldByNumber(11, value);
return this;
}
public Builder setNotes(final String value) {
setFieldByNumber(17, value);
return this;
}
@Override
public FitWorkout build() {
return (FitWorkout) super.build();
}
}
}
@@ -2,6 +2,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.messages
import androidx.annotation.Nullable;
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitRecordDataBuilder;
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;
@@ -44,4 +45,40 @@ public class FitZonesTarget extends RecordData {
public Integer getPwrCalcType() {
return (Integer) getFieldByNumber(7);
}
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(7);
}
public Builder setFunctionalThresholdPower(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setMaxHeartRate(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setThresholdHeartRate(final Integer value) {
setFieldByNumber(2, value);
return this;
}
public Builder setHrCalcType(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setPwrCalcType(final Integer value) {
setFieldByNumber(7, value);
return this;
}
@Override
public FitZonesTarget build() {
return (FitZonesTarget) super.build();
}
}
}