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