102 lines
3.7 KiB
Protocol Buffer
102 lines
3.7 KiB
Protocol Buffer
// Copyright 2022 The Pigweed Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
// use this file except in compliance with the License. You may obtain a copy of
|
|
// the License at
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
// License for the specific language governing permissions and limitations under
|
|
// the License.
|
|
|
|
syntax = "proto3";
|
|
|
|
package pw.chrono;
|
|
|
|
option java_outer_classname = "Chrono";
|
|
|
|
message EpochType {
|
|
enum Enum {
|
|
UNKNOWN = 0;
|
|
|
|
TIME_SINCE_BOOT = 1;
|
|
|
|
// Time since 00:00:00 UTC, Thursday, 1 January 1970, including leap
|
|
// seconds.
|
|
UTC_WALL_CLOCK = 2;
|
|
|
|
// Time since 00:00:00, 6 January 1980 UTC. Leap seconds are not inserted
|
|
// into GPS. Thus, every time a leap second is inserted into UTC, UTC
|
|
// falls another second behind GPS.
|
|
GPS_WALL_CLOCK = 3;
|
|
|
|
// Time since 00:00:00, 1 January 1958, and is offset 10 seconds ahead of
|
|
// UTC at that date (i.e., its epoch, 1958-01-01 00:00:00 TAI, is
|
|
// 1957-12-31 23:59:50 UTC). Leap seconds are not inserted into TAI. Thus,
|
|
// every time a leap second is inserted into UTC, UTC falls another second
|
|
// behind TAI.
|
|
TAI_WALL_CLOCK = 4;
|
|
};
|
|
}
|
|
|
|
// A representation of a clock's parameters.
|
|
//
|
|
// There are two major components to representing a steady, monotonic clock:
|
|
//
|
|
// 1. A representation of the clock's period.
|
|
// 2. A representation of the clock's epoch.
|
|
//
|
|
// To support a wide range of clock configurations, ClockParameters represents
|
|
// a clock's period as fractions of a second. Concretely:
|
|
//
|
|
// Clock period (seconds) =
|
|
// tick_period_seconds_numerator / tick_period_seconds_denominator
|
|
//
|
|
// So a simple 1KHz clock can be represented as:
|
|
//
|
|
// tick_period_seconds_numerator = 1
|
|
// tick_period_seconds_denominator = 1000
|
|
// Clock period = 1 / 1000 = 0.001 seconds
|
|
// Clock frequency = 1 / 0.001 = 1,000 Hz
|
|
//
|
|
// Failing to specify one or both of the period members of a ClockParameters
|
|
// message leaves the configuration specification incomplete and invalid.
|
|
//
|
|
// While clock period alone is enough to represent a duration if given a number
|
|
// of ticks, an epoch is required to make a clock represent a time point.
|
|
// EpochType optionally provides this information. Specifying an EpochType
|
|
// defines what a tick count of `0` represents. Some epoch types (e.g. UTC, GPS,
|
|
// TAI) allow the clock to resolve to real-world time points. If the EpochType
|
|
// is relative to boot or unknown, however, the clock is only sufficiently
|
|
// specified for relative time measurement without additional external
|
|
// information.
|
|
message ClockParameters {
|
|
int32 tick_period_seconds_numerator = 1; // Required
|
|
int32 tick_period_seconds_denominator = 2; // Required
|
|
optional EpochType.Enum epoch_type = 3;
|
|
}
|
|
|
|
// A point in time relative to a clock's epoch.
|
|
message TimePoint {
|
|
// The duration that has elapsed (number of clock ticks) since the epoch,
|
|
// where the tick period and epoch are specified by the clock parameters.
|
|
//
|
|
// The meaning of `timestamp` is unspecified without an associated
|
|
// ClockParameters.
|
|
int64 timestamp = 1; // Required
|
|
ClockParameters clock_parameters = 2; // Required
|
|
}
|
|
|
|
// The time of a snapshot capture. Supports multiple timestamps to
|
|
// cover multiple time bases or clocks (e.g. time since boot, time
|
|
// from epoch, etc).
|
|
//
|
|
// This is an overlay proto for Snapshot, see more details here:
|
|
// https://pigweed.dev/pw_snapshot/proto_format.html#module-specific-data
|
|
message SnapshotTimestamps {
|
|
repeated TimePoint timestamps = 22;
|
|
}
|