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

#include <base/logging.h>
#include <base/macros.h>
#include <base/notreached.h>

#include "mems_setup/sensor_kind.h"

namespace mems_setup {

namespace {
constexpr char kAccelName[] = "accel";
constexpr char kGyroName[] = "anglvel";
constexpr char kLightName[] = "illuminance";
constexpr char kSyncName[] = "count";
constexpr char kMagnName[] = "magn";
constexpr char kLidAngleName[] = "angl";
constexpr char kBaroName[] = "baro";
constexpr char kOthersName[] = "";

constexpr char kAccelDeviceName[] = "cros-ec-accel";
constexpr char kGyroDeviceName[] = "cros-ec-gyro";
constexpr char kLightDeviceName[] = "cros-ec-light";
constexpr char kAlsDeviceName[] = "acpi-als";
constexpr char kSyncDeviceName[] = "cros-ec-sync";
constexpr char kMagnDeviceName[] = "cros-ec-mag";
constexpr char kLidAngleDeviceName[] = "cros-ec-lid-angle";
constexpr char kBaroDeviceName[] = "cros-ec-baro";
}  // namespace

std::string SensorKindToString(SensorKind kind) {
  switch (kind) {
    case SensorKind::ACCELEROMETER:
      return kAccelName;
    case SensorKind::GYROSCOPE:
      return kGyroName;
    case SensorKind::LIGHT:
      return kLightName;
    case SensorKind::SYNC:
      return kSyncName;
    case SensorKind::MAGNETOMETER:
      return kMagnName;
    case SensorKind::LID_ANGLE:
      return kLidAngleName;
    case SensorKind::BAROMETER:
      return kBaroName;
    case SensorKind::OTHERS:  // Shouldn't be used
      return kOthersName;
  }

  NOTREACHED();
}

SensorKind SensorKindFromString(const std::string& name) {
  if (name == kAccelDeviceName)
    return SensorKind::ACCELEROMETER;
  if (name == kGyroDeviceName)
    return SensorKind::GYROSCOPE;
  if (name == kLightDeviceName || name == kAlsDeviceName)
    return SensorKind::LIGHT;
  if (name == kSyncDeviceName)
    return SensorKind::SYNC;
  if (name == kMagnDeviceName)
    return SensorKind::MAGNETOMETER;
  if (name == kLidAngleDeviceName)
    return SensorKind::LID_ANGLE;
  if (name == kBaroDeviceName)
    return SensorKind::BAROMETER;

  return SensorKind::OTHERS;
}

}  // namespace mems_setup
