syntax = "proto3"; package ScStw; message TrainingClassicRaceExtraState { // If this stays `true` for at least the configured autostart // standstillDurationBeforeStart, an autostart will be executed. // Once this becomes true, clients should display indicate it and // optionally show a countdown. bool autostartPending = 1; // If this is `true`, the time is calculated and the valid. // This happens when the athlete does a false start but still finishes. // In this case, the client should mark the time as invalid. bool timeIsCalculated = 2; } message LaneExtraState { oneof state { TrainingClassicRaceExtraState trainingClassicRaceExtraState = 1; // TODO CompetitionRelayExtraState competitionRelayMode = 2; // TODO Competition4SpeedExtraState competition4SpeedMode = 3; } } message LaneFullState { enum State { IDLE = 0; IDLE_FOOT_DOWN = 1; READY_FOOT_DOWN = 2; RUNNING_FOOT_DOWN = 3; RUNNING = 4; FALSE_START = 5; FALSE_START_TIE = 6; WILDCARD = 7; FINISHED = 8; FINISHED_WINNER = 9; FINISHED_TIE = 10; FALL = 11; DISABLED = 12; } State state = 1; // The reaction time in milliseconds relative to the beginning of the start // sequence. To get the common representation of the reaction time (relative // to the beginning of the third beep), 3000ms must be subtracted. // If this is 0, the reaction time is not set (yet). uint32 reactionTime = 2; // The climbing time in milliseconds relative to the beginning of the third // beep. // If this is 0, the climbing time is not set (yet). uint32 climbingTime = 3; LaneExtraState extraState = 4; } message RaceFullState { enum State { IDLE = 0; IDLE_CLEAR_TO_START = 1; STARTING = 2; RUNNING = 3; FINISHED = 4; FINISHED_MUTED = 5; } State state = 1; repeated LaneFullState laneStates = 2; }