/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "sensor_list.h"

namespace goldfish {
using ahs::V2_1::SensorType;
using ahs::V1_0::SensorFlagBits;

constexpr char kAospVendor[] = "The Android Open Source Project";

const char* const kQemuSensorName[] = {
    "acceleration",
    "gyroscope",
    "magnetic-field",
    "orientation",
    "temperature",
    "proximity",
    "light",
    "pressure",
    "humidity",
    "magnetic-field-uncalibrated",
    "gyroscope-uncalibrated",
    "hinge-angle0",
    "hinge-angle1",
    "hinge-angle2",
    "heart-rate",
};

const SensorInfo kAllSensors[] = {
    {
        .sensorHandle = kSensorHandleAccelerometer,
        .name = "Goldfish 3-axis Accelerometer",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::ACCELEROMETER,
        .typeAsString = "android.sensor.accelerometer",
        .maxRange = 39.3,
        .resolution = 1.0 / 4032.0,
        .power = 3.0,
        .minDelay = 10000,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 500000,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::CONTINUOUS_MODE
    },
    {
        .sensorHandle = kSensorHandleGyroscope,
        .name = "Goldfish 3-axis Gyroscope",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::GYROSCOPE,
        .typeAsString = "android.sensor.gyroscope",
        .maxRange = 16.46,
        .resolution = 1.0 / 1000.0,
        .power = 3.0,
        .minDelay = 10000,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 500000,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::CONTINUOUS_MODE
    },
    {
        .sensorHandle = kSensorHandleMagneticField,
        .name = "Goldfish 3-axis Magnetic field sensor",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::MAGNETIC_FIELD,
        .typeAsString = "android.sensor.magnetic_field",
        .maxRange = 2000.0,
        .resolution = .5,
        .power = 6.7,
        .minDelay = 10000,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 500000,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::CONTINUOUS_MODE
    },
    {
        .sensorHandle = kSensorHandleOrientation,
        .name = "Goldfish Orientation sensor",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::ORIENTATION,
        .typeAsString = "android.sensor.orientation",
        .maxRange = 360.0,
        .resolution = 1.0,
        .power = 9.7,
        .minDelay = 10000,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 500000,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::CONTINUOUS_MODE
    },
    {
        .sensorHandle = kSensorHandleAmbientTemperature,
        .name = "Goldfish Ambient Temperature sensor",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::AMBIENT_TEMPERATURE,
        .typeAsString = "android.sensor.ambient_temperature",
        .maxRange = 80.0,
        .resolution = 1.0,
        .power = 0.0,
        .minDelay = 0,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 0,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::ON_CHANGE_MODE
    },
    {
        .sensorHandle = kSensorHandleProximity,
        .name = "Goldfish Proximity sensor",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::PROXIMITY,
        .typeAsString = "android.sensor.proximity",
        .maxRange = 1.0,
        .resolution = 1.0,
        .power = 20.0,
        .minDelay = 0,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 0,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::ON_CHANGE_MODE |
                 SensorFlagBits::WAKE_UP
    },
    {
        .sensorHandle = kSensorHandleLight,
        .name = "Goldfish Light sensor",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::LIGHT,
        .typeAsString = "android.sensor.light",
        .maxRange = 40000.0,
        .resolution = 1.0,
        .power = 20.0,
        .minDelay = 0,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 0,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::ON_CHANGE_MODE
    },
    {
        .sensorHandle = kSensorHandlePressure,
        .name = "Goldfish Pressure sensor",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::PRESSURE,
        .typeAsString = "android.sensor.pressure",
        .maxRange = 800.0,
        .resolution = 1.0,
        .power = 20.0,
        .minDelay = 10000,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 500000,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::CONTINUOUS_MODE
    },
    {
        .sensorHandle = kSensorHandleRelativeHumidity,
        .name = "Goldfish Humidity sensor",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::RELATIVE_HUMIDITY,
        .typeAsString = "android.sensor.relative_humidity",
        .maxRange = 100.0,
        .resolution = 1.0,
        .power = 20.0,
        .minDelay = 0,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 0,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::ON_CHANGE_MODE
    },
    {
        .sensorHandle = kSensorHandleMagneticFieldUncalibrated,
        .name = "Goldfish 3-axis Magnetic field sensor (uncalibrated)",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::MAGNETIC_FIELD_UNCALIBRATED,
        .typeAsString = "android.sensor.magnetic_field_uncalibrated",
        .maxRange = 2000.0,
        .resolution = 0.5,
        .power = 6.7,
        .minDelay = 10000,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 500000,
        .flags = SensorFlagBits::DATA_INJECTION | 0
    },
    {
        .sensorHandle = kSensorHandleGyroscopeFieldUncalibrated,
        .name = "Goldfish 3-axis Gyroscope (uncalibrated)",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::GYROSCOPE_UNCALIBRATED,
        .typeAsString = "android.sensor.gyroscope_uncalibrated",
        .maxRange = 16.46,
        .resolution = 1.0 / 1000.0,
        .power = 3.0,
        .minDelay = 10000,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 500000,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::CONTINUOUS_MODE
    },
    {
        .sensorHandle = kSensorHandleHingeAngle0,
        .name = "Goldfish hinge sensor0 (in degrees)",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::HINGE_ANGLE,
        .typeAsString = "android.sensor.hinge_angle",
        .maxRange = 360,
        .resolution = 1.0,
        .power = 3.0,
        .minDelay = 0,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 0,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::ON_CHANGE_MODE |
                 SensorFlagBits::WAKE_UP
    },
    {
        .sensorHandle = kSensorHandleHingeAngle1,
        .name = "Goldfish hinge sensor1 (in degrees)",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::HINGE_ANGLE,
        .typeAsString = "android.sensor.hinge_angle",
        .maxRange = 360,
        .resolution = 1.0,
        .power = 3.0,
        .minDelay = 0,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 0,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::ON_CHANGE_MODE |
                 SensorFlagBits::WAKE_UP
    },
    {
        .sensorHandle = kSensorHandleHingeAngle2,
        .name = "Goldfish hinge sensor2 (in degrees)",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::HINGE_ANGLE,
        .typeAsString = "android.sensor.hinge_angle",
        .maxRange = 360,
        .resolution = 1.0,
        .power = 3.0,
        .minDelay = 0,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "",
        .maxDelay = 0,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::ON_CHANGE_MODE |
                 SensorFlagBits::WAKE_UP
    },
    {
        .sensorHandle = kSensorHandleHeartRate,
        .name = "Goldfish Heart rate sensor",
        .vendor = kAospVendor,
        .version = 1,
        .type = SensorType::HEART_RATE,
        .typeAsString = "android.sensor.heart_rate",
        .maxRange = 500.0,
        .resolution = 1.0,
        .power = 20.0,
        .minDelay = 0,
        .fifoReservedEventCount = 0,
        .fifoMaxEventCount = 0,
        .requiredPermission = "android.permission.BODY_SENSORS",
        .maxDelay = 500000,
        .flags = SensorFlagBits::DATA_INJECTION |
                 SensorFlagBits::ON_CHANGE_MODE
    }};

constexpr int kSensorNumber = sizeof(kAllSensors) / sizeof(kAllSensors[0]);

static_assert(kSensorNumber == sizeof(kQemuSensorName) / sizeof(kQemuSensorName[0]),
              "sizes of kAllSensors and kQemuSensorName arrays must match");

int getSensorNumber() { return kSensorNumber; }

bool isSensorHandleValid(const int h) {
    return h >= 0 && h < kSensorNumber;
}

const SensorInfo* getSensorInfoByHandle(const int h) {
    return isSensorHandleValid(h) ? &kAllSensors[h] : nullptr;
}

const char* getQemuSensorNameByHandle(const int h) {
    return kQemuSensorName[h];
}

}  // namespace goldfish
