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

#ifndef CHROMEOS_ACCELEROMETER_ACCELEROMETER_TYPES_H_
#define CHROMEOS_ACCELEROMETER_ACCELEROMETER_TYPES_H_

#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "chromeos/chromeos_export.h"

namespace chromeos {

enum AccelerometerSource {
  // Accelerometer is located in the device's screen. In the screen's natural
  // orientation, positive X points to the right, consistent with the pixel
  // position. Positive Y points up the screen. Positive Z is perpendicular to
  // the screen, pointing outwards towards the user. The orientation is
  // described at:
  // http://www.html5rocks.com/en/tutorials/device/orientation/.
  ACCELEROMETER_SOURCE_SCREEN = 0,

  // Accelerometer is located in a keyboard attached to the device's screen.
  // If the device is open 180 degrees the orientation is consistent with the
  // screen. I.e. Positive X points to the right, positive Y points up on the
  // keyboard and positive Z is perpendicular to the keyboard pointing out
  // towards the user.
  ACCELEROMETER_SOURCE_ATTACHED_KEYBOARD,

  ACCELEROMETER_SOURCE_COUNT
};

struct CHROMEOS_EXPORT AccelerometerReading {
  AccelerometerReading();
  ~AccelerometerReading();

  // If true, this accelerometer is being updated.
  bool present;

  // The readings from this accelerometer measured in m/s^2.
  float x;
  float y;
  float z;
};

// An accelerometer update contains the last known value for each of the
// accelerometers present on the device.
class CHROMEOS_EXPORT AccelerometerUpdate
    : public base::RefCountedThreadSafe<AccelerometerUpdate> {
 public:
  AccelerometerUpdate();

  // Returns true if |source| has a valid value in this update.
  bool has(AccelerometerSource source) const { return data_[source].present; }

  // Returns the last known value for |source|.
  const AccelerometerReading& get(AccelerometerSource source) const {
    return data_[source];
  }

  void Set(AccelerometerSource source, float x, float y, float z) {
    data_[source].present = true;
    data_[source].x = x;
    data_[source].y = y;
    data_[source].z = z;
  }

 protected:
  AccelerometerReading data_[ACCELEROMETER_SOURCE_COUNT];

 private:
  friend class base::RefCountedThreadSafe<AccelerometerUpdate>;

  virtual ~AccelerometerUpdate();

  DISALLOW_COPY_AND_ASSIGN(AccelerometerUpdate);
};

}  // namespace chromeos

#endif  // CHROMEOS_ACCELEROMETER_ACCELEROMETER_TYPES_H_
