mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Garmin: extend FIT file parsing 4
This commit is contained in:
+256
-15
@@ -84,7 +84,7 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(18, BaseType.ENUM, "position_setting"),
|
||||
new FieldDefinitionPrimitive(21, BaseType.ENUM, "temperature_setting", FieldDefinitionFactory.FIELD.MEASUREMENT_SYSTEM),
|
||||
new FieldDefinitionPrimitive(22, BaseType.UINT16, "local_id"),
|
||||
new FieldDefinitionPrimitive(23, BaseType.UINT8, 6, "global_id"),
|
||||
new FieldDefinitionPrimitive(23, BaseType.BASE_TYPE_BYTE, 6, "global_id"),
|
||||
new FieldDefinitionPrimitive(24, BaseType.UINT8, "year_of_birth", 1, -1900),
|
||||
new FieldDefinitionPrimitive(28, BaseType.UINT32, "wake_time"),
|
||||
new FieldDefinitionPrimitive(29, BaseType.UINT32, "sleep_time"),
|
||||
@@ -100,7 +100,7 @@ public class GlobalFITMessage {
|
||||
));
|
||||
|
||||
public static GlobalFITMessage HRM_PROFILE = new GlobalFITMessage(4, "HRM_PROFILE", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT8, "enabled"),
|
||||
new FieldDefinitionPrimitive(0, BaseType.ENUM, "enabled", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT16Z, "hrm_ant_id"),
|
||||
new FieldDefinitionPrimitive(2, BaseType.ENUM, "log_hrv"),
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT8Z, "hrm_ant_id_trans_type"),
|
||||
@@ -108,7 +108,7 @@ public class GlobalFITMessage {
|
||||
));
|
||||
|
||||
public static GlobalFITMessage SDM_PROFILE = new GlobalFITMessage(5, "SDM_PROFILE", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.ENUM, "enabled"),
|
||||
new FieldDefinitionPrimitive(0, BaseType.ENUM, "enabled", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT16Z, "sdm_ant_id"),
|
||||
new FieldDefinitionPrimitive(2, BaseType.UINT16, "sdm_cal_factor", 10, 0), // %
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT32, "odometer", 100, 0), // m
|
||||
@@ -205,7 +205,8 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(8, BaseType.ENUM, "recurrence"),
|
||||
new FieldDefinitionPrimitive(9, BaseType.UINT16, "recurrence_value"),
|
||||
new FieldDefinitionPrimitive(10, BaseType.ENUM, "enabled"),
|
||||
new FieldDefinitionPrimitive(11, BaseType.ENUM, "source", FieldDefinitionFactory.FIELD.GOAL_SOURCE)
|
||||
new FieldDefinitionPrimitive(11, BaseType.ENUM, "source", FieldDefinitionFactory.FIELD.GOAL_SOURCE),
|
||||
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
|
||||
));
|
||||
|
||||
public static GlobalFITMessage SESSION = new GlobalFITMessage(18, "SESSION", Arrays.asList(
|
||||
@@ -294,6 +295,12 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(92, BaseType.UINT8, "avg_fractional_cadence", 128, 0), // rpm
|
||||
new FieldDefinitionPrimitive(93, BaseType.UINT8, "max_fractional_cadence", 128, 0), // rpm
|
||||
new FieldDefinitionPrimitive(94, BaseType.UINT8, "total_fractional_cycles", 128, 0), // cycles
|
||||
new FieldDefinitionPrimitive(95, BaseType.UINT16, "avg_total_hemoglobin_conc", FieldDefinitionFactory.FIELD.ARRAY,100, 0), // g/dL
|
||||
new FieldDefinitionPrimitive(96, BaseType.UINT16, "min_total_hemoglobin_conc", FieldDefinitionFactory.FIELD.ARRAY,100, 0), // g/dL
|
||||
new FieldDefinitionPrimitive(97, BaseType.UINT16, "max_total_hemoglobin_conc", FieldDefinitionFactory.FIELD.ARRAY,100, 0), // g/dL
|
||||
new FieldDefinitionPrimitive(98, BaseType.UINT16, "avg_saturated_hemoglobin_percent", FieldDefinitionFactory.FIELD.ARRAY,10, 0), // %
|
||||
new FieldDefinitionPrimitive(99, BaseType.UINT16, "min_saturated_hemoglobin_percent", FieldDefinitionFactory.FIELD.ARRAY,10, 0), // %
|
||||
new FieldDefinitionPrimitive(100, BaseType.UINT16, "max_saturated_hemoglobin_percent", FieldDefinitionFactory.FIELD.ARRAY,10, 0), // %
|
||||
new FieldDefinitionPrimitive(101, BaseType.UINT8, "avg_left_torque_effectiveness", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(102, BaseType.UINT8, "avg_right_torque_effectiveness", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(103, BaseType.UINT8, "avg_left_pedal_smoothness", 2, 0), // %
|
||||
@@ -317,10 +324,17 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(123, BaseType.UINT8, "max_cadence_position", FieldDefinitionFactory.FIELD.ARRAY), // watt, 2 items (seat / stand)
|
||||
new FieldDefinitionPrimitive(124, BaseType.UINT32, "enhanced_avg_speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(125, BaseType.UINT32, "enhanced_max_speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(126, BaseType.UINT32, "enhanced_avg_altitude", 5, 500), // m
|
||||
new FieldDefinitionPrimitive(127, BaseType.UINT32, "enhanced_min_altitude", 5, 500), // m
|
||||
new FieldDefinitionPrimitive(128, BaseType.UINT32, "enhanced_max_altitude", 5, 500), // m
|
||||
new FieldDefinitionPrimitive(129, BaseType.UINT16, "avg_lev_motor_power"), // watt
|
||||
new FieldDefinitionPrimitive(130, BaseType.UINT16, "max_lev_motor_power"), // watt
|
||||
new FieldDefinitionPrimitive(131, BaseType.UINT8, "lev_battery_consumption", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(132, BaseType.UINT16, "avg_vertical_ratio", 100, 0), // %
|
||||
new FieldDefinitionPrimitive(133, BaseType.UINT16, "avg_stance_time_balance", 100, 0), // %
|
||||
new FieldDefinitionPrimitive(134, BaseType.UINT16, "avg_step_length", 10, 0), // mm
|
||||
new FieldDefinitionPrimitive(137, BaseType.UINT8, "total_anaerobic_training_effect", 10, 0),
|
||||
new FieldDefinitionPrimitive(139, BaseType.UINT16, "avg_vam", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(140, BaseType.UINT32, "avg_depth", 1000, 0), // m
|
||||
new FieldDefinitionPrimitive(141, BaseType.UINT32, "max_depth", 1000, 0), // m
|
||||
new FieldDefinitionPrimitive(142, BaseType.UINT32, "surface_interval"), // s
|
||||
@@ -418,12 +432,38 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(54, BaseType.SINT16, "avg_neg_vertical_speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(55, BaseType.SINT16, "max_pos_vertical_speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(56, BaseType.SINT16, "max_neg_vertical_speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(57, BaseType.UINT32, "time_in_hr_zone", 1000, 0), // s
|
||||
new FieldDefinitionPrimitive(57, BaseType.UINT32, "time_in_hr_zone", FieldDefinitionFactory.FIELD.ARRAY,1000, 0), // s
|
||||
new FieldDefinitionPrimitive(58, BaseType.UINT32, "time_in_speed_zone", FieldDefinitionFactory.FIELD.ARRAY, 1000, 0), // s
|
||||
new FieldDefinitionPrimitive(59, BaseType.UINT32, "time_in_cadence_zone", FieldDefinitionFactory.FIELD.ARRAY, 1000, 0), // s
|
||||
new FieldDefinitionPrimitive(60, BaseType.UINT32, "time_in_power_zone", FieldDefinitionFactory.FIELD.ARRAY, 1000, 0), // s
|
||||
new FieldDefinitionPrimitive(61, BaseType.UINT16, "repetition_num"),
|
||||
new FieldDefinitionPrimitive(62, BaseType.UINT16, "min_altitude", 5, 500), // m
|
||||
new FieldDefinitionPrimitive(63, BaseType.UINT8, "min_heart_rate"),
|
||||
new FieldDefinitionPrimitive(71, BaseType.UINT16, "wkt_step_index"),
|
||||
new FieldDefinitionPrimitive(73, BaseType.UINT16, "avg_swolf"),
|
||||
new FieldDefinitionPrimitive(74, BaseType.UINT16, "opponent_score"),
|
||||
new FieldDefinitionPrimitive(75, BaseType.UINT16, "stroke_count", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(76, BaseType.UINT16, "zone_count", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(77, BaseType.UINT16, "avg_vertical_oscillation", FieldDefinitionFactory.FIELD.ARRAY, 10, 0), // mm
|
||||
new FieldDefinitionPrimitive(78, BaseType.UINT16, "avg_stance_time_percen", FieldDefinitionFactory.FIELD.ARRAY, 100, 0), // %
|
||||
new FieldDefinitionPrimitive(79, BaseType.UINT16, "avg_stance_time", FieldDefinitionFactory.FIELD.ARRAY, 10, 0), // ms
|
||||
new FieldDefinitionPrimitive(80, BaseType.UINT8, "avg_fractional_cadence", 128, 0), // rpm
|
||||
new FieldDefinitionPrimitive(81, BaseType.UINT8, "max_fractional_cadence", 128, 0), // rpm
|
||||
new FieldDefinitionPrimitive(82, BaseType.UINT8, "total_fractional_cycles", 128, 0), // cycles
|
||||
new FieldDefinitionPrimitive(83, BaseType.UINT16, "player_score"),
|
||||
new FieldDefinitionPrimitive(84, BaseType.UINT16, "avg_total_hemoglobin_conc", FieldDefinitionFactory.FIELD.ARRAY,100, 0), // g/dL
|
||||
new FieldDefinitionPrimitive(85, BaseType.UINT16, "min_total_hemoglobin_conc", FieldDefinitionFactory.FIELD.ARRAY,100, 0), // g/dL
|
||||
new FieldDefinitionPrimitive(86, BaseType.UINT16, "max_total_hemoglobin_conc", FieldDefinitionFactory.FIELD.ARRAY,100, 0), // g/dL
|
||||
new FieldDefinitionPrimitive(87, BaseType.UINT16, "avg_saturated_hemoglobin_percent", FieldDefinitionFactory.FIELD.ARRAY,10, 0), // %
|
||||
new FieldDefinitionPrimitive(88, BaseType.UINT16, "min_saturated_hemoglobin_percent", FieldDefinitionFactory.FIELD.ARRAY,10, 0), // %
|
||||
new FieldDefinitionPrimitive(89, BaseType.UINT16, "max_saturated_hemoglobin_percent", FieldDefinitionFactory.FIELD.ARRAY,10, 0), // %
|
||||
new FieldDefinitionPrimitive(91, BaseType.UINT8, "avg_left_torque_effectiveness", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(92, BaseType.UINT8, "avg_right_torque_effectiveness", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(93, BaseType.UINT8, "avg_left_pedal_smoothness", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(94, BaseType.UINT8, "avg_right_pedal_smoothness", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(95, BaseType.UINT8, "avg_combined_pedal_smoothness", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(98, BaseType.UINT32, "time_standing", 1000, 0), // s
|
||||
new FieldDefinitionPrimitive(99, BaseType.UINT16, "stand_count"),
|
||||
new FieldDefinitionPrimitive(100, BaseType.SINT8, "avg_left_pco"), // mm
|
||||
new FieldDefinitionPrimitive(101, BaseType.SINT8, "avg_right_pco"), // mm
|
||||
new FieldDefinitionPrimitive(102, BaseType.UINT8, "avg_left_power_phase"),
|
||||
@@ -436,7 +476,30 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(109, BaseType.UINT8, "max_cadence_position"), // rpm
|
||||
new FieldDefinitionPrimitive(110, BaseType.UINT32, "enhanced_avg_speed", 100, 0), // m/s
|
||||
new FieldDefinitionPrimitive(111, BaseType.UINT32, "enhanced_max_speed", 100, 0), // m/s
|
||||
new FieldDefinitionPrimitive(112, BaseType.UINT32, "enhanced_avg_altitude", 5, 500), // m
|
||||
new FieldDefinitionPrimitive(113, BaseType.UINT32, "enhanced_min_altitude", 5, 500), // m
|
||||
new FieldDefinitionPrimitive(114, BaseType.UINT32, "enhanced_max_altitude", 5, 500), // m
|
||||
new FieldDefinitionPrimitive(115, BaseType.UINT16, "avg_lev_motor_power"), // watt
|
||||
new FieldDefinitionPrimitive(116, BaseType.UINT16, "max_lev_motor_power"), // watt
|
||||
new FieldDefinitionPrimitive(117, BaseType.UINT8, "lev_battery_consumption", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(118, BaseType.UINT16, "avg_vertical_ratio", 100, 0), // %
|
||||
new FieldDefinitionPrimitive(119, BaseType.UINT16, "avg_stance_time_balance", 100, 0), // %
|
||||
new FieldDefinitionPrimitive(120, BaseType.UINT16, "avg_step_length", 10, 0), // mm
|
||||
new FieldDefinitionPrimitive(121, BaseType.UINT16, "avg_vam", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(122, BaseType.UINT32, "avg_depth", 1000, 0), // m
|
||||
new FieldDefinitionPrimitive(123, BaseType.UINT32, "max_depth", 1000, 0), // m
|
||||
new FieldDefinitionPrimitive(124, BaseType.SINT8, "min_temperature"), // °C
|
||||
new FieldDefinitionPrimitive(136, BaseType.UINT16, "enhanced_avg_respiration_rate", 100, 0), // breath / min
|
||||
new FieldDefinitionPrimitive(137, BaseType.UINT16, "enhanced_max_respiration_rate", 100, 0), // breath / min
|
||||
new FieldDefinitionPrimitive(147, BaseType.UINT8, "avg_respiration_rate"),
|
||||
new FieldDefinitionPrimitive(148, BaseType.UINT8, "max_respiration_rate"),
|
||||
new FieldDefinitionPrimitive(149, BaseType.FLOAT32, "total_grit"),
|
||||
new FieldDefinitionPrimitive(150, BaseType.FLOAT32, "total_flow"),
|
||||
new FieldDefinitionPrimitive(151, BaseType.UINT16, "jump_count"),
|
||||
new FieldDefinitionPrimitive(153, BaseType.FLOAT32, "avg_grit"),
|
||||
new FieldDefinitionPrimitive(154, BaseType.FLOAT32, "avg_flow"),
|
||||
new FieldDefinitionPrimitive(156, BaseType.UINT8, "total_fractional_ascent", 100, 0), // m
|
||||
new FieldDefinitionPrimitive(157, BaseType.UINT8, "total_fractional_descent", 100, 0), // m
|
||||
new FieldDefinitionPrimitive(158, BaseType.UINT16, "avg_core_temperature", 100, 0), // °C
|
||||
new FieldDefinitionPrimitive(159, BaseType.UINT16, "min_core_temperature", 100, 0), // °C
|
||||
new FieldDefinitionPrimitive(160, BaseType.UINT16, "max_core_temperature", 100, 0), // °C
|
||||
@@ -472,12 +535,30 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(40, BaseType.UINT16, "stance_time_percent", 100, 0), // %
|
||||
new FieldDefinitionPrimitive(41, BaseType.UINT16, "stance_time", 10, 0), // ms
|
||||
new FieldDefinitionPrimitive(42, BaseType.ENUM, "activity"),
|
||||
new FieldDefinitionPrimitive(43, BaseType.UINT8, "left_torque_effectiveness", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(44, BaseType.UINT8, "right_torque_effectiveness", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(45, BaseType.UINT8, "left_pedal_smoothness", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(46, BaseType.UINT8, "right_pedal_smoothness", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(47, BaseType.UINT8, "combined_pedal_smoothness", 2, 0), // %
|
||||
new FieldDefinitionPrimitive(48, BaseType.UINT8, "time128", 128, 0), // s
|
||||
new FieldDefinitionPrimitive(49, BaseType.ENUM, "stroke_type"),
|
||||
new FieldDefinitionPrimitive(50, BaseType.UINT8, "zone"),
|
||||
new FieldDefinitionPrimitive(51, BaseType.UINT16, "ball_speed", 100, 0), // m/s
|
||||
new FieldDefinitionPrimitive(52, BaseType.UINT16, "cadence256", 256, 0), // RPM
|
||||
new FieldDefinitionPrimitive(53, BaseType.UINT8, "fractional_cadence", 128, 0), // rpm
|
||||
new FieldDefinitionPrimitive(54, BaseType.UINT16, "avg_total_hemoglobin_conc", FieldDefinitionFactory.FIELD.ARRAY,100, 0), // g/dL
|
||||
new FieldDefinitionPrimitive(55, BaseType.UINT16, "min_total_hemoglobin_conc", FieldDefinitionFactory.FIELD.ARRAY,100, 0), // g/dL
|
||||
new FieldDefinitionPrimitive(56, BaseType.UINT16, "max_total_hemoglobin_conc", FieldDefinitionFactory.FIELD.ARRAY,100, 0), // g/dL
|
||||
new FieldDefinitionPrimitive(57, BaseType.UINT16, "avg_saturated_hemoglobin_percent", FieldDefinitionFactory.FIELD.ARRAY,10, 0), // %
|
||||
new FieldDefinitionPrimitive(58, BaseType.UINT16, "min_saturated_hemoglobin_percent", FieldDefinitionFactory.FIELD.ARRAY,10, 0), // %
|
||||
new FieldDefinitionPrimitive(59, BaseType.UINT16, "max_saturated_hemoglobin_percent", FieldDefinitionFactory.FIELD.ARRAY,10, 0), // %
|
||||
new FieldDefinitionPrimitive(62, BaseType.UINT8, "device_index"),
|
||||
new FieldDefinitionPrimitive(67, BaseType.SINT8, "left_pco"), // mm
|
||||
new FieldDefinitionPrimitive(68, BaseType.SINT8, "right_pco"), // mm
|
||||
new FieldDefinitionPrimitive(69, BaseType.UINT8, "left_power_phase", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(70, BaseType.UINT8, "left_power_phase_peak", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(71, BaseType.UINT8, "right_power_phase", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(72, BaseType.UINT8, "right_power_phase_peak", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(73, BaseType.UINT32, "enhanced_speed", 1000, 0), // mm/s
|
||||
new FieldDefinitionPrimitive(78, BaseType.UINT32, "enhanced_altitude", 5, 500), // m
|
||||
new FieldDefinitionPrimitive(81, BaseType.UINT8, "battery_soc", 2, 0), // %
|
||||
@@ -499,6 +580,10 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(114, BaseType.FLOAT32, "grit"),
|
||||
new FieldDefinitionPrimitive(115, BaseType.FLOAT32, "flow"),
|
||||
new FieldDefinitionPrimitive(116, BaseType.UINT16, "current_stress", 100, 0),
|
||||
new FieldDefinitionPrimitive(117, BaseType.UINT16, "ebike_travel_rang"), // km
|
||||
new FieldDefinitionPrimitive(118, BaseType.UINT8, "ebike_battery_level"), // %
|
||||
new FieldDefinitionPrimitive(119, BaseType.UINT8, "ebike_assist_mode"),
|
||||
new FieldDefinitionPrimitive(120, BaseType.UINT8, "ebike_assist_level_percent"), // %
|
||||
new FieldDefinitionPrimitive(123, BaseType.UINT32, "air_time_remaining"), // s
|
||||
new FieldDefinitionPrimitive(124, BaseType.UINT16, "pressure_sac", 100, 0), // bar / min
|
||||
new FieldDefinitionPrimitive(125, BaseType.UINT16, "volume_sac", 100, 0), // liter / min
|
||||
@@ -515,8 +600,21 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(0, BaseType.ENUM, "event"), // 0 timer, 74 sleep
|
||||
new FieldDefinitionPrimitive(1, BaseType.ENUM, "event_type"), // sleep: 0 start 1 stop, timer: 0 start 4 stop all
|
||||
new FieldDefinitionPrimitive(2, BaseType.UINT16, "data16"),
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT32, "data"), // in sleep they're timestamps in garmin epoch? in timer, 0 for manual
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT32, "data"), // in sleep they're timestamps in garmin epoch? in timer, 0 for manual - datatype depends on field 2 (event_type) ...
|
||||
new FieldDefinitionPrimitive(4, BaseType.UINT8, "event_group"), // 0?
|
||||
new FieldDefinitionPrimitive(7, BaseType.UINT16, "score"),
|
||||
new FieldDefinitionPrimitive(8, BaseType.UINT16, "opponent_score"),
|
||||
new FieldDefinitionPrimitive(9, BaseType.UINT8Z, "front_gear_num"),
|
||||
new FieldDefinitionPrimitive(10, BaseType.UINT8Z, "front_gear"),
|
||||
new FieldDefinitionPrimitive(11, BaseType.UINT8Z, "rear_gear_num"),
|
||||
new FieldDefinitionPrimitive(12, BaseType.UINT8Z, "rear_gear"),
|
||||
new FieldDefinitionPrimitive(13, BaseType.UINT8, "device_index"),
|
||||
new FieldDefinitionPrimitive(14, BaseType.ENUM, "activity_type"),
|
||||
new FieldDefinitionPrimitive(15, BaseType.UINT32, "start_timestamp"), // s
|
||||
new FieldDefinitionPrimitive(21, BaseType.ENUM, "radar_threat_level_max"),
|
||||
new FieldDefinitionPrimitive(22, BaseType.UINT8, "radar_threat_count"),
|
||||
new FieldDefinitionPrimitive(23, BaseType.UINT8, "radar_threat_avg_approach_speed", 10, 0), // m/s
|
||||
new FieldDefinitionPrimitive(24, BaseType.UINT8, "radar_threat_max_approach_speed", 10, 0), // m/s
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
@@ -561,7 +659,8 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(11, BaseType.ENUM, "sub_sport"),
|
||||
new FieldDefinitionPrimitive(14, BaseType.UINT16, "pool_length", 100, 0), // m
|
||||
new FieldDefinitionPrimitive(15, BaseType.ENUM, "pool_length_unit"),
|
||||
new FieldDefinitionPrimitive(17, BaseType.STRING, "notes")
|
||||
new FieldDefinitionPrimitive(17, BaseType.STRING, "notes"),
|
||||
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
|
||||
));
|
||||
|
||||
public static GlobalFITMessage WORKOUT_STEP = new GlobalFITMessage(27, "WORKOUT_STEP", Arrays.asList(
|
||||
@@ -586,6 +685,16 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
|
||||
));
|
||||
|
||||
public static GlobalFITMessage SCHEDULE = new GlobalFITMessage(28, "SCHEDULE", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT16, "manufacturer"),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT16, "product"),
|
||||
new FieldDefinitionPrimitive(2, BaseType.UINT32Z, "serial_number"),
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT32, "time_created"),
|
||||
new FieldDefinitionPrimitive(4, BaseType.ENUM, "completed", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(5, BaseType.ENUM, "type"),
|
||||
new FieldDefinitionPrimitive(6, BaseType.UINT32, "scheduled_time")
|
||||
));
|
||||
|
||||
public static GlobalFITMessage LOCATION = new GlobalFITMessage(29, "LOCATION", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.STRING, 32, "name"),
|
||||
new FieldDefinitionPrimitive(1, BaseType.SINT32, "position_lat", FieldDefinitionFactory.FIELD.COORDINATE),
|
||||
@@ -727,7 +836,7 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(8, BaseType.UINT16, "distance_16"),
|
||||
new FieldDefinitionPrimitive(9, BaseType.UINT16, "cycles_16"),
|
||||
new FieldDefinitionPrimitive(10, BaseType.UINT16, "active_time_16"),
|
||||
new FieldDefinitionPrimitive(11, BaseType.UINT16, "local_timestamp"),
|
||||
new FieldDefinitionPrimitive(11, BaseType.UINT32, "local_timestamp"),
|
||||
new FieldDefinitionPrimitive(12, BaseType.SINT16, "temperature", 100, 0), // °C
|
||||
new FieldDefinitionPrimitive(14, BaseType.SINT16, "temperature_min", 100, 0), // °C
|
||||
new FieldDefinitionPrimitive(15, BaseType.SINT16, "temperature_max", 100, 0), // °C
|
||||
@@ -791,6 +900,33 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(39, BaseType.UINT32, "wake_up_time"),
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
public static GlobalFITMessage ANT_RX = new GlobalFITMessage(80, "ANT_RX", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT16, "fractional_timestamp", 32768, 0),
|
||||
new FieldDefinitionPrimitive(1, BaseType.BASE_TYPE_BYTE, "mesg_id"),
|
||||
new FieldDefinitionPrimitive(2, BaseType.BASE_TYPE_BYTE, "mesg_data", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT8, "channel_number"),
|
||||
new FieldDefinitionPrimitive(4, BaseType.BASE_TYPE_BYTE, "data", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
public static GlobalFITMessage ANT_TX = new GlobalFITMessage(81, "ANT_TX", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT16, "fractional_timestamp", 32768, 0),
|
||||
new FieldDefinitionPrimitive(1, BaseType.BASE_TYPE_BYTE, "mesg_id"),
|
||||
new FieldDefinitionPrimitive(2, BaseType.BASE_TYPE_BYTE, "mesg_data", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT8, "channel_number"),
|
||||
new FieldDefinitionPrimitive(4, BaseType.BASE_TYPE_BYTE, "data", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
public static GlobalFITMessage ANT_CHANNEL_ID = new GlobalFITMessage(82, "ANT_CHANNEL_ID", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT8, "channel_number"),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT8Z, "device_type"),
|
||||
new FieldDefinitionPrimitive(2, BaseType.UINT16Z, "device_number"),
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT8Z, "transmission_type"),
|
||||
new FieldDefinitionPrimitive(4, BaseType.UINT8, "device_index")
|
||||
));
|
||||
|
||||
public static GlobalFITMessage LENGTH = new GlobalFITMessage(101, "LENGTH", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.ENUM, "event"),
|
||||
new FieldDefinitionPrimitive(1, BaseType.ENUM, "event_type"),
|
||||
@@ -879,9 +1015,19 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
public static GlobalFITMessage WEATHER_ALERT = new GlobalFITMessage(129, "WEATHER_ALERT", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.STRING, "report_id"),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT32, "issue_time"),
|
||||
new FieldDefinitionPrimitive(2, BaseType.UINT32, "expire_time"),
|
||||
new FieldDefinitionPrimitive(3, BaseType.ENUM, "severity"),
|
||||
new FieldDefinitionPrimitive(4, BaseType.ENUM, "type"),
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
public static GlobalFITMessage CADENCE_ZONE = new GlobalFITMessage(131, "CADENCE_ZONE", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT8, "high_value"), // rpm
|
||||
new FieldDefinitionPrimitive(1, BaseType.STRING, "name")
|
||||
new FieldDefinitionPrimitive(1, BaseType.STRING, "name"),
|
||||
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
|
||||
));
|
||||
|
||||
public static GlobalFITMessage HR = new GlobalFITMessage(132, "HR", Arrays.asList(
|
||||
@@ -935,6 +1081,7 @@ public class GlobalFITMessage {
|
||||
));
|
||||
|
||||
public static GlobalFITMessage MEMO_GLOB = new GlobalFITMessage(145, "MEMO_GLOB", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.BASE_TYPE_BYTE, "memo", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT16, "mesg_num"),
|
||||
new FieldDefinitionPrimitive(2, BaseType.UINT16, "parent_index"),
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT8, "field_num"),
|
||||
@@ -977,6 +1124,7 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(1, BaseType.SINT32, "position_lat", FieldDefinitionFactory.FIELD.COORDINATE),
|
||||
new FieldDefinitionPrimitive(2, BaseType.SINT32, "position_long", FieldDefinitionFactory.FIELD.COORDINATE),
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT32, "distance", 100, 0), // m
|
||||
new FieldDefinitionPrimitive(4, BaseType.UINT16, "altitude", 5, 500), // m
|
||||
new FieldDefinitionPrimitive(5, BaseType.UINT32, 6,"leader_time", FieldDefinitionFactory.FIELD.ARRAY, 1000, 0), // s
|
||||
new FieldDefinitionPrimitive(6, BaseType.UINT32, "enhanced_altitude", 5, 500), // m
|
||||
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
|
||||
@@ -1011,8 +1159,15 @@ public class GlobalFITMessage {
|
||||
));
|
||||
|
||||
public static GlobalFITMessage GPS_METADATA = new GlobalFITMessage(160, "GPS_METADATA", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT32, "enhanced_altitude"),
|
||||
new FieldDefinitionPrimitive(4, BaseType.UINT32, "enhanced_speed")
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT16, "timestamp_ms"), // ms
|
||||
new FieldDefinitionPrimitive(1, BaseType.SINT32, "position_lat", FieldDefinitionFactory.FIELD.COORDINATE),
|
||||
new FieldDefinitionPrimitive(2, BaseType.SINT32, "position_long", FieldDefinitionFactory.FIELD.COORDINATE),
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT32, "enhanced_altitude", 5, 500), // m
|
||||
new FieldDefinitionPrimitive(4, BaseType.UINT32, "enhanced_speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(5, BaseType.UINT16, "heading", 100, 0), // degrees
|
||||
new FieldDefinitionPrimitive(6, BaseType.UINT32, "utc_timestamp"), // s
|
||||
new FieldDefinitionPrimitive(7, BaseType.SINT16, 3, "velocity", FieldDefinitionFactory.FIELD.ARRAY, 100, 0), // m/s
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
public static GlobalFITMessage TIMESTAMP_CORRELATION = new GlobalFITMessage(162, "TIMESTAMP_CORRELATION", Arrays.asList(
|
||||
@@ -1107,7 +1262,10 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(5, BaseType.UINT8, "set_type"), // 1 active 0 rest
|
||||
new FieldDefinitionPrimitive(6, BaseType.UINT32, "start_time", FieldDefinitionFactory.FIELD.TIMESTAMP),
|
||||
new FieldDefinitionPrimitive(7, BaseType.UINT16, "category", FieldDefinitionFactory.FIELD.EXERCISE_CATEGORY),
|
||||
new FieldDefinitionPrimitive(8, BaseType.UINT16, "category_subtype", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
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)
|
||||
));
|
||||
public static GlobalFITMessage DIVE_SETTINGS = new GlobalFITMessage(258, "DIVE_SETTINGS", Arrays.asList(
|
||||
@@ -1143,14 +1301,14 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(30, BaseType.ENUM, "up_key_enabled"),
|
||||
new FieldDefinitionPrimitive(35, BaseType.ENUM, "dive_sounds"),
|
||||
new FieldDefinitionPrimitive(36, BaseType.UINT8, "last_stop_multiple", 10, 0),
|
||||
new FieldDefinitionPrimitive(37, BaseType.UINT8, "no_fly_time_mode"),
|
||||
new FieldDefinitionPrimitive(37, BaseType.ENUM, "no_fly_time_mode"),
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP),
|
||||
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
|
||||
));
|
||||
public static GlobalFITMessage DIVE_GAS = new GlobalFITMessage(259, "DIVE_GAS", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT8, "helium_content"),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT8, "oxygen_content"),
|
||||
new FieldDefinitionPrimitive(2, BaseType.UINT8, "status"),
|
||||
new FieldDefinitionPrimitive(2, BaseType.ENUM, "status"),
|
||||
new FieldDefinitionPrimitive(3, BaseType.ENUM, "mode"),
|
||||
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
|
||||
));
|
||||
@@ -1160,6 +1318,22 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(3, BaseType.SINT8, "body_energy")
|
||||
));
|
||||
|
||||
public static GlobalFITMessage DIVE_ALARM = new GlobalFITMessage(262, "DIVE_ALARM", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT32, "depth", 1000, 0), // m
|
||||
new FieldDefinitionPrimitive(1, BaseType.SINT32, "time"), // s
|
||||
new FieldDefinitionPrimitive(2, BaseType.ENUM, "enabled", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(3, BaseType.ENUM, "alarm_type"),
|
||||
new FieldDefinitionPrimitive(4, BaseType.ENUM, "sound"),
|
||||
new FieldDefinitionPrimitive(5, BaseType.ENUM, "dive_types", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(6, BaseType.UINT32, "id"),
|
||||
new FieldDefinitionPrimitive(7, BaseType.ENUM, "popup_enabled", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(8, BaseType.ENUM, "trigger_on_descent", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(9, BaseType.ENUM, "trigger_on_ascent", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(10, BaseType.ENUM, "repeating", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(11, BaseType.SINT32, "speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
|
||||
));
|
||||
|
||||
public static GlobalFITMessage EXERCISE_TITLE = new GlobalFITMessage(264, "EXERCISE_TITLE", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT16, "exercise_category"),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT16, "exercise_name"),
|
||||
@@ -1170,7 +1344,7 @@ public class GlobalFITMessage {
|
||||
public static GlobalFITMessage SPO2 = new GlobalFITMessage(269, "SPO2", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT8, "reading_spo2"),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT8, "reading_confidence"),
|
||||
new FieldDefinitionPrimitive(2, BaseType.UINT8, "mode"), // 1 manual 3 periodic
|
||||
new FieldDefinitionPrimitive(2, BaseType.ENUM, "mode"), // 1 manual 3 periodic
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
@@ -1230,6 +1404,19 @@ public class GlobalFITMessage {
|
||||
|
||||
));
|
||||
|
||||
public static GlobalFITMessage JUMP = new GlobalFITMessage(285, "JUMP", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.FLOAT32, "distance"), // m
|
||||
new FieldDefinitionPrimitive(1, BaseType.FLOAT32, "heigh"), // m
|
||||
new FieldDefinitionPrimitive(2, BaseType.UINT8, "rotations"),
|
||||
new FieldDefinitionPrimitive(3, BaseType.FLOAT32, "hang_time"), // s
|
||||
new FieldDefinitionPrimitive(4, BaseType.FLOAT32, "score"), // s
|
||||
new FieldDefinitionPrimitive(5, BaseType.SINT32, "position_lat", FieldDefinitionFactory.FIELD.COORDINATE),
|
||||
new FieldDefinitionPrimitive(6, BaseType.SINT32, "position_long", FieldDefinitionFactory.FIELD.COORDINATE),
|
||||
new FieldDefinitionPrimitive(7, BaseType.UINT16, "speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(8, BaseType.UINT32, "enhanced_speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
public static GlobalFITMessage BEAT_INTERVALS = new GlobalFITMessage(290, "BEAT_INTERVALS", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT16, "timestamp_ms"), // ms
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT16, "time", FieldDefinitionFactory.FIELD.ARRAY), // ms
|
||||
@@ -1291,7 +1478,7 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(27, BaseType.UINT32, "end_time"),
|
||||
new FieldDefinitionPrimitive(28, BaseType.UINT32, "total_calories"), // kcal
|
||||
new FieldDefinitionPrimitive(74, BaseType.UINT32, "start_elevation", 5, 500), // meter
|
||||
new FieldDefinitionPrimitive(101, BaseType.UINT32, "total_moving_time", 1000, 0), // seconds
|
||||
new FieldDefinitionPrimitive(110, BaseType.UINT32, "total_moving_time", 1000, 0), // seconds
|
||||
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
|
||||
));
|
||||
|
||||
@@ -1326,6 +1513,16 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
public static GlobalFITMessage CLIMB_PRO = new GlobalFITMessage(317, "CLIMB_PRO", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.SINT32, "position_lat", FieldDefinitionFactory.FIELD.COORDINATE),
|
||||
new FieldDefinitionPrimitive(1, BaseType.SINT32, "position_long", FieldDefinitionFactory.FIELD.COORDINATE),
|
||||
new FieldDefinitionPrimitive(2, BaseType.ENUM, "climb_pro_event"),
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT16, "climb_number"),
|
||||
new FieldDefinitionPrimitive(4, BaseType.UINT8, "climb_category"),
|
||||
new FieldDefinitionPrimitive(5, BaseType.FLOAT32, "current_dist"), // m
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
public static GlobalFITMessage TANK_UPDATE = new GlobalFITMessage(319, "TANK_UPDATE", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT32Z, "sensor"),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT16, "pressure", 100, 0), // bar
|
||||
@@ -1429,12 +1626,45 @@ public class GlobalFITMessage {
|
||||
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
|
||||
));
|
||||
|
||||
public static GlobalFITMessage CHRONO_SHOT_SESSION = new GlobalFITMessage(387, "CHRONO_SHOT_SESSION", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT32, "min_speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT32, "max_speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(2, BaseType.UINT32, "avg_speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(3, BaseType.UINT16, "shot_count"),
|
||||
new FieldDefinitionPrimitive(4, BaseType.ENUM, "projectile_type"),
|
||||
new FieldDefinitionPrimitive(5, BaseType.UINT32, "grain_weight", 10, 0), // g
|
||||
new FieldDefinitionPrimitive(6, BaseType.UINT32, "standard_deviation", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
public static GlobalFITMessage CHRONO_SHOT_DATA = new GlobalFITMessage(388, "CHRONO_SHOT_DATA", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT32, "shot_speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT16, "shot_num"),
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
public static GlobalFITMessage HSA_CONFIGURATION_DATA = new GlobalFITMessage(389, "HSA_CONFIGURATION_DATA", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.BASE_TYPE_BYTE, "data", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT8, "data_size"),
|
||||
new FieldDefinitionPrimitive(253, BaseType.UINT32, "timestamp", FieldDefinitionFactory.FIELD.TIMESTAMP)
|
||||
));
|
||||
|
||||
public static GlobalFITMessage DIVE_APNEA_ALARM = new GlobalFITMessage(393, "DIVE_APNEA_ALARM", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.UINT32, "depth", 1000, 0), // m
|
||||
new FieldDefinitionPrimitive(1, BaseType.SINT32, "time"), // s
|
||||
new FieldDefinitionPrimitive(2, BaseType.ENUM, "enabled", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(3, BaseType.ENUM, "alarm_type"),
|
||||
new FieldDefinitionPrimitive(4, BaseType.ENUM, "sound"),
|
||||
new FieldDefinitionPrimitive(5, BaseType.ENUM, "dive_types", FieldDefinitionFactory.FIELD.ARRAY),
|
||||
new FieldDefinitionPrimitive(6, BaseType.UINT32, "id"),
|
||||
new FieldDefinitionPrimitive(7, BaseType.ENUM, "popup_enabled", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(8, BaseType.ENUM, "trigger_on_descent", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(9, BaseType.ENUM, "trigger_on_ascent", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(10, BaseType.ENUM, "repeating", FieldDefinitionFactory.FIELD.BOOLEAN),
|
||||
new FieldDefinitionPrimitive(11, BaseType.SINT32, "speed", 1000, 0), // m/s
|
||||
new FieldDefinitionPrimitive(254, BaseType.UINT16, "message_index")
|
||||
));
|
||||
|
||||
public static GlobalFITMessage CPE_STATUS = new GlobalFITMessage(394, "CPE_STATUS", Arrays.asList(
|
||||
new FieldDefinitionPrimitive(0, BaseType.ENUM, "status"),
|
||||
new FieldDefinitionPrimitive(1, BaseType.UINT32, "start_time"),
|
||||
@@ -1491,6 +1721,7 @@ public class GlobalFITMessage {
|
||||
put(23, DEVICE_INFO);
|
||||
put(26, WORKOUT);
|
||||
put(27, WORKOUT_STEP);
|
||||
put(28, SCHEDULE);
|
||||
put(29, LOCATION);
|
||||
put(30, WEIGHT_SCALE);
|
||||
put(31, COURSE);
|
||||
@@ -1509,6 +1740,9 @@ public class GlobalFITMessage {
|
||||
put(72, TRAINING_FILE);
|
||||
put(78, HRV);
|
||||
put(79, USER_METRICS);
|
||||
put(80, ANT_RX);
|
||||
put(81, ANT_TX);
|
||||
put(82, ANT_CHANNEL_ID);
|
||||
put(101, LENGTH);
|
||||
put(103, MONITORING_INFO);
|
||||
put(104, DEVICE_STATUS);
|
||||
@@ -1516,6 +1750,7 @@ public class GlobalFITMessage {
|
||||
put(106, SLAVE_DEVICE);
|
||||
put(127, CONNECTIVITY);
|
||||
put(128, WEATHER);
|
||||
put(129, WEATHER_ALERT);
|
||||
put(131, CADENCE_ZONE);
|
||||
put(132, HR);
|
||||
put(140, PHYSIOLOGICAL_METRICS);
|
||||
@@ -1543,12 +1778,14 @@ public class GlobalFITMessage {
|
||||
put(229, MAX_MET_DATA);
|
||||
put(258, DIVE_SETTINGS);
|
||||
put(259, DIVE_GAS);
|
||||
put(262, DIVE_ALARM);
|
||||
put(264, EXERCISE_TITLE);
|
||||
put(269, SPO2);
|
||||
put(273, SLEEP_DATA_INFO);
|
||||
put(274, SLEEP_DATA_RAW);
|
||||
put(268, DIVE_SUMMARY);
|
||||
put(275, SLEEP_STAGE);
|
||||
put(285, JUMP);
|
||||
put(290, BEAT_INTERVALS);
|
||||
put(297, RESPIRATION_RATE);
|
||||
put(304, HSA_STEP_DATA);
|
||||
@@ -1560,6 +1797,7 @@ public class GlobalFITMessage {
|
||||
put(313, SPLIT_SUMMARY);
|
||||
put(314, HSA_BODY_BATTERY_DATA);
|
||||
put(315, HSA_EVENT);
|
||||
put(317, CLIMB_PRO);
|
||||
put(319, TANK_UPDATE);
|
||||
put(323, TANK_SUMMARY);
|
||||
put(326, GPS_EVENT);
|
||||
@@ -1572,7 +1810,10 @@ public class GlobalFITMessage {
|
||||
put(375, DEVICE_AUX_BATTERY_INFO);
|
||||
put(378, TRAINING_LOAD);
|
||||
put(379, SLEEP_SCHEDULE);
|
||||
put(387, CHRONO_SHOT_SESSION);
|
||||
put(388, CHRONO_SHOT_DATA);
|
||||
put(389, HSA_CONFIGURATION_DATA);
|
||||
put(393, DIVE_APNEA_ALARM);
|
||||
put(394, CPE_STATUS);
|
||||
put(397, SKIN_TEMP_RAW);
|
||||
put(398, SKIN_TEMP_OVERNIGHT);
|
||||
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
/* Copyright (C) 2025 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 FitAntChannelId extends RecordData {
|
||||
public FitAntChannelId(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
|
||||
super(recordDefinition, recordHeader);
|
||||
|
||||
final int globalNumber = recordDefinition.getGlobalFITMessage().getNumber();
|
||||
if (globalNumber != 82) {
|
||||
throw new IllegalArgumentException("FitAntChannelId expects global messages of " + 82 + ", got " + globalNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getChannelNumber() {
|
||||
return (Integer) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getDeviceType() {
|
||||
return (Integer) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getDeviceNumber() {
|
||||
return (Integer) getFieldByNumber(2);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getTransmissionType() {
|
||||
return (Integer) getFieldByNumber(3);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getDeviceIndex() {
|
||||
return (Integer) getFieldByNumber(4);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
public static class Builder extends FitRecordDataBuilder {
|
||||
public Builder() {
|
||||
super(82);
|
||||
}
|
||||
|
||||
public Builder setChannelNumber(final Integer value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setDeviceType(final Integer value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setDeviceNumber(final Integer value) {
|
||||
setFieldByNumber(2, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTransmissionType(final Integer value) {
|
||||
setFieldByNumber(3, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setDeviceIndex(final Integer value) {
|
||||
setFieldByNumber(4, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitAntChannelId build() {
|
||||
return (FitAntChannelId) super.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
+128
@@ -0,0 +1,128 @@
|
||||
/* Copyright (C) 2025 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 FitAntRx extends RecordData {
|
||||
public FitAntRx(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
|
||||
super(recordDefinition, recordHeader);
|
||||
|
||||
final int globalNumber = recordDefinition.getGlobalFITMessage().getNumber();
|
||||
if (globalNumber != 80) {
|
||||
throw new IllegalArgumentException("FitAntRx expects global messages of " + 80 + ", got " + globalNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getFractionalTimestamp() {
|
||||
return (Float) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMesgId() {
|
||||
return (Integer) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMesgData() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(2);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getChannelNumber() {
|
||||
return (Integer) getFieldByNumber(3);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getData() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(4);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTimestamp() {
|
||||
return (Long) getFieldByNumber(253);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
public static class Builder extends FitRecordDataBuilder {
|
||||
public Builder() {
|
||||
super(80);
|
||||
}
|
||||
|
||||
public Builder setFractionalTimestamp(final Float value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMesgId(final Integer value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMesgData(final Number[] value) {
|
||||
setFieldByNumber(2, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setChannelNumber(final Integer value) {
|
||||
setFieldByNumber(3, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setData(final Number[] value) {
|
||||
setFieldByNumber(4, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimestamp(final Long value) {
|
||||
setFieldByNumber(253, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitAntRx build() {
|
||||
return (FitAntRx) super.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
+128
@@ -0,0 +1,128 @@
|
||||
/* Copyright (C) 2025 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 FitAntTx extends RecordData {
|
||||
public FitAntTx(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
|
||||
super(recordDefinition, recordHeader);
|
||||
|
||||
final int globalNumber = recordDefinition.getGlobalFITMessage().getNumber();
|
||||
if (globalNumber != 81) {
|
||||
throw new IllegalArgumentException("FitAntTx expects global messages of " + 81 + ", got " + globalNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getFractionalTimestamp() {
|
||||
return (Float) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMesgId() {
|
||||
return (Integer) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMesgData() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(2);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getChannelNumber() {
|
||||
return (Integer) getFieldByNumber(3);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getData() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(4);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTimestamp() {
|
||||
return (Long) getFieldByNumber(253);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
public static class Builder extends FitRecordDataBuilder {
|
||||
public Builder() {
|
||||
super(81);
|
||||
}
|
||||
|
||||
public Builder setFractionalTimestamp(final Float value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMesgId(final Integer value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMesgData(final Number[] value) {
|
||||
setFieldByNumber(2, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setChannelNumber(final Integer value) {
|
||||
setFieldByNumber(3, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setData(final Number[] value) {
|
||||
setFieldByNumber(4, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimestamp(final Long value) {
|
||||
setFieldByNumber(253, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitAntTx build() {
|
||||
return (FitAntTx) super.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
@@ -48,6 +48,11 @@ public class FitCadenceZone extends RecordData {
|
||||
return (String) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMessageIndex() {
|
||||
return (Integer) getFieldByNumber(254);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
@@ -66,6 +71,11 @@ public class FitCadenceZone extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMessageIndex(final Integer value) {
|
||||
setFieldByNumber(254, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitCadenceZone build() {
|
||||
return (FitCadenceZone) super.build();
|
||||
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
/* Copyright (C) 2025 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 FitChronoShotData extends RecordData {
|
||||
public FitChronoShotData(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
|
||||
super(recordDefinition, recordHeader);
|
||||
|
||||
final int globalNumber = recordDefinition.getGlobalFITMessage().getNumber();
|
||||
if (globalNumber != 388) {
|
||||
throw new IllegalArgumentException("FitChronoShotData expects global messages of " + 388 + ", got " + globalNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getShotSpeed() {
|
||||
return (Double) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getShotNum() {
|
||||
return (Integer) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTimestamp() {
|
||||
return (Long) getFieldByNumber(253);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
public static class Builder extends FitRecordDataBuilder {
|
||||
public Builder() {
|
||||
super(388);
|
||||
}
|
||||
|
||||
public Builder setShotSpeed(final Double value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setShotNum(final Integer value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimestamp(final Long value) {
|
||||
setFieldByNumber(253, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitChronoShotData build() {
|
||||
return (FitChronoShotData) super.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
/* Copyright (C) 2025 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 FitChronoShotSession extends RecordData {
|
||||
public FitChronoShotSession(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
|
||||
super(recordDefinition, recordHeader);
|
||||
|
||||
final int globalNumber = recordDefinition.getGlobalFITMessage().getNumber();
|
||||
if (globalNumber != 387) {
|
||||
throw new IllegalArgumentException("FitChronoShotSession expects global messages of " + 387 + ", got " + globalNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getMinSpeed() {
|
||||
return (Double) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getMaxSpeed() {
|
||||
return (Double) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getAvgSpeed() {
|
||||
return (Double) getFieldByNumber(2);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getShotCount() {
|
||||
return (Integer) getFieldByNumber(3);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getProjectileType() {
|
||||
return (Integer) getFieldByNumber(4);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getGrainWeight() {
|
||||
return (Double) getFieldByNumber(5);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getStandardDeviation() {
|
||||
return (Double) getFieldByNumber(6);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTimestamp() {
|
||||
return (Long) getFieldByNumber(253);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
public static class Builder extends FitRecordDataBuilder {
|
||||
public Builder() {
|
||||
super(387);
|
||||
}
|
||||
|
||||
public Builder setMinSpeed(final Double value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMaxSpeed(final Double value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgSpeed(final Double value) {
|
||||
setFieldByNumber(2, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setShotCount(final Integer value) {
|
||||
setFieldByNumber(3, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setProjectileType(final Integer value) {
|
||||
setFieldByNumber(4, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setGrainWeight(final Double value) {
|
||||
setFieldByNumber(5, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setStandardDeviation(final Double value) {
|
||||
setFieldByNumber(6, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimestamp(final Long value) {
|
||||
setFieldByNumber(253, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitChronoShotSession build() {
|
||||
return (FitChronoShotSession) super.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
/* Copyright (C) 2025 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 FitClimbPro extends RecordData {
|
||||
public FitClimbPro(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
|
||||
super(recordDefinition, recordHeader);
|
||||
|
||||
final int globalNumber = recordDefinition.getGlobalFITMessage().getNumber();
|
||||
if (globalNumber != 317) {
|
||||
throw new IllegalArgumentException("FitClimbPro expects global messages of " + 317 + ", got " + globalNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getPositionLat() {
|
||||
return (Double) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getPositionLong() {
|
||||
return (Double) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getClimbProEvent() {
|
||||
return (Integer) getFieldByNumber(2);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getClimbNumber() {
|
||||
return (Integer) getFieldByNumber(3);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getClimbCategory() {
|
||||
return (Integer) getFieldByNumber(4);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getCurrentDist() {
|
||||
return (Float) getFieldByNumber(5);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTimestamp() {
|
||||
return (Long) getFieldByNumber(253);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
public static class Builder extends FitRecordDataBuilder {
|
||||
public Builder() {
|
||||
super(317);
|
||||
}
|
||||
|
||||
public Builder setPositionLat(final Double value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setPositionLong(final Double value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setClimbProEvent(final Integer value) {
|
||||
setFieldByNumber(2, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setClimbNumber(final Integer value) {
|
||||
setFieldByNumber(3, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setClimbCategory(final Integer value) {
|
||||
setFieldByNumber(4, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setCurrentDist(final Float value) {
|
||||
setFieldByNumber(5, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimestamp(final Long value) {
|
||||
setFieldByNumber(253, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitClimbPro build() {
|
||||
return (FitClimbPro) super.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
+191
@@ -0,0 +1,191 @@
|
||||
/* Copyright (C) 2025 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 FitDiveAlarm extends RecordData {
|
||||
public FitDiveAlarm(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
|
||||
super(recordDefinition, recordHeader);
|
||||
|
||||
final int globalNumber = recordDefinition.getGlobalFITMessage().getNumber();
|
||||
if (globalNumber != 262) {
|
||||
throw new IllegalArgumentException("FitDiveAlarm expects global messages of " + 262 + ", got " + globalNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getDepth() {
|
||||
return (Double) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTime() {
|
||||
return (Long) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Boolean getEnabled() {
|
||||
return (Boolean) getFieldByNumber(2);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getAlarmType() {
|
||||
return (Integer) getFieldByNumber(3);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getSound() {
|
||||
return (Integer) getFieldByNumber(4);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getDiveTypes() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(5);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getId() {
|
||||
return (Long) getFieldByNumber(6);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Boolean getPopupEnabled() {
|
||||
return (Boolean) getFieldByNumber(7);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Boolean getTriggerOnDescent() {
|
||||
return (Boolean) getFieldByNumber(8);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Boolean getTriggerOnAscent() {
|
||||
return (Boolean) getFieldByNumber(9);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Boolean getRepeating() {
|
||||
return (Boolean) getFieldByNumber(10);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getSpeed() {
|
||||
return (Double) getFieldByNumber(11);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMessageIndex() {
|
||||
return (Integer) getFieldByNumber(254);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
public static class Builder extends FitRecordDataBuilder {
|
||||
public Builder() {
|
||||
super(262);
|
||||
}
|
||||
|
||||
public Builder setDepth(final Double value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTime(final Long value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnabled(final Boolean value) {
|
||||
setFieldByNumber(2, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAlarmType(final Integer value) {
|
||||
setFieldByNumber(3, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setSound(final Integer value) {
|
||||
setFieldByNumber(4, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setDiveTypes(final Number[] value) {
|
||||
setFieldByNumber(5, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setId(final Long value) {
|
||||
setFieldByNumber(6, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setPopupEnabled(final Boolean value) {
|
||||
setFieldByNumber(7, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTriggerOnDescent(final Boolean value) {
|
||||
setFieldByNumber(8, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTriggerOnAscent(final Boolean value) {
|
||||
setFieldByNumber(9, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRepeating(final Boolean value) {
|
||||
setFieldByNumber(10, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setSpeed(final Double value) {
|
||||
setFieldByNumber(11, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMessageIndex(final Integer value) {
|
||||
setFieldByNumber(254, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitDiveAlarm build() {
|
||||
return (FitDiveAlarm) super.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
+191
@@ -0,0 +1,191 @@
|
||||
/* Copyright (C) 2025 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 FitDiveApneaAlarm extends RecordData {
|
||||
public FitDiveApneaAlarm(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
|
||||
super(recordDefinition, recordHeader);
|
||||
|
||||
final int globalNumber = recordDefinition.getGlobalFITMessage().getNumber();
|
||||
if (globalNumber != 393) {
|
||||
throw new IllegalArgumentException("FitDiveApneaAlarm expects global messages of " + 393 + ", got " + globalNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getDepth() {
|
||||
return (Double) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTime() {
|
||||
return (Long) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Boolean getEnabled() {
|
||||
return (Boolean) getFieldByNumber(2);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getAlarmType() {
|
||||
return (Integer) getFieldByNumber(3);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getSound() {
|
||||
return (Integer) getFieldByNumber(4);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getDiveTypes() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(5);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getId() {
|
||||
return (Long) getFieldByNumber(6);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Boolean getPopupEnabled() {
|
||||
return (Boolean) getFieldByNumber(7);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Boolean getTriggerOnDescent() {
|
||||
return (Boolean) getFieldByNumber(8);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Boolean getTriggerOnAscent() {
|
||||
return (Boolean) getFieldByNumber(9);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Boolean getRepeating() {
|
||||
return (Boolean) getFieldByNumber(10);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getSpeed() {
|
||||
return (Double) getFieldByNumber(11);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMessageIndex() {
|
||||
return (Integer) getFieldByNumber(254);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
public static class Builder extends FitRecordDataBuilder {
|
||||
public Builder() {
|
||||
super(393);
|
||||
}
|
||||
|
||||
public Builder setDepth(final Double value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTime(final Long value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnabled(final Boolean value) {
|
||||
setFieldByNumber(2, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAlarmType(final Integer value) {
|
||||
setFieldByNumber(3, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setSound(final Integer value) {
|
||||
setFieldByNumber(4, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setDiveTypes(final Number[] value) {
|
||||
setFieldByNumber(5, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setId(final Long value) {
|
||||
setFieldByNumber(6, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setPopupEnabled(final Boolean value) {
|
||||
setFieldByNumber(7, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTriggerOnDescent(final Boolean value) {
|
||||
setFieldByNumber(8, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTriggerOnAscent(final Boolean value) {
|
||||
setFieldByNumber(9, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRepeating(final Boolean value) {
|
||||
setFieldByNumber(10, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setSpeed(final Double value) {
|
||||
setFieldByNumber(11, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMessageIndex(final Integer value) {
|
||||
setFieldByNumber(254, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitDiveApneaAlarm build() {
|
||||
return (FitDiveApneaAlarm) super.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
+130
@@ -63,6 +63,71 @@ public class FitEvent extends RecordData {
|
||||
return (Integer) getFieldByNumber(4);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getScore() {
|
||||
return (Integer) getFieldByNumber(7);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getOpponentScore() {
|
||||
return (Integer) getFieldByNumber(8);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getFrontGearNum() {
|
||||
return (Integer) getFieldByNumber(9);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getFrontGear() {
|
||||
return (Integer) getFieldByNumber(10);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getRearGearNum() {
|
||||
return (Integer) getFieldByNumber(11);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getRearGear() {
|
||||
return (Integer) getFieldByNumber(12);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getDeviceIndex() {
|
||||
return (Integer) getFieldByNumber(13);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getActivityType() {
|
||||
return (Integer) getFieldByNumber(14);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getStartTimestamp() {
|
||||
return (Long) getFieldByNumber(15);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getRadarThreatLevelMax() {
|
||||
return (Integer) getFieldByNumber(21);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getRadarThreatCount() {
|
||||
return (Integer) getFieldByNumber(22);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getRadarThreatAvgApproachSpeed() {
|
||||
return (Float) getFieldByNumber(23);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getRadarThreatMaxApproachSpeed() {
|
||||
return (Float) getFieldByNumber(24);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTimestamp() {
|
||||
return (Long) getFieldByNumber(253);
|
||||
@@ -101,6 +166,71 @@ public class FitEvent extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setScore(final Integer value) {
|
||||
setFieldByNumber(7, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setOpponentScore(final Integer value) {
|
||||
setFieldByNumber(8, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setFrontGearNum(final Integer value) {
|
||||
setFieldByNumber(9, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setFrontGear(final Integer value) {
|
||||
setFieldByNumber(10, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRearGearNum(final Integer value) {
|
||||
setFieldByNumber(11, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRearGear(final Integer value) {
|
||||
setFieldByNumber(12, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setDeviceIndex(final Integer value) {
|
||||
setFieldByNumber(13, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setActivityType(final Integer value) {
|
||||
setFieldByNumber(14, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setStartTimestamp(final Long value) {
|
||||
setFieldByNumber(15, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRadarThreatLevelMax(final Integer value) {
|
||||
setFieldByNumber(21, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRadarThreatCount(final Integer value) {
|
||||
setFieldByNumber(22, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRadarThreatAvgApproachSpeed(final Float value) {
|
||||
setFieldByNumber(23, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRadarThreatMaxApproachSpeed(final Float value) {
|
||||
setFieldByNumber(24, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimestamp(final Long value) {
|
||||
setFieldByNumber(253, value);
|
||||
return this;
|
||||
|
||||
+10
@@ -100,6 +100,11 @@ public class FitGoals extends RecordData {
|
||||
return (Source) getFieldByNumber(11);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMessageIndex() {
|
||||
return (Integer) getFieldByNumber(254);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
@@ -168,6 +173,11 @@ public class FitGoals extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMessageIndex(final Integer value) {
|
||||
setFieldByNumber(254, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitGoals build() {
|
||||
return (FitGoals) super.build();
|
||||
|
||||
+83
-6
@@ -39,13 +39,55 @@ public class FitGpsMetadata extends RecordData {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getEnhancedAltitude() {
|
||||
return (Long) getFieldByNumber(3);
|
||||
public Integer getTimestampMs() {
|
||||
return (Integer) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getEnhancedSpeed() {
|
||||
return (Long) getFieldByNumber(4);
|
||||
public Double getPositionLat() {
|
||||
return (Double) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getPositionLong() {
|
||||
return (Double) getFieldByNumber(2);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getEnhancedAltitude() {
|
||||
return (Double) getFieldByNumber(3);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getEnhancedSpeed() {
|
||||
return (Double) getFieldByNumber(4);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getHeading() {
|
||||
return (Float) getFieldByNumber(5);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getUtcTimestamp() {
|
||||
return (Long) getFieldByNumber(6);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getVelocity() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(7);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTimestamp() {
|
||||
return (Long) getFieldByNumber(253);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -56,16 +98,51 @@ public class FitGpsMetadata extends RecordData {
|
||||
super(160);
|
||||
}
|
||||
|
||||
public Builder setEnhancedAltitude(final Long value) {
|
||||
public Builder setTimestampMs(final Integer value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setPositionLat(final Double value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setPositionLong(final Double value) {
|
||||
setFieldByNumber(2, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnhancedAltitude(final Double value) {
|
||||
setFieldByNumber(3, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnhancedSpeed(final Long value) {
|
||||
public Builder setEnhancedSpeed(final Double value) {
|
||||
setFieldByNumber(4, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setHeading(final Float value) {
|
||||
setFieldByNumber(5, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setUtcTimestamp(final Long value) {
|
||||
setFieldByNumber(6, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setVelocity(final Number[] value) {
|
||||
setFieldByNumber(7, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimestamp(final Long value) {
|
||||
setFieldByNumber(253, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitGpsMetadata build() {
|
||||
return (FitGpsMetadata) super.build();
|
||||
|
||||
+3
-3
@@ -39,8 +39,8 @@ public class FitHrmProfile extends RecordData {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getEnabled() {
|
||||
return (Integer) getFieldByNumber(0);
|
||||
public Boolean getEnabled() {
|
||||
return (Boolean) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -71,7 +71,7 @@ public class FitHrmProfile extends RecordData {
|
||||
super(4);
|
||||
}
|
||||
|
||||
public Builder setEnabled(final Integer value) {
|
||||
public Builder setEnabled(final Boolean value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
+154
@@ -0,0 +1,154 @@
|
||||
/* Copyright (C) 2025 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 FitJump extends RecordData {
|
||||
public FitJump(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
|
||||
super(recordDefinition, recordHeader);
|
||||
|
||||
final int globalNumber = recordDefinition.getGlobalFITMessage().getNumber();
|
||||
if (globalNumber != 285) {
|
||||
throw new IllegalArgumentException("FitJump expects global messages of " + 285 + ", got " + globalNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getDistance() {
|
||||
return (Float) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getHeigh() {
|
||||
return (Float) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getRotations() {
|
||||
return (Integer) getFieldByNumber(2);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getHangTime() {
|
||||
return (Float) getFieldByNumber(3);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getScore() {
|
||||
return (Float) getFieldByNumber(4);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getPositionLat() {
|
||||
return (Double) getFieldByNumber(5);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getPositionLong() {
|
||||
return (Double) getFieldByNumber(6);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getSpeed() {
|
||||
return (Float) getFieldByNumber(7);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getEnhancedSpeed() {
|
||||
return (Double) getFieldByNumber(8);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTimestamp() {
|
||||
return (Long) getFieldByNumber(253);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
public static class Builder extends FitRecordDataBuilder {
|
||||
public Builder() {
|
||||
super(285);
|
||||
}
|
||||
|
||||
public Builder setDistance(final Float value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setHeigh(final Float value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRotations(final Integer value) {
|
||||
setFieldByNumber(2, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setHangTime(final Float value) {
|
||||
setFieldByNumber(3, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setScore(final Float value) {
|
||||
setFieldByNumber(4, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setPositionLat(final Double value) {
|
||||
setFieldByNumber(5, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setPositionLong(final Double value) {
|
||||
setFieldByNumber(6, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setSpeed(final Float value) {
|
||||
setFieldByNumber(7, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnhancedSpeed(final Double value) {
|
||||
setFieldByNumber(8, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimestamp(final Long value) {
|
||||
setFieldByNumber(253, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitJump build() {
|
||||
return (FitJump) super.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
+599
-4
@@ -295,8 +295,56 @@ public class FitLap extends RecordData {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getTimeInHrZone() {
|
||||
return (Double) getFieldByNumber(57);
|
||||
public Number[] getTimeInHrZone() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(57);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getTimeInSpeedZone() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(58);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getTimeInCadenceZone() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(59);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getTimeInPowerZone() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(60);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getRepetitionNum() {
|
||||
return (Integer) getFieldByNumber(61);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -304,6 +352,11 @@ public class FitLap extends RecordData {
|
||||
return (Float) getFieldByNumber(62);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMinHeartRate() {
|
||||
return (Integer) getFieldByNumber(63);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getWktStepIndex() {
|
||||
return (Integer) getFieldByNumber(71);
|
||||
@@ -314,6 +367,71 @@ public class FitLap extends RecordData {
|
||||
return (Integer) getFieldByNumber(73);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getOpponentScore() {
|
||||
return (Integer) getFieldByNumber(74);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getStrokeCount() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(75);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getZoneCount() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(76);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getAvgVerticalOscillation() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(77);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getAvgStanceTimePercen() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(78);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getAvgStanceTime() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(79);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgFractionalCadence() {
|
||||
return (Float) getFieldByNumber(80);
|
||||
@@ -324,6 +442,123 @@ public class FitLap extends RecordData {
|
||||
return (Float) getFieldByNumber(81);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getTotalFractionalCycles() {
|
||||
return (Float) getFieldByNumber(82);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getPlayerScore() {
|
||||
return (Integer) getFieldByNumber(83);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getAvgTotalHemoglobinConc() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(84);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMinTotalHemoglobinConc() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(85);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMaxTotalHemoglobinConc() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(86);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getAvgSaturatedHemoglobinPercent() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(87);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMinSaturatedHemoglobinPercent() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(88);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMaxSaturatedHemoglobinPercent() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(89);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgLeftTorqueEffectiveness() {
|
||||
return (Float) getFieldByNumber(91);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgRightTorqueEffectiveness() {
|
||||
return (Float) getFieldByNumber(92);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgLeftPedalSmoothness() {
|
||||
return (Float) getFieldByNumber(93);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgRightPedalSmoothness() {
|
||||
return (Float) getFieldByNumber(94);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgCombinedPedalSmoothness() {
|
||||
return (Float) getFieldByNumber(95);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getTimeStanding() {
|
||||
return (Double) getFieldByNumber(98);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getStandCount() {
|
||||
return (Integer) getFieldByNumber(99);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getAvgLeftPco() {
|
||||
return (Integer) getFieldByNumber(100);
|
||||
@@ -384,11 +619,126 @@ public class FitLap extends RecordData {
|
||||
return (Double) getFieldByNumber(111);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getEnhancedAvgAltitude() {
|
||||
return (Double) getFieldByNumber(112);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getEnhancedMinAltitude() {
|
||||
return (Double) getFieldByNumber(113);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getEnhancedMaxAltitude() {
|
||||
return (Double) getFieldByNumber(114);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getAvgLevMotorPower() {
|
||||
return (Integer) getFieldByNumber(115);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMaxLevMotorPower() {
|
||||
return (Integer) getFieldByNumber(116);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getLevBatteryConsumption() {
|
||||
return (Float) getFieldByNumber(117);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgVerticalRatio() {
|
||||
return (Float) getFieldByNumber(118);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgStanceTimeBalance() {
|
||||
return (Float) getFieldByNumber(119);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgStepLength() {
|
||||
return (Float) getFieldByNumber(120);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgVam() {
|
||||
return (Float) getFieldByNumber(121);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getAvgDepth() {
|
||||
return (Double) getFieldByNumber(122);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getMaxDepth() {
|
||||
return (Double) getFieldByNumber(123);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMinTemperature() {
|
||||
return (Integer) getFieldByNumber(124);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getEnhancedAvgRespirationRate() {
|
||||
return (Float) getFieldByNumber(136);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getEnhancedMaxRespirationRate() {
|
||||
return (Float) getFieldByNumber(137);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getAvgRespirationRate() {
|
||||
return (Integer) getFieldByNumber(147);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMaxRespirationRate() {
|
||||
return (Integer) getFieldByNumber(148);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getTotalGrit() {
|
||||
return (Float) getFieldByNumber(149);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getTotalFlow() {
|
||||
return (Float) getFieldByNumber(150);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getJumpCount() {
|
||||
return (Integer) getFieldByNumber(151);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgGrit() {
|
||||
return (Float) getFieldByNumber(153);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgFlow() {
|
||||
return (Float) getFieldByNumber(154);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getTotalFractionalAscent() {
|
||||
return (Float) getFieldByNumber(156);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getTotalFractionalDescent() {
|
||||
return (Float) getFieldByNumber(157);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgCoreTemperature() {
|
||||
return (Float) getFieldByNumber(158);
|
||||
@@ -677,8 +1027,28 @@ public class FitLap extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimeInHrZone(final Double value) {
|
||||
setFieldByNumber(57, value);
|
||||
public Builder setTimeInHrZone(final Number[] value) {
|
||||
setFieldByNumber(57, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimeInSpeedZone(final Number[] value) {
|
||||
setFieldByNumber(58, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimeInCadenceZone(final Number[] value) {
|
||||
setFieldByNumber(59, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimeInPowerZone(final Number[] value) {
|
||||
setFieldByNumber(60, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRepetitionNum(final Integer value) {
|
||||
setFieldByNumber(61, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -687,6 +1057,11 @@ public class FitLap extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMinHeartRate(final Integer value) {
|
||||
setFieldByNumber(63, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setWktStepIndex(final Integer value) {
|
||||
setFieldByNumber(71, value);
|
||||
return this;
|
||||
@@ -697,6 +1072,36 @@ public class FitLap extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setOpponentScore(final Integer value) {
|
||||
setFieldByNumber(74, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setStrokeCount(final Number[] value) {
|
||||
setFieldByNumber(75, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setZoneCount(final Number[] value) {
|
||||
setFieldByNumber(76, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgVerticalOscillation(final Number[] value) {
|
||||
setFieldByNumber(77, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgStanceTimePercen(final Number[] value) {
|
||||
setFieldByNumber(78, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgStanceTime(final Number[] value) {
|
||||
setFieldByNumber(79, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgFractionalCadence(final Float value) {
|
||||
setFieldByNumber(80, value);
|
||||
return this;
|
||||
@@ -707,6 +1112,81 @@ public class FitLap extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTotalFractionalCycles(final Float value) {
|
||||
setFieldByNumber(82, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setPlayerScore(final Integer value) {
|
||||
setFieldByNumber(83, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgTotalHemoglobinConc(final Number[] value) {
|
||||
setFieldByNumber(84, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMinTotalHemoglobinConc(final Number[] value) {
|
||||
setFieldByNumber(85, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMaxTotalHemoglobinConc(final Number[] value) {
|
||||
setFieldByNumber(86, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgSaturatedHemoglobinPercent(final Number[] value) {
|
||||
setFieldByNumber(87, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMinSaturatedHemoglobinPercent(final Number[] value) {
|
||||
setFieldByNumber(88, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMaxSaturatedHemoglobinPercent(final Number[] value) {
|
||||
setFieldByNumber(89, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgLeftTorqueEffectiveness(final Float value) {
|
||||
setFieldByNumber(91, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgRightTorqueEffectiveness(final Float value) {
|
||||
setFieldByNumber(92, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgLeftPedalSmoothness(final Float value) {
|
||||
setFieldByNumber(93, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgRightPedalSmoothness(final Float value) {
|
||||
setFieldByNumber(94, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgCombinedPedalSmoothness(final Float value) {
|
||||
setFieldByNumber(95, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimeStanding(final Double value) {
|
||||
setFieldByNumber(98, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setStandCount(final Integer value) {
|
||||
setFieldByNumber(99, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgLeftPco(final Integer value) {
|
||||
setFieldByNumber(100, value);
|
||||
return this;
|
||||
@@ -767,11 +1247,126 @@ public class FitLap extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnhancedAvgAltitude(final Double value) {
|
||||
setFieldByNumber(112, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnhancedMinAltitude(final Double value) {
|
||||
setFieldByNumber(113, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnhancedMaxAltitude(final Double value) {
|
||||
setFieldByNumber(114, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgLevMotorPower(final Integer value) {
|
||||
setFieldByNumber(115, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMaxLevMotorPower(final Integer value) {
|
||||
setFieldByNumber(116, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setLevBatteryConsumption(final Float value) {
|
||||
setFieldByNumber(117, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgVerticalRatio(final Float value) {
|
||||
setFieldByNumber(118, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgStanceTimeBalance(final Float value) {
|
||||
setFieldByNumber(119, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgStepLength(final Float value) {
|
||||
setFieldByNumber(120, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgVam(final Float value) {
|
||||
setFieldByNumber(121, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgDepth(final Double value) {
|
||||
setFieldByNumber(122, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMaxDepth(final Double value) {
|
||||
setFieldByNumber(123, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMinTemperature(final Integer value) {
|
||||
setFieldByNumber(124, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnhancedAvgRespirationRate(final Float value) {
|
||||
setFieldByNumber(136, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnhancedMaxRespirationRate(final Float value) {
|
||||
setFieldByNumber(137, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgRespirationRate(final Integer value) {
|
||||
setFieldByNumber(147, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMaxRespirationRate(final Integer value) {
|
||||
setFieldByNumber(148, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTotalGrit(final Float value) {
|
||||
setFieldByNumber(149, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTotalFlow(final Float value) {
|
||||
setFieldByNumber(150, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setJumpCount(final Integer value) {
|
||||
setFieldByNumber(151, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgGrit(final Float value) {
|
||||
setFieldByNumber(153, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgFlow(final Float value) {
|
||||
setFieldByNumber(154, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTotalFractionalAscent(final Float value) {
|
||||
setFieldByNumber(156, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTotalFractionalDescent(final Float value) {
|
||||
setFieldByNumber(157, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgCoreTemperature(final Float value) {
|
||||
setFieldByNumber(158, value);
|
||||
return this;
|
||||
|
||||
+17
@@ -38,6 +38,18 @@ public class FitMemoGlob extends RecordData {
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMemo() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(0);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMesgNum() {
|
||||
return (Integer) getFieldByNumber(1);
|
||||
@@ -71,6 +83,11 @@ public class FitMemoGlob extends RecordData {
|
||||
super(145);
|
||||
}
|
||||
|
||||
public Builder setMemo(final Number[] value) {
|
||||
setFieldByNumber(0, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMesgNum(final Integer value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
|
||||
+3
-3
@@ -97,8 +97,8 @@ public class FitMonitoring extends RecordData {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getLocalTimestamp() {
|
||||
return (Integer) getFieldByNumber(11);
|
||||
public Long getLocalTimestamp() {
|
||||
return (Long) getFieldByNumber(11);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -249,7 +249,7 @@ public class FitMonitoring extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setLocalTimestamp(final Integer value) {
|
||||
public Builder setLocalTimestamp(final Long value) {
|
||||
setFieldByNumber(11, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
+290
@@ -184,6 +184,36 @@ public class FitRecord extends RecordData {
|
||||
return (Integer) getFieldByNumber(42);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getLeftTorqueEffectiveness() {
|
||||
return (Float) getFieldByNumber(43);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getRightTorqueEffectiveness() {
|
||||
return (Float) getFieldByNumber(44);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getLeftPedalSmoothness() {
|
||||
return (Float) getFieldByNumber(45);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getRightPedalSmoothness() {
|
||||
return (Float) getFieldByNumber(46);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getCombinedPedalSmoothness() {
|
||||
return (Float) getFieldByNumber(47);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getTime128() {
|
||||
return (Float) getFieldByNumber(48);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getStrokeType() {
|
||||
return (Integer) getFieldByNumber(49);
|
||||
@@ -209,11 +239,141 @@ public class FitRecord extends RecordData {
|
||||
return (Float) getFieldByNumber(53);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getAvgTotalHemoglobinConc() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(54);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMinTotalHemoglobinConc() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(55);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMaxTotalHemoglobinConc() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(56);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getAvgSaturatedHemoglobinPercent() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(57);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMinSaturatedHemoglobinPercent() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(58);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMaxSaturatedHemoglobinPercent() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(59);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getDeviceIndex() {
|
||||
return (Integer) getFieldByNumber(62);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getLeftPco() {
|
||||
return (Integer) getFieldByNumber(67);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getRightPco() {
|
||||
return (Integer) getFieldByNumber(68);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getLeftPowerPhase() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(69);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getLeftPowerPhasePeak() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(70);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getRightPowerPhase() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(71);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getRightPowerPhasePeak() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(72);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getEnhancedSpeed() {
|
||||
return (Double) getFieldByNumber(73);
|
||||
@@ -319,6 +479,26 @@ public class FitRecord extends RecordData {
|
||||
return (Float) getFieldByNumber(116);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getEbikeTravelRang() {
|
||||
return (Integer) getFieldByNumber(117);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getEbikeBatteryLevel() {
|
||||
return (Integer) getFieldByNumber(118);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getEbikeAssistMode() {
|
||||
return (Integer) getFieldByNumber(119);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getEbikeAssistLevelPercent() {
|
||||
return (Integer) getFieldByNumber(120);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getAirTimeRemaining() {
|
||||
return (Long) getFieldByNumber(123);
|
||||
@@ -512,6 +692,36 @@ public class FitRecord extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setLeftTorqueEffectiveness(final Float value) {
|
||||
setFieldByNumber(43, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRightTorqueEffectiveness(final Float value) {
|
||||
setFieldByNumber(44, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setLeftPedalSmoothness(final Float value) {
|
||||
setFieldByNumber(45, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRightPedalSmoothness(final Float value) {
|
||||
setFieldByNumber(46, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setCombinedPedalSmoothness(final Float value) {
|
||||
setFieldByNumber(47, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTime128(final Float value) {
|
||||
setFieldByNumber(48, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setStrokeType(final Integer value) {
|
||||
setFieldByNumber(49, value);
|
||||
return this;
|
||||
@@ -537,11 +747,71 @@ public class FitRecord extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgTotalHemoglobinConc(final Number[] value) {
|
||||
setFieldByNumber(54, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMinTotalHemoglobinConc(final Number[] value) {
|
||||
setFieldByNumber(55, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMaxTotalHemoglobinConc(final Number[] value) {
|
||||
setFieldByNumber(56, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgSaturatedHemoglobinPercent(final Number[] value) {
|
||||
setFieldByNumber(57, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMinSaturatedHemoglobinPercent(final Number[] value) {
|
||||
setFieldByNumber(58, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMaxSaturatedHemoglobinPercent(final Number[] value) {
|
||||
setFieldByNumber(59, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setDeviceIndex(final Integer value) {
|
||||
setFieldByNumber(62, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setLeftPco(final Integer value) {
|
||||
setFieldByNumber(67, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRightPco(final Integer value) {
|
||||
setFieldByNumber(68, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setLeftPowerPhase(final Number[] value) {
|
||||
setFieldByNumber(69, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setLeftPowerPhasePeak(final Number[] value) {
|
||||
setFieldByNumber(70, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRightPowerPhase(final Number[] value) {
|
||||
setFieldByNumber(71, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setRightPowerPhasePeak(final Number[] value) {
|
||||
setFieldByNumber(72, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnhancedSpeed(final Double value) {
|
||||
setFieldByNumber(73, value);
|
||||
return this;
|
||||
@@ -647,6 +917,26 @@ public class FitRecord extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEbikeTravelRang(final Integer value) {
|
||||
setFieldByNumber(117, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEbikeBatteryLevel(final Integer value) {
|
||||
setFieldByNumber(118, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEbikeAssistMode(final Integer value) {
|
||||
setFieldByNumber(119, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEbikeAssistLevelPercent(final Integer value) {
|
||||
setFieldByNumber(120, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAirTimeRemaining(final Long value) {
|
||||
setFieldByNumber(123, value);
|
||||
return this;
|
||||
|
||||
+11
@@ -37,6 +37,7 @@ public class FitRecordDataFactory {
|
||||
case 23 -> new FitDeviceInfo(recordDefinition, recordHeader);
|
||||
case 26 -> new FitWorkout(recordDefinition, recordHeader);
|
||||
case 27 -> new FitWorkoutStep(recordDefinition, recordHeader);
|
||||
case 28 -> new FitSchedule(recordDefinition, recordHeader);
|
||||
case 29 -> new FitLocation(recordDefinition, recordHeader);
|
||||
case 30 -> new FitWeightScale(recordDefinition, recordHeader);
|
||||
case 31 -> new FitCourse(recordDefinition, recordHeader);
|
||||
@@ -55,6 +56,9 @@ public class FitRecordDataFactory {
|
||||
case 72 -> new FitTrainingFile(recordDefinition, recordHeader);
|
||||
case 78 -> new FitHrv(recordDefinition, recordHeader);
|
||||
case 79 -> new FitUserMetrics(recordDefinition, recordHeader);
|
||||
case 80 -> new FitAntRx(recordDefinition, recordHeader);
|
||||
case 81 -> new FitAntTx(recordDefinition, recordHeader);
|
||||
case 82 -> new FitAntChannelId(recordDefinition, recordHeader);
|
||||
case 101 -> new FitLength(recordDefinition, recordHeader);
|
||||
case 103 -> new FitMonitoringInfo(recordDefinition, recordHeader);
|
||||
case 104 -> new FitDeviceStatus(recordDefinition, recordHeader);
|
||||
@@ -62,6 +66,7 @@ public class FitRecordDataFactory {
|
||||
case 106 -> new FitSlaveDevice(recordDefinition, recordHeader);
|
||||
case 127 -> new FitConnectivity(recordDefinition, recordHeader);
|
||||
case 128 -> new FitWeather(recordDefinition, recordHeader);
|
||||
case 129 -> new FitWeatherAlert(recordDefinition, recordHeader);
|
||||
case 131 -> new FitCadenceZone(recordDefinition, recordHeader);
|
||||
case 132 -> new FitHr(recordDefinition, recordHeader);
|
||||
case 140 -> new FitPhysiologicalMetrics(recordDefinition, recordHeader);
|
||||
@@ -89,12 +94,14 @@ public class FitRecordDataFactory {
|
||||
case 229 -> new FitMaxMetData(recordDefinition, recordHeader);
|
||||
case 258 -> new FitDiveSettings(recordDefinition, recordHeader);
|
||||
case 259 -> new FitDiveGas(recordDefinition, recordHeader);
|
||||
case 262 -> new FitDiveAlarm(recordDefinition, recordHeader);
|
||||
case 264 -> new FitExerciseTitle(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 285 -> new FitJump(recordDefinition, recordHeader);
|
||||
case 290 -> new FitBeatIntervals(recordDefinition, recordHeader);
|
||||
case 297 -> new FitRespirationRate(recordDefinition, recordHeader);
|
||||
case 304 -> new FitHsaStepData(recordDefinition, recordHeader);
|
||||
@@ -106,6 +113,7 @@ public class FitRecordDataFactory {
|
||||
case 313 -> new FitSplitSummary(recordDefinition, recordHeader);
|
||||
case 314 -> new FitHsaBodyBatteryData(recordDefinition, recordHeader);
|
||||
case 315 -> new FitHsaEvent(recordDefinition, recordHeader);
|
||||
case 317 -> new FitClimbPro(recordDefinition, recordHeader);
|
||||
case 319 -> new FitTankUpdate(recordDefinition, recordHeader);
|
||||
case 323 -> new FitTankSummary(recordDefinition, recordHeader);
|
||||
case 326 -> new FitGpsEvent(recordDefinition, recordHeader);
|
||||
@@ -118,7 +126,10 @@ public class FitRecordDataFactory {
|
||||
case 375 -> new FitDeviceAuxBatteryInfo(recordDefinition, recordHeader);
|
||||
case 378 -> new FitTrainingLoad(recordDefinition, recordHeader);
|
||||
case 379 -> new FitSleepSchedule(recordDefinition, recordHeader);
|
||||
case 387 -> new FitChronoShotSession(recordDefinition, recordHeader);
|
||||
case 388 -> new FitChronoShotData(recordDefinition, recordHeader);
|
||||
case 389 -> new FitHsaConfigurationData(recordDefinition, recordHeader);
|
||||
case 393 -> new FitDiveApneaAlarm(recordDefinition, recordHeader);
|
||||
case 394 -> new FitCpeStatus(recordDefinition, recordHeader);
|
||||
case 397 -> new FitSkinTempRaw(recordDefinition, recordHeader);
|
||||
case 398 -> new FitSkinTempOvernight(recordDefinition, recordHeader);
|
||||
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
/* Copyright (C) 2025 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 FitSchedule extends RecordData {
|
||||
public FitSchedule(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
|
||||
super(recordDefinition, recordHeader);
|
||||
|
||||
final int globalNumber = recordDefinition.getGlobalFITMessage().getNumber();
|
||||
if (globalNumber != 28) {
|
||||
throw new IllegalArgumentException("FitSchedule expects global messages of " + 28 + ", got " + globalNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getManufacturer() {
|
||||
return (Integer) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getProduct() {
|
||||
return (Integer) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getSerialNumber() {
|
||||
return (Long) getFieldByNumber(2);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTimeCreated() {
|
||||
return (Long) getFieldByNumber(3);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Boolean getCompleted() {
|
||||
return (Boolean) getFieldByNumber(4);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getType() {
|
||||
return (Integer) getFieldByNumber(5);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getScheduledTime() {
|
||||
return (Long) getFieldByNumber(6);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
public static class Builder extends FitRecordDataBuilder {
|
||||
public Builder() {
|
||||
super(28);
|
||||
}
|
||||
|
||||
public Builder setManufacturer(final Integer value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setProduct(final Integer value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setSerialNumber(final Long value) {
|
||||
setFieldByNumber(2, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimeCreated(final Long value) {
|
||||
setFieldByNumber(3, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setCompleted(final Boolean value) {
|
||||
setFieldByNumber(4, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setType(final Integer value) {
|
||||
setFieldByNumber(5, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setScheduledTime(final Long value) {
|
||||
setFieldByNumber(6, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitSchedule build() {
|
||||
return (FitSchedule) super.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -39,8 +39,8 @@ public class FitSdmProfile extends RecordData {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getEnabled() {
|
||||
return (Integer) getFieldByNumber(0);
|
||||
public Boolean getEnabled() {
|
||||
return (Boolean) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -86,7 +86,7 @@ public class FitSdmProfile extends RecordData {
|
||||
super(5);
|
||||
}
|
||||
|
||||
public Builder setEnabled(final Integer value) {
|
||||
public Builder setEnabled(final Boolean value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
+10
@@ -53,6 +53,11 @@ public class FitSegmentPoint extends RecordData {
|
||||
return (Double) getFieldByNumber(3);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAltitude() {
|
||||
return (Float) getFieldByNumber(4);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getLeaderTime() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(5);
|
||||
@@ -98,6 +103,11 @@ public class FitSegmentPoint extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAltitude(final Float value) {
|
||||
setFieldByNumber(4, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setLeaderTime(final Number[] value) {
|
||||
setFieldByNumber(5, (Object[]) value);
|
||||
return this;
|
||||
|
||||
+172
@@ -463,6 +463,78 @@ public class FitSession extends RecordData {
|
||||
return (Float) getFieldByNumber(94);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getAvgTotalHemoglobinConc() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(95);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMinTotalHemoglobinConc() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(96);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMaxTotalHemoglobinConc() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(97);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getAvgSaturatedHemoglobinPercent() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(98);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMinSaturatedHemoglobinPercent() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(99);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getMaxSaturatedHemoglobinPercent() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(100);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgLeftTorqueEffectiveness() {
|
||||
return (Float) getFieldByNumber(101);
|
||||
@@ -634,6 +706,36 @@ public class FitSession extends RecordData {
|
||||
return (Double) getFieldByNumber(125);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getEnhancedAvgAltitude() {
|
||||
return (Double) getFieldByNumber(126);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getEnhancedMinAltitude() {
|
||||
return (Double) getFieldByNumber(127);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getEnhancedMaxAltitude() {
|
||||
return (Double) getFieldByNumber(128);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getAvgLevMotorPower() {
|
||||
return (Integer) getFieldByNumber(129);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMaxLevMotorPower() {
|
||||
return (Integer) getFieldByNumber(130);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getLevBatteryConsumption() {
|
||||
return (Float) getFieldByNumber(131);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgVerticalRatio() {
|
||||
return (Float) getFieldByNumber(132);
|
||||
@@ -654,6 +756,11 @@ public class FitSession extends RecordData {
|
||||
return (Float) getFieldByNumber(137);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Float getAvgVam() {
|
||||
return (Float) getFieldByNumber(139);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double getAvgDepth() {
|
||||
return (Double) getFieldByNumber(140);
|
||||
@@ -1302,6 +1409,36 @@ public class FitSession extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgTotalHemoglobinConc(final Number[] value) {
|
||||
setFieldByNumber(95, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMinTotalHemoglobinConc(final Number[] value) {
|
||||
setFieldByNumber(96, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMaxTotalHemoglobinConc(final Number[] value) {
|
||||
setFieldByNumber(97, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgSaturatedHemoglobinPercent(final Number[] value) {
|
||||
setFieldByNumber(98, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMinSaturatedHemoglobinPercent(final Number[] value) {
|
||||
setFieldByNumber(99, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMaxSaturatedHemoglobinPercent(final Number[] value) {
|
||||
setFieldByNumber(100, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgLeftTorqueEffectiveness(final Float value) {
|
||||
setFieldByNumber(101, value);
|
||||
return this;
|
||||
@@ -1417,6 +1554,36 @@ public class FitSession extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnhancedAvgAltitude(final Double value) {
|
||||
setFieldByNumber(126, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnhancedMinAltitude(final Double value) {
|
||||
setFieldByNumber(127, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setEnhancedMaxAltitude(final Double value) {
|
||||
setFieldByNumber(128, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgLevMotorPower(final Integer value) {
|
||||
setFieldByNumber(129, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMaxLevMotorPower(final Integer value) {
|
||||
setFieldByNumber(130, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setLevBatteryConsumption(final Float value) {
|
||||
setFieldByNumber(131, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgVerticalRatio(final Float value) {
|
||||
setFieldByNumber(132, value);
|
||||
return this;
|
||||
@@ -1437,6 +1604,11 @@ public class FitSession extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgVam(final Float value) {
|
||||
setFieldByNumber(139, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setAvgDepth(final Double value) {
|
||||
setFieldByNumber(140, value);
|
||||
return this;
|
||||
|
||||
+37
@@ -76,11 +76,33 @@ public class FitSet extends RecordData {
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Number[] getCategorySubtype() {
|
||||
final Object[] objectsArray = (Object[]) getFieldByNumber(8);
|
||||
if (objectsArray == null)
|
||||
return null;
|
||||
final Number[] ret = new Number[objectsArray.length];
|
||||
for (int i = 0; i < objectsArray.length; i++) {
|
||||
ret[i] = (Number) objectsArray[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getWeightDisplayUnit() {
|
||||
return (Integer) getFieldByNumber(9);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMessageIndex() {
|
||||
return (Integer) getFieldByNumber(10);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getWktStepIndex() {
|
||||
return (Integer) getFieldByNumber(11);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTimestamp() {
|
||||
return (Long) getFieldByNumber(254);
|
||||
@@ -124,11 +146,26 @@ public class FitSet extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setCategorySubtype(final Number[] value) {
|
||||
setFieldByNumber(8, (Object[]) value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setWeightDisplayUnit(final Integer value) {
|
||||
setFieldByNumber(9, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMessageIndex(final Integer value) {
|
||||
setFieldByNumber(10, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setWktStepIndex(final Integer value) {
|
||||
setFieldByNumber(11, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimestamp(final Long value) {
|
||||
setFieldByNumber(254, value);
|
||||
return this;
|
||||
|
||||
+2
-2
@@ -125,7 +125,7 @@ public class FitSplit extends RecordData {
|
||||
|
||||
@Nullable
|
||||
public Double getTotalMovingTime() {
|
||||
return (Double) getFieldByNumber(101);
|
||||
return (Double) getFieldByNumber(110);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -227,7 +227,7 @@ public class FitSplit extends RecordData {
|
||||
}
|
||||
|
||||
public Builder setTotalMovingTime(final Double value) {
|
||||
setFieldByNumber(101, value);
|
||||
setFieldByNumber(110, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
/* Copyright (C) 2025 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 FitWeatherAlert extends RecordData {
|
||||
public FitWeatherAlert(final RecordDefinition recordDefinition, final RecordHeader recordHeader) {
|
||||
super(recordDefinition, recordHeader);
|
||||
|
||||
final int globalNumber = recordDefinition.getGlobalFITMessage().getNumber();
|
||||
if (globalNumber != 129) {
|
||||
throw new IllegalArgumentException("FitWeatherAlert expects global messages of " + 129 + ", got " + globalNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getReportId() {
|
||||
return (String) getFieldByNumber(0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getIssueTime() {
|
||||
return (Long) getFieldByNumber(1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getExpireTime() {
|
||||
return (Long) getFieldByNumber(2);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getSeverity() {
|
||||
return (Integer) getFieldByNumber(3);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getType() {
|
||||
return (Integer) getFieldByNumber(4);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Long getTimestamp() {
|
||||
return (Long) getFieldByNumber(253);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
public static class Builder extends FitRecordDataBuilder {
|
||||
public Builder() {
|
||||
super(129);
|
||||
}
|
||||
|
||||
public Builder setReportId(final String value) {
|
||||
setFieldByNumber(0, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setIssueTime(final Long value) {
|
||||
setFieldByNumber(1, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setExpireTime(final Long value) {
|
||||
setFieldByNumber(2, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setSeverity(final Integer value) {
|
||||
setFieldByNumber(3, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setType(final Integer value) {
|
||||
setFieldByNumber(4, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTimestamp(final Long value) {
|
||||
setFieldByNumber(253, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitWeatherAlert build() {
|
||||
return (FitWeatherAlert) super.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
@@ -78,6 +78,11 @@ public class FitWorkout extends RecordData {
|
||||
return (String) getFieldByNumber(17);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getMessageIndex() {
|
||||
return (Integer) getFieldByNumber(254);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noinspection unused
|
||||
*/
|
||||
@@ -126,6 +131,11 @@ public class FitWorkout extends RecordData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setMessageIndex(final Integer value) {
|
||||
setFieldByNumber(254, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FitWorkout build() {
|
||||
return (FitWorkout) super.build();
|
||||
|
||||
+744
-2
@@ -1,5 +1,8 @@
|
||||
package nodomain.freeyourgadget.gadgetbridge.service.devices.garmin;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -7,6 +10,7 @@ import java.math.BigInteger;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FieldDefinition;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.fit.FitFile;
|
||||
@@ -336,7 +340,7 @@ public class GarminSupportTest extends TestBase {
|
||||
"FitFileId{type=SETTINGS, manufacturer=1, product=1561, serial_number=3889965805}, FitFileCreator{software_version=340}, " +
|
||||
"FitDeviceSettings{active_time_zone=0, utc_offset=0, time_offset=0, unknown_3(ENUM/1)=0, time_mode=0, time_zone_offset=0, unknown_10(ENUM/1)=3, unknown_11(ENUM/1)=0, backlight_mode=2, unknown_13(UINT8/1)=0, unknown_14(UINT8/1)=0, unknown_15(UINT8/1)=50, unknown_21(ENUM/1)=1, unknown_22(ENUM/1)=0, unknown_26(ENUM/1)=254, unknown_27(ENUM/1)=0, unknown_29(ENUM/1)=0, unknown_52(ENUM/1)=0, unknown_53(ENUM/1)=1}, " +
|
||||
"FitUserProfile{friendly_name=edge510, gender=1, age=41, height=183, weight=78.0, language=english, elev_setting=metric, weight_setting=metric, resting_heart_rate=60, default_max_biking_heart_rate=185, default_max_heart_rate=185, hr_setting=1, speed_setting=metric, dist_setting=metric, power_setting=1, activity_class=168, position_setting=2, temperature_setting=metric}, " +
|
||||
"FitHrmProfile{enabled=1, hrm_ant_id=50008, hrm_ant_id_trans_type=1, message_index=0}, " +
|
||||
"FitHrmProfile{enabled=true, hrm_ant_id=50008, hrm_ant_id_trans_type=1, message_index=0}, " +
|
||||
"FitBikeProfile{name=EVO, odometer=457191.72, bike_power_ant_id=47617, custom_wheelsize=2.096, auto_wheelsize=0.0, bike_weight=8.0, power_cal_factor=50.0, auto_wheel_cal=true, auto_power_zero=true, id=0, spd_enabled=false, cad_enabled=false, spdcad_enabled=false, power_enabled=true, crank_length=227.0, enabled=true, bike_power_ant_id_trans_type=5, unknown_35(UINT8/3)=[0,50,], unknown_36(ENUM/1)=4, front_gear_num=2, front_gear=[39,53,,], rear_gear_num=11, rear_gear=[23,21,19,18,17,16,15,14,13,12,11,], shimano_di2_enabled=false, message_index=0}, " +
|
||||
"FitBikeProfile{name=P2SL, odometer=0.0, bike_power_ant_id=28209, custom_wheelsize=2.096, auto_wheelsize=0.0, bike_weight=9.0, power_cal_factor=50.0, auto_wheel_cal=true, auto_power_zero=true, id=0, spd_enabled=false, cad_enabled=false, spdcad_enabled=false, power_enabled=true, crank_length=227.0, enabled=true, bike_power_ant_id_trans_type=5, unknown_35(UINT8/3)=[0,118,190], unknown_36(ENUM/1)=4, front_gear_num=2, front_gear=[39,53,,], rear_gear_num=11, rear_gear=[23,21,19,18,17,16,15,14,13,12,11,], shimano_di2_enabled=false, message_index=1}, " +
|
||||
"FitBikeProfile{name=LANGSTER, odometer=12318.91, bike_power_ant_id=10851, custom_wheelsize=2.096, auto_wheelsize=0.0, bike_weight=9.5, power_cal_factor=50.0, auto_wheel_cal=true, auto_power_zero=true, id=0, spd_enabled=false, cad_enabled=false, spdcad_enabled=false, power_enabled=true, crank_length=100.0, enabled=true, bike_power_ant_id_trans_type=5, unknown_35(UINT8/3)=[0,50,], unknown_36(ENUM/1)=4, front_gear_num=2, front_gear=[39,53,,], rear_gear_num=11, rear_gear=[23,21,19,18,17,16,15,14,13,12,11,], shimano_di2_enabled=false, message_index=2}, " +
|
||||
@@ -371,4 +375,742 @@ public class GarminSupportTest extends TestBase {
|
||||
FitFile fitFile = FitFile.parseIncoming(fileContents);
|
||||
Assert.assertEquals(expectedOutput, fitFile.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestFitMessageTypeParsing() throws FitParseException {
|
||||
byte[] fileContents = GB.hexStringToByteArray(
|
||||
"0E20B352F21B00002E464954" +
|
||||
"AB6240000000000700010001" +
|
||||
"028402028403048C04048605" +
|
||||
"0284080D070004FF00FEFF01" +
|
||||
"0000007F4533432A00476164" +
|
||||
"676574427269646765004000" +
|
||||
"0001000215048C17048C0001" +
|
||||
"000000010000004000000200" +
|
||||
"130001020104860C01002401" +
|
||||
"002704862E01002F01003701" +
|
||||
"003801003A02843B02845001" +
|
||||
"005601005901005A04865E01" +
|
||||
"025F0100860100AE01000001" +
|
||||
"0100000001017F4533430101" +
|
||||
"010101000100010101010000" +
|
||||
"000101010140000003001CFE" +
|
||||
"028400020701010002010203" +
|
||||
"010204028405010006010007" +
|
||||
"01000801020901020A01020B" +
|
||||
"01020C01000D01000E010010" +
|
||||
"010011010012010015010016" +
|
||||
"02841C04861D04861E01001F" +
|
||||
"02842002842F010031048600" +
|
||||
"010061000101640A00010101" +
|
||||
"01010101010101017F010101" +
|
||||
"00010000000100000001E803" +
|
||||
"E80301010000004000000400" +
|
||||
"05FE028400010001028B0201" +
|
||||
"0003010A0001000101000101" +
|
||||
"400000050008FE0284000100" +
|
||||
"01028B020284030486040100" +
|
||||
"05010A070102000100010100" +
|
||||
"0A0064000000010101400000" +
|
||||
"06001E28010A2C0100FE0284" +
|
||||
"000207010100020100030486" +
|
||||
"04028B05028B06028B07028B" +
|
||||
"0802840902840A02840B0284" +
|
||||
"0C01000D01000E01020F0100" +
|
||||
"100100110100120100130102" +
|
||||
"14010015010A16010A17010A" +
|
||||
"18010A25010226010A000101" +
|
||||
"010061000101640000000100" +
|
||||
"010001000100E803E8030A00" +
|
||||
"0A0001010101010101FF0101" +
|
||||
"010101010140000007000501" +
|
||||
"010202010203028405010007" +
|
||||
"010000010101000101400000" +
|
||||
"080003FE0284010102020207" +
|
||||
"000100016100400000090003" +
|
||||
"FE0284010284020207000100" +
|
||||
"010061004000000A0004FE02" +
|
||||
"840101020202840301020001" +
|
||||
"00010A000A4000000C000300" +
|
||||
"010001010003020700010161" +
|
||||
"004000000D00041F04862002" +
|
||||
"842104869904860064000000" +
|
||||
"E8030100000040420F004000" +
|
||||
"000F000DFE02840001000101" +
|
||||
"000204860304860401000504" +
|
||||
"860601000704860801000902" +
|
||||
"840A01000B01000001000101" +
|
||||
"7F4533437F45334301010000" +
|
||||
"000101000000010100010140" +
|
||||
"0000120088BA0488BB0488C0" +
|
||||
"0102C10102C20102C30102C5" +
|
||||
"0102C60102C70102C80102D0" +
|
||||
"0284D10284D202847D04867E" +
|
||||
"04867F048680048681028482" +
|
||||
"028483010284028485028486" +
|
||||
"02848901028B02848C04868D" +
|
||||
"04868E04868F010290010291" +
|
||||
"028492028493010294010295" +
|
||||
"01029601019B02849C0486A8" +
|
||||
"0485A90284AA0284B40284B5" +
|
||||
"0488B60488B7028465010266" +
|
||||
"01026701026801026901026E" +
|
||||
"02076F010270048671028472" +
|
||||
"01017301017C04863B04863C" +
|
||||
"02833D02833E02833F028340" +
|
||||
"010245048646028447028452" +
|
||||
"028453028454020757028458" +
|
||||
"02845902845A02845B02845C" +
|
||||
"01025D01025E01021A02841B" +
|
||||
"01021C01001D04851E04851F" +
|
||||
"048520048521028422028423" +
|
||||
"028424028425028426048527" +
|
||||
"04852904862A02842B01002C" +
|
||||
"02842D02842E01002F028430" +
|
||||
"048631028432028433010234" +
|
||||
"028335028336028337028338" +
|
||||
"02833901013A0101FE0284FD" +
|
||||
"048600010001010002048603" +
|
||||
"048504048505010006010007" +
|
||||
"04860804860904860A04860B" +
|
||||
"02840D02840E02840F028410" +
|
||||
"010211010212010213010214" +
|
||||
"028415028416028417028418" +
|
||||
"0102190284000000803F0000" +
|
||||
"803F01010101010164646400" +
|
||||
"64006400E8030000C9090000" +
|
||||
"C9090000C909000001000100" +
|
||||
"02640064000A000AE803E803" +
|
||||
"0000E8030000010000000101" +
|
||||
"010001000101010101000100" +
|
||||
"000000000100640064006400" +
|
||||
"0000803F0000803F01000202" +
|
||||
"020202610001E80300000100" +
|
||||
"0101E8030000E8030000E803" +
|
||||
"E803E803E80301E803000001" +
|
||||
"00C909010001006100640064" +
|
||||
"000A0064000A008080800100" +
|
||||
"010101000000010000000100" +
|
||||
"000001000000010001000A00" +
|
||||
"E80301000100000001000000" +
|
||||
"0A0000006400016400010001" +
|
||||
"010001000000C909C9090164" +
|
||||
"006400640064006400010101" +
|
||||
"007F45334303017F45334301" +
|
||||
"000000010000000101E80300" +
|
||||
"00E803000064000000010000" +
|
||||
"0001000100E803E803010101" +
|
||||
"0101000100010001000A0100" +
|
||||
"400000130067950488960488" +
|
||||
"9702849904889A04889C0102" +
|
||||
"9D01029E02849F0284A00284" +
|
||||
"6501016E04866F0486700486" +
|
||||
"710486720486730284740284" +
|
||||
"750102760284770284780284" +
|
||||
"7902847A04867B04867C0101" +
|
||||
"880284890284930102940102" +
|
||||
"3D02843E02843F0102470284" +
|
||||
"4A02844D02844E02844F0284" +
|
||||
"500102510102520102530284" +
|
||||
"5B01025C01025D01025E0102" +
|
||||
"5F0102620486630284640101" +
|
||||
"1901001A0102200284210284" +
|
||||
"220284230284250284260100" +
|
||||
"2701002802842904862A0284" +
|
||||
"2B02842C01022D02832E0283" +
|
||||
"2F0283300283310283320101" +
|
||||
"330101340486350283360283" +
|
||||
"370283380283FE0284FD0486" +
|
||||
"000100010100020486030485" +
|
||||
"040485050485060485070486" +
|
||||
"0804860904860A04860B0284" +
|
||||
"0C02840D02840E02840F0102" +
|
||||
"100102110102120102130284" +
|
||||
"140284150284160284170100" +
|
||||
"180100000000803F0000803F" +
|
||||
"01000000803F0000803F6464" +
|
||||
"64006400640001E8030000E8" +
|
||||
"030000C9090000C9090000C9" +
|
||||
"090000010001000264006400" +
|
||||
"0A00E803E8030000E8030000" +
|
||||
"016400640001010100C90901" +
|
||||
"010001000A0064000A008080" +
|
||||
"8001000202020202E8030000" +
|
||||
"010001010101000100010001" +
|
||||
"0064000101010001000000C9" +
|
||||
"09C909016400640064006400" +
|
||||
"64000101E8030000E803E803" +
|
||||
"E803E80301007F4533430301" +
|
||||
"7F4533430100000001000000" +
|
||||
"0100000001000000E8030000" +
|
||||
"E80300006400000001000000" +
|
||||
"01000100E803E80301010101" +
|
||||
"010001000100010001014000" +
|
||||
"0014004E5B04865C04865D04" +
|
||||
"865E04865F04866004866101" +
|
||||
"026202846301026C02847204" +
|
||||
"887304887402847502847601" +
|
||||
"027701027801027B04867C02" +
|
||||
"847D02847E02847F04858101" +
|
||||
"028B02842D01022E01022F01" +
|
||||
"023001023101003201023302" +
|
||||
"843402843501023602843702" +
|
||||
"843802843902843A02843B02" +
|
||||
"843E01024301014401014904" +
|
||||
"864E04865101025202845302" +
|
||||
"84540284550284570284FD04" +
|
||||
"860004850104850202840301" +
|
||||
"020401020504860602840702" +
|
||||
"840902830A01020B04850C01" +
|
||||
"020D01011201021304861C02" +
|
||||
"841D04861E01021F01022002" +
|
||||
"832102842702842802842902" +
|
||||
"842A01002B01022C01020001" +
|
||||
"000000E8030000E803000001" +
|
||||
"000000010000000100000001" +
|
||||
"01000164000000803F000080" +
|
||||
"3F6400010001010101000000" +
|
||||
"640064006400E80300006464" +
|
||||
"000202028001016400000180" +
|
||||
"6400640064000A000A000A00" +
|
||||
"010101E8030000C909000002" +
|
||||
"0100640064000A0064007F45" +
|
||||
"33430100000001000000C909" +
|
||||
"010164000000E80301006400" +
|
||||
"01E803000064010101000000" +
|
||||
"0100010000000101E8030100" +
|
||||
"0A0064000A00010202400000" +
|
||||
"15001309010A0A010A0B010A" +
|
||||
"0C010A0D01020E01000F0486" +
|
||||
"150100160102170102180102" +
|
||||
"FD0486000100010100020284" +
|
||||
"030486040102070284080284" +
|
||||
"000101010101017F45334301" +
|
||||
"010A0A7F4533430301010001" +
|
||||
"000000010100010040000017" +
|
||||
"0013FD048600010201010202" +
|
||||
"028403048C04028405028406" +
|
||||
"01020704860A02840B010212" +
|
||||
"010013020714010A15028B16" +
|
||||
"01001901001B020720010200" +
|
||||
"7F4533430101010001000000" +
|
||||
"010064000101000000000101" +
|
||||
"016100010100010161000140" +
|
||||
"00001A0009FE028404010005" +
|
||||
"048C0602840802070B01000E" +
|
||||
"02840F010011020700010001" +
|
||||
"010000000100610001640001" +
|
||||
"61004000001B001306048607" +
|
||||
"01000802070901000A02840B" +
|
||||
"02840C02840D028413010014" +
|
||||
"0486150486160486FE028400" +
|
||||
"020701010002048603010004" +
|
||||
"048605048600010000000161" +
|
||||
"000101000100640001000101" +
|
||||
"000000010000000100000001" +
|
||||
"006100016400000001010000" +
|
||||
"00010000004000001C000700" +
|
||||
"028401028402048C03048604" +
|
||||
"010005010006048600010001" +
|
||||
"00010000007F453343010101" +
|
||||
"0000004000001E000EFD0486" +
|
||||
"000284010284020284030284" +
|
||||
"040284050284070284080102" +
|
||||
"0902840A01020B01020C0284" +
|
||||
"0D0284007F45334364006400" +
|
||||
"640064006400640004000104" +
|
||||
"00010101000A004000001F00" +
|
||||
"0404010005020706048C0701" +
|
||||
"000001610001000000014000" +
|
||||
"00200008FE02840104860204" +
|
||||
"850304850404860501000602" +
|
||||
"070801000001007F45334301" +
|
||||
"000000010000006400000001" +
|
||||
"61000140000021000AFE0284" +
|
||||
"FD0486000486010486020486" +
|
||||
"030100040486050284060486" +
|
||||
"0901020001007F4533430100" +
|
||||
"000001000000010000000101" +
|
||||
"000000010001000000014000" +
|
||||
"00220008FD04860004860102" +
|
||||
"840201000301000401000504" +
|
||||
"86060102007F453343E80300" +
|
||||
"000100010301010000000140" +
|
||||
"0000230003FE028403028405" +
|
||||
"020700010064006100400000" +
|
||||
"250006FE028400010001010A" +
|
||||
"020207030284040486000100" +
|
||||
"020161000100010000004000" +
|
||||
"00260005FE02840001000102" +
|
||||
"840201000302840001000201" +
|
||||
"00010100400000270005FE02" +
|
||||
"840001000102840201020302" +
|
||||
"840001000201000101004000" +
|
||||
"003100020002840101020001" +
|
||||
"000140000033000BFD048600" +
|
||||
"028401028402028403028404" +
|
||||
"028405028406010207010008" +
|
||||
"0100090284007F4533430100" +
|
||||
"010001000100010001000101" +
|
||||
"010100400000350003FE0284" +
|
||||
"000284010207000100E80361" +
|
||||
"0040000037001C220284FD04" +
|
||||
"860001020102840204860304" +
|
||||
"860404860501000601000701" +
|
||||
"000802840902840A02840B04" +
|
||||
"860C02830E02830F02831302" +
|
||||
"8418010D1901021A02841B01" +
|
||||
"021C01021D02841E04861F04" +
|
||||
"862004862102840001007F45" +
|
||||
"334301010064000000020000" +
|
||||
"00E803000001010101000100" +
|
||||
"010001000000640064006400" +
|
||||
"010001010100010A01000100" +
|
||||
"0000E8030000E80300000100" +
|
||||
"400000480006FD0486000100" +
|
||||
"01028402028403048C040486" +
|
||||
"007F45334302010001000100" +
|
||||
"00007F4533434000004E0000" +
|
||||
"00400000500004FD04860002" +
|
||||
"8401010D030102007F453343" +
|
||||
"00800101400000510004FD04" +
|
||||
"8600028401010D030102007F" +
|
||||
"453343008001014000005200" +
|
||||
"0500010201010A02028B0301" +
|
||||
"0A0401020001010100010140" +
|
||||
"0000650014FE0284FD048600" +
|
||||
"010001010002048603048604" +
|
||||
"048605028406028407010009" +
|
||||
"01020A01020B02840C010012" +
|
||||
"028413028416028417028418" +
|
||||
"01021901020001007F453343" +
|
||||
"03017F453343E8030000E803" +
|
||||
"00000100E803010101010001" +
|
||||
"010001006400640001014000" +
|
||||
"00670003FD04860004860502" +
|
||||
"84007F453343010000000100" +
|
||||
"400000690000004000006A00" +
|
||||
"020002840102840001000100" +
|
||||
"4000007F000D000100010100" +
|
||||
"020100030207040100050100" +
|
||||
"060100070100080100090100" +
|
||||
"0A01000B01000C0100000101" +
|
||||
"016100010101010101010101" +
|
||||
"400000800010FD0486000100" +
|
||||
"010101020100030284040284" +
|
||||
"050102060101070102080207" +
|
||||
"0904860A04850B04850C0100" +
|
||||
"0D01010E0101007F45334301" +
|
||||
"01010100E80301010161007F" +
|
||||
"453343010000000100000001" +
|
||||
"0101400000810006FD048600" +
|
||||
"020701048602048603010004" +
|
||||
"0100007F45334361007F4533" +
|
||||
"437F45334301014000008300" +
|
||||
"03FE02840001020102070001" +
|
||||
"00016100400000840003FD04" +
|
||||
"86000284010102007F453343" +
|
||||
"0080FF4000008E0053540488" +
|
||||
"550488560488570488590102" +
|
||||
"5A01025B04865C04865D0486" +
|
||||
"3902843A01003B01023C0102" +
|
||||
"3D01023E01023F0102400100" +
|
||||
"410207420102430102440102" +
|
||||
"450284460284470486480284" +
|
||||
"4901014A01015302841C0485" +
|
||||
"1D02071E02841F0284200100" +
|
||||
"210486220284230284240102" +
|
||||
"250283260283270283280283" +
|
||||
"2902832A01012B01012C0486" +
|
||||
"2D02832E02832F0283300283" +
|
||||
"350284360284370102380486" +
|
||||
"FE0284FD0486000100010100" +
|
||||
"020486030485040485050485" +
|
||||
"060485070486080486090486" +
|
||||
"0A04860B02840C02840D0284" +
|
||||
"0E02840F0102100102110102" +
|
||||
"120102130284140284150284" +
|
||||
"160284170100180102190485" +
|
||||
"1A04851B0485000000803F00" +
|
||||
"00803F0000803F0000803F64" +
|
||||
"64C9090000C9090000C90900" +
|
||||
"000100010202020202016100" +
|
||||
"80808001000100E803000001" +
|
||||
"000101010001000000610001" +
|
||||
"0001000101000000C909C909" +
|
||||
"016400640064006400640001" +
|
||||
"01E8030000E803E803E803E8" +
|
||||
"030100C90901E80300000100" +
|
||||
"7F45334303017F4533430100" +
|
||||
"000001000000010000000100" +
|
||||
"0000E8030000E80300006400" +
|
||||
"00000100000001000100E803" +
|
||||
"E80301010101010001000100" +
|
||||
"010001010100000001000000" +
|
||||
"01000000400000910004FA04" +
|
||||
"860102840202840301020001" +
|
||||
"000000010001000140000094" +
|
||||
"000900020701020702010003" +
|
||||
"010004048605048606010207" +
|
||||
"010008010000610061000101" +
|
||||
"010000000100000001010140" +
|
||||
"0000950007FE028400020701" +
|
||||
"010002048603048604048605" +
|
||||
"020700010061000101000000" +
|
||||
"01000000E803000061004000" +
|
||||
"00960006FE02840104850204" +
|
||||
"850304860402840604860001" +
|
||||
"000100000001000000640000" +
|
||||
"00C909C90900004000009700" +
|
||||
"05FE02840102070301000404" +
|
||||
"860B01020001006100010100" +
|
||||
"0000014000009E0007FE0284" +
|
||||
"000100010100020284030284" +
|
||||
"040284050100000100010101" +
|
||||
"0001006400014000009F0003" +
|
||||
"FE028400010001010D000100" +
|
||||
"0101400000A00008FD048600" +
|
||||
"028401048502048503048604" +
|
||||
"0486050284060486007F4533" +
|
||||
"4301000100000001000000C9" +
|
||||
"090000E803000064007F4533" +
|
||||
"43400000A10005FD04860002" +
|
||||
"84010100020207030100007F" +
|
||||
"453343010001610001400000" +
|
||||
"A20007FD0486000284010486" +
|
||||
"020284030486040284050284" +
|
||||
"007F45334300807F45334300" +
|
||||
"800100000001000100400000" +
|
||||
"A40002FD0486000284007F45" +
|
||||
"33430100400000A50002FD04" +
|
||||
"86000284007F453343010040" +
|
||||
"0000A70005FD048600010001" +
|
||||
"0486020486030486007F4533" +
|
||||
"430101000000010000000100" +
|
||||
"0000400000A90003FD048600" +
|
||||
"0284010486007F4533430100" +
|
||||
"01000000400000AE0005FD04" +
|
||||
"8600028402010D0604860702" +
|
||||
"84007F4533430100017F4533" +
|
||||
"430100400000B10003FD0486" +
|
||||
"000284010207007F45334301" +
|
||||
"006100400000B20002FD0486" +
|
||||
"000284007F45334301004000" +
|
||||
"00B800030002070102070204" +
|
||||
"860061006100010000004000" +
|
||||
"00B90003FE02840002840102" +
|
||||
"0700010001006100400000BA" +
|
||||
"0003FE028400028401020700" +
|
||||
"010001006100400000BB0007" +
|
||||
"000284010486020284030486" +
|
||||
"040284060486070486000100" +
|
||||
"7F45334301007F4533430100" +
|
||||
"0100000001000000400000BC" +
|
||||
"0002FD0486000100007F4533" +
|
||||
"4301400000C8000400010201" +
|
||||
"010202010003010000010101" +
|
||||
"01400000C900050001020101" +
|
||||
"0D0201020301020401000001" +
|
||||
"01010101400000CA000B0001" +
|
||||
"0201010D0201020301020401" +
|
||||
"020501020601020801000901" +
|
||||
"000A01000B01000001010101" +
|
||||
"01010101010101400000CE00" +
|
||||
"0C0001020101020201020401" +
|
||||
"020502070601020701010902" +
|
||||
"070A02070D02840E02840F01" +
|
||||
"020001010101610001016100" +
|
||||
"61000100010001400000CF00" +
|
||||
"030202840301020404860001" +
|
||||
"000101000000400000D00002" +
|
||||
"FD0486000284007F45334301" +
|
||||
"00400000D10002FD04860002" +
|
||||
"84007F4533430100400000D2" +
|
||||
"0006FD048600010001048602" +
|
||||
"0486030486040485007F4533" +
|
||||
"430101000000010000000100" +
|
||||
"000001000000400000D30003" +
|
||||
"FD0486000102010102007F45" +
|
||||
"33430101400000D80009FD04" +
|
||||
"860002840102840A01000B01" +
|
||||
"020C01020D01020E01000F02" +
|
||||
"84007F453343010001000101" +
|
||||
"0101010100400000E10009FE" +
|
||||
"048600048603028404028405" +
|
||||
"01020604860902840A02840B" +
|
||||
"0284007F453343E803000001" +
|
||||
"001000017F45334301000100" +
|
||||
"0100400000E3000200028301" +
|
||||
"04860001007F453343400000" +
|
||||
"E50008000486020284050100" +
|
||||
"0601000801000901000C0100" +
|
||||
"0D0100007F4533430A000101" +
|
||||
"010101014000000201231A01" +
|
||||
"021B04861D01001E01002301" +
|
||||
"00240102250100FD0486FE02" +
|
||||
"840002070101000201020301" +
|
||||
"020401000504880601020701" +
|
||||
"020801020901000A04880B04" +
|
||||
"860C01000D04860E01000F01" +
|
||||
"021001021102841202841301" +
|
||||
"001401021502841601001701" +
|
||||
"021804861901000064E80300" +
|
||||
"000101010A017F4533430100" +
|
||||
"6100FF0101010000803F6464" +
|
||||
"64010000803F010000000101" +
|
||||
"000000010101010001000101" +
|
||||
"01000164E803000001400000" +
|
||||
"030105FE0284000102010102" +
|
||||
"020100030100000100010101" +
|
||||
"0140000006010CFE02840004" +
|
||||
"860104850201000301000401" +
|
||||
"000604860701000801000901" +
|
||||
"000A01000B0485000100E803" +
|
||||
"000001000000010101010000" +
|
||||
"0001010101E8030000400000" +
|
||||
"080103FE0284000284010284" +
|
||||
"000100010001004000000C01" +
|
||||
"17FD04860002840102840204" +
|
||||
"860304860404860501020601" +
|
||||
"020702840802840902840A04" +
|
||||
"860B04860C02840D02840E02" +
|
||||
"840F04861004861104851604" +
|
||||
"86170486180486190486007F" +
|
||||
"45334301000100E8030000E8" +
|
||||
"030000010000000101010001" +
|
||||
"00010001000000E803000064" +
|
||||
"0064006400E8030000E80300" +
|
||||
"00E8030000E8030000E80300" +
|
||||
"00E8030000E8030000400000" +
|
||||
"0D0104FD0486000102010102" +
|
||||
"020100007F45334301010140" +
|
||||
"0000130102FD048600010000" +
|
||||
"7F453343014000001D010AFD" +
|
||||
"048600048801048802010203" +
|
||||
"048804048805048506048507" +
|
||||
"0284080486007F4533430000" +
|
||||
"803F0000803F010000803F00" +
|
||||
"00803F0100000001000000E8" +
|
||||
"03E8030000400000210106FD" +
|
||||
"048600028401048602028403" +
|
||||
"0102040284007F4533430100" +
|
||||
"010000000100011900400000" +
|
||||
"220102FD0486000284007F45" +
|
||||
"33430100400000290102FD04" +
|
||||
"86000283007F453343640040" +
|
||||
"00002E0104FD048600028401" +
|
||||
"0284050486007F4533430100" +
|
||||
"010001000000400000300102" +
|
||||
"FD0486000284007F45334301" +
|
||||
"00400000310102FD04860002" +
|
||||
"84007F453343010040000032" +
|
||||
"0102FD0486000284007F4533" +
|
||||
"430100400000330102FD0486" +
|
||||
"000284007F45334301004000" +
|
||||
"00340103FD04860002840101" +
|
||||
"02007F453343010001400000" +
|
||||
"380113FE0284000100010486" +
|
||||
"020486030486040486090486" +
|
||||
"0D02840E0284150485160485" +
|
||||
"1704851804851904861A0485" +
|
||||
"1B04861C04864A04866E0486" +
|
||||
"00010002E8030000E8030000" +
|
||||
"64000000E80300007F453343" +
|
||||
"010001000100000001000000" +
|
||||
"0100000001000000E8030000" +
|
||||
"E80300007F45334301000000" +
|
||||
"C9090000E803000040000039" +
|
||||
"010EFE028400010003028404" +
|
||||
"048605048606048607048608" +
|
||||
"02840902840A01020B01020C" +
|
||||
"04850D04864D048600010002" +
|
||||
"0100E803000064000000E803" +
|
||||
"0000E8030000010001000101" +
|
||||
"E803000001000000E8030000" +
|
||||
"4000003A0102FD0486000284" +
|
||||
"007F45334301004000003B01" +
|
||||
"02FD0486000102007F453343" +
|
||||
"014000003D0107FD04860004" +
|
||||
"850104850201000302840401" +
|
||||
"02050488007F453343010000" +
|
||||
"000100000001010001000080" +
|
||||
"3F4000003F0103FD04860004" +
|
||||
"8C010284007F453343010000" +
|
||||
"006400400000430105FD0486" +
|
||||
"00048C010284020284030486" +
|
||||
"007F45334301000000640064" +
|
||||
"00640000004000005A010E00" +
|
||||
"010201010202010203010204" +
|
||||
"010205010206010207010208" +
|
||||
"01020901020A01020B01020E" +
|
||||
"01020F028400010101010101" +
|
||||
"010101010101016400400000" +
|
||||
"720108FD0486000284010284" +
|
||||
"020284030284040284050284" +
|
||||
"060100007F45334380008000" +
|
||||
"800080008000800001400000" +
|
||||
"730102FD0486000284007F45" +
|
||||
"33438000400000740102FD04" +
|
||||
"86000284007F453343010040" +
|
||||
"0000770105FD048600010201" +
|
||||
"0284020102030102007F4533" +
|
||||
"430100010101400000780104" +
|
||||
"FD0486000284010284050486" +
|
||||
"007F45334301000100010000" +
|
||||
"00400000830108FD04860004" +
|
||||
"860104860204860302840401" +
|
||||
"00050486060486007F453343" +
|
||||
"E8030000E8030000E8030000" +
|
||||
"0100010A000000E803000040" +
|
||||
"0000840103FD048600048601" +
|
||||
"0284007F453343E803000001" +
|
||||
"00400000850102FD04860101" +
|
||||
"02007F453343014000008901" +
|
||||
"0CFE02840004860104850201" +
|
||||
"000301000401000604860701" +
|
||||
"000801000901000A01000B04" +
|
||||
"85000100E803000001000000" +
|
||||
"0101010100000001010101E8" +
|
||||
"0300004000008E0105FD0486" +
|
||||
"000486010488020488040488" +
|
||||
"007F45334301000000000080" +
|
||||
"3F0000803F0000803F400000" +
|
||||
"990102FD0486000284007F45" +
|
||||
"33430100E881"
|
||||
);
|
||||
String expectedOutput =
|
||||
"[FitFileId{type=ACTIVITY, manufacturer=255, product=65534, serial_number=1, time_created=1758499199, number=42, product_name=GadgetBridge}, " +
|
||||
"FitCapabilities{workouts_supported=1, connectivity_supported=1}, " +
|
||||
"FitDeviceSettings{active_time_zone=1, utc_offset=1, backlight_mode=1, activity_tracker_enabled=1, clock_time=1127433599, move_alert_enabled=1, date_mode=1, display_orientation=1, mounting_side=1, autosync_min_steps=1, autosync_min_time=1, lactate_threshold_autodetect_enabled=1, ble_auto_upload_enabled=1, auto_sync_frequency=1, auto_activity_detect=1, number_of_screens=1, smart_notification_display_orientation=1, tap_interface=1, tap_sensitivity=1}, " +
|
||||
"FitUserProfile{friendly_name=a, gender=1, age=1, height=100, weight=1.0, language=french, elev_setting=imperial, weight_setting=imperial, resting_heart_rate=1, default_max_running_heart_rate=1, default_max_biking_heart_rate=1, default_max_heart_rate=1, hr_setting=1, speed_setting=imperial, dist_setting=imperial, power_setting=1, activity_class=127, position_setting=1, temperature_setting=imperial, local_id=1, wake_time=1, sleep_time=1, height_setting=imperial, user_running_step_length=1000, user_walking_step_length=1000, depth_setting=imperial, dive_count=1, message_index=1}, " +
|
||||
"FitHrmProfile{enabled=true, hrm_ant_id=1, log_hrv=1, hrm_ant_id_trans_type=1, message_index=1}, " +
|
||||
"FitSdmProfile{enabled=true, sdm_ant_id=1, sdm_cal_factor=1.0, odometer=1.0, speed_source=1, sdm_ant_id_trans_type=1, odometer_rollover=1, message_index=1}, " +
|
||||
"FitBikeProfile{name=a, sport=1, sub_sport=1, odometer=1.0, bike_spd_ant_id=1, bike_cad_ant_id=1, bike_spdcad_ant_id=1, bike_power_ant_id=1, custom_wheelsize=1.0, auto_wheelsize=1.0, bike_weight=1.0, power_cal_factor=1.0, auto_wheel_cal=true, auto_power_zero=true, id=1, spd_enabled=true, cad_enabled=true, spdcad_enabled=true, power_enabled=true, enabled=true, bike_spd_ant_id_trans_type=1, bike_cad_ant_id_trans_type=1, bike_spdcad_ant_id_trans_type=1, bike_power_ant_id_trans_type=1, odometer_rollover=1, front_gear_num=1, rear_gear_num=1, shimano_di2_enabled=true, message_index=1}, " +
|
||||
"FitZonesTarget{max_heart_rate=1, threshold_heart_rate=1, functional_threshold_power=1, hr_calc_type=1, pwr_calc_type=1}, " +
|
||||
"FitHrZone{high_bpm=1, name=a, message_index=1}, " +
|
||||
"FitPowerZone{high_value=1, name=a, message_index=1}, " +
|
||||
"FitMetZone{high_bpm=1, calories=1.0, fat_calories=1.0, message_index=1}, " +
|
||||
"FitSport{sport=1, sub_sport=1, name=a}, " +
|
||||
"FitTrainingSettings{target_distance=1.0, target_speed=1.0, target_time=1, precise_target_speed=1.0}, " +
|
||||
"FitGoals{sport=1, sub_sport=1, start_date=1127433599, end_date=1127433599, type=distance, value=1, repeat=1, target_value=1, recurrence=1, recurrence_value=1, enabled=1, source=community, message_index=1}, " +
|
||||
"FitSession{2025-09-22 01:59:59.000, event=3, event_type=1, start_time=1127433599, start_latitude=8.381903171539307E-8, start_longitude=8.381903171539307E-8, sport=1, sub_sport=1, total_elapsed_time=1000, total_timer_time=1000, total_distance=100, total_cycles=1, total_calories=1, total_fat_calories=1, avg_speed=1.0, max_speed=1.0, average_heart_rate=1, max_heart_rate=1, avg_cadence=1, max_cadence=1, avg_power=1, max_power=1, total_ascent=1, total_descent=1, total_training_effect=1.0, first_lap_index=1, num_laps=1, event_group=1, trigger=1, nec_latitude=8.381903171539307E-8, nec_longitude=8.381903171539307E-8, swc_latitude=8.381903171539307E-8, swc_longitude=8.381903171539307E-8, num_lengths=1, normalized_power=1, training_stress_score=1.0, intensity_factor=1.0, left_right_balance=1, end_latitude=8.381903171539307E-8, end_longitude=8.381903171539307E-8, avg_stroke_count=10, avg_stroke_distance=1.0, swim_stroke=1, pool_length=1.0, threshold_power=1, pool_length_unit=1, num_active_lengths=1, total_work=1, avg_altitude=1.0, max_altitude=1.0, gps_accuracy=1, avg_grade=1.0, avg_pos_grade=1.0, avg_neg_grade=1.0, max_pos_grade=1.0, max_neg_grade=1.0, avg_temperature=1, max_temperature=1, total_moving_time=1.0, avg_pos_vertical_speed=1.0, avg_neg_vertical_speed=1.0, max_pos_vertical_speed=1.0, max_neg_vertical_speed=1.0, min_heart_rate=1, avg_lap_time=1.0, best_lap_index=1, min_altitude=1.0, player_score=1, opponent_score=1, opponent_name=a, max_ball_speed=1.0, avg_ball_speed=1.0, avg_vertical_oscillation=1.0, avg_stance_time_percent=1.0, avg_stance_time=1.0, avg_fractional_cadence=1.0, max_fractional_cadence=1.0, total_fractional_cycles=1.0, avg_left_torque_effectiveness=1.0, avg_right_torque_effectiveness=1.0, avg_left_pedal_smoothness=1.0, avg_right_pedal_smoothness=1.0, avg_combined_pedal_smoothness=1.0, sport_profile_name=a, sport_index=1, stand_time=1000, stand_count=1, avg_left_pco=1, avg_right_pco=1, enhanced_avg_speed=1.0, enhanced_max_speed=1.0, enhanced_avg_altitude=1.0, enhanced_min_altitude=1.0, enhanced_max_altitude=1.0, avg_lev_motor_power=1, max_lev_motor_power=1, lev_battery_consumption=1.0, avg_vertical_ratio=1.0, avg_stance_time_balance=1.0, avg_step_length=1.0, total_anaerobic_training_effect=1.0, avg_vam=1.0, avg_depth=1.0, max_depth=1.0, surface_interval=1, start_cns=1, end_cns=1, start_n2=1, end_n2=1, avg_respiration_rate=1, max_respiration_rate=1, min_respiration_rate=1, min_temperature=1, o2_toxicity=1, dive_number=1, training_load_peak=1.0, enhanced_avg_respiration_rate=1.0, enhanced_max_respiration_rate=1.0, enhanced_min_respiration_rate=1.0, total_grit=1.0, total_flow=1.0, jump_count=1, avg_grit=1.0, avg_flow=1.0, workout_feel=1, workout_rpe=1, avg_spo2=1, avg_stress=1, hrv_sdrr=1, hrv_rmssd=1, total_fractional_ascent=1.0, total_fractional_descent=1.0, avg_core_temperature=1.0, min_core_temperature=1.0, max_core_temperature=1.0, timestamp=1758499199, message_index=1}, " +
|
||||
"FitLap{2025-09-22 01:59:59.000, event=3, event_type=1, start_time=1127433599, start_lat=8.381903171539307E-8, start_long=8.381903171539307E-8, end_lat=8.381903171539307E-8, end_long=8.381903171539307E-8, total_elapsed_time=1.0, total_timer_time=1.0, total_distance=1.0, total_cycles=1, total_calories=1, total_fat_calories=1, avg_speed=1.0, max_speed=1.0, avg_heart_rate=1, max_heart_rate=1, avg_cadence=1, max_cadence=1, avg_power=1, max_power=1, total_ascent=1, total_descent=1, intensity=1, lap_trigger=1, sport=1, event_group=1, num_lengths=1, normalized_power=1, left_right_balance=1, first_length_index=1, avg_stroke_distance=100, swim_style=BACKSTROKE, sub_sport=1, num_active_lengths=1, total_work=1, avg_altitude=1.0, max_altitude=1.0, gps_accuracy=1, avg_grade=1.0, avg_pos_grade=1.0, avg_neg_grade=1.0, max_pos_grade=1.0, max_neg_grade=1.0, avg_temperature=1, max_temperature=1, total_moving_time=1.0, avg_pos_vertical_speed=1.0, avg_neg_vertical_speed=1.0, max_pos_vertical_speed=1.0, max_neg_vertical_speed=1.0, repetition_num=1, min_altitude=1.0, min_heart_rate=1, wkt_step_index=1, opponent_score=1, avg_vertical_oscillation=1.0, avg_stance_time_percen=1.0, avg_stance_time=1.0, avg_fractional_cadence=1.0, max_fractional_cadence=1.0, total_fractional_cycles=1.0, player_score=1, avg_left_torque_effectiveness=1.0, avg_right_torque_effectiveness=1.0, avg_left_pedal_smoothness=1.0, avg_right_pedal_smoothness=1.0, avg_combined_pedal_smoothness=1.0, time_standing=1.0, stand_count=1, avg_left_pco=1, avg_right_pco=1, enhanced_avg_speed=10.0, enhanced_max_speed=10.0, enhanced_avg_altitude=1.0, enhanced_min_altitude=1.0, enhanced_max_altitude=1.0, avg_lev_motor_power=1, max_lev_motor_power=1, lev_battery_consumption=1.0, avg_vertical_ratio=1.0, avg_stance_time_balance=1.0, avg_step_length=1.0, avg_vam=1.0, avg_depth=1.0, max_depth=1.0, min_temperature=1, enhanced_avg_respiration_rate=1.0, enhanced_max_respiration_rate=1.0, avg_respiration_rate=1, max_respiration_rate=1, total_grit=1.0, total_flow=1.0, jump_count=1, avg_grit=1.0, avg_flow=1.0, total_fractional_ascent=1.0, total_fractional_descent=1.0, avg_core_temperature=1.0, min_core_temperature=1.0, max_core_temperature=1.0, timestamp=1758499199, message_index=1}, " +
|
||||
"FitRecord{2025-09-22 01:59:59.000, latitude=8.381903171539307E-8, longitude=8.381903171539307E-8, altitude=1.0, heart_rate=1, cadence=1, distance=1.0, speed=1.0, power=1, grade=1.0, resistance=1, time_from_course=1.0, cycle_length=1.0, temperature=1, cycles=1, total_cycles=1, compressed_accumulated_power=1, accumulated_power=1, left_right_balance=1, gps_accuracy=1, vertical_speed=1.0, calories=1, oscillation=1.0, stance_time_percent=1.0, stance_time=1.0, activity=1, left_torque_effectiveness=1.0, right_torque_effectiveness=1.0, left_pedal_smoothness=1.0, right_pedal_smoothness=1.0, combined_pedal_smoothness=1.0, time128=1.0, stroke_type=1, zone=1, ball_speed=1.0, cadence256=1.0, fractional_cadence=1.0, avg_total_hemoglobin_conc=1.0, min_total_hemoglobin_conc=1.0, max_total_hemoglobin_conc=1.0, avg_saturated_hemoglobin_percent=1.0, min_saturated_hemoglobin_percent=1.0, max_saturated_hemoglobin_percent=1.0, device_index=1, left_pco=1, right_pco=1, enhanced_speed=1.0, enhanced_altitude=1.0, battery_soc=1.0, motor_power=1, vertical_ratio=1.0, stance_time_balance=1.0, step_length=1.0, cycle_length16=1.0, absolute_pressure=1, depth=1.0, next_stop_depth=1.0, next_stop_time=1, time_to_surface=1, ndl_time=1, cns_load=1, n2_load=1, respiration_rate=1, enhanced_respiration_rate=100, grit=1.0, flow=1.0, current_stress=1.0, ebike_travel_rang=1, ebike_battery_level=1, ebike_assist_mode=1, ebike_assist_level_percent=1, air_time_remaining=1, pressure_sac=1.0, volume_sac=1.0, rmv=1.0, ascent_rate=1.0, po2=1.0, core_temperature=1.0, timestamp=1758499199}, " +
|
||||
"FitEvent{2025-09-22 01:59:59.000, event=3, event_type=1, data16=1, data=1, event_group=1, score=1, opponent_score=1, front_gear_num=1, front_gear=1, rear_gear_num=1, rear_gear=1, device_index=1, activity_type=1, start_timestamp=1127433599, radar_threat_level_max=1, radar_threat_count=1, radar_threat_avg_approach_speed=1.0, radar_threat_max_approach_speed=1.0, timestamp=1758499199}, " +
|
||||
"FitDeviceInfo{2025-09-22 01:59:59.000, device_index=1, device_type=1, manufacturer=1, serial_number=1, product=1, software_version=100, hardware_version=1, cum_operating_time=1, battery_voltage=1.0, battery_status=1, sensor_position=1, descriptor=a, ant_transmission_type=1, ant_device_number=1, ant_network=1, source_type=1, product_name=a, battery_level=1, timestamp=1758499199}, " +
|
||||
"FitWorkout{2025-09-22 01:59:59.000, sport=1, capabilities=1, num_valid_steps=1, name=a, sub_sport=1, pool_length=1.0, pool_length_unit=1, notes=a, message_index=1}, " +
|
||||
"FitWorkoutStep{2025-09-22 01:59:59.000, wkt_step_name=a, duration_type=1, duration_value=100, target_type=1, target_value=1, custom_target_value_low=1, custom_target_value_high=1, intensity=1, notes=a, equipment=1, exercise_category=1, exercise_name=1, exercise_weight=1.0, weight_display_unit=1, secondary_target_type=1, secondary_target_value=1, secondary_custom_target_value_low=1, secondary_custom_target_value_high=1, message_index=1}, " +
|
||||
"FitSchedule{2025-09-22 01:59:59.000, manufacturer=1, product=1, serial_number=1, time_created=1127433599, completed=true, type=1, scheduled_time=1}, " +
|
||||
"FitWeightScale{2025-09-22 01:59:59.000, weight=1.0, percent_fat=1.0, percent_hydration=1.0, visceral_fat_mass=1.0, bone_mass=1.0, muscle_mass=1.0, basal_met=1.0, physique_rating=1, active_met=1.0, metabolic_age=1, visceral_fat_rating=1, user_profile_index=1, bmi=1.0, timestamp=1758499199}, " +
|
||||
"FitCourse{2025-09-22 01:59:59.000, sport=1, name=a, capabilities=1, sub_sport=1}, " +
|
||||
"FitCoursePoint{2025-09-22 01:59:59.000, timestamp=1758499199, position_lat=8.381903171539307E-8, position_long=8.381903171539307E-8, distance=1.0, type=1, name=a, favorite=1, message_index=1}, " +
|
||||
"FitTotals{2025-09-22 01:59:59.000, timer_time=1, distance=1, calories=1, sport=1, elapsed_time=1, sessions=1, active_time=1, sport_index=1, timestamp=1758499199, message_index=1}, " +
|
||||
"FitActivity{2025-09-22 01:59:59.000, total_timer_time=1000, num_sessions=1, type=1, event=3, event_type=1, local_timestamp=1, event_group=1, timestamp=1758499199}, " +
|
||||
"FitSoftware{2025-09-22 01:59:59.000, version=1.0, part_number=a, message_index=1}, " +
|
||||
"FitFileCapabilities{2025-09-22 01:59:59.000, type=2, flags=1, directory=a, max_count=1, max_size=1, message_index=1}, " +
|
||||
"FitMesgCapabilities{2025-09-22 01:59:59.000, file=2, mesg_num=1, count_type=1, max_count=1, message_index=1}, " +
|
||||
"FitFieldCapabilities{2025-09-22 01:59:59.000, file=2, mesg_num=1, field_num=1, count=1, message_index=1}, " +
|
||||
"FitFileCreator{2025-09-22 01:59:59.000, software_version=1, hardware_version=1}, " +
|
||||
"FitBloodPressure{2025-09-22 01:59:59.000, systolic_pressure=1, diastolic_pressure=1, mean_arterial_pressure=1, map_3_sample_mean=1, map_morning_values=1, map_evening_values=1, heart_rate=1, heart_rate_type=1, status=1, user_profile_index=1, timestamp=1758499199}, " +
|
||||
"FitSpeedZone{2025-09-22 01:59:59.000, high_value=1.0, name=a, message_index=1}, " +
|
||||
"FitMonitoring{2025-09-22 01:59:59.000, device_index=1, calories=1, distance=100, cycles=2, active_time=1000, activity_type=1, activity_subtype=1, activity_level=1, distance_16=1, cycles_16=1, active_time_16=1, local_timestamp=1, temperature=1.0, temperature_min=1.0, temperature_max=1.0, active_calories=1, current_activity_type_intensity=1, timestamp_min_8=1, timestamp_16=1, heart_rate=1, intensity=1.0, duration_min=1, duration=1, ascent=1.0, descent=1.0, moderate_activity_minutes=1, vigorous_activity_minutes=1, timestamp=1758499199}, " +
|
||||
"FitTrainingFile{2025-09-22 01:59:59.000, type=2, manufacturer=1, product=1, serial_number=1, time_created=1127433599, timestamp=1758499199}, " +
|
||||
"FitHrv{2025-09-22 01:59:59.000}, " +
|
||||
"FitAntRx{2025-09-22 01:59:59.000, fractional_timestamp=1.0, mesg_id=1, channel_number=1, timestamp=1758499199}, " +
|
||||
"FitAntTx{2025-09-22 01:59:59.000, fractional_timestamp=1.0, mesg_id=1, channel_number=1, timestamp=1758499199}, " +
|
||||
"FitAntChannelId{2025-09-22 01:59:59.000, channel_number=1, device_type=1, device_number=1, transmission_type=1, device_index=1}, " +
|
||||
"FitLength{2025-09-22 01:59:59.000, event=3, event_type=1, start_time=1127433599, total_elapsed_time=1.0, total_timer_time=1.0, total_strokes=1, avg_speed=1.0, swim_stroke=1, avg_swimming_cadence=1, event_group=1, total_calories=1, length_type=1, player_score=1, opponent_score=1, enhanced_avg_respiration_rate=0.1, enhanced_max_respiration_rate=0.1, avg_respiration_rate=1, max_respiration_rate=1, timestamp=1758499199, message_index=1}, " +
|
||||
"FitMonitoringInfo{2025-09-22 01:59:59.000, local_timestamp=1, resting_metabolic_rate=1, timestamp=1758499199}, " +
|
||||
"FitPad{2025-09-22 01:59:59.000}, " +
|
||||
"FitSlaveDevice{2025-09-22 01:59:59.000, manufacturer=1, product=1}, " +
|
||||
"FitConnectivity{2025-09-22 01:59:59.000, bluetooth_enabled=1, bluetooth_le_enabled=1, ant_enabled=1, name=a, live_tracking_enabled=1, weather_conditions_enabled=1, weather_alerts_enabled=1, auto_activity_upload_enabled=1, course_download_enabled=1, workout_download_enabled=1, gps_ephemeris_download_enabled=1, incident_detection_enabled=1, grouptrack_enabled=1}, " +
|
||||
"FitWeather{2025-09-22 01:59:59.000, weather_report=1, temperature=274, condition=PARTLY_CLOUDY, wind_direction=1, wind_speed=3.3557048, precipitation_probability=1, temperature_feels_like=274, relative_humidity=1, location=a, observed_at_time=1758499199, observed_location_lat=1, observed_location_long=1, day_of_week=MONDAY, high_temperature=274, low_temperature=274, timestamp=1758499199}, " +
|
||||
"FitWeatherAlert{2025-09-22 01:59:59.000, report_id=a, issue_time=1127433599, expire_time=1127433599, severity=1, type=1, timestamp=1758499199}, " +
|
||||
"FitCadenceZone{2025-09-22 01:59:59.000, high_value=1, name=a, message_index=1}, " +
|
||||
"FitHr{2025-09-22 01:59:59.000, fractional_timestamp=1.0, timestamp=1758499199}, " +
|
||||
"FitSegmentLap{2025-09-22 01:59:59.000, unknown_0(ENUM/1)=3, unknown_1(ENUM/1)=1, unknown_2(UINT32/4)=1127433599, start_position_lat=8.381903171539307E-8, start_position_long=8.381903171539307E-8, end_position_lat=8.381903171539307E-8, end_position_long=8.381903171539307E-8, unknown_7(UINT32/4)=1000, unknown_8(UINT32/4)=1000, total_distance=1.0, unknown_10(UINT32/4)=1, unknown_11(UINT16/2)=1, unknown_12(UINT16/2)=1, unknown_13(UINT16/2)=1000, unknown_14(UINT16/2)=1000, unknown_15(UINT8/1)=1, unknown_16(UINT8/1)=1, unknown_17(UINT8/1)=1, unknown_18(UINT8/1)=1, unknown_19(UINT16/2)=1, unknown_20(UINT16/2)=1, total_ascent=1, total_descent=1, sport=1, unknown_24(UINT8/1)=1, nec_lat=8.381903171539307E-8, nec_long=8.381903171539307E-8, swc_lat=8.381903171539307E-8, swc_long=8.381903171539307E-8, name=a, unknown_30(UINT16/2)=1, unknown_31(UINT16/2)=1, unknown_32(ENUM/1)=1, unknown_33(UINT32/4)=1, unknown_34(UINT16/2)=2505, unknown_35(UINT16/2)=2505, unknown_36(UINT8/1)=1, unknown_37(SINT16/2)=100, unknown_38(SINT16/2)=100, unknown_39(SINT16/2)=100, unknown_40(SINT16/2)=100, unknown_41(SINT16/2)=100, avg_temperature=1, max_temperature=1, unknown_44(UINT32/4)=1000, unknown_45(SINT16/2)=1000, unknown_46(SINT16/2)=1000, unknown_47(SINT16/2)=1000, unknown_48(SINT16/2)=1000, unknown_53(UINT16/2)=1, unknown_54(UINT16/2)=2505, unknown_55(UINT8/1)=1, unknown_56(UINT32/4)=1000, unknown_57(UINT16/2)=1, unknown_58(ENUM/1)=1, unknown_59(UINT8/1)=2, unknown_60(UINT8/1)=2, unknown_61(UINT8/1)=2, unknown_62(UINT8/1)=2, unknown_63(UINT8/1)=2, unknown_64(ENUM/1)=1, uuid=a, unknown_66(UINT8/1)=128, unknown_67(UINT8/1)=128, unknown_68(UINT8/1)=128, unknown_69(UINT16/2)=1, unknown_70(UINT16/2)=1, unknown_71(UINT32/4)=1000, unknown_72(UINT16/2)=1, unknown_73(SINT8/1)=1, unknown_74(SINT8/1)=1, unknown_83(UINT16/2)=1, unknown_84(FLOAT32/4)=1.0, unknown_85(FLOAT32/4)=1.0, unknown_86(FLOAT32/4)=1.0, unknown_87(FLOAT32/4)=1.0, total_fractional_ascent=1.0, total_fractional_descent=1.0, unknown_91(UINT32/4)=2505, unknown_92(UINT32/4)=2505, unknown_93(UINT32/4)=2505, timestamp=1758499199, message_index=1}, " +
|
||||
"FitMemoGlob{2025-09-22 01:59:59.000, mesg_num=1, parent_index=1, field_num=1, part_index=1}, " +
|
||||
"FitSegmentId{2025-09-22 01:59:59.000, name=a, uuid=a, sport=1, enabled=1, user_profile_primary_key=1, device_id=1, default_race_leader=1, delete_status=1, selection_type=1}, " +
|
||||
"FitSegmentLeaderboardEntry{2025-09-22 01:59:59.000, name=a, type=1, group_primary_key=1, activity_id=1, segment_time=1.0, activity_id_string=a, message_index=1}, " +
|
||||
"FitSegmentPoint{2025-09-22 01:59:59.000, position_lat=8.381903171539307E-8, position_long=8.381903171539307E-8, distance=1.0, altitude=1.0, enhanced_altitude=1.0, message_index=1}, " +
|
||||
"FitSegmentFile{2025-09-22 01:59:59.000, file_uuid=a, enabled=1, user_profile_primary_key=1, default_race_leader=1, message_index=1}, " +
|
||||
"FitWorkoutSession{2025-09-22 01:59:59.000, sport=1, sub_sport=1, num_valid_steps=1, first_step_index=1, pool_length=1.0, pool_length_unit=1, message_index=1}, " +
|
||||
"FitWatchfaceSettings{2025-09-22 01:59:59.000, mode=1, layout=1, message_index=1}, " +
|
||||
"FitGpsMetadata{2025-09-22 01:59:59.000, timestamp_ms=1, position_lat=8.381903171539307E-8, position_long=8.381903171539307E-8, enhanced_altitude=1.0, enhanced_speed=1.0, heading=1.0, utc_timestamp=1127433599, timestamp=1758499199}, " +
|
||||
"RecordData{UNK_161_camera_event, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, unknown_1(ENUM/1)=1, unknown_2(STRING/2)=a, unknown_3(ENUM/1)=1, 253_timestamp=1758499199}, " +
|
||||
"FitTimestampCorrelation{2025-09-22 01:59:59.000, fractional_timestamp=1.0, system_timestamp=1127433599, fractional_system_timestamp=1.0, local_timestamp=1, timestamp_ms=1, system_timestamp_ms=1, timestamp=1758499199}, " +
|
||||
"RecordData{UNK_164_gyroscope_data, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, 253_timestamp=1758499199}, " +
|
||||
"RecordData{UNK_165_accelerometer_data, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, 253_timestamp=1758499199}, " +
|
||||
"RecordData{UNK_167_three_d_sensor_calibration, 2025-09-22 01:59:59.000, unknown_0(ENUM/1)=1, unknown_1(UINT32/4)=1, unknown_2(UINT32/4)=1, unknown_3(UINT32/4)=1, 253_timestamp=1758499199}, " +
|
||||
"RecordData{UNK_169_video_frame, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, unknown_1(UINT32/4)=1, 253_timestamp=1758499199}, " +
|
||||
"RecordData{UNK_174_obdii_data, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, unknown_2(BASE_TYPE_BYTE/1)=1, unknown_6(UINT32/4)=1127433599, unknown_7(UINT16/2)=1, 253_timestamp=1758499199}, " +
|
||||
"RecordData{UNK_177_nmea_sentence, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, unknown_1(STRING/2)=a, 253_timestamp=1758499199}, " +
|
||||
"RecordData{UNK_178_aviation_attitude, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, 253_timestamp=1758499199}, " +
|
||||
"RecordData{UNK_184_video, 2025-09-22 01:59:59.000, unknown_0(STRING/2)=a, unknown_1(STRING/2)=a, unknown_2(UINT32/4)=1}, " +
|
||||
"RecordData{UNK_185_video_title, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, unknown_1(STRING/2)=a, unknown_254(UINT16/2)=1}, " +
|
||||
"RecordData{UNK_186_video_description, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, unknown_1(STRING/2)=a, unknown_254(UINT16/2)=1}, " +
|
||||
"RecordData{UNK_187_video_clip, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, unknown_1(UINT32/4)=1127433599, unknown_2(UINT16/2)=1, unknown_3(UINT32/4)=1127433599, unknown_4(UINT16/2)=1, unknown_6(UINT32/4)=1, unknown_7(UINT32/4)=1}, " +
|
||||
"FitOhrSettings{2025-09-22 01:59:59.000, enabled=1, timestamp=1758499199}, " +
|
||||
"RecordData{UNK_200_exd_screen_configuration, 2025-09-22 01:59:59.000, unknown_0(UINT8/1)=1, unknown_1(UINT8/1)=1, unknown_2(ENUM/1)=1, unknown_3(ENUM/1)=1}, " +
|
||||
"RecordData{UNK_201_exd_data_field_configuration, 2025-09-22 01:59:59.000, unknown_0(UINT8/1)=1, unknown_1(BASE_TYPE_BYTE/1)=1, unknown_2(UINT8/1)=1, unknown_3(UINT8/1)=1, unknown_4(ENUM/1)=1}, " +
|
||||
"RecordData{UNK_202_exd_data_concept_configuration, 2025-09-22 01:59:59.000, unknown_0(UINT8/1)=1, unknown_1(BASE_TYPE_BYTE/1)=1, unknown_2(UINT8/1)=1, unknown_3(UINT8/1)=1, unknown_4(UINT8/1)=1, unknown_5(UINT8/1)=1, unknown_6(UINT8/1)=1, unknown_8(ENUM/1)=1, unknown_9(ENUM/1)=1, unknown_10(ENUM/1)=1, unknown_11(ENUM/1)=1}, " +
|
||||
"FitFieldDescription{2025-09-22 01:59:59.000, developer_data_index=1, field_definition_number=1, fit_base_type_id=1, array=1, components=a, scale=1, offset=1, bits=a, accumulate=a, fit_base_unit_id=1, native_mesg_num=1, native_field_num=1}, " +
|
||||
"FitDeveloperData{2025-09-22 01:59:59.000, manufacturer_id=1, developer_data_index=1, application_version=1}, " +
|
||||
"RecordData{UNK_208_magnetometer_data, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, 253_timestamp=1758499199}, " +
|
||||
"FitBarometerData{2025-09-22 01:59:59.000, timestamp_ms=1, timestamp=1758499199}, " +
|
||||
"RecordData{UNK_210_one_d_sensor_calibration, 2025-09-22 01:59:59.000, unknown_0(ENUM/1)=1, unknown_1(UINT32/4)=1, unknown_2(UINT32/4)=1, unknown_3(UINT32/4)=1, unknown_4(SINT32/4)=1, 253_timestamp=1758499199}, " +
|
||||
"FitMonitoringHrData{2025-09-22 01:59:59.000, resting_heart_rate=1, current_day_resting_heart_rate=1, timestamp=1758499199}, " +
|
||||
"FitTimeInZone{2025-09-22 01:59:59.000, reference_message=1, reference_index=1, hr_calc_type=1, max_heart_rate=1, resting_heart_rate=1, threshold_heart_rate=1, pwr_calc_type=1, functional_threshold_power=1, timestamp=1758499199}, " +
|
||||
"FitSet{2025-09-22 01:59:59.000, duration=1.0, repetitions=1, weight=1.0, set_type=1, start_time=1758499199, weight_display_unit=1, message_index=1, wkt_step_index=1, timestamp=1758499199}, " +
|
||||
"FitStressLevel{2025-09-22 01:59:59.000, stress_level_value=1, stress_level_time=1758499199}, " +
|
||||
"FitMaxMetData{2025-09-22 01:59:59.000, update_time=1758499199, vo2_max=1.0, sport=1, sub_sport=1, max_met_category=1, calibrated_data=1, hr_source=1, speed_source=1}, " +
|
||||
"FitDiveSettings{2025-09-22 01:59:59.000, name=a, gf_low=1, gf_high=1, water_type=1, water_density=1.0, po2_warn=1.0, po2_critical=1.0, po2_deco=1.0, safety_stop_enabled=1, bottom_depth=1.0, bottom_time=1, apnea_countdown_enabled=1, apnea_countdown_time=1, backlight_mode=1, backlight_brightness=1, backlight_timeout=1, repeat_dive_interval=1, safety_stop_time=1, heart_rate_source_type=1, heart_rate_source=1, travel_gas=1, ccr_low_setpoint_switch_mode=1, ccr_low_setpoint=1.0, ccr_low_setpoint_depth=1.0, ccr_high_setpoint_switch_mode=1, ccr_high_setpoint=1.0, ccr_high_setpoint_depth=1.0, gas_consumption_display=1, up_key_enabled=1, dive_sounds=1, last_stop_multiple=1.0, no_fly_time_mode=1, timestamp=1758499199, message_index=1}, " +
|
||||
"FitDiveGas{2025-09-22 01:59:59.000, helium_content=1, oxygen_content=1, status=1, mode=1, message_index=1}, " +
|
||||
"FitDiveAlarm{2025-09-22 01:59:59.000, depth=1.0, time=1, enabled=true, alarm_type=1, sound=1, id=1, popup_enabled=true, trigger_on_descent=true, trigger_on_ascent=true, repeating=true, speed=1.0, message_index=1}, " +
|
||||
"FitExerciseTitle{2025-09-22 01:59:59.000, exercise_category=1, exercise_name=1, message_index=1}, " +
|
||||
"FitDiveSummary{2025-09-22 01:59:59.000, reference_mesg=1, reference_index=1, avg_depth=1.0, max_depth=1.0, surface_interval=1, start_cns=1, end_cns=1, start_n2=1, end_n2=1, o2_toxicity=1, dive_number=1, bottom_time=1.0, avg_pressure_sac=1.0, avg_volume_sac=1.0, avg_rmv=1.0, descent_time=1.0, ascent_time=1.0, avg_ascent_rate=1.0, avg_descent_rate=1.0, max_ascent_rate=1.0, max_descent_rate=1.0, hang_time=1.0, timestamp=1758499199}, " +
|
||||
"FitSpo2{2025-09-22 01:59:59.000, reading_spo2=1, reading_confidence=1, mode=1, timestamp=1758499199}, " +
|
||||
"FitSleepStage{2025-09-22 01:59:59.000, sleep_stage=AWAKE, timestamp=1758499199}, " +
|
||||
"FitJump{2025-09-22 01:59:59.000, distance=1.0, heigh=1.0, rotations=1, hang_time=1.0, score=1.0, position_lat=8.381903171539307E-8, position_long=8.381903171539307E-8, speed=1.0, enhanced_speed=1.0, timestamp=1758499199}, " +
|
||||
"RecordData{UNK_289_aad_accel_features, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, unknown_1(UINT32/4)=1, unknown_2(UINT16/2)=1, unknown_3(UINT8/1)=1, unknown_4(UINT16/2)=25, 253_timestamp=1758499199}, " +
|
||||
"FitBeatIntervals{2025-09-22 01:59:59.000, timestamp_ms=1, timestamp=1758499199}, " +
|
||||
"FitRespirationRate{2025-09-22 01:59:59.000, respiration_rate=1.0, timestamp=1758499199}, " +
|
||||
"RecordData{UNK_302_hsa_accelerometer_data, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, unknown_1(UINT16/2)=1, unknown_5(UINT32/4)=1, 253_timestamp=1758499199}, " +
|
||||
"FitHsaStepData{2025-09-22 01:59:59.000, processing_interval=1, timestamp=1758499199}, " +
|
||||
"FitHsaSpo2Data{2025-09-22 01:59:59.000, processing_interval=1, timestamp=1758499199}, " +
|
||||
"FitHsaStressData{2025-09-22 01:59:59.000, processing_interval=1, timestamp=1758499199}, " +
|
||||
"FitHsaRespirationData{2025-09-22 01:59:59.000, processing_interval=1, timestamp=1758499199}, " +
|
||||
"FitHsaHeartRateData{2025-09-22 01:59:59.000, processing_interval=1, status=1, timestamp=1758499199}, " +
|
||||
"FitSplit{2025-09-22 01:59:59.000, split_type=2, total_elapsed_time=1.0, total_timer_time=1.0, total_distance=1.0, avg_speed=1.0, start_time=1127433599, total_ascent=1, total_descent=1, start_position_lat=8.381903171539307E-8, start_position_long=8.381903171539307E-8, end_position_lat=8.381903171539307E-8, end_position_long=8.381903171539307E-8, max_speed=1.0, avg_vert_speed=1.0, end_time=1127433599, total_calories=1, start_elevation=1.0, total_moving_time=1.0, message_index=1}, " +
|
||||
"FitSplitSummary{2025-09-22 01:59:59.000, split_type=2, num_splits=1, total_timer_time=1.0, total_distance=1.0, avg_speed=1.0, max_speed=1.0, total_ascent=1, total_descent=1, avg_heart_rate=1, max_heart_rate=1, avg_vert_speed=1.0, total_calories=1, total_moving_time=1.0, message_index=1}, " +
|
||||
"FitHsaBodyBatteryData{2025-09-22 01:59:59.000, processing_interval=1, timestamp=1758499199}, " +
|
||||
"FitHsaEvent{2025-09-22 01:59:59.000, event_id=1, timestamp=1758499199}, " +
|
||||
"FitClimbPro{2025-09-22 01:59:59.000, position_lat=8.381903171539307E-8, position_long=8.381903171539307E-8, climb_pro_event=1, climb_number=1, climb_category=1, current_dist=1.0, timestamp=1758499199}, " +
|
||||
"FitTankUpdate{2025-09-22 01:59:59.000, sensor=1, pressure=1.0, timestamp=1758499199}, " +
|
||||
"FitTankSummary{2025-09-22 01:59:59.000, sensor=1, start_pressure=1.0, end_pressure=1.0, volume_used=1.0, timestamp=1758499199}, " +
|
||||
"FitSleepStats{2025-09-22 01:59:59.000, combined_awake_score=1, awake_time_score=1, awakenings_count_score=1, deep_sleep_score=1, sleep_duration_score=1, light_sleep_score=1, overall_sleep_score=1, sleep_quality_score=1, sleep_recovery_score=1, rem_sleep_score=1, sleep_restlessness_score=1, awakenings_count=1, interruptions_score=1, average_stress_during_sleep=1.0}, " +
|
||||
"FitHrvSummary{2025-09-22 01:59:59.000, weekly_average=1.0, last_night_average=1.0, last_night_5_min_high=1.0, baseline_low_upper=1.0, baseline_balanced_lower=1.0, baseline_balanced_upper=1.0, status=POOR, timestamp=1758499199}, " +
|
||||
"FitHrvValue{2025-09-22 01:59:59.000, value=1.0, timestamp=1758499199}, " +
|
||||
"RecordData{UNK_372_raw_bbi, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, 253_timestamp=1758499199}, " +
|
||||
"FitDeviceAuxBatteryInfo{2025-09-22 01:59:59.000, device_index=1, battery_voltage=1.0, battery_status=1, battery_identifier=1, timestamp=1758499199}, " +
|
||||
"RecordData{UNK_376_hsa_gyroscope_data, 2025-09-22 01:59:59.000, unknown_0(UINT16/2)=1, unknown_1(UINT16/2)=1, unknown_5(UINT32/4)=1, 253_timestamp=1758499199}, " +
|
||||
"FitChronoShotSession{2025-09-22 01:59:59.000, min_speed=1.0, max_speed=1.0, avg_speed=1.0, shot_count=1, projectile_type=1, grain_weight=1.0, standard_deviation=1.0, timestamp=1758499199}, " +
|
||||
"FitChronoShotData{2025-09-22 01:59:59.000, shot_speed=1.0, shot_num=1, timestamp=1758499199}, " +
|
||||
"FitHsaConfigurationData{2025-09-22 01:59:59.000, data_size=1, timestamp=1758499199}, " +
|
||||
"FitDiveApneaAlarm{2025-09-22 01:59:59.000, depth=1.0, time=1, enabled=true, alarm_type=1, sound=1, id=1, popup_enabled=true, trigger_on_descent=true, trigger_on_ascent=true, repeating=true, speed=1.0, message_index=1}, " +
|
||||
"FitSkinTempOvernight{2025-09-22 01:59:59.000, local_timestamp=1, average_deviation=1.0, average_7_day_deviation=1.0, nightly_value=1.0, timestamp=1758499199}, " +
|
||||
"FitHsaWristTemperatureData{2025-09-22 01:59:59.000, processing_interval=1, timestamp=1758499199}]";
|
||||
|
||||
TimeZone defaultTimeZone = TimeZone.getDefault();
|
||||
TimeZone testTimeZone = TimeZone.getTimeZone("Europe/Zurich");
|
||||
TimeZone.setDefault(testTimeZone);
|
||||
try {
|
||||
FitFile fitFile = FitFile.parseIncoming(fileContents);
|
||||
String expected = expectedOutput.replace("}, Fit", "},\nFit").replace("}, RecordData{", "},\nRecordData{");
|
||||
String actual = fitFile.toString().replace("}, Fit", "},\nFit").replace("}, RecordData{", "},\nRecordData{");
|
||||
assertThat(actual, is(expected));
|
||||
} finally {
|
||||
TimeZone.setDefault(defaultTimeZone);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user