summaryrefslogtreecommitdiffstats
path: root/libsensors/MPLSensor.h
diff options
context:
space:
mode:
authorKyle Repinski <repinski23@gmail.com>2015-12-02 12:32:39 -0600
committerZiyan <jaraidaniel@gmail.com>2016-01-17 22:41:00 +0100
commit153b50ec9714ff4ba6ce083ca0d49fd31658ce15 (patch)
tree8dab0e630a39552385d42a266ba39dfdaf837752 /libsensors/MPLSensor.h
parentb8515d8e0376e300ed17598f0288fad0e6ae0d89 (diff)
downloaddevice_samsung_tuna-153b50ec9714ff4ba6ce083ca0d49fd31658ce15.zip
device_samsung_tuna-153b50ec9714ff4ba6ce083ca0d49fd31658ce15.tar.gz
device_samsung_tuna-153b50ec9714ff4ba6ce083ca0d49fd31658ce15.tar.bz2
sensors: Merge invensense HAL into main tuna HAL.
Since these are both in our device tree now, there's no need to have them be separated. This saves about 14KB of space as well. Change-Id: Ibfcd7da4b30bb261586ecd9373e6fd4a343e0e06
Diffstat (limited to 'libsensors/MPLSensor.h')
-rw-r--r--libsensors/MPLSensor.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/libsensors/MPLSensor.h b/libsensors/MPLSensor.h
new file mode 100644
index 0000000..ea72c72
--- /dev/null
+++ b/libsensors/MPLSensor.h
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2011 Invensense, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*************Removed the gesture related info for Google check in : Meenakshi Ramamoorthi: May 31st *********/
+
+#ifndef ANDROID_MPL_SENSOR_H
+#define ANDROID_MPL_SENSOR_H
+
+#include <stdint.h>
+#include <errno.h>
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <poll.h>
+#include <utils/Vector.h>
+#include <utils/KeyedVector.h>
+#include "sensors.h"
+#include "SensorBase.h"
+
+/*****************************************************************************/
+/** MPLSensor implementation which fits into the HAL example for crespo provided
+ * * by Google.
+ * * WARNING: there may only be one instance of MPLSensor, ever.
+ */
+
+class MPLSensor: public SensorBase
+{
+ typedef void (MPLSensor::*hfunc_t)(sensors_event_t*, uint32_t*, int);
+
+public:
+ MPLSensor();
+ virtual ~MPLSensor();
+
+ enum
+ {
+ Gyro=0,
+ Accelerometer,
+ MagneticField,
+ Orientation,
+ RotationVector,
+ LinearAccel,
+ Gravity,
+ numSensors
+ };
+
+ virtual int setDelay(int32_t handle, int64_t ns);
+ virtual int enable(int32_t handle, int enabled);
+ virtual int readEvents(sensors_event_t *data, int count);
+ virtual int getFd() const;
+ virtual int getAccelFd() const;
+ virtual int getTimerFd() const;
+ virtual int getPowerFd() const;
+ virtual void handlePowerEvent();
+ virtual void sleepEvent();
+ virtual void wakeEvent();
+ int populateSensorList(struct sensor_t *list, size_t len);
+ void cbOnMotion(uint16_t);
+ void cbProcData();
+
+protected:
+
+ void clearIrqData(bool* irq_set);
+ void setPowerStates(int enabledsensor);
+ void initMPL();
+ void setupFIFO();
+ void setupCallbacks();
+ void gyroHandler(sensors_event_t *data, uint32_t *pendmask, int index);
+ void accelHandler(sensors_event_t *data, uint32_t *pendmask, int index);
+ void compassHandler(sensors_event_t *data, uint32_t *pendmask, int index);
+ void rvHandler(sensors_event_t *data, uint32_t *pendmask, int index);
+ void laHandler(sensors_event_t *data, uint32_t *pendmask, int index);
+ void gravHandler(sensors_event_t *data, uint32_t *pendmask, int index);
+ void orienHandler(sensors_event_t *data, uint32_t *pendmask, int index);
+ void calcOrientationSensor(float *Rx, float *Val);
+ int estimateCompassAccuracy();
+
+ int mNewData; //flag indicating that the MPL calculated new output values
+ int mDmpStarted;
+ long mMasterSensorMask;
+ long mLocalSensorMask;
+ int mCurFifoRate; //current fifo rate
+ bool mHaveGoodMpuCal; //flag indicating that the cal file can be written
+ bool mHaveGoodCompassCal;
+ bool mUseTimerIrqAccel;
+ bool mUsetimerIrqCompass;
+ bool mUseTimerirq;
+ struct pollfd mPollFds[4];
+ pthread_mutex_t mMplMutex;
+
+ enum FILEHANDLES
+ {
+ MPUIRQ_FD, ACCELIRQ_FD, COMPASSIRQ_FD, TIMERIRQ_FD,
+ };
+
+private:
+
+ int update_delay();
+ int accel_fd;
+ int timer_fd;
+
+ uint32_t mEnabled;
+ uint32_t mPendingMask;
+ sensors_event_t mPendingEvents[numSensors];
+ uint64_t mDelays[numSensors];
+ hfunc_t mHandlers[numSensors];
+ bool mForceSleep;
+ long int mOldEnabledMask;
+ android::KeyedVector<int, int> mIrqFds;
+
+ /* added for dynamic get sensor list */
+ bool mNineAxisEnabled;
+ void fillRV(struct sensor_t *list);
+ void fillOrientation(struct sensor_t *list);
+ void fillGravity(struct sensor_t *list);
+ void fillLinearAccel(struct sensor_t *list);
+};
+
+void setCallbackObject(MPLSensor*);
+
+/*****************************************************************************/
+
+#endif // ANDROID_MPL_SENSOR_H