/*
 * Copyright (C) 2011 Invensense, Inc.
 *
 * 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.
 */

#ifndef INV_SENSOR_PARAMS_H
#define INV_SENSOR_PARAMS_H

/* Physical parameters of the sensors supported by Invensense MPL */
#define SENSORS_ROTATION_VECTOR_HANDLE  (ID_RV)
#define SENSORS_LINEAR_ACCEL_HANDLE     (ID_LA)
#define SENSORS_GRAVITY_HANDLE          (ID_GR)
#define SENSORS_GYROSCOPE_HANDLE        (ID_GY)
#define SENSORS_ACCELERATION_HANDLE     (ID_A)
#define SENSORS_MAGNETIC_FIELD_HANDLE   (ID_M)
#define SENSORS_ORIENTATION_HANDLE      (ID_O)
/******************************************/
//COMPASS_ID_AKM
#define COMPASS_AKM8975_RANGE       (9830.0f)
#define COMPASS_AKM8975_RESOLUTION  (0.285f)
#define COMPASS_AKM8975_POWER       (10.0f)
//COMPASS_ID_AMI30X
#define COMPASS_AMI30X_RANGE        (5461.0f)
#define COMPASS_AMI30X_RESOLUTION   (0.9f)
#define COMPASS_AMI30X_POWER        (0.15f)
//COMPASS_ID_AMI306
#define COMPASS_AMI306_RANGE        (5461.0f)
#define COMPASS_AMI306_RESOLUTION   (0.9f)
#define COMPASS_AMI306_POWER        (0.15f)
//COMPASS_ID_YAS529
#define COMPASS_YAS529_RANGE        (19660.0f)
#define COMPASS_YAS529_RESOLUTION   (0.012f)
#define COMPASS_YAS529_POWER        (4.0f)
//COMPASS_ID_YAS530
#define COMPASS_YAS530_RANGE        (8001.0f)
#define COMPASS_YAS530_RESOLUTION   (0.012f)
#define COMPASS_YAS530_POWER        (4.0f)
//COMPASS_ID_HMC5883
#define COMPASS_HMC5883_RANGE       (10673.0f)
#define COMPASS_HMC5883_RESOLUTION  (10.0f)
#define COMPASS_HMC5883_POWER       (0.24f)
//COMPASS_ID_LSM303DLH
#define COMPASS_LSM303DLH_RANGE     (10240.0f)
#define COMPASS_LSM303DLH_RESOLUTION    (1.0f)
#define COMPASS_LSM303DLH_POWER     (1.0f)
//COMPASS_ID_LSM303DLM
#define COMPASS_LSM303DLM_RANGE     (10240.0f)
#define COMPASS_LSM303DLM_RESOLUTION    (1.0f)
#define COMPASS_LSM303DLM_POWER     (1.0f)
//COMPASS_ID_MMC314X
#define COMPASS_MMC314X_RANGE       (400.0f)
#define COMPASS_MMC314X_RESOLUTION  (2.0f)
#define COMPASS_MMC314X_POWER       (0.55f)
//COMPASS_ID_HSCDTD002B
#define COMPASS_HSCDTD002B_RANGE    (9830.0f)
#define COMPASS_HSCDTD002B_RESOLUTION   (1.0f)
#define COMPASS_HSCDTD002B_POWER    (1.0f)
//COMPASS_ID_HSCDTD004A
#define COMPASS_HSCDTD004A_RANGE    (9830.0f)
#define COMPASS_HSCDTD004A_RESOLUTION   (1.0f)
#define COMPASS_HSCDTD004A_POWER    (1.0f)
/*******************************************/
//ACCEL_ID_LIS331
#define ACCEL_LIS331_RANGE      (2.480f*GRAVITY_EARTH)
#define ACCEL_LIS331_RESOLUTION     (.001f*GRAVITY_EARTH)
#define ACCEL_LIS331_POWER      (1.0f)
//ACCEL_ID_LSM303DLX
#define ACCEL_LSM303DLX_RANGE       (2.480f*GRAVITY_EARTH)
#define ACCEL_LSM303DLX_RESOLUTION  (0.001f*GRAVITY_EARTH)
#define ACCEL_LSM303DLX_POWER       (1.0f)
//ACCEL_ID_LIS3DH
#define ACCEL_LIS3DH_RANGE      (2.480f*GRAVITY_EARTH)
#define ACCEL_LIS3DH_RESOLUTION     (0.001f*GRAVITY_EARTH)
#define ACCEL_LIS3DH_POWER      (1.0f)
//ACCEL_ID_KXSD9
#define ACCEL_KXSD9_RANGE       (2.5006f*GRAVITY_EARTH)
#define ACCEL_KXSD9_RESOLUTION      (0.001f*GRAVITY_EARTH)
#define ACCEL_KXSD9_POWER       (1.0f)
//ACCEL_ID_KXTF9
#define ACCEL_KXTF9_RANGE       (1.0f*GRAVITY_EARTH)
#define ACCEL_KXTF9_RESOLUTION      (0.033f*GRAVITY_EARTH)
#define ACCEL_KXTF9_POWER       (0.35f)
//ACCEL_ID_BMA150
#define ACCEL_BMA150_RANGE      (2.0f*GRAVITY_EARTH)
#define ACCEL_BMA150_RESOLUTION     (0.004f*GRAVITY_EARTH)
#define ACCEL_BMA150_POWER      (0.2f)
//ACCEL_ID_BMA222
#define ACCEL_BMA222_RANGE      (2.0f*GRAVITY_EARTH)
#define ACCEL_BMA222_RESOLUTION     (0.001f*GRAVITY_EARTH)
#define ACCEL_BMA222_POWER      (0.1f)
//ACCEL_ID_BMA250
#define ACCEL_BMA250_RANGE      (2.0f*GRAVITY_EARTH)
#define ACCEL_BMA250_RESOLUTION     (0.00391f*GRAVITY_EARTH)
#define ACCEL_BMA250_POWER      (0.139f)
//ACCEL_ID_ADXL34X
#define ACCEL_ADXL34X_RANGE     (2.0f*GRAVITY_EARTH)
#define ACCEL_ADXL34X_RESOLUTION    (0.001f*GRAVITY_EARTH)
#define ACCEL_ADXL34X_POWER     (1.0f)
//ACCEL_ID_MMA8450
#define ACCEL_MMA8450_RANGE     (2.0f*GRAVITY_EARTH)
#define ACCEL_MMA8450_RESOLUTION    (0.001f*GRAVITY_EARTH)
#define ACCEL_MMA8450_POWER     (1.0f)
//ACCEL_ID_MMA845X
#define ACCEL_MMA845X_RANGE     (2.0f*GRAVITY_EARTH)
#define ACCEL_MMA845X_RESOLUTION    (0.001f*GRAVITY_EARTH)
#define ACCEL_MMA845X_POWER     (1.0f)
//ACCEL_ID_MPU6050
#define ACCEL_MPU6050_RANGE     (2.0f*GRAVITY_EARTH)
#define ACCEL_MPU6050_RESOLUTION    (0.004f*GRAVITY_EARTH)
#define ACCEL_MPU6050_POWER     (0.0f)
/******************************************/
//GYRO MPU3050
#define RAD_P_DEG (3.14159f/180.0f)
#define GYRO_MPU3050_RANGE      (2000.0f*RAD_P_DEG)
#define GYRO_MPU3050_RESOLUTION     (32.8f*RAD_P_DEG)
#define GYRO_MPU3050_POWER      (6.1f)
//GYRO MPU6050
#define GYRO_MPU6050_RANGE      (2000.0f*RAD_P_DEG)
#define GYRO_MPU6050_RESOLUTION     (16.4f*RAD_P_DEG)
#define GYRO_MPU6050_POWER      (5.5f)

#endif

