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

// Next min version: 7

module cros.mojom;

import "chromeos/components/sensors/mojom/cros_sensor_service.mojom";
import "components/chromeos_camera/common/jpeg_encode_accelerator.mojom";
import "components/chromeos_camera/common/mjpeg_decode_accelerator.mojom";
import "media/capture/video/chromeos/mojom/camera_common.mojom";
import "media/capture/video/chromeos/mojom/cros_camera_client.mojom";
import "mojo/public/mojom/base/unguessable_token.mojom";

// CameraClientType indicates the type of a CameraHalClient.
// It should be kept in sync with the ChromeOSCameraClientType enum in
// tools/metrics/histograms/enums.xml in chromium.
[Extensible]
enum CameraClientType{
  UNKNOWN = 0,
  TESTING = 1,
  CHROME = 2,
  ANDROID = 3,
  PLUGINVM = 4,
  ASH_CHROME = 5,
  LACROS_CHROME = 6,
};

// CameraPrivacySwitchState indicates the state of the camera privacy switch.
enum CameraPrivacySwitchState{
  // For devices which can only read the privacy switch status while the camera
  // is streaming, it is possible that the state of privacy switch is currently
  // unknown.
  UNKNOWN = 0,

  // State when the privacy switch is on, which means the black frames will be
  // delivered when streaming.
  ON = 1,

  // State when the privacy switch is off, which means camera should stream
  // normally.
  OFF = 2,
};

// The CrOS camera HAL v3 Mojo dispatcher.  The dispatcher acts as a proxy and
// waits for the server and the clients to register.  There can only be one
// server registered, with multiple clients requesting connections to the
// server.  For each client, the dispatcher is responsible for creating a Mojo
// channel to the server and pass the established Mojo channel to the client in
// order to set up a Mojo channel between the client and the server.
//
// Next method ID: 7
interface CameraHalDispatcher {
  // [Deprecated in version 4]
  // A CameraHalServer calls RegisterServer to register itself with the
  // dispatcher.
  RegisterServer@0(pending_remote<CameraHalServer> server);

  // [Deprecated in version 4]
  // A CameraHalClient calls RegisterClient to register itself with the
  // dispatcher.
  RegisterClient@1(pending_remote<CameraHalClient> client);

  // Get MjpegDecodeAccelerator from dispatcher.
  [MinVersion=1] GetMjpegDecodeAccelerator@2(
      pending_receiver<chromeos_camera.mojom.MjpegDecodeAccelerator>
        jda_receiver);

  // Get JpegEncodeAccelerator from dispatcher.
  [MinVersion=2] GetJpegEncodeAccelerator@3(
      pending_receiver<chromeos_camera.mojom.JpegEncodeAccelerator>
        jea_receiver);

  // A CameraHalServer calls RegisterServerWithToken to register itself with the
  // dispatcher. CameraHalDispatcher would authenticate the server with the
  // supplied |auth_token|. |callbacks| is fired by CameraHalServer to notify
  // CameraHalDispatcher about CameraHalClient updates, for example when a
  // CameraHalClient opens or closes a camera device.
  [MinVersion=4] RegisterServerWithToken@4(
      pending_remote<CameraHalServer> server,
      mojo_base.mojom.UnguessableToken auth_token) =>
      (int32 result, pending_remote<CameraHalServerCallbacks> callbacks);

  // A CameraHalClient calls RegisterClient to register itself with the
  // dispatcher. CameraHalDispatcher would authenticate the client with the
  // given |type| and |auth_token|.
  [MinVersion=4] RegisterClientWithToken@5(
      pending_remote<CameraHalClient> client,
      CameraClientType type,
      mojo_base.mojom.UnguessableToken auth_token) => (int32 result);

  // A SensorHalClient calls RegisterSensorClient to register itself with
  // SensorHalDispatcher through CameraHalDispatcher. |auth_token| is used to
  // prove the caller has been granted permission to access SensorHalClient.
  // CameraHalDispatcher will send back |result| as the errno.
  [MinVersion=6] RegisterSensorClientWithToken@6(
      pending_remote<chromeos.sensors.mojom.SensorHalClient> client,
      mojo_base.mojom.UnguessableToken auth_token) => (int32 result);
};

// The CrOS camera HAL v3 Mojo server.
//
// Next method ID: 2
interface CameraHalServer {
  // A caller calls CreateChannel to create a new Mojo channel to the camera
  // HAL v3 adapter.  Upon successfully binding of |camera_module_receiver|, the
  // caller will have a established Mojo channel to the camera HAL v3 adapter
  // process.
  CreateChannel@0(pending_receiver<CameraModule> camera_module_receiver,
                  [MinVersion=4] CameraClientType type);

  // Enable or disable tracing.
  [MinVersion=3]
  SetTracingEnabled@1(bool enabled);
};

// CameraHalServerCallbacks is an interface for CameraHalServer to notify
// CameraHalDispatcher for any changes on the server side, for example when a
// CameraHalClient opens or closes a camera device.
//
// Next method ID: 2
interface CameraHalServerCallbacks {
  // Fired when a CameraHalClient opens or closes a camera device. When a
  // CameraHalClient loses mojo connection to CameraHalServer, CameraHalServer
  // would also use this to notify that cameras are closed (not being used).
  CameraDeviceActivityChange@0(int32 camera_id,
                               bool opened,
                               CameraClientType type);

  // Fired when the camera privacy switch status is changed. If the device has
  // such switch, this callback will be fired immediately for once to notify its
  // current status when the callbacks are registered.
  [MinVersion=5]
  CameraPrivacySwitchStateChange@1(CameraPrivacySwitchState state);
};
