2022-09-18 13:19:23 +02:00
|
|
|
syntax = "proto3";
|
|
|
|
|
|
|
|
option java_package = "nodomain.freeyourgadget.gadgetbridge.proto";
|
|
|
|
option java_outer_classname = "HuamiProtos";
|
|
|
|
|
|
|
|
message WorkoutSummary {
|
|
|
|
string version = 1;
|
|
|
|
Location location = 2;
|
|
|
|
Type type = 3;
|
|
|
|
Distance distance = 4;
|
|
|
|
Steps steps = 11;
|
|
|
|
Time time = 7;
|
2023-10-16 23:15:15 +02:00
|
|
|
SwimmingData swimmingData = 9;
|
2022-09-18 13:19:23 +02:00
|
|
|
Pace pace = 10;
|
2022-10-15 02:17:41 +02:00
|
|
|
Altitude altitude = 13;
|
2022-09-18 13:19:23 +02:00
|
|
|
HeartRate heartRate = 19;
|
|
|
|
Calories calories = 16;
|
|
|
|
TrainingEffect trainingEffect = 21;
|
|
|
|
HeartRateZones heartRateZones = 22;
|
2022-10-15 02:17:41 +02:00
|
|
|
Elevation elevation = 23;
|
2022-09-18 13:19:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
message Location {
|
2022-10-15 02:17:41 +02:00
|
|
|
// TODO 2, 3
|
|
|
|
uint32 startTimestamp = 1; // unix epoch, seconds
|
2022-09-18 13:19:23 +02:00
|
|
|
int32 baseLatitude = 5; // /6000000 -> coords
|
|
|
|
int32 baseLongitude = 6; // /-6000000 -> coords
|
|
|
|
int32 baseAltitude = 7; // /2 -> meters
|
|
|
|
int32 maxLatitude = 8; // /3000000 -> coords
|
|
|
|
int32 minLatitude = 9; // /3000000 -> coords
|
|
|
|
int32 maxLongitude = 10; // /3000000 -> coords
|
|
|
|
int32 minLongitude = 11; // /3000000 -> coords
|
|
|
|
}
|
|
|
|
|
|
|
|
message HeartRate {
|
|
|
|
int32 avg = 1; // bpm
|
|
|
|
int32 max = 2; // bpm
|
|
|
|
int32 min = 3; // bpm
|
|
|
|
}
|
|
|
|
|
|
|
|
message Steps {
|
|
|
|
float avgCadence = 1; // steps/sec
|
|
|
|
float maxCadence = 2; // steps/sec
|
|
|
|
int32 avgStride = 3; // cm
|
|
|
|
int32 steps = 4; // count
|
|
|
|
}
|
|
|
|
|
|
|
|
message Type {
|
|
|
|
int32 type = 1; // 1 = running, 4 = bike, 3 = walk
|
2023-05-24 00:42:46 +02:00
|
|
|
int32 ai = 2; // 0 = normal, 1 = ai/automatic
|
2022-09-18 13:19:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
message Distance {
|
|
|
|
float distance = 1; // meters
|
|
|
|
}
|
|
|
|
|
|
|
|
message Time {
|
|
|
|
int32 totalDuration = 1; // seconds
|
|
|
|
int32 workoutDuration = 2; // seconds
|
|
|
|
int32 pauseDuration = 3; // seconds
|
|
|
|
}
|
|
|
|
|
|
|
|
message Pace {
|
|
|
|
float avg = 1; // val * 1000 / 60 -> min/km
|
|
|
|
float best = 2; // val * 1000 / 60 -> min/km
|
|
|
|
}
|
|
|
|
|
2022-10-15 02:17:41 +02:00
|
|
|
message Altitude {
|
|
|
|
int32 maxAltitude = 1; // /200 -> meters
|
|
|
|
int32 minAltitude = 2; // /200 -> meters
|
|
|
|
int32 avgAltitude = 3; // /200 -> meters
|
|
|
|
int32 totalClimbing = 4; // cm
|
|
|
|
int32 elevationGain = 5; // cm
|
|
|
|
int32 elevationLoss = 6; // cm
|
|
|
|
}
|
|
|
|
|
2022-09-18 13:19:23 +02:00
|
|
|
message Calories {
|
|
|
|
int32 calories = 1; // kcal
|
|
|
|
}
|
|
|
|
|
|
|
|
message HeartRateZones {
|
|
|
|
// TODO 1, is always = 1?
|
|
|
|
// Zones: N/A, Warm-up, Fat-burn time, Aerobic, Anaerobic, Extreme
|
|
|
|
repeated int32 zoneMax = 2; // bpm
|
|
|
|
repeated int32 zoneTime = 3; // seconds
|
|
|
|
}
|
|
|
|
|
2022-10-15 02:17:41 +02:00
|
|
|
message Elevation {
|
|
|
|
// TODO 1, 2?
|
|
|
|
uint32 uphillTime = 3; // sec
|
|
|
|
uint32 downhillTime = 4; // sec
|
|
|
|
}
|
|
|
|
|
2022-09-18 13:19:23 +02:00
|
|
|
message TrainingEffect {
|
|
|
|
float aerobicTrainingEffect = 4;
|
|
|
|
float anaerobicTrainingEffect = 5;
|
|
|
|
int32 currentWorkoutLoad = 6;
|
|
|
|
int32 maximumOxygenUptake = 7; // ml/kg/min
|
|
|
|
}
|
2023-10-16 23:15:15 +02:00
|
|
|
|
|
|
|
message SwimmingData {
|
|
|
|
uint32 style = 1; // 1: breaststroke, 2: freestyle
|
|
|
|
uint32 laps = 2;
|
|
|
|
uint32 strokes = 3;
|
|
|
|
uint32 avgDps = 4; // cm
|
|
|
|
uint32 swolf = 5;
|
|
|
|
uint32 avgStrokeRate = 6; // stroke/min
|
|
|
|
uint32 maxStrokeRate = 7; // stroke/min
|
|
|
|
uint32 laneLength = 8;
|
|
|
|
uint32 laneLengthUnit = 9; // 0: meter, 1: yard
|
|
|
|
}
|