chromium/ash/components/arc/mojom/timer.mojom

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Next min version: 2

module arc.mojom;

import "mojo/public/mojom/base/time.mojom";

[Extensible]
enum ArcTimerResult {
  SUCCESS = 0,
  FAILURE = 1,
};

[Extensible]
enum ClockId {
  REALTIME_ALARM = 0,
  BOOTTIME_ALARM = 1,
};

struct CreateTimerRequest {
  // Type of the clock for which a timer needs to be created. This value
  // corresponds to the clock ids used by timerfd_create.
  ClockId clock_id;

  // File descriptor to write to when the timer is expired. This indicates to
  // the instance that the timer is expired. This fd is owned by the host.
  handle expiration_fd;
};

// Next method ID: 3
interface TimerHost {
  // Creates timers with the given arguments. Returns |ArcTimerResult::SUCCESS|
  // iff timers corresponding to all clocks in |timer_requests| are created.
  CreateTimers@0(array<CreateTimerRequest> timer_requests)
    => (ArcTimerResult result);

  // Starts the timer of type |clock_id| to run at |absolute_expiration_time| in
  // the future. If the timer is already running, it will be replaced.
  // Notification will be performed as an 8-byte write to the associated
  // expiration fd. Returns |ArcTimerResult::SUCCESS| if the timer can be
  // started and |ArcTimerResult::FAILURE| otherwise.
  StartTimer@1(ClockId clock_id,
               mojo_base.mojom.TimeTicks absolute_expiration_time)
    => (ArcTimerResult result);

  // Requests the host to set system clock time. The request is rejected if
  // delta between requested time and current time is greater than 24 hours.
  [MinVersion=1] SetTime@2(mojo_base.mojom.Time time)
    => (ArcTimerResult result);
};

// Next method ID: 1
interface TimerInstance {
  // Establishes full-duplex communication with the host.
  Init@0(pending_remote<TimerHost> host_remote) => ();
};