diff options
Diffstat (limited to '6515/libsensors_iio/sensors.h')
-rw-r--r-- | 6515/libsensors_iio/sensors.h | 288 |
1 files changed, 288 insertions, 0 deletions
diff --git a/6515/libsensors_iio/sensors.h b/6515/libsensors_iio/sensors.h new file mode 100644 index 0000000..9920daf --- /dev/null +++ b/6515/libsensors_iio/sensors.h @@ -0,0 +1,288 @@ +/* +* Copyright (C) 2012 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 ANDROID_SENSORS_H +#define ANDROID_SENSORS_H + +#include <stdint.h> +#include <errno.h> +#include <sys/cdefs.h> +#include <sys/types.h> + +#include <linux/input.h> + +#include <hardware/hardware.h> +#include <hardware/sensors.h> + +__BEGIN_DECLS + +/*****************************************************************************/ + +#ifndef ARRAY_SIZE +#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) +#endif + +#define ENABLE_PRESSURE + +enum { + ID_GY = 0, + ID_RG, + ID_A, + ID_M, + ID_RM, + ID_PS, + ID_O, + ID_RV, + ID_GRV, + ID_LA, + ID_GR, + ID_SM, + ID_P, + ID_SC, + ID_GMRV, + ID_SO +}; + +enum { + Gyro = 0, + RawGyro, + Accelerometer, + MagneticField, + RawMagneticField, + Pressure, + Orientation, + RotationVector, + GameRotationVector, + LinearAccel, + Gravity, + SignificantMotion, + StepDetector, + StepCounter, + GeomagneticRotationVector, + NumSensors +}; + +/* Physical parameters of the sensors supported by Invensense MPL */ +#define SENSORS_GYROSCOPE_HANDLE (ID_GY) +#define SENSORS_RAW_GYROSCOPE_HANDLE (ID_RG) +#define SENSORS_ACCELERATION_HANDLE (ID_A) +#define SENSORS_MAGNETIC_FIELD_HANDLE (ID_M) +#define SENSORS_RAW_MAGNETIC_FIELD_HANDLE (ID_RM) +#define SENSORS_PRESSURE_HANDLE (ID_PS) +#define SENSORS_ORIENTATION_HANDLE (ID_O) +#define SENSORS_ROTATION_VECTOR_HANDLE (ID_RV) +#define SENSORS_GAME_ROTATION_VECTOR_HANDLE (ID_GRV) +#define SENSORS_LINEAR_ACCEL_HANDLE (ID_LA) +#define SENSORS_GRAVITY_HANDLE (ID_GR) +#define SENSORS_SIGNIFICANT_MOTION_HANDLE (ID_SM) +#define SENSORS_PEDOMETER_HANDLE (ID_P) +#define SENSORS_STEP_COUNTER_HANDLE (ID_SC) +#define SENSORS_GEOMAGNETIC_ROTATION_VECTOR_HANDLE (ID_GMRV) +#define SENSORS_SCREEN_ORIENTATION_HANDLE (ID_SO) + +/*****************************************************************************/ + +/* + Android KitKat + Populate sensor_t structure according to hardware sensors.h + { name, vendor, version, handle, type, maxRange, resolution, power, minDelay, + fifoReservedEventCount, fifoMaxEventCount, reserved[] } +*/ +#if defined ANDROID_KITKAT +static struct sensor_t sBaseSensorList[] = +{ + {"MPL Gyroscope", "Invensense", 1, + SENSORS_GYROSCOPE_HANDLE, + SENSOR_TYPE_GYROSCOPE, 2000.0f, 1.0f, 0.5f, 10000, 0, 128, {}}, + {"MPL Raw Gyroscope", "Invensense", 1, + SENSORS_RAW_GYROSCOPE_HANDLE, + SENSOR_TYPE_GYROSCOPE_UNCALIBRATED, 2000.0f, 1.0f, 0.5f, 10000, 0, 128, {}}, + {"MPL Accelerometer", "Invensense", 1, + SENSORS_ACCELERATION_HANDLE, + SENSOR_TYPE_ACCELEROMETER, 10240.0f, 1.0f, 0.5f, 10000, 0, 128, {}}, + {"MPL Magnetic Field", "Invensense", 1, + SENSORS_MAGNETIC_FIELD_HANDLE, + SENSOR_TYPE_MAGNETIC_FIELD, 10240.0f, 1.0f, 0.5f, 10000, 0, 128, {}}, + {"MPL Raw Magnetic Field", "Invensense", 1, + SENSORS_RAW_MAGNETIC_FIELD_HANDLE, + SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED, 10240.0f, 1.0f, 0.5f, 10000, 0, 128, {}}, +#ifdef ENABLE_PRESSURE + {"MPL Pressure", "Invensense", 1, + SENSORS_PRESSURE_HANDLE, + SENSOR_TYPE_PRESSURE, 10240.0f, 1.0f, 0.5f, 10000, 0, 128, {}}, +#endif + {"MPL Orientation", "Invensense", 1, + SENSORS_ORIENTATION_HANDLE, + SENSOR_TYPE_ORIENTATION, 360.0f, 1.0f, 9.7f, 10000, 0, 0, {}}, + {"MPL Rotation Vector", "Invensense", 1, + SENSORS_ROTATION_VECTOR_HANDLE, + SENSOR_TYPE_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, {}}, + {"MPL Game Rotation Vector", "Invensense", 1, + SENSORS_GAME_ROTATION_VECTOR_HANDLE, + SENSOR_TYPE_GAME_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, 0, 64, {}}, + {"MPL Linear Acceleration", "Invensense", 1, + SENSORS_LINEAR_ACCEL_HANDLE, + SENSOR_TYPE_LINEAR_ACCELERATION, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, {}}, + {"MPL Gravity", "Invensense", 1, + SENSORS_GRAVITY_HANDLE, + SENSOR_TYPE_GRAVITY, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, {}}, + {"MPL Significant Motion", "Invensense", 1, + SENSORS_SIGNIFICANT_MOTION_HANDLE, + SENSOR_TYPE_SIGNIFICANT_MOTION, 100.0f, 1.0f, 1.1f, 0, 0, 0, {}}, + {"MPL Step Detector", "Invensense", 1, + SENSORS_PEDOMETER_HANDLE, + SENSOR_TYPE_STEP_DETECTOR, 100.0f, 1.0f, 1.1f, 0, 0, 128, {}}, + {"MPL Step Counter", "Invensense", 1, + SENSORS_STEP_COUNTER_HANDLE, + SENSOR_TYPE_STEP_COUNTER, 100.0f, 1.0f, 1.1f, 0, 0, 0, {}}, + {"MPL Geomagnetic Rotation Vector", "Invensense", 1, + SENSORS_GEOMAGNETIC_ROTATION_VECTOR_HANDLE, + SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 5000, 0, 0, {}}, +#ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION + {"MPL Screen Orientation", "Invensense ", 1, + SENSORS_SCREEN_ORIENTATION_HANDLE, + SENSOR_TYPE_SCREEN_ORIENTATION, 100.0f, 1.0f, 1.1f, 0, 0, 0, {}}, +#endif +}; +#else //ANDROID_KITKAT END +static struct sensor_t sBaseSensorList[] = +{ + {"MPL Gyroscope", "Invensense", 1, + SENSORS_GYROSCOPE_HANDLE, + SENSOR_TYPE_GYROSCOPE, 2000.0f, 1.0f, 0.5f, 10000, {}}, + {"MPL Raw Gyroscope", "Invensense", 1, + SENSORS_RAW_GYROSCOPE_HANDLE, + SENSOR_TYPE_GYROSCOPE_UNCALIBRATED, 2000.0f, 1.0f, 0.5f, 10000, {}}, + {"MPL Accelerometer", "Invensense", 1, + SENSORS_ACCELERATION_HANDLE, + SENSOR_TYPE_ACCELEROMETER, 10240.0f, 1.0f, 0.5f, 10000, {}}, + {"MPL Magnetic Field", "Invensense", 1, + SENSORS_MAGNETIC_FIELD_HANDLE, + SENSOR_TYPE_MAGNETIC_FIELD, 10240.0f, 1.0f, 0.5f, 10000, {}}, + {"MPL Raw Magnetic Field", "Invensense", 1, + SENSORS_RAW_MAGNETIC_FIELD_HANDLE, + SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED, 10240.0f, 1.0f, 0.5f, 10000, {}}, +#ifdef ENABLE_PRESSURE + {"MPL Pressure", "Invensense", 1, + SENSORS_PRESSURE_HANDLE, + SENSOR_TYPE_PRESSURE, 10240.0f, 1.0f, 0.5f, 10000, {}}, +#endif + {"MPL Orientation", "Invensense", 1, + SENSORS_ORIENTATION_HANDLE, + SENSOR_TYPE_ORIENTATION, 360.0f, 1.0f, 9.7f, 10000, {}}, + {"MPL Rotation Vector", "Invensense", 1, + SENSORS_ROTATION_VECTOR_HANDLE, + SENSOR_TYPE_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, {}}, + {"MPL Game Rotation Vector", "Invensense", 1, + SENSORS_GAME_ROTATION_VECTOR_HANDLE, + SENSOR_TYPE_GAME_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, {}}, + {"MPL Linear Acceleration", "Invensense", 1, + SENSORS_LINEAR_ACCEL_HANDLE, + SENSOR_TYPE_LINEAR_ACCELERATION, 10240.0f, 1.0f, 0.5f, 10000, {}}, + {"MPL Gravity", "Invensense", 1, + SENSORS_GRAVITY_HANDLE, + SENSOR_TYPE_GRAVITY, 10240.0f, 1.0f, 0.5f, 10000, {}}, + {"MPL Significant Motion", "Invensense", 1, + SENSORS_SIGNIFICANT_MOTION_HANDLE, + SENSOR_TYPE_SIGNIFICANT_MOTION, 100.0f, 1.0f, 1.1f, 0, {}}, + {"MPL Step Detector", "Invensense", 1, + SENSORS_PEDOMETER_HANDLE, + SENSOR_TYPE_STEP_DETECTOR, 100.0f, 1.0f, 1.1f, 0, {}}, + {"MPL Step Counter", "Invensense", 1, + SENSORS_STEP_COUNTER_HANDLE, + SENSOR_TYPE_STEP_COUNTER, 100.0f, 1.0f, 1.1f, 0, {}}, + {"MPL Geomagnetic Rotation Vector", "Invensense", 1, + SENSORS_GEOMAGNETIC_ROTATION_VECTOR_HANDLE, + SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, {}}, +#ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION + {"MPL Screen Orientation", "Invensense ", 1, + SENSORS_SCREEN_ORIENTATION_HANDLE, + SENSOR_TYPE_SCREEN_ORIENTATION, 100.0f, 1.0f, 1.1f, 0, {}}, +#endif +}; +#endif //ANDROID_JELLYBEAN END + +/*****************************************************************************/ + +/* + * The SENSORS Module + */ + +/* ITG3500 */ +#define EVENT_TYPE_GYRO_X REL_X +#define EVENT_TYPE_GYRO_Y REL_Y +#define EVENT_TYPE_GYRO_Z REL_Z +/* MPU6050 MPU9150 */ +#define EVENT_TYPE_IACCEL_X REL_RX +#define EVENT_TYPE_IACCEL_Y REL_RY +#define EVENT_TYPE_IACCEL_Z REL_RZ +/* MPU6050 MPU9150 */ +#define EVENT_TYPE_ICOMPASS_X REL_X +#define EVENT_TYPE_ICOMPASS_Y REL_Y +#define EVENT_TYPE_ICOMPASS_Z REL_Z +/* MPUxxxx */ +#define EVENT_TYPE_TIMESTAMP_HI REL_MISC +#define EVENT_TYPE_TIMESTAMP_LO REL_WHEEL + +/* Accel BMA250 */ +#define EVENT_TYPE_ACCEL_X ABS_X +#define EVENT_TYPE_ACCEL_Y ABS_Y +#define EVENT_TYPE_ACCEL_Z ABS_Z +#define LSG (1000.0f) + +// conversion of acceleration data to SI units (m/s^2) +#define RANGE_A (4*GRAVITY_EARTH) +#define RESOLUTION_A (GRAVITY_EARTH / LSG) +#define CONVERT_A (GRAVITY_EARTH / LSG) +#define CONVERT_A_X (CONVERT_A) +#define CONVERT_A_Y (CONVERT_A) +#define CONVERT_A_Z (CONVERT_A) + +/* AKM compasses */ +#define EVENT_TYPE_MAGV_X ABS_RX +#define EVENT_TYPE_MAGV_Y ABS_RY +#define EVENT_TYPE_MAGV_Z ABS_RZ +#define EVENT_TYPE_MAGV_STATUS ABS_RUDDER + +/* conversion of magnetic data to uT units */ +#define CONVERT_M (0.06f) + +/* conversion of sensor rates */ +#define hertz_request = 200; +#define DEFAULT_MPL_GYRO_RATE (20000L) //us +#define DEFAULT_MPL_COMPASS_RATE (20000L) //us + +#define DEFAULT_HW_GYRO_RATE (100) //Hz +#define DEFAULT_HW_ACCEL_RATE (20) //ms +#define DEFAULT_HW_COMPASS_RATE (20000000L) //ns +#define DEFAULT_HW_AKMD_COMPASS_RATE (200000000L) //ns + +/* convert ns to hardware units */ +#define HW_GYRO_RATE_NS (1000000000LL / rate_request) // to Hz +#define HW_ACCEL_RATE_NS (rate_request / (1000000L)) // to ms +#define HW_COMPASS_RATE_NS (rate_request) // to ns + +/* convert Hz to hardware units */ +#define HW_GYRO_RATE_HZ (hertz_request) +#define HW_ACCEL_RATE_HZ (1000 / hertz_request) +#define HW_COMPASS_RATE_HZ (1000000000LL / hertz_request) + +#define RATE_200HZ 5000000LL +#define RATE_15HZ 66667000LL +#define RATE_5HZ 200000000LL +__END_DECLS + +#endif // ANDROID_SENSORS_H |