// 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 <libmems/common_types.h>

#include "mems_setup/sensor_kind.h"

namespace mems_setup {

namespace {
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 libmems::kAccelName;
    case SensorKind::GYROSCOPE:
      return libmems::kGyroName;
    case SensorKind::LIGHT:
      return libmems::kLightName;
    case SensorKind::SYNC:
      return libmems::kSyncName;
    case SensorKind::MAGNETOMETER:
      return libmems::kMagnName;
    case SensorKind::LID_ANGLE:
      return libmems::kLidAngleName;
    case SensorKind::BAROMETER:
      return libmems::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
