// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/// Provides access to a UTC clock for the purposes of
/// keeping it up-to-date with external time sources.
///
/// This is a sensitive capability as it allows the process
/// that has access to it to change the UTC clock and affect
/// certificate checking decisions, for example.
library fuchsia.time;

using zx;

/// Provides access to a UTC clock for the purposes of
/// keeping it up-to-date with external time sources.
///
/// The client does not own the UTC clock, but is given
/// a lease in order to keep the time synchronized.
@discoverable
closed protocol Maintenance {
    /// Retrieve a UTC clock handle with write rights.
    strict GetWritableUtcClock() -> (resource struct {
        utc_clock zx.Handle:CLOCK;
    });
};

/// A user signal that indicates that the UTC clock has been synchronized with
/// an external time source.
///
/// We assume that the external time source has a better estimate
/// of the actual "wall clock" UTC time than our device.
///
/// You may wait on this signal if you want your code to sleep until the UTC
/// clock gets synchronized with an external time source.
///
/// When this signal is active, the clock was synchronized with an
/// external source reasonably recently. The error bounds represent the system's
/// best estimate of wall clock UTC time.
///
/// When this signal is inactive, the clock was last updated from a source
/// that is not external or was never updated at all. This can occur after a
/// reboot, or a resume. The UTC clock may have been set from the
/// real time clock (RTC), but we may not know if RTC matches wall clock.
///
/// If you need finer-grained info on the UTC clock error, you must
/// check the error bounds via [`zx_clock_get_details`][det].
///
/// This signal being active does *not* establish clock trust, and should not
/// be used as such. Also, we can not guarantee that the signal
/// will stay active after a notification. Clients should not
/// assume that the clock remains in a certain state after a signal.
///
/// The value is an alias for `ZX_USER_SIGNAL_0`.
///
/// [det]: https://fuchsia.dev/fuchsia-src/reference/kernel_objects/clock#error-bound
const SIGNAL_UTC_CLOCK_SYNCHRONIZED uint32 = 0x01000000;

/// Signaled on the UTC clock handle when the UTC clock is determined to have
/// reached logging quality.
///
/// Logging quality timestamps are low-confidence, but presumed good enough for
/// debug logging.
///
/// The value is an alias for `ZX_USER_SIGNAL_1`
const SIGNAL_UTC_CLOCK_LOGGING_QUALITY uint32 = 0x02000000;
