Garmin: add more FIT messages and field definitions

This commit is contained in:
Thomas Kuehne
2026-05-08 09:35:49 +00:00
parent 7960835407
commit f586f0d52f
11 changed files with 423 additions and 8 deletions
@@ -156,6 +156,7 @@ public class NativeFITMessage {
new FieldDefinitionPrimitive(40, BaseType.UINT8Z, "rear_gear_num"),
new FieldDefinitionPrimitive(41, BaseType.UINT8Z, "rear_gear", FieldDefinitionFactory.FIELD.ARRAY),
new FieldDefinitionPrimitive(44, BaseType.ENUM, "shimano_di2_enabled", FieldDefinitionFactory.FIELD.BOOLEAN),
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP),
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
));
@@ -164,7 +165,9 @@ public class NativeFITMessage {
new FieldDefinitionPrimitive(1, BaseType.UINT8, "max_heart_rate"),
new FieldDefinitionPrimitive(2, BaseType.UINT8, "threshold_heart_rate"),
new FieldDefinitionPrimitive(5, BaseType.ENUM, "hr_calc_type"), //1=percent_max_hr
new FieldDefinitionPrimitive(7, BaseType.ENUM, "pwr_calc_type") //1=percent_ftp
new FieldDefinitionPrimitive(7, BaseType.ENUM, "pwr_calc_type"), //1=percent_ftp
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP),
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
));
public static final NativeFITMessage HR_ZONE = new NativeFITMessage(8, "HR_ZONE", Arrays.asList(
@@ -1126,8 +1129,9 @@ public class NativeFITMessage {
new FieldDefinitionPrimitive(1, BaseType.ENUM, "sport"),
new FieldDefinitionPrimitive(2, BaseType.UINT32, "distance", 100, 0), // m
new FieldDefinitionPrimitive(3, BaseType.UINT32, "time", 1000, 0), // s
new FieldDefinitionPrimitive(4, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP),
new FieldDefinitionPrimitive(5, BaseType.ENUM, "personal_record")
new FieldDefinitionPrimitive(4, BaseType.UINT32, "start_time", FieldDefinitionFactory.FIELD.TIMESTAMP),
new FieldDefinitionPrimitive(5, BaseType.ENUM, "personal_record"),
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
));
public static final NativeFITMessage PERSONAL_RECORD = new NativeFITMessage(114, "PERSONAL_RECORD", Arrays.asList(
@@ -1328,6 +1332,19 @@ public class NativeFITMessage {
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
));
public static final NativeFITMessage MULTISPORT_SETTINGS = new NativeFITMessage(143, "MULTISPORT_SETTINGS", Arrays.asList(
new FieldDefinitionPrimitive(0, BaseType.STRING, "name"),
new FieldDefinitionPrimitive(1, BaseType.ENUM, "transitions"),
new FieldDefinitionPrimitive(2, BaseType.UINT8, "number_of_activities"),
new FieldDefinitionPrimitive(3, BaseType.ENUM, "auto_pause"),
new FieldDefinitionPrimitive(4, BaseType.ENUM, "alerts"),
new FieldDefinitionPrimitive(5, BaseType.ENUM, "auto_lap"),
new FieldDefinitionPrimitive(6, BaseType.ENUM, "power_save_timeout"),
new FieldDefinitionPrimitive(7, BaseType.ENUM, "auto_scroll"),
new FieldDefinitionPrimitive(8, BaseType.ENUM, "repeat"),
new FieldDefinitionPrimitive(10, BaseType.ENUM, "sport_change")
));
public static final NativeFITMessage MULTISPORT_ACTIVITY = new NativeFITMessage(144, "MULTISPORT_ACTIVITY", Arrays.asList(
new FieldDefinitionPrimitive(0, BaseType.ENUM, "sport"),
new FieldDefinitionPrimitive(1, BaseType.ENUM, "sub_sport"),
@@ -1507,6 +1524,11 @@ public class NativeFITMessage {
new FieldDefinitionPrimitive(101, BaseType.BASE_TYPE_BYTE, "field_bits")
));
public static final NativeFITMessage CLUBS = new NativeFITMessage(173, "CLUBS", Arrays.asList(
new FieldDefinitionPrimitive(6, BaseType.UINT32, "average_distance", 100, 0), // m
new FieldDefinitionPrimitive(19, BaseType.UINT32, "max_distance", 100, 0) // m
));
public static final NativeFITMessage OBDII_DATA = new NativeFITMessage(174, "OBDII_DATA", Arrays.asList(
new FieldDefinitionPrimitive(0, BaseType.UINT16, "timestamp_ms"), // ms
new FieldDefinitionPrimitive(1, BaseType.UINT16, "time_offset", FieldDefinitionFactory.FIELD.ARRAY), // ms
@@ -1573,6 +1595,10 @@ public class NativeFITMessage {
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
));
public static final NativeFITMessage WAYPOINT_HANDLING = new NativeFITMessage(189, "WAYPOINT_HANDLING", Arrays.asList(
new FieldDefinitionPrimitive(0, BaseType.ENUM, "action") // 0=add_to_existing, 1=replace_existing 2=delete_all
));
public static final NativeFITMessage GOLF_COURSE = new NativeFITMessage(190, "GOLF_COURSE", Arrays.asList(
new FieldDefinitionPrimitive(0, BaseType.UINT32, "course_id"),
new FieldDefinitionPrimitive(1, BaseType.STRING, "name"),
@@ -1760,7 +1786,7 @@ public class NativeFITMessage {
new FieldDefinitionPrimitive(9, BaseType.UINT16, "weight_display_unit"),
new FieldDefinitionPrimitive(10, BaseType.UINT16, "message_index"),
new FieldDefinitionPrimitive(11, BaseType.UINT16, "wkt_step_index"),
new FieldDefinitionPrimitive(254, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
new FieldDefinitionPrimitive(254, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP) // this timestamp is really 254 and not the typical 253
));
public static final NativeFITMessage DIVE_SETTINGS = new NativeFITMessage(258, "DIVE_SETTINGS", Arrays.asList(
new FieldDefinitionPrimitive(0, BaseType.STRING, "name"),
@@ -2004,7 +2030,8 @@ public class NativeFITMessage {
new FieldDefinitionPrimitive(11, BaseType.SINT32, "end_position_lat", FieldDefinitionFactory.FIELD.COORDINATE),
new FieldDefinitionPrimitive(12, BaseType.SINT32, "end_position_long", FieldDefinitionFactory.FIELD.COORDINATE),
new FieldDefinitionPrimitive(13, BaseType.UINT32, "start_altitude", 500, 5), // m
new FieldDefinitionPrimitive(14, BaseType.UINT32, "end_altitude", 500, 5) // m
new FieldDefinitionPrimitive(14, BaseType.UINT32, "end_altitude", 500, 5), // m
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
));
public static final NativeFITMessage SPLIT = new NativeFITMessage(312, "SPLIT", Arrays.asList(
@@ -2027,6 +2054,7 @@ public class NativeFITMessage {
new FieldDefinitionPrimitive(74, BaseType.UINT32, "start_elevation", 5, 500), // meter
new FieldDefinitionPrimitive(78, BaseType.UINT32, "active_time", 1000, 0), // s
new FieldDefinitionPrimitive(110, BaseType.UINT32, "total_moving_time", 1000, 0), // seconds
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP),
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
));
@@ -2378,7 +2406,8 @@ public class NativeFITMessage {
new FieldDefinitionPrimitive(5, BaseType.UINT8, "est_aerobic_te", 10, 0),
new FieldDefinitionPrimitive(6, BaseType.UINT8, "est_anaer_te", 10, 0),
new FieldDefinitionPrimitive(7, BaseType.ENUM, "sport"),
new FieldDefinitionPrimitive(9, BaseType.UINT32, "duration",1000, 0) //s
new FieldDefinitionPrimitive(9, BaseType.UINT32, "duration",1000, 0), //s
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
));
public static final NativeFITMessage SLEEP_DISRUPTION_SEVERITY_PERIOD = new NativeFITMessage(470, "SLEEP_DISRUPTION_SEVERITY_PERIOD", Arrays.asList(
@@ -2457,6 +2486,7 @@ public class NativeFITMessage {
put(140, PHYSIOLOGICAL_METRICS);
put(141, EPO_STATUS);
put(142, SEGMENT_LAP);
put(143, MULTISPORT_SETTINGS);
put(144, MULTISPORT_ACTIVITY);
put(145, MEMO_GLOB);
put(147, SENSOR_SETTINGS);
@@ -2475,6 +2505,7 @@ public class NativeFITMessage {
put(167, THREE_D_SENSOR_CALIBRATION);
put(169, VIDEO_FRAME);
put(170, CONNECT_IQ_FIELD);
put(173, CLUBS);
put(174, OBDII_DATA);
put(177, NMEA_SENTENCE);
put(178, AVIATION_ATTITUDE);
@@ -2483,6 +2514,7 @@ public class NativeFITMessage {
put(186, VIDEO_DESCRIPTION);
put(187, VIDEO_CLIP);
put(188, OHR_SETTINGS);
put(189, WAYPOINT_HANDLING);
put(190, GOLF_COURSE);
put(191, GOLF_STATS);
put(192, SCORE);
@@ -55,7 +55,7 @@ public class FitBestEffort extends RecordData {
}
@Nullable
public Long getTimestamp() {
public Long getStartTime() {
return getFieldByNumber(4, Long.class);
}
@@ -64,6 +64,11 @@ public class FitBestEffort extends RecordData {
return getFieldByNumber(5, Integer.class);
}
@Nullable
public Long getTimestamp() {
return getFieldByNumber(253, Long.class);
}
/**
* @noinspection unused
*/
@@ -87,7 +92,7 @@ public class FitBestEffort extends RecordData {
return this;
}
public Builder setTimestamp(final Long value) {
public Builder setStartTime(final Long value) {
setFieldByNumber(4, value);
return this;
}
@@ -97,6 +102,11 @@ public class FitBestEffort extends RecordData {
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitBestEffort build() {
return (FitBestEffort) super.build();
@@ -194,6 +194,11 @@ public class FitBikeProfile extends RecordData {
return getFieldByNumber(44, Boolean.class);
}
@Nullable
public Long getTimestamp() {
return getFieldByNumber(253, Long.class);
}
@Nullable
public Integer getMessageIndex() {
return getFieldByNumber(254, Integer.class);
@@ -362,6 +367,11 @@ public class FitBikeProfile extends RecordData {
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
public Builder setMessageIndex(final Integer value) {
setFieldByNumber(254, value);
return this;
@@ -0,0 +1,80 @@
/* Copyright (C) 2026 Freeyourgadget
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
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;
/**
* WARNING: This class was auto-generated, please avoid modifying it directly.
* See {@link nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.codegen.FitCodeGen}
*
* @noinspection unused
*/
public class FitClubs extends RecordData {
public FitClubs(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
super(recordDefinition, recordHeader);
final int nativeNumber = recordDefinition.getNativeFITMessage().getNumber();
if (nativeNumber != 173) {
throw new IllegalArgumentException("FitClubs expects native messages of " + 173 + ", got " + nativeNumber);
}
}
@Nullable
public Double getAverageDistance() {
return getFieldByNumber(6, Double.class);
}
@Nullable
public Double getMaxDistance() {
return getFieldByNumber(19, Double.class);
}
/**
* @noinspection unused
*/
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(173);
}
public Builder setAverageDistance(final Double value) {
setFieldByNumber(6, value);
return this;
}
public Builder setMaxDistance(final Double value) {
setFieldByNumber(19, value);
return this;
}
@Override
public FitClubs build() {
return (FitClubs) super.build();
}
@Override
public FitClubs build(final int localMessageType) {
return (FitClubs) super.build(localMessageType);
}
}
}
@@ -0,0 +1,160 @@
/* Copyright (C) 2026 Freeyourgadget
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
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;
/**
* WARNING: This class was auto-generated, please avoid modifying it directly.
* See {@link nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.codegen.FitCodeGen}
*
* @noinspection unused
*/
public class FitMultisportSettings extends RecordData {
public FitMultisportSettings(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
super(recordDefinition, recordHeader);
final int nativeNumber = recordDefinition.getNativeFITMessage().getNumber();
if (nativeNumber != 143) {
throw new IllegalArgumentException("FitMultisportSettings expects native messages of " + 143 + ", got " + nativeNumber);
}
}
@Nullable
public String getName() {
return getFieldByNumber(0, String.class);
}
@Nullable
public Integer getTransitions() {
return getFieldByNumber(1, Integer.class);
}
@Nullable
public Integer getNumberOfActivities() {
return getFieldByNumber(2, Integer.class);
}
@Nullable
public Integer getAutoPause() {
return getFieldByNumber(3, Integer.class);
}
@Nullable
public Integer getAlerts() {
return getFieldByNumber(4, Integer.class);
}
@Nullable
public Integer getAutoLap() {
return getFieldByNumber(5, Integer.class);
}
@Nullable
public Integer getPowerSaveTimeout() {
return getFieldByNumber(6, Integer.class);
}
@Nullable
public Integer getAutoScroll() {
return getFieldByNumber(7, Integer.class);
}
@Nullable
public Integer getRepeat() {
return getFieldByNumber(8, Integer.class);
}
@Nullable
public Integer getSportChange() {
return getFieldByNumber(10, Integer.class);
}
/**
* @noinspection unused
*/
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(143);
}
public Builder setName(final String value) {
setFieldByNumber(0, value);
return this;
}
public Builder setTransitions(final Integer value) {
setFieldByNumber(1, value);
return this;
}
public Builder setNumberOfActivities(final Integer value) {
setFieldByNumber(2, value);
return this;
}
public Builder setAutoPause(final Integer value) {
setFieldByNumber(3, value);
return this;
}
public Builder setAlerts(final Integer value) {
setFieldByNumber(4, value);
return this;
}
public Builder setAutoLap(final Integer value) {
setFieldByNumber(5, value);
return this;
}
public Builder setPowerSaveTimeout(final Integer value) {
setFieldByNumber(6, value);
return this;
}
public Builder setAutoScroll(final Integer value) {
setFieldByNumber(7, value);
return this;
}
public Builder setRepeat(final Integer value) {
setFieldByNumber(8, value);
return this;
}
public Builder setSportChange(final Integer value) {
setFieldByNumber(10, value);
return this;
}
@Override
public FitMultisportSettings build() {
return (FitMultisportSettings) super.build();
}
@Override
public FitMultisportSettings build(final int localMessageType) {
return (FitMultisportSettings) super.build(localMessageType);
}
}
}
@@ -95,6 +95,7 @@ public class FitRecordDataFactory {
case 140 -> new FitPhysiologicalMetrics(recordDefinition, recordHeader);
case 141 -> new FitEpoStatus(recordDefinition, recordHeader);
case 142 -> new FitSegmentLap(recordDefinition, recordHeader);
case 143 -> new FitMultisportSettings(recordDefinition, recordHeader);
case 144 -> new FitMultisportActivity(recordDefinition, recordHeader);
case 145 -> new FitMemoGlob(recordDefinition, recordHeader);
case 147 -> new FitSensorSettings(recordDefinition, recordHeader);
@@ -113,6 +114,7 @@ public class FitRecordDataFactory {
case 167 -> new FitThreeDSensorCalibration(recordDefinition, recordHeader);
case 169 -> new FitVideoFrame(recordDefinition, recordHeader);
case 170 -> new FitConnectIqField(recordDefinition, recordHeader);
case 173 -> new FitClubs(recordDefinition, recordHeader);
case 174 -> new FitObdiiData(recordDefinition, recordHeader);
case 177 -> new FitNmeaSentence(recordDefinition, recordHeader);
case 178 -> new FitAviationAttitude(recordDefinition, recordHeader);
@@ -121,6 +123,7 @@ public class FitRecordDataFactory {
case 186 -> new FitVideoDescription(recordDefinition, recordHeader);
case 187 -> new FitVideoClip(recordDefinition, recordHeader);
case 188 -> new FitOhrSettings(recordDefinition, recordHeader);
case 189 -> new FitWaypointHandling(recordDefinition, recordHeader);
case 190 -> new FitGolfCourse(recordDefinition, recordHeader);
case 191 -> new FitGolfStats(recordDefinition, recordHeader);
case 192 -> new FitScore(recordDefinition, recordHeader);
@@ -134,6 +134,11 @@ public class FitSplit extends RecordData {
return getFieldByNumber(110, Double.class);
}
@Nullable
public Long getTimestamp() {
return getFieldByNumber(253, Long.class);
}
@Nullable
public Integer getMessageIndex() {
return getFieldByNumber(254, Integer.class);
@@ -242,6 +247,11 @@ public class FitSplit extends RecordData {
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
public Builder setMessageIndex(final Integer value) {
setFieldByNumber(254, value);
return this;
@@ -94,6 +94,11 @@ public class FitSplitTime extends RecordData {
return getFieldByNumber(14, Double.class);
}
@Nullable
public Integer getMessageIndex() {
return getFieldByNumber(254, Integer.class);
}
/**
* @noinspection unused
*/
@@ -157,6 +162,11 @@ public class FitSplitTime extends RecordData {
return this;
}
public Builder setMessageIndex(final Integer value) {
setFieldByNumber(254, value);
return this;
}
@Override
public FitSplitTime build() {
return (FitSplitTime) super.build();
@@ -0,0 +1,70 @@
/* Copyright (C) 2026 Freeyourgadget
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
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;
/**
* WARNING: This class was auto-generated, please avoid modifying it directly.
* See {@link nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.codegen.FitCodeGen}
*
* @noinspection unused
*/
public class FitWaypointHandling extends RecordData {
public FitWaypointHandling(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
super(recordDefinition, recordHeader);
final int nativeNumber = recordDefinition.getNativeFITMessage().getNumber();
if (nativeNumber != 189) {
throw new IllegalArgumentException("FitWaypointHandling expects native messages of " + 189 + ", got " + nativeNumber);
}
}
@Nullable
public Integer getAction() {
return getFieldByNumber(0, Integer.class);
}
/**
* @noinspection unused
*/
public static class Builder extends FitRecordDataBuilder {
public Builder() {
super(189);
}
public Builder setAction(final Integer value) {
setFieldByNumber(0, value);
return this;
}
@Override
public FitWaypointHandling build() {
return (FitWaypointHandling) super.build();
}
@Override
public FitWaypointHandling build(final int localMessageType) {
return (FitWaypointHandling) super.build(localMessageType);
}
}
}
@@ -69,6 +69,11 @@ public class FitWorkoutSchedule extends RecordData {
return getFieldByNumber(9, Double.class);
}
@Nullable
public Long getTimestamp() {
return getFieldByNumber(253, Long.class);
}
/**
* @noinspection unused
*/
@@ -107,6 +112,11 @@ public class FitWorkoutSchedule extends RecordData {
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
@Override
public FitWorkoutSchedule build() {
return (FitWorkoutSchedule) super.build();
@@ -64,6 +64,16 @@ public class FitZonesTarget extends RecordData {
return getFieldByNumber(7, Integer.class);
}
@Nullable
public Long getTimestamp() {
return getFieldByNumber(253, Long.class);
}
@Nullable
public Integer getMessageIndex() {
return getFieldByNumber(254, Integer.class);
}
/**
* @noinspection unused
*/
@@ -97,6 +107,16 @@ public class FitZonesTarget extends RecordData {
return this;
}
public Builder setTimestamp(final Long value) {
setFieldByNumber(253, value);
return this;
}
public Builder setMessageIndex(final Integer value) {
setFieldByNumber(254, value);
return this;
}
@Override
public FitZonesTarget build() {
return (FitZonesTarget) super.build();