1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59

ash / components / arc / mojom / timer.mojom [blame]

// 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) => ();
};