// Copyright 2016 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.

module device.mojom;

// Types of supported sensors
enum SensorType {
  FIRST = 1,
  AMBIENT_LIGHT = FIRST,
  PROXIMITY,
  ACCELEROMETER,
  GYROSCOPE,
  PRESSURE,
  LAST = PRESSURE // Note: LAST is also equal to the types count.
};

// Reporting mode supported by the Sensor.
// ON_CHANGE  - client will be notified through OnSensorReadingChanged() signal
//              whenever sensor reading is changed.
// CONTINUOUS - sensor will continuously update its reading with frequency
//              specified in SensorConfiguration.frequency.
//              OnSensorReadingChanged() signal is not sent to the client for
//              sensors with CONTINUOUS reporting mode.
enum ReportingMode {
  ON_CHANGE,
  CONTINUOUS
};

struct SensorConfiguration {
  // Requested frequency in Hz (max is 60 Hz).
  double frequency;
  // TODO(shalamov): Add map<string, union> for sensor specific configuration.
};

// Interface for controlling the Sensor.
interface Sensor {
  // Requests sensor to start reading sensor data with specified
  // SensorConfiguration.
  // Sensor holds the list of added configurations and it always polls
  // the platform (and updates the shared buffer) at the maxiumum frequency
  // among the obtained from the stored configurations, so that all clients
  // can have sensor data in time.
  // Returns 'true' if |configuration| was successfully added.
  // Returns 'false' if |configuration| could not be added (is invalid
  // or not supported).
  AddConfiguration(SensorConfiguration configuration) => (bool success);

  // Requests sensor to stop reading sensor data for specified
  // SensorConfiguration.
  // This call excludes |configuration| from the Sensor's list making it
  // reconsider the the shared buffer udpate frequency. If there are no
  // configurations left in the Sensor's configuration list it stops polling
  // sensor data from the platform and update the shared buffer.
  // Returns 'true' if |configuration| was successfully removed;
  // returns 'false' if |configuration| could not be removed due to an error
  // (e.g. |configuration| is not present in the Sensor's list).
  RemoveConfiguration(SensorConfiguration configuration) => (bool success);

  // Temporary suppresses sensor reading changes notification and deactivates
  // all the previously added configurations for current instance.
  Suspend();

  // Resumes previously suspended sensor reading changes notification and
  // activates all the previously added configurations for current instance.
  Resume();
};

// Interface that client of the Sensor interface must implement to observe
// sensor reading changes and error conditions.
interface SensorClient {
  // Signals SensorClient when there is an error.
  RaiseError();

  // Signals SensorClient when reading has been changed (only for sensors with
  // ReportingMode::ON_CHANGE).
  SensorReadingChanged();
};
