164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran/* 264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* Copyright (C) 2012 Invensense, Inc. 364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* 464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* Licensed under the Apache License, Version 2.0 (the "License"); 564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* you may not use this file except in compliance with the License. 664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* You may obtain a copy of the License at 764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* 864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* http://www.apache.org/licenses/LICENSE-2.0 964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* 1064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* Unless required by applicable law or agreed to in writing, software 1164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* distributed under the License is distributed on an "AS IS" BASIS, 1264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* See the License for the specific language governing permissions and 1464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran* limitations under the License. 1564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran*/ 1664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 1764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#ifndef ANDROID_MPL_SENSOR_H 1864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#define ANDROID_MPL_SENSOR_H 1964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 2064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include <stdint.h> 2164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include <errno.h> 2264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include <sys/cdefs.h> 2364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include <sys/types.h> 2464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include <poll.h> 2564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include <utils/Vector.h> 2664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include <utils/KeyedVector.h> 2764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include "sensors.h" 2864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include "SensorBase.h" 2964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include "InputEventReader.h" 3064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 3164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#ifdef INVENSENSE_COMPASS_CAL 3264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 338504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall#ifdef COMPASS_YAS53x 348504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall#warning "unified HAL for YAS53x" 3533ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#include "CompassSensor.IIO.primary.h" 3633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#elif COMPASS_AMI306 3764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#warning "unified HAL for AMI306" 3833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#include "CompassSensor.IIO.primary.h" 3964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#else 4064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#warning "unified HAL for MPU9150" 4164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include "CompassSensor.IIO.9150.h" 4264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#endif 4364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#else 4464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#warning "unified HAL for AKM" 4564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#include "CompassSensor.AKM.h" 4664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#endif 4764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 4864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran/*****************************************************************************/ 4964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran/* Sensors Enable/Disable Mask 5064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran *****************************************************************************/ 5164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#define MAX_CHIP_ID_LEN (20) 5264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 5364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#define INV_THREE_AXIS_GYRO (0x000F) 5464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#define INV_THREE_AXIS_ACCEL (0x0070) 5564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#define INV_THREE_AXIS_COMPASS (0x0380) 5664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#define INV_ALL_SENSORS (0x7FFF) 5764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 5864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#ifdef INVENSENSE_COMPASS_CAL 5964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#define ALL_MPL_SENSORS_NP (INV_THREE_AXIS_ACCEL \ 6064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran | INV_THREE_AXIS_COMPASS \ 6164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran | INV_THREE_AXIS_GYRO) 6264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#else 6364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#define ALL_MPL_SENSORS_NP (INV_THREE_AXIS_ACCEL \ 6464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran | INV_THREE_AXIS_COMPASS \ 6564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran | INV_THREE_AXIS_GYRO) 6664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#endif 6764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 6864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran// bit mask of current active features (mFeatureActiveMask) 6964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#define INV_COMPASS_CAL 0x01 7064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#define INV_COMPASS_FIT 0x02 7164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#define INV_DMP_QUATERNION 0x04 7233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#define INV_DMP_DISPL_ORIENTATION 0x08 7333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall 748504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall/* Uncomment to enable Low Power Quaternion */ 758504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall#define ENABLE_LP_QUAT_FEAT 7633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall 778504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall/* Uncomment to enable DMP display orientation 788504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall (within the HAL, see below for Java framework) */ 798504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall// #define ENABLE_DMP_DISPL_ORIENT_FEAT 8033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall 8133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#ifdef ENABLE_DMP_DISPL_ORIENT_FEAT 828504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall/* Uncomment following to expose the SENSOR_TYPE_SCREEN_ORIENTATION 838504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall sensor type (DMP screen orientation) to the Java framework. 848504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall NOTE: 858504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall need Invensense customized 868504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall 'hardware/libhardware/include/hardware/sensors.h' to compile correctly. 878504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall NOTE: 888504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall need Invensense java framework changes to: 898504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall 'frameworks/base/core/java/android/view/WindowOrientationListener.java' 908504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall 'frameworks/base/core/java/android/hardware/Sensor.java' 918504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall 'frameworks/base/core/java/android/hardware/SensorEvent.java' 928504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall for the 'Auto-rotate screen' to use this feature. 938504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall*/ 948504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall#define ENABLE_DMP_SCREEN_AUTO_ROTATION 958504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall#warning "ENABLE_DMP_DISPL_ORIENT_FEAT is defined, framework changes are necessary for HAL to work properly" 9633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#endif 9733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall 988504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrallint isDmpScreenAutoRotationEnabled() 998504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall{ 10033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION 10133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall return 1; 10233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#else 10333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall return 0; 10433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#endif 10533ce91b37062fa63af192f5643de93f3beebe854JP Abgrall} 10664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 1078504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrallint (*m_pt2AccelCalLoadFunc)(long *bias) = NULL; 10864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran/*****************************************************************************/ 10964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran/** MPLSensor implementation which fits into the HAL example for crespo provided 11064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran * by Google. 11164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran * WARNING: there may only be one instance of MPLSensor, ever. 11264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran */ 1138504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall 11464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaranclass MPLSensor: public SensorBase 11564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran{ 11664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran typedef int (MPLSensor::*hfunc_t)(sensors_event_t*); 11764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 11864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaranpublic: 1198504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall 12033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall enum { 12164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran Gyro = 0, 12233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall RawGyro, 12364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran Accelerometer, 12464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran MagneticField, 12564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran Orientation, 12664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran RotationVector, 12764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran LinearAccel, 12864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran Gravity, 12964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran numSensors 13064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran }; 13164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 1328504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall MPLSensor(CompassSensor *, int (*m_pt2AccelCalLoadFunc)(long*) = 0); 13333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall virtual ~MPLSensor(); 13433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall 13564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran virtual int setDelay(int32_t handle, int64_t ns); 13664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran virtual int enable(int32_t handle, int enabled); 13764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int32_t getEnableMask() { return mEnabled; } 13864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 13964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran virtual int readEvents(sensors_event_t *data, int count); 14064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran virtual int getFd() const; 14164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran virtual int getAccelFd() const; 14264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran virtual int getCompassFd() const; 14364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran virtual int getPollTime(); 14464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran virtual bool hasPendingEvents() const; 14564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran virtual void sleepEvent(); 14664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran virtual void wakeEvent(); 14764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int populateSensorList(struct sensor_t *list, int len); 14864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void cbProcData(); 14964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 15064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran //static pointer to the object that will handle callbacks 15164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran static MPLSensor* gMPLSensor; 15264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 15364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran //AKM HAL Integration 15464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran //void set_compass(long ready, long x, long y, long z, long accuracy); 15564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int executeOnData(sensors_event_t* data, int count); 15664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int readAccelEvents(sensors_event_t* data, int count); 15764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int readCompassEvents(sensors_event_t* data, int count); 15864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 15933ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int turnOffAccelFifo(); 16033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int enableDmpOrientation(int); 16133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int dmpOrientHandler(int); 16233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int readDmpOrientEvents(sensors_event_t* data, int count); 16333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int getDmpOrientFd(); 16433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int openDmpOrientFd(); 16533ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int closeDmpOrientFd(); 16633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall 16733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int getDmpRate(int64_t *); 16833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int checkDMPOrientation(); 16933ce91b37062fa63af192f5643de93f3beebe854JP Abgrall 17064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaranprotected: 17164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran CompassSensor *mCompassSensor; 17264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 17364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int gyroHandler(sensors_event_t *data); 17433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int rawGyroHandler(sensors_event_t *data); 17564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int accelHandler(sensors_event_t *data); 17664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int compassHandler(sensors_event_t *data); 17764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int rvHandler(sensors_event_t *data); 17864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int laHandler(sensors_event_t *data); 17964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int gravHandler(sensors_event_t *data); 18064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int orienHandler(sensors_event_t *data); 18164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void calcOrientationSensor(float *Rx, float *Val); 18264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran virtual int update_delay(); 18364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 18464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void inv_set_device_properties(); 18564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int inv_constructor_init(); 18664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int inv_constructor_default_enable(); 18764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int setGyroInitialState(); 18864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int setAccelInitialState(); 18964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int masterEnable(int en); 19064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int onPower(int en); 19164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int enableLPQuaternion(int); 19264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int enableQuaternionData(int); 19364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int onDMP(int); 1948504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall int enableOneSensor(int en, const char *name, int (MPLSensor::*enabler)(int)); 19564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int enableGyro(int en); 19664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int enableAccel(int en); 19764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int enableCompass(int en); 19864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void computeLocalSensorMask(int enabled_sensors); 19964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int enableSensors(unsigned long sensors, int en, uint32_t changed); 20064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int inv_read_gyro_buffer(int fd, short *data, long long *timestamp); 20164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int inv_float_to_q16(float *fdata, long *ldata); 20264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int inv_long_to_q16(long *fdata, long *ldata); 20364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int inv_float_to_round(float *fdata, long *ldata); 20464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int inv_float_to_round2(float *fdata, short *sdata); 20564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int inv_read_temperature(long long *data); 20664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int inv_read_dmp_state(int fd); 20764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int inv_read_sensor_bias(int fd, long *data); 20864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void inv_get_sensors_orientation(void); 20964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int inv_init_sysfs_attributes(void); 2108504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall#ifdef COMPASS_YAS53x 21133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int resetCompass(void); 21233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall#endif 21364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void setCompassDelay(int64_t ns); 21464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void enable_iio_sysfs(void); 21564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int enableTap(int); 21664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int enableFlick(int); 21764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int enablePedometer(int); 21864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int checkLPQuaternion(); 21964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 22064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int mNewData; // flag indicating that the MPL calculated new output values 22164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int mDmpStarted; 22264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran long mMasterSensorMask; 22364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran long mLocalSensorMask; 22464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int mPollTime; 22564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran bool mHaveGoodMpuCal; // flag indicating that the cal file can be written 22664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int mGyroAccuracy; // value indicating the quality of the gyro calibr. 22764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int mAccelAccuracy; // value indicating the quality of the accel calibr. 2288504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall int mCompassAccuracy; // value indicating the quality of the compass calibr. 22964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran struct pollfd mPollFds[5]; 23064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int mSampleCount; 23164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran pthread_mutex_t mMplMutex; 23264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran pthread_mutex_t mHALMutex; 23364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 23464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char mIIOBuffer[(16 + 8 * 3 + 8) * IIO_BUFFER_LENGTH]; 23564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 23664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int iio_fd; 23764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int accel_fd; 23864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int mpufifo_fd; 23964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int gyro_temperature_fd; 24033ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int dmp_orient_fd; 24133ce91b37062fa63af192f5643de93f3beebe854JP Abgrall 24233ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int mDmpOrientationEnabled; 24364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 2448504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall 24564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran uint32_t mEnabled; 24664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran uint32_t mOldEnabledMask; 24764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran sensors_event_t mPendingEvents[numSensors]; 24833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall int64_t mDelays[numSensors]; 24964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran hfunc_t mHandlers[numSensors]; 25064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran short mCachedGyroData[3]; 25164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran long mCachedAccelData[3]; 25264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran long mCachedCompassData[3]; 25364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran long mCachedQuaternionData[4]; 25464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran android::KeyedVector<int, int> mIrqFds; 25564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 25664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran InputEventCircularReader mAccelInputReader; 25764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran InputEventCircularReader mGyroInputReader; 25864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 25964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran bool mFirstRead; 26064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran short mTempScale; 26164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran short mTempOffset; 26264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int64_t mTempCurrentTime; 26364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int mAccelScale; 26464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 26564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran uint32_t mPendingMask; 26664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran unsigned long mSensorMask; 26764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 26864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char chip_ID[MAX_CHIP_ID_LEN]; 26964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 27064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran signed char mGyroOrientation[9]; 27164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran signed char mAccelOrientation[9]; 27264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 27364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int64_t mSensorTimestamp; 27464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int64_t mCompassTimestamp; 27564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 27664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran struct sysfs_attrbs { 27764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *chip_enable; 27864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *power_state; 27964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *dmp_firmware; 28064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *firmware_loaded; 28164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *dmp_on; 28264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *dmp_int_on; 28333ce91b37062fa63af192f5643de93f3beebe854JP Abgrall char *dmp_event_int_on; 28433ce91b37062fa63af192f5643de93f3beebe854JP Abgrall char *dmp_output_rate; 28564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *tap_on; 28664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *key; 28764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *self_test; 28864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *temperature; 28964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 29064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *gyro_enable; 29164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *gyro_fifo_rate; 29264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *gyro_orient; 29364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *gyro_x_fifo_enable; 29464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *gyro_y_fifo_enable; 29564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *gyro_z_fifo_enable; 29664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 29764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *accel_enable; 29864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *accel_fifo_rate; 29964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *accel_fsr; 30064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *accel_bias; 30164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *accel_orient; 30264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *accel_x_fifo_enable; 30364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *accel_y_fifo_enable; 30464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *accel_z_fifo_enable; 30564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 30664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *quaternion_on; 30764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *in_quat_r_en; 30864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *in_quat_x_en; 30964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *in_quat_y_en; 31064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *in_quat_z_en; 31164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 31264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *in_timestamp_en; 31364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *trigger_name; 31464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *current_trigger; 31564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *buffer_length; 31633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall 31733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall char *display_orientation_on; 31833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall char *event_display_orientation; 31964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran } mpu; 32064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 32164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran char *sysfs_names_ptr; 32264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran int mFeatureActiveMask; 32364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 32464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaranprivate: 32564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran /* added for dynamic get sensor list */ 32664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void fillAccel(const char* accel, struct sensor_t *list); 32764ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void fillGyro(const char* gyro, struct sensor_t *list); 32864ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void fillRV(struct sensor_t *list); 32964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void fillOrientation(struct sensor_t *list); 33064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void fillGravity(struct sensor_t *list); 33164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void fillLinearAccel(struct sensor_t *list); 33264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void storeCalibration(); 33364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void loadDMP(); 3348504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall bool isMpu3050(); 3358504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall int isLowPowerQuatEnabled(); 3368504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall int isDmpDisplayOrientationOn(); 3378504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall 3388504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall 33964ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran}; 34064ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 34164ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaranextern "C" { 34264ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran void setCallbackObject(MPLSensor*); 34364ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran MPLSensor *getCallbackObject(); 34464ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran} 34564ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran 34664ca18f95225d0a86f7ccfd1d21c23971b9f77aeRamanan Rajeswaran#endif // ANDROID_MPL_SENSOR_H 347