MPLSensor.h revision d29301d07151fde33381ccafc3d43524c5ebc068
1c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* 2a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro* Copyright (C) 2014 Invensense, Inc. 3c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* 4c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* Licensed under the Apache License, Version 2.0 (the "License"); 5c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* you may not use this file except in compliance with the License. 6c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* You may obtain a copy of the License at 7c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* 8c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* http://www.apache.org/licenses/LICENSE-2.0 9c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* 10c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* Unless required by applicable law or agreed to in writing, software 11c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* distributed under the License is distributed on an "AS IS" BASIS, 12c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* See the License for the specific language governing permissions and 14c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* limitations under the License. 15c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro*/ 16c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 17c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef ANDROID_MPL_SENSOR_H 18c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define ANDROID_MPL_SENSOR_H 19c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 20c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <stdint.h> 21c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <errno.h> 22c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <sys/cdefs.h> 23c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <sys/types.h> 24c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <poll.h> 25c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <time.h> 26c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <utils/Vector.h> 27c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <utils/KeyedVector.h> 28c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <utils/String8.h> 29c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "sensors.h" 30c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "SensorBase.h" 31c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "InputEventReader.h" 32c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 33c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef INVENSENSE_COMPASS_CAL 34c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#pragma message("unified HAL for AKM") 35c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "CompassSensor.AKM.h" 36c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 37c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 38c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef SENSOR_ON_PRIMARY_BUS 39c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#pragma message("Sensor on Primary Bus") 40c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "CompassSensor.IIO.primary.h" 41c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else 42c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#pragma message("Sensor on Secondary Bus") 43c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "CompassSensor.IIO.9150.h" 44c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 45c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 46c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroclass PressureSensor; 47c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 48c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*****************************************************************************/ 49c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* Sensors Enable/Disable Mask 50c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *****************************************************************************/ 51c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MAX_CHIP_ID_LEN (20) 52c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 53c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_THREE_AXIS_GYRO (0x000F) 54c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_THREE_AXIS_ACCEL (0x0070) 55c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_THREE_AXIS_COMPASS (0x0380) 56c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_ONE_AXIS_PRESSURE (0x0400) 57c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_ALL_SENSORS (0x7FFF) 58c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 59c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef INVENSENSE_COMPASS_CAL 60c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define ALL_MPL_SENSORS_NP (INV_THREE_AXIS_ACCEL \ 61c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | INV_THREE_AXIS_COMPASS \ 62c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | INV_THREE_AXIS_GYRO) 63c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else 64c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define ALL_MPL_SENSORS_NP (INV_THREE_AXIS_ACCEL \ 65c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | INV_THREE_AXIS_COMPASS \ 66c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | INV_THREE_AXIS_GYRO) 67c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 68c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 69c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// mask of virtual sensors that require gyro + accel + compass data 70c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define VIRTUAL_SENSOR_9AXES_MASK ( \ 71c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro (1 << Orientation) \ 72c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (1 << RotationVector) \ 73c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (1 << LinearAccel) \ 74c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (1 << Gravity) \ 75c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro) 76c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// mask of virtual sensors that require gyro + accel data (but no compass data) 77c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define VIRTUAL_SENSOR_GYRO_6AXES_MASK ( \ 78c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro (1 << GameRotationVector) \ 79c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro) 80c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// mask of virtual sensors that require mag + accel data (but no gyro data) 81c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define VIRTUAL_SENSOR_MAG_6AXES_MASK ( \ 82c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro (1 << GeomagneticRotationVector) \ 83c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro) 84c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// mask of all virtual sensors 85c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define VIRTUAL_SENSOR_ALL_MASK ( \ 86c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro VIRTUAL_SENSOR_9AXES_MASK \ 87c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | VIRTUAL_SENSOR_GYRO_6AXES_MASK \ 88c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | VIRTUAL_SENSOR_MAG_6AXES_MASK \ 89c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro) 90c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 91c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// bit mask of current MPL active features (mMplFeatureActiveMask) 92c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_COMPASS_CAL 0x01 93c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_COMPASS_FIT 0x02 94c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 95c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// bit mask of current DMP active features (mFeatureActiveMask) 96c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DMP_QUATERNION 0x001 //3 elements without real part, 32 bit each 97c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DMP_DISPL_ORIENTATION 0x002 //screen orientation 98c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DMP_SIGNIFICANT_MOTION 0x004 //significant motion 99c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DMP_PEDOMETER 0x008 //interrupt-based pedometer 100c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DMP_PEDOMETER_STEP 0x010 //timer-based pedometer 101c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DMP_PED_STANDALONE 0x020 //timestamps only 102c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DMP_6AXIS_QUATERNION 0x040 //3 elements without real part, 32 bit each 103c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DMP_PED_QUATERNION 0x080 //3 elements without real part, 16 bit each 104c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DMP_PED_INDICATOR 0x100 //tag along header with step indciator 105c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_DMP_BATCH_MODE 0x200 //batch mode 106c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 107c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// bit mask of whether DMP should be turned on 108c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DMP_FEATURE_MASK ( \ 109c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro (INV_DMP_QUATERNION) \ 110c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (INV_DMP_DISPL_ORIENTATION) \ 111c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (INV_DMP_SIGNIFICANT_MOTION) \ 112c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (INV_DMP_PEDOMETER) \ 113c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (INV_DMP_PEDOMETER_STEP) \ 114c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (INV_DMP_6AXIS_QUATERNION) \ 115c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (INV_DMP_PED_QUATERNION) \ 116c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (INV_DMP_BATCH_MODE) \ 117c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro) 118c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 119c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// bit mask of DMP features as sensors 120c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DMP_SENSOR_MASK ( \ 121c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro (INV_DMP_DISPL_ORIENTATION) \ 122c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (INV_DMP_SIGNIFICANT_MOTION) \ 123c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (INV_DMP_PEDOMETER) \ 124c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (INV_DMP_PEDOMETER_STEP) \ 125c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro | (INV_DMP_6AXIS_QUATERNION) \ 126c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro) 127c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 128c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// data header format used by kernel driver. 129c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DATA_FORMAT_STEP 0x0001 130c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DATA_FORMAT_MARKER 0x0010 131c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DATA_FORMAT_EMPTY_MARKER 0x0020 132c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DATA_FORMAT_PED_STANDALONE 0x0100 133c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DATA_FORMAT_PED_QUAT 0x0200 134c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DATA_FORMAT_6_AXIS 0x0400 135c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DATA_FORMAT_QUAT 0x0800 136c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DATA_FORMAT_COMPASS 0x1000 137f51dc826bb5e75a074a14c1227e750160b3fc694Nick Vaccaro#define DATA_FORMAT_COMPASS_OF 0x1800 138c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DATA_FORMAT_GYRO 0x2000 139c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DATA_FORMAT_ACCEL 0x4000 140c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DATA_FORMAT_PRESSURE 0x8000 141c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define DATA_FORMAT_MASK 0xffff 142c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 143c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define BYTES_PER_SENSOR 8 144c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define BYTES_PER_SENSOR_PACKET 16 145c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define QUAT_ONLY_LAST_PACKET_OFFSET 16 146c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define BYTES_QUAT_DATA 24 147c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MAX_READ_SIZE BYTES_QUAT_DATA 148c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MAX_SUSPEND_BATCH_PACKET_SIZE 1024 149c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MAX_PACKET_SIZE 80 //8 * 4 + (2 * 24) 150c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 151c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* Uncomment to enable Low Power Quaternion */ 152c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define ENABLE_LP_QUAT_FEAT 153c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 154c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* Enable Pressure sensor support */ 155864e0965786d598cf6313da4b6ade65f95d4f50eNick Vaccaro#undef ENABLE_PRESSURE 156c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 157c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* Screen Orientation is not currently supported */ 158c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint isDmpScreenAutoRotationEnabled() 159c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 160c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION 161c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return 1; 162c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else 163c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return 0; 164c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 165c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 166c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 167c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint (*m_pt2AccelCalLoadFunc)(long *bias) = NULL; 168c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*****************************************************************************/ 169c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** MPLSensor implementation which fits into the HAL example for crespo provided 170c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * by Google. 171c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * WARNING: there may only be one instance of MPLSensor, ever. 172c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */ 173c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 174c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroclass MPLSensor: public SensorBase 175c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{ 176c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro typedef int (MPLSensor::*hfunc_t)(sensors_event_t*); 177c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 178c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaropublic: 179c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 180c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro MPLSensor(CompassSensor *, int (*m_pt2AccelCalLoadFunc)(long*) = 0); 181c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual ~MPLSensor(); 182c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 183c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int setDelay(int32_t handle, int64_t ns); 184c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int enable(int32_t handle, int enabled); 185c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int batch(int handle, int flags, int64_t period_ns, int64_t timeout); 186c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int flush(int handle); 187c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int selectAndSetQuaternion(int batchMode, int mEnabled, long long featureMask); 188c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int checkBatchEnabled(); 189c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int setBatch(int en, int toggleEnable); 190a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro int writeBatchTimeout(int en); 191c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int32_t getEnableMask() { return mEnabled; } 192c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void getHandle(int32_t handle, int &what, android::String8 &sname); 193c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 194c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int readEvents(sensors_event_t *data, int count); 195c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int getFd() const; 196c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int getAccelFd() const; 197c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int getCompassFd() const; 198c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int getPollTime(); 199c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int getStepCountPollTime(); 200c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual bool hasPendingEvents() const; 201c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual bool hasStepCountPendingEvents(); 202c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int populateSensorList(struct sensor_t *list, int len); 203c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 204c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void buildCompassEvent(); 205c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void buildMpuEvent(); 206c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int checkValidHeader(unsigned short data_format); 207c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 208c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int turnOffAccelFifo(); 209c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int turnOffGyroFifo(); 210c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableDmpOrientation(int); 211c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int dmpOrientHandler(int); 212c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int readDmpOrientEvents(sensors_event_t* data, int count); 213c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int getDmpOrientFd(); 214c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int openDmpOrientFd(); 215c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int closeDmpOrientFd(); 216c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 217c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int getDmpRate(int64_t *); 218c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int checkDMPOrientation(); 219c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 220c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int getDmpSignificantMotionFd(); 221c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int readDmpSignificantMotionEvents(sensors_event_t* data, int count); 222c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableDmpSignificantMotion(int); 223c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int significantMotionHandler(sensors_event_t* data); 224c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool checkSmdSupport(){return (mDmpSignificantMotionEnabled);}; 225c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 226c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableDmpPedometer(int, int); 227c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int readDmpPedometerEvents(sensors_event_t* data, int count, int32_t id, int outputType); 228c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int getDmpPedometerFd(); 229c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool checkPedometerSupport() {return (mDmpPedometerEnabled || mDmpStepCountEnabled);}; 230c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool checkOrientationSupport() {return ((isDmpDisplayOrientationOn() 231c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro && (mDmpOrientationEnabled 232c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro || !isDmpScreenAutoRotationEnabled())));}; 233c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 234c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroprotected: 235c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro CompassSensor *mCompassSensor; 236c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro PressureSensor *mPressureSensor; 237c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 238c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int gyroHandler(sensors_event_t *data); 239c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int rawGyroHandler(sensors_event_t *data); 240c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int accelHandler(sensors_event_t *data); 241c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int compassHandler(sensors_event_t *data); 242c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int rawCompassHandler(sensors_event_t *data); 243c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int rvHandler(sensors_event_t *data); 244c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int grvHandler(sensors_event_t *data); 245c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int laHandler(sensors_event_t *data); 246c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int gravHandler(sensors_event_t *data); 247c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int orienHandler(sensors_event_t *data); 248c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int smHandler(sensors_event_t *data); 249c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int pHandler(sensors_event_t *data); 250c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int gmHandler(sensors_event_t *data); 251c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int psHandler(sensors_event_t *data); 252c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int sdHandler(sensors_event_t *data); 253c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int scHandler(sensors_event_t *data); 254c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int metaHandler(sensors_event_t *data, int flags); 255c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void calcOrientationSensor(float *Rx, float *Val); 256c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int update_delay(); 257c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 258c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void inv_set_device_properties(); 259c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int inv_constructor_init(); 260c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int inv_constructor_default_enable(); 261c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int setAccelInitialState(); 262c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int masterEnable(int en); 263c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enablePedStandalone(int en); 264c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enablePedStandaloneData(int en); 265c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enablePedQuaternion(int); 266c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enablePedQuaternionData(int); 267a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro int setPedQuaternionRate(int64_t wanted); 268c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enable6AxisQuaternion(int); 269c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enable6AxisQuaternionData(int); 270a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro int set6AxisQuaternionRate(int64_t wanted); 271c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableLPQuaternion(int); 272c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableQuaternionData(int); 273a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro int setQuaternionRate(int64_t wanted); 274c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableAccelPedometer(int); 275c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableAccelPedData(int); 276c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int onDmp(int); 277c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableGyro(int en); 278c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableLowPowerAccel(int en); 279c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableAccel(int en); 280c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableCompass(int en, int rawSensorOn); 281c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enablePressure(int en); 282c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableBatch(int64_t timeout); 283c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void computeLocalSensorMask(int enabled_sensors); 284c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int computeBatchSensorMask(int enableSensor, int checkNewBatchSensor); 285c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int computeBatchDataOutput(); 286c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enableSensors(unsigned long sensors, int en, uint32_t changed); 287c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int inv_read_temperature(long long *data); 288c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int inv_read_dmp_state(int fd); 289c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int inv_read_sensor_bias(int fd, long *data); 290c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void inv_get_sensors_orientation(void); 291c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int inv_init_sysfs_attributes(void); 292c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int resetCompass(void); 293c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void setCompassDelay(int64_t ns); 294c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void enable_iio_sysfs(void); 295c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int setDmpFeature(int en); 296c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int computeAndSetDmpState(void); 297c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enablePedometer(int); 298c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int enablePedIndicator(int en); 299a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro int checkPedStandaloneBatched(void); 300c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int checkPedStandaloneEnabled(void); 301c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int checkPedQuatEnabled(); 302c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int check6AxisQuatEnabled(); 303c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int checkLPQRateSupported(); 304c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int checkLPQuaternion(); 305c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int checkAccelPed(); 306c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void setInitial6QuatValue(); 307c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int writeSignificantMotionParams(bool toggleEnable, 308c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro uint32_t delayThreshold1, uint32_t delayThreshold2, 309c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro uint32_t motionThreshold); 310c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mMasterSensorMask; 311c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mLocalSensorMask; 312c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mPollTime; 313c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int64_t mStepCountPollTime; 314c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mHaveGoodMpuCal; // flag indicating that the cal file can be written 315c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mGyroAccuracy; // value indicating the quality of the gyro calibr. 316c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mAccelAccuracy; // value indicating the quality of the accel calibr. 317c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mCompassAccuracy; // value indicating the quality of the compass calibr. 318c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro struct pollfd mPollFds[5]; 319c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro pthread_mutex_t mMplMutex; 320c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro pthread_mutex_t mHALMutex; 321c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 322c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char mIIOBuffer[(16 + 8 * 3 + 8) * IIO_BUFFER_LENGTH]; 323c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 324c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int iio_fd; 325c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int accel_fd; 326c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mpufifo_fd; 327c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int gyro_temperature_fd; 328c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int accel_x_offset_fd; 329c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int accel_y_offset_fd; 330c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int accel_z_offset_fd; 331c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 332c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int accel_x_dmp_bias_fd; 333c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int accel_y_dmp_bias_fd; 334c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int accel_z_dmp_bias_fd; 335c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 336c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int gyro_x_offset_fd; 337c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int gyro_y_offset_fd; 338c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int gyro_z_offset_fd; 339c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 340c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int gyro_x_dmp_bias_fd; 341c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int gyro_y_dmp_bias_fd; 342c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int gyro_z_dmp_bias_fd; 343c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 344c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int dmp_orient_fd; 345c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mDmpOrientationEnabled; 346c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 347c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int dmp_sign_motion_fd; 348c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mDmpSignificantMotionEnabled; 349c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 350c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int dmp_pedometer_fd; 351c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mDmpPedometerEnabled; 352c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mDmpStepCountEnabled; 353c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 354c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro uint32_t mEnabled; 355c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro uint32_t mBatchEnabled; 356a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro android::Vector<int> mFlushSensorEnabledVector; 357c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro uint32_t mOldBatchEnabledMask; 358c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int64_t mBatchTimeoutInMs; 359c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sensors_event_t mPendingEvents[NumSensors]; 360d29301d07151fde33381ccafc3d43524c5ebc068Nick Vaccaro sensors_event_t mPendingFlushEvents[NumSensors]; 361c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sensors_event_t mSmEvents; 362c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sensors_event_t mSdEvents; 363c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro sensors_event_t mScEvents; 364c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int64_t mDelays[NumSensors]; 365c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int64_t mBatchDelays[NumSensors]; 366c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int64_t mBatchTimeouts[NumSensors]; 367c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro hfunc_t mHandlers[NumSensors]; 368c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro short mCachedGyroData[3]; 369c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mCachedAccelData[3]; 370c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mCachedCompassData[3]; 371c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mCachedQuaternionData[3]; 372c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mCached6AxisQuaternionData[3]; 373c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mCachedPedQuaternionData[3]; 374c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mCachedPressureData; 375c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro android::KeyedVector<int, int> mIrqFds; 376c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 377c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro InputEventCircularReader mAccelInputReader; 378c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro InputEventCircularReader mGyroInputReader; 379c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 3809478d39a0d83d276899e3f5c876785c7f14ba497Nick Vaccaro int mCompassOverFlow; 381c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mFirstRead; 382c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro short mTempScale; 383c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro short mTempOffset; 384c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int64_t mTempCurrentTime; 385c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mAccelScale; 386c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mAccelSelfTestScale; 387c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mGyroScale; 388c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mGyroSelfTestScale; 389c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mCompassScale; 390c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro float mCompassBias[3]; 391c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mFactoryGyroBiasAvailable; 392c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mFactoryGyroBias[3]; 393c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mGyroBiasAvailable; 394c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mGyroBiasApplied; 395c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro float mGyroBias[3]; //in body frame 396c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mGyroChipBias[3]; //in chip frame 397c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mFactoryAccelBiasAvailable; 398c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mFactoryAccelBias[3]; 399c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mAccelBiasAvailable; 400c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mAccelBiasApplied; 401c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mAccelBias[3]; //in chip frame 402c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 403c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro uint32_t mPendingMask; 404c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro unsigned long mSensorMask; 405c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 406c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char chip_ID[MAX_CHIP_ID_LEN]; 407c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char mSysfsPath[MAX_SYSFS_NAME_LEN]; 408c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 409c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro signed char mGyroOrientation[9]; 410c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro signed char mAccelOrientation[9]; 411c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 412c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int64_t mSensorTimestamp; 413c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int64_t mCompassTimestamp; 414c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int64_t mPressureTimestamp; 415c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 416c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro struct sysfs_attrbs { 417c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *chip_enable; 418c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *power_state; 419c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *master_enable; 420c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *dmp_firmware; 421c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *firmware_loaded; 422c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *dmp_on; 423c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *dmp_int_on; 424c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *dmp_event_int_on; 425c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *tap_on; 426c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *key; 427c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *self_test; 428c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *temperature; 429c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 430c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *gyro_enable; 431c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *gyro_fifo_rate; 432c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *gyro_fsr; 433c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *gyro_orient; 434c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *gyro_fifo_enable; 435c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *gyro_rate; 436c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 437c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *accel_enable; 438c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *accel_fifo_rate; 439c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *accel_fsr; 440c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *accel_bias; 441c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *accel_orient; 442c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *accel_fifo_enable; 443c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *accel_rate; 444c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 445c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *three_axis_q_on; //formerly quaternion_on 446c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *three_axis_q_rate; 447c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 448c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *six_axis_q_on; 449c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *six_axis_q_rate; 450c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 451c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *six_axis_q_value; 452c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 453c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *ped_q_on; 454c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *ped_q_rate; 455c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 456c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *step_detector_on; 457c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *step_indicator_on; 458c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 459c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_timestamp_en; 460c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_timestamp_index; 461c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_timestamp_type; 462c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 463c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *buffer_length; 464c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 465c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *display_orientation_on; 466c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *event_display_orientation; 467c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 468c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_accel_x_offset; 469c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_accel_y_offset; 470c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_accel_z_offset; 471c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_accel_self_test_scale; 472c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 473c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_accel_x_dmp_bias; 474c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_accel_y_dmp_bias; 475c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_accel_z_dmp_bias; 476c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 477c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_gyro_x_offset; 478c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_gyro_y_offset; 479c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_gyro_z_offset; 480c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_gyro_self_test_scale; 481c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 482c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_gyro_x_dmp_bias; 483c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_gyro_y_dmp_bias; 484c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *in_gyro_z_dmp_bias; 485c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 486c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *event_smd; 487c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *smd_enable; 488c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *smd_delay_threshold; 489c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *smd_delay_threshold2; 490c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *smd_threshold; 491c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *batchmode_timeout; 492c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *batchmode_wake_fifo_full_on; 493c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *flush_batch; 494c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 495c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *pedometer_on; 496c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *pedometer_int_on; 497c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *event_pedometer; 498c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *pedometer_steps; 499a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro char *pedometer_step_thresh; 500c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *pedometer_counter; 501c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 502c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *motion_lpa_on; 503c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } mpu; 504c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 505c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char *sysfs_names_ptr; 506c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mMplFeatureActiveMask; 507c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro uint64_t mFeatureActiveMask; 508c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mDmpOn; 509c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mPedUpdate; 510c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mPressureUpdate; 511c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int64_t mQuatSensorTimestamp; 512c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int64_t mStepSensorTimestamp; 513c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro uint64_t mLastStepCount; 514c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int mLeftOverBufferSize; 515c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char mLeftOverBuffer[1024]; 516c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mInitial6QuatValueAvailable; 517c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro long mInitial6QuatValue[4]; 518c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mFlushBatchSet; 519c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro uint32_t mSkipReadEvents; 520c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mDataMarkerDetected; 521c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool mEmptyDataMarkerDetected; 522c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 523c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroprivate: 524c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* added for dynamic get sensor list */ 525c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void fillAccel(const char* accel, struct sensor_t *list); 526c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void fillGyro(const char* gyro, struct sensor_t *list); 527c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void fillRV(struct sensor_t *list); 528c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void fillGMRV(struct sensor_t *list); 529c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void fillGRV(struct sensor_t *list); 530c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void fillOrientation(struct sensor_t *list); 531c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void fillGravity(struct sensor_t *list); 532c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void fillLinearAccel(struct sensor_t *list); 533c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void fillSignificantMotion(struct sensor_t *list); 534c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION 535c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void fillScreenOrientation(struct sensor_t *list); 536c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 537c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void storeCalibration(); 538c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void loadDMP(); 539c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro bool isMpuNonDmp(); 540c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int isLowPowerQuatEnabled(); 541c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int isDmpDisplayOrientationOn(); 542c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void getCompassBias(); 543c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void getFactoryGyroBias(); 544c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void setFactoryGyroBias(); 545c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void getGyroBias(); 546c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void setGyroZeroBias(); 547c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void setGyroBias(); 548c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void getFactoryAccelBias(); 549c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void setFactoryAccelBias(); 550c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void getAccelBias(); 551c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void setAccelBias(); 552c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int isCompassDisabled(); 553c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int setBatchDataRates(); 554c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int resetDataRates(); 555c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void initBias(); 556c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void resetMplStates(); 557c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void sys_dump(bool fileMode); 558c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 559c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 560c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroextern "C" { 561c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro void setCallbackObject(MPLSensor*); 562c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro MPLSensor *getCallbackObject(); 563c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro} 564c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 565c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif // ANDROID_MPL_SENSOR_H 566