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 1124a28f9c897c46c42a255823f7e307169a828a025Rosa Chow#define DATA_FORMAT_PED_STANDALONE 0x0100 11349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_PED_QUAT 0x0200 11449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_6_AXIS 0x0400 11549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_QUAT 0x0800 11649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_COMPASS 0x1000 11749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_GYRO 0x2000 11849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_ACCEL 0x4000 11949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_PRESSURE 0x8000 12049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define DATA_FORMAT_MASK 0xffff 12149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 12249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define BYTES_PER_SENSOR 8 12349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define BYTES_PER_SENSOR_PACKET 16 12449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define QUAT_ONLY_LAST_PACKET_OFFSET 16 12549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define BYTES_QUAT_DATA 24 12649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MAX_SUSPEND_BATCH_PACKET_SIZE 1024 12749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MAX_PACKET_SIZE 80 //8 * 4 + (2 * 24) 12849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 12949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* Uncomment to enable Low Power Quaternion */ 13049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define ENABLE_LP_QUAT_FEAT 13149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 13249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* Uncomment to enable DMP display orientation 13349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow (within the HAL, see below for Java framework) */ 13449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow//#define ENABLE_DMP_DISPL_ORIENT_FEAT 13549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 13649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef ENABLE_DMP_DISPL_ORIENT_FEAT 13749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* Uncomment following to expose the SENSOR_TYPE_SCREEN_ORIENTATION 13849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow sensor type (DMP screen orientation) to the Java framework. 13949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow NOTE: 14049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow need Invensense customized 14149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 'hardware/libhardware/include/hardware/sensors.h' to compile correctly. 14249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow NOTE: 14349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow need Invensense java framework changes to: 14449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 'frameworks/base/core/java/android/view/WindowOrientationListener.java' 14549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 'frameworks/base/core/java/android/hardware/Sensor.java' 14649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 'frameworks/base/core/java/android/hardware/SensorEvent.java' 14749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow for the 'Auto-rotate screen' to use this feature. 14849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow*/ 14949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define ENABLE_DMP_SCREEN_AUTO_ROTATION 15049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#pragma message("ENABLE_DMP_DISPL_ORIENT_FEAT is defined, framework changes are necessary for HAL to work properly") 15149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif 15249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 15349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* Enable Pressure sensor support */ 15449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define ENABLE_PRESSURE 15549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 15649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint isDmpScreenAutoRotationEnabled() 15749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow{ 15849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION 15949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow return 1; 16049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#else 16149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow return 0; 16249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif 16349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow} 16449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 16549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint (*m_pt2AccelCalLoadFunc)(long *bias) = NULL; 16649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*****************************************************************************/ 16749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/** MPLSensor implementation which fits into the HAL example for crespo provided 16849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * by Google. 16949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * WARNING: there may only be one instance of MPLSensor, ever. 17049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */ 17149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 17249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowclass MPLSensor: public SensorBase 17349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow{ 17449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow typedef int (MPLSensor::*hfunc_t)(sensors_event_t*); 17549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 17649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowpublic: 17749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 17849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow enum { 17949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow Gyro = 0, 18049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow RawGyro, 18149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow Accelerometer, 18249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow MagneticField, 18349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow RawMagneticField, 18449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow Pressure, 18549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow Orientation, 18649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow RotationVector, 18749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow GameRotationVector, 18849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow LinearAccel, 18949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow Gravity, 19049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow SignificantMotion, 19149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow StepDetector, 19249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow StepCounter, 19349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow GeomagneticRotationVector, 19449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow NumSensors 19549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow }; 19649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 19749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow MPLSensor(CompassSensor *, int (*m_pt2AccelCalLoadFunc)(long*) = 0); 19849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual ~MPLSensor(); 19949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 20049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int setDelay(int32_t handle, int64_t ns); 20149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int enable(int32_t handle, int enabled); 20249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int batch(int handle, int flags, int64_t period_ns, int64_t timeout); 2034a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int setBatch(int en, int toggleEnable); 20449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int32_t getEnableMask() { return mEnabled; } 20549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void getHandle(int32_t handle, int &what, android::String8 &sname); 20649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 20749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int readEvents(sensors_event_t *data, int count); 20849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int getFd() const; 20949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int getAccelFd() const; 21049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int getCompassFd() const; 21149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int getPollTime(); 21249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int getStepCountPollTime(); 21349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual bool hasPendingEvents() const; 21449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual bool hasStepCountPendingEvents(); 21549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual void sleepEvent(); 21649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual void wakeEvent(); 21749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int populateSensorList(struct sensor_t *list, int len); 21849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void cbProcData(); 21949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 22049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow //static pointer to the object that will handle callbacks 22149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow static MPLSensor* gMPLSensor; 22249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 22349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int readAccelEvents(sensors_event_t* data, int count); 22449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void buildCompassEvent(); 22549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void buildMpuEvent(); 22649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 22749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int turnOffAccelFifo(); 22849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int turnOffGyroFifo(); 22949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableDmpOrientation(int); 23049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int dmpOrientHandler(int); 23149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int readDmpOrientEvents(sensors_event_t* data, int count); 23249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int getDmpOrientFd(); 23349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int openDmpOrientFd(); 23449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int closeDmpOrientFd(); 23549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 23649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int getDmpRate(int64_t *); 23749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int checkDMPOrientation(); 23849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 23949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int getDmpSignificantMotionFd(); 24049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int readDmpSignificantMotionEvents(sensors_event_t* data, int count); 24149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableDmpSignificantMotion(int); 24249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int significantMotionHandler(sensors_event_t* data); 24349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool checkSmdSupport(){return (mDmpSignificantMotionEnabled);}; 24449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 24549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableDmpPedometer(int, int); 24649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int readDmpPedometerEvents(sensors_event_t* data, int count, int32_t id, int32_t type, int outputType); 24749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int getDmpPedometerFd(); 24849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool checkPedometerSupport() {return (mDmpPedometerEnabled || mDmpStepCountEnabled);}; 24949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool checkOrientationSupport() {return ((isDmpDisplayOrientationOn() 25049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow && (mDmpOrientationEnabled 25149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow || !isDmpScreenAutoRotationEnabled())));}; 25249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 25349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowprotected: 25449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow CompassSensor *mCompassSensor; 25549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow PressureSensor *mPressureSensor; 25649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 25749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyroHandler(sensors_event_t *data); 25849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int rawGyroHandler(sensors_event_t *data); 25949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accelHandler(sensors_event_t *data); 26049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int compassHandler(sensors_event_t *data); 26149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int rawCompassHandler(sensors_event_t *data); 26249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int rvHandler(sensors_event_t *data); 26349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int grvHandler(sensors_event_t *data); 26449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int laHandler(sensors_event_t *data); 26549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gravHandler(sensors_event_t *data); 26649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int orienHandler(sensors_event_t *data); 26749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int smHandler(sensors_event_t *data); 26849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int pHandler(sensors_event_t *data); 26949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int scHandler(sensors_event_t *data); 27049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gmHandler(sensors_event_t *data); 27149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int psHandler(sensors_event_t *data); 27249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void calcOrientationSensor(float *Rx, float *Val); 27349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int update_delay(); 27449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 27549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void inv_set_device_properties(); 27649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_constructor_init(); 27749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_constructor_default_enable(); 27849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int setGyroInitialState(); 27949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int setAccelInitialState(); 28049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int masterEnable(int en); 2814a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int enablePedStandalone(int en); 2824a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int enablePedStandaloneData(int en); 28349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enablePedQuaternion(int); 28449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enablePedQuaternionData(int); 28549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enable6AxisQuaternion(int); 28649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enable6AxisQuaternionData(int); 28749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableLPQuaternion(int); 28849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableQuaternionData(int); 28949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableAccelPedometer(int); 29049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableAccelPedData(int); 29149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int onDmp(int); 29249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableGyro(int en); 29349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableAccel(int en); 29449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableCompass(int en, int rawSensorOn); 29549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enablePressure(int en); 2964a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int enableBatch(int64_t timeout); 29749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void computeLocalSensorMask(int enabled_sensors); 29849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int computeBatchSensorMask(int enableSensor, int checkNewBatchSensor); 29949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int computeBatchDataOutput(); 30049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enableSensors(unsigned long sensors, int en, uint32_t changed); 30149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_read_gyro_buffer(int fd, short *data, long long *timestamp); 30249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_float_to_q16(float *fdata, long *ldata); 30349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_long_to_q16(long *fdata, long *ldata); 30449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_float_to_round(float *fdata, long *ldata); 30549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_float_to_round2(float *fdata, short *sdata); 30649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_long_to_float(long *ldata, float *fdata); 30749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_read_temperature(long long *data); 30849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_read_dmp_state(int fd); 30949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_read_sensor_bias(int fd, long *data); 31049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void inv_get_sensors_orientation(void); 31149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int inv_init_sysfs_attributes(void); 31249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int resetCompass(void); 31349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void setCompassDelay(int64_t ns); 31449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void enable_iio_sysfs(void); 31549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int enablePedometer(int); 3164a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int enablePedIndicator(int en); 3174a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int checkPedStandaloneEnabled(void); 31849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int checkPedQuatEnabled(); 31949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int check6AxisQuatEnabled(); 32049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int checkLPQuaternion(); 32149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int checkAccelPed(); 32249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int writeSignificantMotionParams(bool toggleEnable, 32349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint32_t delayThreshold1, uint32_t delayThreshold2, 32449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint32_t motionThreshold); 32549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 32649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mNewData; // flag indicating that the MPL calculated new output values 32749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mDmpStarted; 32849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mMasterSensorMask; 32949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mLocalSensorMask; 33049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mPollTime; 33149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mStepCountPollTime; 33249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mHaveGoodMpuCal; // flag indicating that the cal file can be written 33349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mGyroAccuracy; // value indicating the quality of the gyro calibr. 33449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mAccelAccuracy; // value indicating the quality of the accel calibr. 33549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mCompassAccuracy; // value indicating the quality of the compass calibr. 33649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow struct pollfd mPollFds[5]; 33749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mSampleCount; 33849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow pthread_mutex_t mMplMutex; 33949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow pthread_mutex_t mHALMutex; 34049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 34149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char mIIOBuffer[(16 + 8 * 3 + 8) * IIO_BUFFER_LENGTH]; 34249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 34349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int iio_fd; 34449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_fd; 34549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mpufifo_fd; 34649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_temperature_fd; 34749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_x_offset_fd; 34849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_y_offset_fd; 34949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_z_offset_fd; 35049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 35149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_x_dmp_bias_fd; 35249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_y_dmp_bias_fd; 35349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int accel_z_dmp_bias_fd; 35449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 35549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_x_offset_fd; 35649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_y_offset_fd; 35749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_z_offset_fd; 35849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 35949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_x_dmp_bias_fd; 36049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_y_dmp_bias_fd; 36149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int gyro_z_dmp_bias_fd; 36249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 36349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int dmp_orient_fd; 36449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mDmpOrientationEnabled; 36549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 36649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int dmp_sign_motion_fd; 36749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mDmpSignificantMotionEnabled; 36849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 36949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int dmp_pedometer_fd; 37049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mDmpPedometerEnabled; 37149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mDmpStepCountEnabled; 37249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 37349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint32_t mEnabled; 37449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint32_t mBatchEnabled; 37549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mBatchTimeoutInMs; 37649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow sensors_event_t mPendingEvents[NumSensors]; 37749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mDelays[NumSensors]; 37849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mBatchDelays[NumSensors]; 3794a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int64_t mBatchTimeouts[NumSensors]; 38049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow hfunc_t mHandlers[NumSensors]; 38149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow short mCachedGyroData[3]; 38249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCachedAccelData[3]; 38349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCachedCompassData[3]; 38449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCachedQuaternionData[3]; 38549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCached6AxisQuaternionData[3]; 38649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCachedPedQuaternionData[3]; 38749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCachedPressureData; 38849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow android::KeyedVector<int, int> mIrqFds; 38949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 39049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow InputEventCircularReader mAccelInputReader; 39149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow InputEventCircularReader mGyroInputReader; 39249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 39349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mFirstRead; 39449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow short mTempScale; 39549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow short mTempOffset; 39649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mTempCurrentTime; 39749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mAccelScale; 39849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mGyroScale; 3994a28f9c897c46c42a255823f7e307169a828a025Rosa Chow long mGyroSelfTestScale; 40049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mCompassScale; 40149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow float mCompassBias[3]; 40249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mFactoryGyroBiasAvailable; 40349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mFactoryGyroBias[3]; 40449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mGyroBiasAvailable; 40549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mGyroBiasApplied; 40649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow float mGyroBias[3]; //in body frame 40749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mGyroChipBias[3]; //in chip frame 40849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mFactoryAccelBiasAvailable; 40949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mFactoryAccelBias[3]; 41049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mAccelBiasAvailable; 41149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mAccelBiasApplied; 41249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow long mAccelBias[3]; //in chip frame 41349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 41449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint32_t mPendingMask; 41549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow unsigned long mSensorMask; 41649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 41749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char chip_ID[MAX_CHIP_ID_LEN]; 41849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char mSysfsPath[MAX_SYSFS_NAME_LEN]; 41949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 42049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow signed char mGyroOrientation[9]; 42149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow signed char mAccelOrientation[9]; 42249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 42349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mSensorTimestamp; 42449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mCompassTimestamp; 42549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mPressureTimestamp; 42649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 42749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow struct sysfs_attrbs { 42849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *chip_enable; 42949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *power_state; 43049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *dmp_firmware; 43149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *firmware_loaded; 43249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *dmp_on; 43349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *dmp_int_on; 43449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *dmp_event_int_on; 43549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *tap_on; 43649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *key; 43749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *self_test; 43849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *temperature; 43949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 44049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *gyro_enable; 44149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *gyro_fifo_rate; 44249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *gyro_fsr; 44349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *gyro_orient; 44449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *gyro_fifo_enable; 4454a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *gyro_rate; 44649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 44749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *accel_enable; 44849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *accel_fifo_rate; 44949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *accel_fsr; 45049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *accel_bias; 45149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *accel_orient; 45249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *accel_fifo_enable; 4534a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *accel_rate; 45449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 45549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *three_axis_q_on; //formerly quaternion_on 4564a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *three_axis_q_rate; 4574a28f9c897c46c42a255823f7e307169a828a025Rosa Chow 45849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *six_axis_q_on; 4594a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *six_axis_q_rate; 4604a28f9c897c46c42a255823f7e307169a828a025Rosa Chow 46149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *ped_q_on; 4624a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *ped_q_rate; 4634a28f9c897c46c42a255823f7e307169a828a025Rosa Chow 4644a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *step_detector_on; 4654a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *step_indicator_on; 46649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 46749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_timestamp_en; 46849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_timestamp_index; 46949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_timestamp_type; 47049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 47149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *buffer_length; 47249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 47349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *display_orientation_on; 47449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *event_display_orientation; 47549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 47649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_accel_x_offset; 47749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_accel_y_offset; 47849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_accel_z_offset; 47949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 48049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_accel_x_dmp_bias; 48149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_accel_y_dmp_bias; 48249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_accel_z_dmp_bias; 48349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 48449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_gyro_x_offset; 48549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_gyro_y_offset; 48649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_gyro_z_offset; 4874a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char *in_gyro_self_test_scale; 48849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 48949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_gyro_x_dmp_bias; 49049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_gyro_y_dmp_bias; 49149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *in_gyro_z_dmp_bias; 49249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 49349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *event_smd; 49449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *smd_enable; 49549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *smd_delay_threshold; 49649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *smd_delay_threshold2; 49749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *smd_threshold; 49849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *batchmode_timeout; 49949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *batchmode_wake_fifo_full_on; 50049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 50149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *pedometer_on; 50249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *pedometer_int_on; 50349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *event_pedometer; 50449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *pedometer_steps; 50549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow } mpu; 50649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 50749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char *sysfs_names_ptr; 50849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mMplFeatureActiveMask; 50949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint64_t mFeatureActiveMask; 51049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool mDmpOn; 51149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int mPedUpdate; 51249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int64_t mQuatSensorTimestamp; 5134a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int64_t mStepSensorTimestamp; 51449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow uint64_t mLastStepCount; 5154a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int mLeftOverBufferSize; 5164a28f9c897c46c42a255823f7e307169a828a025Rosa Chow char mLeftOverBuffer[24]; 51749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 51849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowprivate: 51949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow /* added for dynamic get sensor list */ 52049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillAccel(const char* accel, struct sensor_t *list); 52149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillGyro(const char* gyro, struct sensor_t *list); 52249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillRV(struct sensor_t *list); 52349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillGMRV(struct sensor_t *list); 52449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillGRV(struct sensor_t *list); 52549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillOrientation(struct sensor_t *list); 52649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillGravity(struct sensor_t *list); 52749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillLinearAccel(struct sensor_t *list); 52849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillSignificantMotion(struct sensor_t *list); 52949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION 53049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void fillScreenOrientation(struct sensor_t *list); 53149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif 53249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void storeCalibration(); 53349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void loadDMP(); 53449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow bool isMpuNonDmp(); 53549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int isLowPowerQuatEnabled(); 53649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int isDmpDisplayOrientationOn(); 53749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void getCompassBias(); 53849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void getFactoryGyroBias(); 53949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void setFactoryGyroBias(); 54049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void getGyroBias(); 54149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void setGyroBias(); 54249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void getFactoryAccelBias(); 54349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void setFactoryAccelBias(); 54449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void getAccelBias(); 54549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void setAccelBias(); 54649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int isCompassDisabled(); 5474a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int setBatchDataRates(); 5484a28f9c897c46c42a255823f7e307169a828a025Rosa Chow int resetDataRates(); 5494a28f9c897c46c42a255823f7e307169a828a025Rosa Chow void initBias(); 55049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void sys_dump(bool fileMode); 55149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow}; 55249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 55349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowextern "C" { 55449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow void setCallbackObject(MPLSensor*); 55549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow MPLSensor *getCallbackObject(); 55649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow} 55749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 55849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif // ANDROID_MPL_SENSOR_H 559