xref: /aosp_15_r20/external/pigweed/pw_chrono/chrono.proto (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker// Copyright 2022 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker//
3*61c4878aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker// use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker// the License at
6*61c4878aSAndroid Build Coastguard Worker//
7*61c4878aSAndroid Build Coastguard Worker//     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker//
9*61c4878aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker// License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker// the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Workersyntax = "proto3";
16*61c4878aSAndroid Build Coastguard Worker
17*61c4878aSAndroid Build Coastguard Workerpackage pw.chrono;
18*61c4878aSAndroid Build Coastguard Worker
19*61c4878aSAndroid Build Coastguard Workeroption java_outer_classname = "Chrono";
20*61c4878aSAndroid Build Coastguard Worker
21*61c4878aSAndroid Build Coastguard Workermessage EpochType {
22*61c4878aSAndroid Build Coastguard Worker  enum Enum {
23*61c4878aSAndroid Build Coastguard Worker    UNKNOWN = 0;
24*61c4878aSAndroid Build Coastguard Worker
25*61c4878aSAndroid Build Coastguard Worker    TIME_SINCE_BOOT = 1;
26*61c4878aSAndroid Build Coastguard Worker
27*61c4878aSAndroid Build Coastguard Worker    // Time since 00:00:00 UTC, Thursday, 1 January 1970, including leap
28*61c4878aSAndroid Build Coastguard Worker    // seconds.
29*61c4878aSAndroid Build Coastguard Worker    UTC_WALL_CLOCK = 2;
30*61c4878aSAndroid Build Coastguard Worker
31*61c4878aSAndroid Build Coastguard Worker    // Time since 00:00:00, 6 January 1980 UTC. Leap seconds are not inserted
32*61c4878aSAndroid Build Coastguard Worker    // into GPS. Thus, every time a leap second is inserted into UTC, UTC
33*61c4878aSAndroid Build Coastguard Worker    // falls another second behind GPS.
34*61c4878aSAndroid Build Coastguard Worker    GPS_WALL_CLOCK = 3;
35*61c4878aSAndroid Build Coastguard Worker
36*61c4878aSAndroid Build Coastguard Worker    // Time since 00:00:00, 1 January 1958, and is offset 10 seconds ahead of
37*61c4878aSAndroid Build Coastguard Worker    // UTC at that date (i.e., its epoch, 1958-01-01 00:00:00 TAI, is
38*61c4878aSAndroid Build Coastguard Worker    // 1957-12-31 23:59:50 UTC). Leap seconds are not inserted into TAI. Thus,
39*61c4878aSAndroid Build Coastguard Worker    // every time a leap second is inserted into UTC, UTC falls another second
40*61c4878aSAndroid Build Coastguard Worker    // behind TAI.
41*61c4878aSAndroid Build Coastguard Worker    TAI_WALL_CLOCK = 4;
42*61c4878aSAndroid Build Coastguard Worker  };
43*61c4878aSAndroid Build Coastguard Worker}
44*61c4878aSAndroid Build Coastguard Worker
45*61c4878aSAndroid Build Coastguard Worker// A representation of a clock's parameters.
46*61c4878aSAndroid Build Coastguard Worker//
47*61c4878aSAndroid Build Coastguard Worker// There are two major components to representing a steady, monotonic clock:
48*61c4878aSAndroid Build Coastguard Worker//
49*61c4878aSAndroid Build Coastguard Worker//   1. A representation of the clock's period.
50*61c4878aSAndroid Build Coastguard Worker//   2. A representation of the clock's epoch.
51*61c4878aSAndroid Build Coastguard Worker//
52*61c4878aSAndroid Build Coastguard Worker// To support a wide range of clock configurations, ClockParameters represents
53*61c4878aSAndroid Build Coastguard Worker// a clock's period as fractions of a second. Concretely:
54*61c4878aSAndroid Build Coastguard Worker//
55*61c4878aSAndroid Build Coastguard Worker//   Clock period (seconds) =
56*61c4878aSAndroid Build Coastguard Worker//       tick_period_seconds_numerator / tick_period_seconds_denominator
57*61c4878aSAndroid Build Coastguard Worker//
58*61c4878aSAndroid Build Coastguard Worker// So a simple 1KHz clock can be represented as:
59*61c4878aSAndroid Build Coastguard Worker//
60*61c4878aSAndroid Build Coastguard Worker//   tick_period_seconds_numerator = 1
61*61c4878aSAndroid Build Coastguard Worker//   tick_period_seconds_denominator = 1000
62*61c4878aSAndroid Build Coastguard Worker//   Clock period = 1 / 1000 = 0.001 seconds
63*61c4878aSAndroid Build Coastguard Worker//   Clock frequency = 1 / 0.001 = 1,000 Hz
64*61c4878aSAndroid Build Coastguard Worker//
65*61c4878aSAndroid Build Coastguard Worker// Failing to specify one or both of the period members of a ClockParameters
66*61c4878aSAndroid Build Coastguard Worker// message leaves the configuration specification incomplete and invalid.
67*61c4878aSAndroid Build Coastguard Worker//
68*61c4878aSAndroid Build Coastguard Worker// While clock period alone is enough to represent a duration if given a number
69*61c4878aSAndroid Build Coastguard Worker// of ticks, an epoch is required to make a clock represent a time point.
70*61c4878aSAndroid Build Coastguard Worker// EpochType optionally provides this information. Specifying an EpochType
71*61c4878aSAndroid Build Coastguard Worker// defines what a tick count of `0` represents. Some epoch types (e.g. UTC, GPS,
72*61c4878aSAndroid Build Coastguard Worker// TAI) allow the clock to resolve to real-world time points. If the EpochType
73*61c4878aSAndroid Build Coastguard Worker// is relative to boot or unknown, however, the clock is only sufficiently
74*61c4878aSAndroid Build Coastguard Worker// specified for relative time measurement without additional external
75*61c4878aSAndroid Build Coastguard Worker// information.
76*61c4878aSAndroid Build Coastguard Workermessage ClockParameters {
77*61c4878aSAndroid Build Coastguard Worker  int32 tick_period_seconds_numerator = 1;    // Required
78*61c4878aSAndroid Build Coastguard Worker  int32 tick_period_seconds_denominator = 2;  // Required
79*61c4878aSAndroid Build Coastguard Worker  optional EpochType.Enum epoch_type = 3;
80*61c4878aSAndroid Build Coastguard Worker}
81*61c4878aSAndroid Build Coastguard Worker
82*61c4878aSAndroid Build Coastguard Worker// A point in time relative to a clock's epoch.
83*61c4878aSAndroid Build Coastguard Workermessage TimePoint {
84*61c4878aSAndroid Build Coastguard Worker  // The duration that has elapsed (number of clock ticks) since the epoch,
85*61c4878aSAndroid Build Coastguard Worker  // where the tick period and epoch are specified by the clock parameters.
86*61c4878aSAndroid Build Coastguard Worker  //
87*61c4878aSAndroid Build Coastguard Worker  // The meaning of `timestamp` is unspecified without an associated
88*61c4878aSAndroid Build Coastguard Worker  // ClockParameters.
89*61c4878aSAndroid Build Coastguard Worker  int64 timestamp = 1;                   // Required
90*61c4878aSAndroid Build Coastguard Worker  ClockParameters clock_parameters = 2;  // Required
91*61c4878aSAndroid Build Coastguard Worker}
92*61c4878aSAndroid Build Coastguard Worker
93*61c4878aSAndroid Build Coastguard Worker// The time of a snapshot capture. Supports multiple timestamps to
94*61c4878aSAndroid Build Coastguard Worker// cover multiple time bases or clocks (e.g. time since boot, time
95*61c4878aSAndroid Build Coastguard Worker// from epoch, etc).
96*61c4878aSAndroid Build Coastguard Worker//
97*61c4878aSAndroid Build Coastguard Worker// This is an overlay proto for Snapshot, see more details here:
98*61c4878aSAndroid Build Coastguard Worker// https://pigweed.dev/pw_snapshot/proto_format.html#module-specific-data
99*61c4878aSAndroid Build Coastguard Workermessage SnapshotTimestamps {
100*61c4878aSAndroid Build Coastguard Worker  repeated TimePoint timestamps = 22;
101*61c4878aSAndroid Build Coastguard Worker}
102