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

[DartPackage="mojo_services"]
module sensors;

enum SensorType {
  ACCELEROMETER,
  AMBIENT_TEMPERATURE,
  GAME_ROTATION_VECTOR,
  GEOMAGNETIC_ROTATION_VECTOR,
  GRAVITY,
  GYROSCOPE,
  GYROSCOPE_UNCALIBRATED,
  HEART_RATE,
  LIGHT,
  LINEAR_ACCELERATION,
  MAGNETIC_FIELD,
  MAGNETIC_FIELD_UNCALIBRATED,
  PRESSURE,
  PROXIMITY,
  RELATIVE_HUMIDITY,
  ROTATION_VECTOR,
  SIGNIFICANT_MOTION,
  STEP_COUNTER,
  STEP_DETECTOR,
};

struct SensorData {
  int32 accuracy;
  int64 time_stamp;
  array<float> values;
};

interface SensorListener {
  OnAccuracyChanged(int32 accuracy);
  OnSensorChanged(SensorData data);
};

interface SensorService {
  AddListener(SensorType type, SensorListener listener);
};
