mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Garmin: Introduce FitRecordDataBuilder, add Builders to all messages
This commit is contained in:
+62
@@ -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;
|
||||
}
|
||||
}
|
||||
+29
-2
@@ -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)
|
||||
|
||||
+55
-52
@@ -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()) {
|
||||
|
||||
+8
-11
@@ -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);
|
||||
|
||||
+47
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+100
-3
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+57
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+37
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+92
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+32
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+77
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+37
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+37
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+52
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+27
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+52
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+157
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+42
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+72
@@ -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) {
|
||||
|
||||
+27
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+42
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+52
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+42
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+157
-1
@@ -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() {
|
||||
|
||||
+49
-94
@@ -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);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+422
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+52
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+37
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+42
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+17
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+97
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+32
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+27
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+27
@@ -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
|
||||
|
||||
+57
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+27
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+127
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+107
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+42
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+37
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user