1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-11-12 04:59:27 +01:00
Gadgetbridge/app/src/main/proto/huami.proto
2023-10-16 23:35:10 +02:00

112 lines
2.8 KiB
Protocol Buffer

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;
SwimmingData swimmingData = 9;
Pace pace = 10;
Altitude altitude = 13;
HeartRate heartRate = 19;
Calories calories = 16;
TrainingEffect trainingEffect = 21;
HeartRateZones heartRateZones = 22;
Elevation elevation = 23;
}
message Location {
// TODO 2, 3
uint32 startTimestamp = 1; // unix epoch, seconds
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
int32 ai = 2; // 0 = normal, 1 = ai/automatic
}
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
}
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
}
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
}
message Elevation {
// TODO 1, 2?
uint32 uphillTime = 3; // sec
uint32 downhillTime = 4; // sec
}
message TrainingEffect {
float aerobicTrainingEffect = 4;
float anaerobicTrainingEffect = 5;
int32 currentWorkoutLoad = 6;
int32 maximumOxygenUptake = 7; // ml/kg/min
}
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
}