sensors.h revision 8857714a5b23734eebfcfab171021d9220475a08
1/* 2* Copyright (C) 2014 Invensense, Inc. 3* 4* Licensed under the Apache License, Version 2.0 (the "License"); 5* you may not use this file except in compliance with the License. 6* You may obtain a copy of the License at 7* 8* http://www.apache.org/licenses/LICENSE-2.0 9* 10* Unless required by applicable law or agreed to in writing, software 11* distributed under the License is distributed on an "AS IS" BASIS, 12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13* See the License for the specific language governing permissions and 14* limitations under the License. 15*/ 16 17#ifndef ANDROID_SENSORS_H 18#define ANDROID_SENSORS_H 19 20#include <stdint.h> 21#include <errno.h> 22#include <sys/cdefs.h> 23#include <sys/types.h> 24 25#include <linux/input.h> 26 27#include <hardware/hardware.h> 28#include <hardware/sensors.h> 29 30__BEGIN_DECLS 31 32/*****************************************************************************/ 33 34#ifndef ARRAY_SIZE 35#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) 36#endif 37 38#undef ENABLE_PRESSURE 39 40enum { 41 ID_GY = 0, 42 ID_RG, 43 ID_A, 44 ID_M, 45 ID_RM, 46 ID_PS, 47 ID_O, 48 ID_RV, 49 ID_GRV, 50 ID_LA, 51 ID_GR, 52 ID_SM, 53 ID_P, 54 ID_SC, 55 ID_GMRV, 56 ID_SO 57}; 58 59enum { 60 Gyro = 0, 61 RawGyro, 62 Accelerometer, 63 MagneticField, 64 RawMagneticField, 65 Pressure, 66 Orientation, 67 RotationVector, 68 GameRotationVector, 69 LinearAccel, 70 Gravity, 71 SignificantMotion, 72 StepDetector, 73 StepCounter, 74 GeomagneticRotationVector, 75 NumSensors 76}; 77 78/* Physical parameters of the sensors supported by Invensense MPL */ 79#define SENSORS_GYROSCOPE_HANDLE (ID_GY) 80#define SENSORS_RAW_GYROSCOPE_HANDLE (ID_RG) 81#define SENSORS_ACCELERATION_HANDLE (ID_A) 82#define SENSORS_MAGNETIC_FIELD_HANDLE (ID_M) 83#define SENSORS_RAW_MAGNETIC_FIELD_HANDLE (ID_RM) 84#define SENSORS_PRESSURE_HANDLE (ID_PS) 85#define SENSORS_ORIENTATION_HANDLE (ID_O) 86#define SENSORS_ROTATION_VECTOR_HANDLE (ID_RV) 87#define SENSORS_GAME_ROTATION_VECTOR_HANDLE (ID_GRV) 88#define SENSORS_LINEAR_ACCEL_HANDLE (ID_LA) 89#define SENSORS_GRAVITY_HANDLE (ID_GR) 90#define SENSORS_SIGNIFICANT_MOTION_HANDLE (ID_SM) 91#define SENSORS_PEDOMETER_HANDLE (ID_P) 92#define SENSORS_STEP_COUNTER_HANDLE (ID_SC) 93#define SENSORS_GEOMAGNETIC_ROTATION_VECTOR_HANDLE (ID_GMRV) 94#define SENSORS_SCREEN_ORIENTATION_HANDLE (ID_SO) 95 96/*****************************************************************************/ 97 98/* 99 Android KitKat 100 Populate sensor_t structure according to hardware sensors.h 101 { name, vendor, version, handle, type, maxRange, resolution, power, minDelay, 102 fifoReservedEventCount, fifoMaxEventCount, reserved[] } 103*/ 104#if defined ANDROID_KITKAT 105static struct sensor_t sBaseSensorList[] = 106{ 107 {"MPL Gyroscope", "Invensense", 1, 108 SENSORS_GYROSCOPE_HANDLE, 109 SENSOR_TYPE_GYROSCOPE, 2000.0f, 1.0f, 0.5f, 10000, 0, 124, {}}, 110 {"MPL Raw Gyroscope", "Invensense", 1, 111 SENSORS_RAW_GYROSCOPE_HANDLE, 112 SENSOR_TYPE_GYROSCOPE_UNCALIBRATED, 2000.0f, 1.0f, 0.5f, 10000, 0, 124, {}}, 113 {"MPL Accelerometer", "Invensense", 1, 114 SENSORS_ACCELERATION_HANDLE, 115 SENSOR_TYPE_ACCELEROMETER, 10240.0f, 1.0f, 0.5f, 10000, 0, 124, {}}, 116 {"MPL Magnetic Field", "Invensense", 1, 117 SENSORS_MAGNETIC_FIELD_HANDLE, 118 SENSOR_TYPE_MAGNETIC_FIELD, 10240.0f, 1.0f, 0.5f, 10000, 0, 124, {}}, 119 {"MPL Raw Magnetic Field", "Invensense", 1, 120 SENSORS_RAW_MAGNETIC_FIELD_HANDLE, 121 SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED, 10240.0f, 1.0f, 0.5f, 10000, 0, 124, {}}, 122#ifdef ENABLE_PRESSURE 123 {"MPL Pressure", "Invensense", 1, 124 SENSORS_PRESSURE_HANDLE, 125 SENSOR_TYPE_PRESSURE, 10240.0f, 1.0f, 0.5f, 10000, 0, 165, {}}, 126#endif 127 {"MPL Orientation", "Invensense", 1, 128 SENSORS_ORIENTATION_HANDLE, 129 SENSOR_TYPE_ORIENTATION, 360.0f, 1.0f, 9.7f, 10000, 0, 0, {}}, 130 {"MPL Rotation Vector", "Invensense", 1, 131 SENSORS_ROTATION_VECTOR_HANDLE, 132 SENSOR_TYPE_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, {}}, 133 {"MPL Game Rotation Vector", "Invensense", 1, 134 SENSORS_GAME_ROTATION_VECTOR_HANDLE, 135 SENSOR_TYPE_GAME_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, 0, 62, {}}, 136 {"MPL Linear Acceleration", "Invensense", 1, 137 SENSORS_LINEAR_ACCEL_HANDLE, 138 SENSOR_TYPE_LINEAR_ACCELERATION, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, {}}, 139 {"MPL Gravity", "Invensense", 1, 140 SENSORS_GRAVITY_HANDLE, 141 SENSOR_TYPE_GRAVITY, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, {}}, 142 {"MPL Significant Motion", "Invensense", 1, 143 SENSORS_SIGNIFICANT_MOTION_HANDLE, 144 SENSOR_TYPE_SIGNIFICANT_MOTION, 100.0f, 1.0f, 1.1f, 0, 0, 0, {}}, 145 {"MPL Step Detector", "Invensense", 1, 146 SENSORS_PEDOMETER_HANDLE, 147 SENSOR_TYPE_STEP_DETECTOR, 100.0f, 1.0f, 1.1f, 0, 0, 124, {}}, 148 {"MPL Step Counter", "Invensense", 1, 149 SENSORS_STEP_COUNTER_HANDLE, 150 SENSOR_TYPE_STEP_COUNTER, 100.0f, 1.0f, 1.1f, 0, 0, 0, {}}, 151 {"MPL Geomagnetic Rotation Vector", "Invensense", 1, 152 SENSORS_GEOMAGNETIC_ROTATION_VECTOR_HANDLE, 153 SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 5000, 0, 0, {}}, 154#ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION 155 {"MPL Screen Orientation", "Invensense ", 1, 156 SENSORS_SCREEN_ORIENTATION_HANDLE, 157 SENSOR_TYPE_SCREEN_ORIENTATION, 100.0f, 1.0f, 1.1f, 0, 0, 0, {}}, 158#endif 159}; 160#else //ANDROID_KITKAT END 161static struct sensor_t sBaseSensorList[] = 162{ 163 {"MPL Gyroscope", "Invensense", 1, 164 SENSORS_GYROSCOPE_HANDLE, 165 SENSOR_TYPE_GYROSCOPE, 2000.0f, 1.0f, 0.5f, 10000, {}}, 166 {"MPL Raw Gyroscope", "Invensense", 1, 167 SENSORS_RAW_GYROSCOPE_HANDLE, 168 SENSOR_TYPE_GYROSCOPE_UNCALIBRATED, 2000.0f, 1.0f, 0.5f, 10000, {}}, 169 {"MPL Accelerometer", "Invensense", 1, 170 SENSORS_ACCELERATION_HANDLE, 171 SENSOR_TYPE_ACCELEROMETER, 10240.0f, 1.0f, 0.5f, 10000, {}}, 172 {"MPL Magnetic Field", "Invensense", 1, 173 SENSORS_MAGNETIC_FIELD_HANDLE, 174 SENSOR_TYPE_MAGNETIC_FIELD, 10240.0f, 1.0f, 0.5f, 10000, {}}, 175 {"MPL Raw Magnetic Field", "Invensense", 1, 176 SENSORS_RAW_MAGNETIC_FIELD_HANDLE, 177 SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED, 10240.0f, 1.0f, 0.5f, 10000, {}}, 178#ifdef ENABLE_PRESSURE 179 {"MPL Pressure", "Invensense", 1, 180 SENSORS_PRESSURE_HANDLE, 181 SENSOR_TYPE_PRESSURE, 10240.0f, 1.0f, 0.5f, 10000, {}}, 182#endif 183 {"MPL Orientation", "Invensense", 1, 184 SENSORS_ORIENTATION_HANDLE, 185 SENSOR_TYPE_ORIENTATION, 360.0f, 1.0f, 9.7f, 10000, {}}, 186 {"MPL Rotation Vector", "Invensense", 1, 187 SENSORS_ROTATION_VECTOR_HANDLE, 188 SENSOR_TYPE_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, {}}, 189 {"MPL Game Rotation Vector", "Invensense", 1, 190 SENSORS_GAME_ROTATION_VECTOR_HANDLE, 191 SENSOR_TYPE_GAME_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, {}}, 192 {"MPL Linear Acceleration", "Invensense", 1, 193 SENSORS_LINEAR_ACCEL_HANDLE, 194 SENSOR_TYPE_LINEAR_ACCELERATION, 10240.0f, 1.0f, 0.5f, 10000, {}}, 195 {"MPL Gravity", "Invensense", 1, 196 SENSORS_GRAVITY_HANDLE, 197 SENSOR_TYPE_GRAVITY, 10240.0f, 1.0f, 0.5f, 10000, {}}, 198 {"MPL Significant Motion", "Invensense", 1, 199 SENSORS_SIGNIFICANT_MOTION_HANDLE, 200 SENSOR_TYPE_SIGNIFICANT_MOTION, 100.0f, 1.0f, 1.1f, 0, {}}, 201 {"MPL Step Detector", "Invensense", 1, 202 SENSORS_PEDOMETER_HANDLE, 203 SENSOR_TYPE_STEP_DETECTOR, 100.0f, 1.0f, 1.1f, 0, {}}, 204 {"MPL Step Counter", "Invensense", 1, 205 SENSORS_STEP_COUNTER_HANDLE, 206 SENSOR_TYPE_STEP_COUNTER, 100.0f, 1.0f, 1.1f, 0, {}}, 207 {"MPL Geomagnetic Rotation Vector", "Invensense", 1, 208 SENSORS_GEOMAGNETIC_ROTATION_VECTOR_HANDLE, 209 SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, {}}, 210#ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION 211 {"MPL Screen Orientation", "Invensense ", 1, 212 SENSORS_SCREEN_ORIENTATION_HANDLE, 213 SENSOR_TYPE_SCREEN_ORIENTATION, 100.0f, 1.0f, 1.1f, 0, {}}, 214#endif 215}; 216#endif //ANDROID_JELLYBEAN END 217 218/*****************************************************************************/ 219 220/* 221 * The SENSORS Module 222 */ 223 224/* ITG3500 */ 225#define EVENT_TYPE_GYRO_X REL_X 226#define EVENT_TYPE_GYRO_Y REL_Y 227#define EVENT_TYPE_GYRO_Z REL_Z 228/* MPU6050 MPU9150 */ 229#define EVENT_TYPE_IACCEL_X REL_RX 230#define EVENT_TYPE_IACCEL_Y REL_RY 231#define EVENT_TYPE_IACCEL_Z REL_RZ 232/* MPU6050 MPU9150 */ 233#define EVENT_TYPE_ICOMPASS_X REL_X 234#define EVENT_TYPE_ICOMPASS_Y REL_Y 235#define EVENT_TYPE_ICOMPASS_Z REL_Z 236/* MPUxxxx */ 237#define EVENT_TYPE_TIMESTAMP_HI REL_MISC 238#define EVENT_TYPE_TIMESTAMP_LO REL_WHEEL 239 240/* Accel BMA250 */ 241#define EVENT_TYPE_ACCEL_X ABS_X 242#define EVENT_TYPE_ACCEL_Y ABS_Y 243#define EVENT_TYPE_ACCEL_Z ABS_Z 244#define LSG (1000.0f) 245 246// conversion of acceleration data to SI units (m/s^2) 247#define RANGE_A (4*GRAVITY_EARTH) 248#define RESOLUTION_A (GRAVITY_EARTH / LSG) 249#define CONVERT_A (GRAVITY_EARTH / LSG) 250#define CONVERT_A_X (CONVERT_A) 251#define CONVERT_A_Y (CONVERT_A) 252#define CONVERT_A_Z (CONVERT_A) 253 254/* AKM compasses */ 255#define EVENT_TYPE_MAGV_X ABS_RX 256#define EVENT_TYPE_MAGV_Y ABS_RY 257#define EVENT_TYPE_MAGV_Z ABS_RZ 258#define EVENT_TYPE_MAGV_STATUS ABS_RUDDER 259 260/* conversion of magnetic data to uT units */ 261#define CONVERT_M (0.06f) 262 263/* conversion of sensor rates */ 264#define hertz_request = 200; 265#define DEFAULT_MPL_GYRO_RATE (20000L) //us 266#define DEFAULT_MPL_COMPASS_RATE (20000L) //us 267 268#define DEFAULT_HW_GYRO_RATE (100) //Hz 269#define DEFAULT_HW_ACCEL_RATE (20) //ms 270#define DEFAULT_HW_COMPASS_RATE (20000000L) //ns 271#define DEFAULT_HW_AKMD_COMPASS_RATE (200000000L) //ns 272 273/* convert ns to hardware units */ 274#define HW_GYRO_RATE_NS (1000000000LL / rate_request) // to Hz 275#define HW_ACCEL_RATE_NS (rate_request / (1000000L)) // to ms 276#define HW_COMPASS_RATE_NS (rate_request) // to ns 277 278/* convert Hz to hardware units */ 279#define HW_GYRO_RATE_HZ (hertz_request) 280#define HW_ACCEL_RATE_HZ (1000 / hertz_request) 281#define HW_COMPASS_RATE_HZ (1000000000LL / hertz_request) 282 283#define RATE_200HZ 5000000LL 284#define RATE_15HZ 66667000LL 285#define RATE_5HZ 200000000LL 286__END_DECLS 287 288#endif // ANDROID_SENSORS_H 289