149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* 249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* Copyright (C) 2012 Invensense, Inc. 349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* 449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* Licensed under the Apache License, Version 2.0 (the "License"); 549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* you may not use this file except in compliance with the License. 649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* You may obtain a copy of the License at 749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* 849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* http://www.apache.org/licenses/LICENSE-2.0 949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* 1049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* Unless required by applicable law or agreed to in writing, software 1149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* distributed under the License is distributed on an "AS IS" BASIS, 1249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* See the License for the specific language governing permissions and 1449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* limitations under the License. 1549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow*/ 1649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 1749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef ANDROID_MPL_SENSOR_H 1849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define ANDROID_MPL_SENSOR_H 1949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 2049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <stdint.h> 2149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <errno.h> 2249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <sys/cdefs.h> 2349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <sys/types.h> 2449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <poll.h> 2549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <time.h> 2649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <utils/Vector.h> 2749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <utils/KeyedVector.h> 2849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <utils/String8.h> 2949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "sensors.h" 3049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "SensorBase.h" 3149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "InputEventReader.h" 3249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 3349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef INVENSENSE_COMPASS_CAL 3449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#pragma message("unified HAL for AKM") 3549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "CompassSensor.AKM.h" 3649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif 3749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 3849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef SENSOR_ON_PRIMARY_BUS 3949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#pragma message("Sensor on Primary Bus") 4049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "CompassSensor.IIO.primary.h" 4149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#else 4249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#pragma message("Sensor on Secondary Bus") 4349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include "CompassSensor.IIO.9150.h" 4449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif 4549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 4649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowclass PressureSensor; 474a28f9c897c46c42a255823f7e307169a828a025Rosa Chow 4849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*****************************************************************************/ 4949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* Sensors Enable/Disable Mask 5049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *****************************************************************************/ 5149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MAX_CHIP_ID_LEN (20) 5249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 5349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define INV_THREE_AXIS_GYRO (0x000F) 5449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define INV_THREE_AXIS_ACCEL (0x0070) 5549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define INV_THREE_AXIS_COMPASS (0x0380) 5649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define INV_ONE_AXIS_PRESSURE (0x0400) 5749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define INV_ALL_SENSORS (0x7FFF) 5849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 5949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef INVENSENSE_COMPASS_CAL 6049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define ALL_MPL_SENSORS_NP (INV_THREE_AXIS_ACCEL \ 6149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | INV_THREE_AXIS_COMPASS \ 6249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | INV_THREE_AXIS_GYRO) 6349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#else 6449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define ALL_MPL_SENSORS_NP (INV_THREE_AXIS_ACCEL \ 6549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | INV_THREE_AXIS_COMPASS \ 6649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | INV_THREE_AXIS_GYRO) 6749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif 6849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 6949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow// bit mask of current active features (mMplFeatureActiveMask) 7049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define INV_COMPASS_CAL 0x01 7149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define INV_COMPASS_FIT 0x02 7249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow// bit mask of current active features (mFeatureActiveMask) 734a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define INV_DMP_QUATERNION 0x001 //3 elements without real part, 32 bit each 744a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define INV_DMP_DISPL_ORIENTATION 0x002 754a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define INV_DMP_SIGNIFICANT_MOTION 0x004 764a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define INV_DMP_PEDOMETER 0x008 774a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define INV_DMP_PEDOMETER_STEP 0x010 784a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define INV_DMP_PED_STANDALONE 0x020 //timestamps only 794a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define INV_DMP_6AXIS_QUATERNION 0x040 //3 elements without real part, 32 bit each 804a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define INV_DMP_PED_QUATERNION 0x080 //3 elements without real part, 16 bit each 814a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define INV_DMP_PED_INDICATOR 0x100 //tag along header with step indciator 824a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define INV_DMP_BATCH_MODE 0x200 834a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define INV_DMP_ACCEL_PED (0xffff) 8449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 8549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow// bit mask of whether screen orientation is on 8649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*#define SCREEN_ORIENTATION_MASK ( \ 8749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow (isDmpDisplayOrientationOn() \ 8849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow && ((1 << INV_DMP_DISPL_ORIENTATION) \ 8949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow || !isDmpScreenAutoRotationEnabled())) \ 9049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow)*/ 9149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow// bit mask of whether DMP should be turned on 9249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DMP_FEATURE_MASK ( \ 9349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow (INV_DMP_QUATERNION) \ 9449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | (INV_DMP_DISPL_ORIENTATION) \ 9549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | (INV_DMP_SIGNIFICANT_MOTION) \ 9649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | (INV_DMP_PEDOMETER) \ 974a28f9c897c46c42a255823f7e307169a828a025Rosa Chow | (INV_DMP_PEDOMETER_STEP) \ 9849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | (INV_DMP_6AXIS_QUATERNION) \ 9949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | (INV_DMP_PED_QUATERNION) \ 10049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | (INV_DMP_BATCH_MODE) \ 10149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow) 10249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow// bit mask of DMP features as sensors 10349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DMP_SENSOR_MASK ( \ 10449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow (INV_DMP_DISPL_ORIENTATION) \ 10549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | (INV_DMP_SIGNIFICANT_MOTION) \ 10649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | (INV_DMP_PEDOMETER) \ 1074a28f9c897c46c42a255823f7e307169a828a025Rosa Chow | (INV_DMP_PEDOMETER_STEP) \ 10849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow | (INV_DMP_6AXIS_QUATERNION) \ 10949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow) 11049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow// data header format used by kernel driver. 1114a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define DATA_FORMAT_STEP 0x0001 112cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro#define DATA_FORMAT_MARKER 0x0010 1134a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define DATA_FORMAT_PED_STANDALONE 0x0100 11449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_PED_QUAT 0x0200 11549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_6_AXIS 0x0400 11649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_QUAT 0x0800 11749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_COMPASS 0x1000 11849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_GYRO 0x2000 11949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_ACCEL 0x4000 12049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_PRESSURE 0x8000 12149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_MASK 0xffff 12249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 12349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define BYTES_PER_SENSOR 8 12449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define BYTES_PER_SENSOR_PACKET 16 12549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define QUAT_ONLY_LAST_PACKET_OFFSET 16 12649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define BYTES_QUAT_DATA 24 12749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MAX_SUSPEND_BATCH_PACKET_SIZE 1024 12849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MAX_PACKET_SIZE 80 //8 * 4 + (2 * 24) 12949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 13049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* Uncomment to enable Low Power Quaternion */ 13149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define ENABLE_LP_QUAT_FEAT 13249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 13349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* Uncomment to enable DMP display orientation 13449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow (within the HAL, see below for Java framework) */ 13549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow//#define ENABLE_DMP_DISPL_ORIENT_FEAT 13649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 13749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef ENABLE_DMP_DISPL_ORIENT_FEAT 13849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* Uncomment following to expose the SENSOR_TYPE_SCREEN_ORIENTATION 13949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow sensor type (DMP screen orientation) to the Java framework. 14049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow NOTE: 14149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow need Invensense customized 14249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 'hardware/libhardware/include/hardware/sensors.h' to compile correctly. 14349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow NOTE: 14449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow need Invensense java framework changes to: 14549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 'frameworks/base/core/java/android/view/WindowOrientationListener.java' 14649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 'frameworks/base/core/java/android/hardware/Sensor.java' 14749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 'frameworks/base/core/java/android/hardware/SensorEvent.java' 14849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow for the 'Auto-rotate screen' to use this feature. 14949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow*/ 15049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define ENABLE_DMP_SCREEN_AUTO_ROTATION 15149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#pragma message("ENABLE_DMP_DISPL_ORIENT_FEAT is defined, framework changes are necessary for HAL to work properly") 15249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif 15349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 15449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* Enable Pressure sensor support */ 15549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define ENABLE_PRESSURE 15649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 15749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint isDmpScreenAutoRotationEnabled() 15849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow{ 15949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION 16049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow return 1; 16149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#else 16249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow return 0; 16349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif 16449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow} 16549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 16649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint (*m_pt2AccelCalLoadFunc)(long *bias) = NULL; 16749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*****************************************************************************/ 16849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/** MPLSensor implementation which fits into the HAL example for crespo provided 16949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * by Google. 17049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * WARNING: there may only be one instance of MPLSensor, ever. 17149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */ 17249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 17349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowclass MPLSensor: public SensorBase 17449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow{ 17549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow typedef int (MPLSensor::*hfunc_t)(sensors_event_t*); 17649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 17749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowpublic: 17849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 17949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow enum { 18049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow Gyro = 0, 18149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow RawGyro, 18249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow Accelerometer, 18349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow MagneticField, 18449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow RawMagneticField, 18549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow Pressure, 18649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow Orientation, 18749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow RotationVector, 18849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow GameRotationVector, 18949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow LinearAccel, 19049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow Gravity, 19149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow SignificantMotion, 19249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow StepDetector, 19349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow StepCounter, 19449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow GeomagneticRotationVector, 19549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow NumSensors 19649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow }; 19749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 19849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow MPLSensor(CompassSensor *, int (*m_pt2AccelCalLoadFunc)(long*) = 0); 19949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual ~MPLSensor(); 20049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 20149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int setDelay(int32_t handle, int64_t ns); 20249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int enable(int32_t handle, int enabled); 20349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int batch(int handle, int flags, int64_t period_ns, int64_t timeout); 204cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro virtual int flush(int handle); 205cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro int checkBatchEnabled(); 2064a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int setBatch(int en, int toggleEnable); 20749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int32_t getEnableMask() { return mEnabled; } 20849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void getHandle(int32_t handle, int &what, android::String8 &sname); 20949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 21049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int readEvents(sensors_event_t *data, int count); 21149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int getFd() const; 21249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int getAccelFd() const; 21349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int getCompassFd() const; 21449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int getPollTime(); 21549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int getStepCountPollTime(); 21649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual bool hasPendingEvents() const; 21749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual bool hasStepCountPendingEvents(); 21849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual void sleepEvent(); 21949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual void wakeEvent(); 22049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int populateSensorList(struct sensor_t *list, int len); 22149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void cbProcData(); 22249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 22349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow //static pointer to the object that will handle callbacks 22449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow static MPLSensor* gMPLSensor; 22549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 22649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int readAccelEvents(sensors_event_t* data, int count); 22749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void buildCompassEvent(); 22849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void buildMpuEvent(); 22949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 23049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int turnOffAccelFifo(); 23149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int turnOffGyroFifo(); 23249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableDmpOrientation(int); 23349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int dmpOrientHandler(int); 23449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int readDmpOrientEvents(sensors_event_t* data, int count); 23549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int getDmpOrientFd(); 23649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int openDmpOrientFd(); 23749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int closeDmpOrientFd(); 23849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 23949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int getDmpRate(int64_t *); 24049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int checkDMPOrientation(); 24149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 24249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int getDmpSignificantMotionFd(); 24349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int readDmpSignificantMotionEvents(sensors_event_t* data, int count); 24449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableDmpSignificantMotion(int); 24549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int significantMotionHandler(sensors_event_t* data); 24649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool checkSmdSupport(){return (mDmpSignificantMotionEnabled);}; 24749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 24849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableDmpPedometer(int, int); 24949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int readDmpPedometerEvents(sensors_event_t* data, int count, int32_t id, int32_t type, int outputType); 25049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int getDmpPedometerFd(); 25149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool checkPedometerSupport() {return (mDmpPedometerEnabled || mDmpStepCountEnabled);}; 25249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool checkOrientationSupport() {return ((isDmpDisplayOrientationOn() 25349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow && (mDmpOrientationEnabled 25449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow || !isDmpScreenAutoRotationEnabled())));}; 25549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 25649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowprotected: 25749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow CompassSensor *mCompassSensor; 25849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow PressureSensor *mPressureSensor; 25949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 26049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyroHandler(sensors_event_t *data); 26149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int rawGyroHandler(sensors_event_t *data); 26249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accelHandler(sensors_event_t *data); 26349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int compassHandler(sensors_event_t *data); 26449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int rawCompassHandler(sensors_event_t *data); 26549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int rvHandler(sensors_event_t *data); 26649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int grvHandler(sensors_event_t *data); 26749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int laHandler(sensors_event_t *data); 26849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gravHandler(sensors_event_t *data); 26949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int orienHandler(sensors_event_t *data); 27049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int smHandler(sensors_event_t *data); 27149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int pHandler(sensors_event_t *data); 27249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int scHandler(sensors_event_t *data); 27349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gmHandler(sensors_event_t *data); 27449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int psHandler(sensors_event_t *data); 275cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro int metaHandler(sensors_event_t *data, int flags); 27649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void calcOrientationSensor(float *Rx, float *Val); 27749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int update_delay(); 27849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 27949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void inv_set_device_properties(); 28049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_constructor_init(); 28149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_constructor_default_enable(); 28249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int setGyroInitialState(); 28349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int setAccelInitialState(); 28449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int masterEnable(int en); 2854a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int enablePedStandalone(int en); 2864a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int enablePedStandaloneData(int en); 28749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enablePedQuaternion(int); 28849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enablePedQuaternionData(int); 28949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enable6AxisQuaternion(int); 29049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enable6AxisQuaternionData(int); 29149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableLPQuaternion(int); 29249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableQuaternionData(int); 29349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableAccelPedometer(int); 29449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableAccelPedData(int); 29549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int onDmp(int); 29649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableGyro(int en); 297cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro int enableLowPowerAccel(int en); 29849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableAccel(int en); 29949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableCompass(int en, int rawSensorOn); 30049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enablePressure(int en); 3014a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int enableBatch(int64_t timeout); 30249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void computeLocalSensorMask(int enabled_sensors); 30349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int computeBatchSensorMask(int enableSensor, int checkNewBatchSensor); 30449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int computeBatchDataOutput(); 30549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableSensors(unsigned long sensors, int en, uint32_t changed); 30649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_read_gyro_buffer(int fd, short *data, long long *timestamp); 30749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_float_to_q16(float *fdata, long *ldata); 30849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_long_to_q16(long *fdata, long *ldata); 30949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_float_to_round(float *fdata, long *ldata); 31049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_float_to_round2(float *fdata, short *sdata); 31149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_long_to_float(long *ldata, float *fdata); 31249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_read_temperature(long long *data); 31349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_read_dmp_state(int fd); 31449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_read_sensor_bias(int fd, long *data); 31549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void inv_get_sensors_orientation(void); 31649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_init_sysfs_attributes(void); 31749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int resetCompass(void); 31849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void setCompassDelay(int64_t ns); 31949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void enable_iio_sysfs(void); 32049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enablePedometer(int); 3214a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int enablePedIndicator(int en); 3224a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int checkPedStandaloneEnabled(void); 32349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int checkPedQuatEnabled(); 32449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int check6AxisQuatEnabled(); 325cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro int checkLPQRateSupported(); 32649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int checkLPQuaternion(); 32749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int checkAccelPed(); 328cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro void setInitial6QuatValue(); 32949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int writeSignificantMotionParams(bool toggleEnable, 33049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint32_t delayThreshold1, uint32_t delayThreshold2, 33149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint32_t motionThreshold); 33249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 33349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mNewData; // flag indicating that the MPL calculated new output values 33449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mDmpStarted; 33549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mMasterSensorMask; 33649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mLocalSensorMask; 33749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mPollTime; 33849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mStepCountPollTime; 33949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mHaveGoodMpuCal; // flag indicating that the cal file can be written 34049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mGyroAccuracy; // value indicating the quality of the gyro calibr. 34149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mAccelAccuracy; // value indicating the quality of the accel calibr. 34249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mCompassAccuracy; // value indicating the quality of the compass calibr. 34349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow struct pollfd mPollFds[5]; 34449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mSampleCount; 34549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow pthread_mutex_t mMplMutex; 34649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow pthread_mutex_t mHALMutex; 34749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 34849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char mIIOBuffer[(16 + 8 * 3 + 8) * IIO_BUFFER_LENGTH]; 34949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 35049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int iio_fd; 35149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_fd; 35249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mpufifo_fd; 35349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_temperature_fd; 35449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_x_offset_fd; 35549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_y_offset_fd; 35649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_z_offset_fd; 35749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 35849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_x_dmp_bias_fd; 35949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_y_dmp_bias_fd; 36049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_z_dmp_bias_fd; 36149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 36249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_x_offset_fd; 36349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_y_offset_fd; 36449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_z_offset_fd; 36549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 36649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_x_dmp_bias_fd; 36749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_y_dmp_bias_fd; 36849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_z_dmp_bias_fd; 36949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 37049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int dmp_orient_fd; 37149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mDmpOrientationEnabled; 37249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 37349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int dmp_sign_motion_fd; 37449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mDmpSignificantMotionEnabled; 37549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 37649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int dmp_pedometer_fd; 37749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mDmpPedometerEnabled; 37849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mDmpStepCountEnabled; 37949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 38049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint32_t mEnabled; 38149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint32_t mBatchEnabled; 382cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro int32_t mFlushEnabled; 383cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro uint32_t mOldBatchEnabledMask; 38449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mBatchTimeoutInMs; 38549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow sensors_event_t mPendingEvents[NumSensors]; 38649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mDelays[NumSensors]; 38749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mBatchDelays[NumSensors]; 3884a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int64_t mBatchTimeouts[NumSensors]; 38949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow hfunc_t mHandlers[NumSensors]; 39049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow short mCachedGyroData[3]; 39149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCachedAccelData[3]; 39249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCachedCompassData[3]; 39349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCachedQuaternionData[3]; 39449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCached6AxisQuaternionData[3]; 39549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCachedPedQuaternionData[3]; 39649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCachedPressureData; 39749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow android::KeyedVector<int, int> mIrqFds; 39849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 39949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow InputEventCircularReader mAccelInputReader; 40049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow InputEventCircularReader mGyroInputReader; 40149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 40249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mFirstRead; 40349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow short mTempScale; 40449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow short mTempOffset; 40549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mTempCurrentTime; 40649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mAccelScale; 407cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro long mAccelSelfTestScale; 40849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mGyroScale; 4094a28f9c897c46c42a255823f7e307169a828a025Rosa Chow long mGyroSelfTestScale; 41049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCompassScale; 41149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow float mCompassBias[3]; 41249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mFactoryGyroBiasAvailable; 41349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mFactoryGyroBias[3]; 41449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mGyroBiasAvailable; 41549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mGyroBiasApplied; 41649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow float mGyroBias[3]; //in body frame 41749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mGyroChipBias[3]; //in chip frame 41849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mFactoryAccelBiasAvailable; 41949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mFactoryAccelBias[3]; 42049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mAccelBiasAvailable; 42149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mAccelBiasApplied; 42249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mAccelBias[3]; //in chip frame 42349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 42449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint32_t mPendingMask; 42549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow unsigned long mSensorMask; 42649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 42749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char chip_ID[MAX_CHIP_ID_LEN]; 42849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char mSysfsPath[MAX_SYSFS_NAME_LEN]; 42949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 43049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow signed char mGyroOrientation[9]; 43149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow signed char mAccelOrientation[9]; 43249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 43349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mSensorTimestamp; 43449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mCompassTimestamp; 43549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mPressureTimestamp; 43649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 43749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow struct sysfs_attrbs { 43849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *chip_enable; 43949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *power_state; 440cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro char *master_enable; 44149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *dmp_firmware; 44249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *firmware_loaded; 44349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *dmp_on; 44449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *dmp_int_on; 44549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *dmp_event_int_on; 44649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *tap_on; 44749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *key; 44849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *self_test; 44949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *temperature; 45049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 45149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *gyro_enable; 45249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *gyro_fifo_rate; 45349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *gyro_fsr; 45449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *gyro_orient; 45549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *gyro_fifo_enable; 4564a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *gyro_rate; 45749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 45849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *accel_enable; 45949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *accel_fifo_rate; 46049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *accel_fsr; 46149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *accel_bias; 46249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *accel_orient; 46349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *accel_fifo_enable; 4644a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *accel_rate; 46549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 46649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *three_axis_q_on; //formerly quaternion_on 4674a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *three_axis_q_rate; 468cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro 46949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *six_axis_q_on; 4704a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *six_axis_q_rate; 471cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro 472cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro char *six_axis_q_value; 473cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro 47449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *ped_q_on; 4754a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *ped_q_rate; 4764a28f9c897c46c42a255823f7e307169a828a025Rosa Chow 4774a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *step_detector_on; 4784a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *step_indicator_on; 47949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 48049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_timestamp_en; 48149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_timestamp_index; 48249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_timestamp_type; 48349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 48449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *buffer_length; 48549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 48649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *display_orientation_on; 48749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *event_display_orientation; 48849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 48949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_accel_x_offset; 49049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_accel_y_offset; 49149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_accel_z_offset; 492cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro char *in_accel_self_test_scale; 49349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 49449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_accel_x_dmp_bias; 49549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_accel_y_dmp_bias; 49649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_accel_z_dmp_bias; 49749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 49849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_gyro_x_offset; 49949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_gyro_y_offset; 50049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_gyro_z_offset; 5014a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *in_gyro_self_test_scale; 50249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 50349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_gyro_x_dmp_bias; 50449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_gyro_y_dmp_bias; 50549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_gyro_z_dmp_bias; 50649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 50749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *event_smd; 50849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *smd_enable; 50949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *smd_delay_threshold; 51049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *smd_delay_threshold2; 51149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *smd_threshold; 51249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *batchmode_timeout; 51349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *batchmode_wake_fifo_full_on; 514cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro char *flush_batch; 51549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 51649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *pedometer_on; 51749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *pedometer_int_on; 51849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *event_pedometer; 51949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *pedometer_steps; 520cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro 521cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro char *motion_lpa_on; 52249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow } mpu; 52349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 52449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *sysfs_names_ptr; 52549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mMplFeatureActiveMask; 52649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint64_t mFeatureActiveMask; 52749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mDmpOn; 52849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mPedUpdate; 529cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro int mPressureUpdate; 53049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mQuatSensorTimestamp; 5314a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int64_t mStepSensorTimestamp; 53249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint64_t mLastStepCount; 5334a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int mLeftOverBufferSize; 5344a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char mLeftOverBuffer[24]; 535cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro bool mInitial6QuatValueAvailable; 536cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro long mInitial6QuatValue[4]; 537cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro bool mFlushBatchSet; 538cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro uint32_t mSkipReadEvents; 53949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 54049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowprivate: 54149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow /* added for dynamic get sensor list */ 54249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillAccel(const char* accel, struct sensor_t *list); 54349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillGyro(const char* gyro, struct sensor_t *list); 54449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillRV(struct sensor_t *list); 54549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillGMRV(struct sensor_t *list); 54649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillGRV(struct sensor_t *list); 54749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillOrientation(struct sensor_t *list); 54849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillGravity(struct sensor_t *list); 54949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillLinearAccel(struct sensor_t *list); 55049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillSignificantMotion(struct sensor_t *list); 55149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION 55249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillScreenOrientation(struct sensor_t *list); 55349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif 55449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void storeCalibration(); 55549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void loadDMP(); 55649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool isMpuNonDmp(); 55749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int isLowPowerQuatEnabled(); 55849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int isDmpDisplayOrientationOn(); 55949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void getCompassBias(); 56049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void getFactoryGyroBias(); 56149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void setFactoryGyroBias(); 56249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void getGyroBias(); 56349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void setGyroBias(); 56449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void getFactoryAccelBias(); 56549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void setFactoryAccelBias(); 56649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void getAccelBias(); 56749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void setAccelBias(); 56849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int isCompassDisabled(); 5694a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int setBatchDataRates(); 5704a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int resetDataRates(); 5714a28f9c897c46c42a255823f7e307169a828a025Rosa Chow void initBias(); 57249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void sys_dump(bool fileMode); 57349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow}; 57449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 57549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowextern "C" { 57649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void setCallbackObject(MPLSensor*); 57749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow MPLSensor *getCallbackObject(); 57849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow} 57949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 58049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif // ANDROID_MPL_SENSOR_H 581