• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_SENSORS_INTERFACE_H
18 #define ANDROID_SENSORS_INTERFACE_H
19 
20 #include <stdint.h>
21 #include <sys/cdefs.h>
22 #include <sys/types.h>
23 
24 #include <hardware/hardware.h>
25 #include <cutils/native_handle.h>
26 
27 __BEGIN_DECLS
28 
29 /*****************************************************************************/
30 
31 #define SENSORS_HEADER_VERSION          1
32 #define SENSORS_MODULE_API_VERSION_0_1  HARDWARE_MODULE_API_VERSION(0, 1)
33 #define SENSORS_DEVICE_API_VERSION_0_1  HARDWARE_DEVICE_API_VERSION_2(0, 1, SENSORS_HEADER_VERSION)
34 #define SENSORS_DEVICE_API_VERSION_1_0  HARDWARE_DEVICE_API_VERSION_2(1, 0, SENSORS_HEADER_VERSION)
35 #define SENSORS_DEVICE_API_VERSION_1_1  HARDWARE_DEVICE_API_VERSION_2(1, 1, SENSORS_HEADER_VERSION)
36 
37 /**
38  * The id of this module
39  */
40 #define SENSORS_HARDWARE_MODULE_ID "sensors"
41 
42 /**
43  * Name of the sensors device to open
44  */
45 #define SENSORS_HARDWARE_POLL       "poll"
46 
47 /**
48  * Handles must be higher than SENSORS_HANDLE_BASE and must be unique.
49  * A Handle identifies a given sensors. The handle is used to activate
50  * and/or deactivate sensors.
51  * In this version of the API there can only be 256 handles.
52  */
53 #define SENSORS_HANDLE_BASE             0
54 #define SENSORS_HANDLE_BITS             8
55 #define SENSORS_HANDLE_COUNT            (1<<SENSORS_HANDLE_BITS)
56 
57 
58 /*
59  * flags for (*batch)()
60  * Availability: SENSORS_DEVICE_API_VERSION_1_0
61  * see (*batch)() documentation for details
62  */
63 enum {
64     SENSORS_BATCH_DRY_RUN               = 0x00000001,
65     SENSORS_BATCH_WAKE_UPON_FIFO_FULL   = 0x00000002
66 };
67 
68 /*
69  * what field for meta_data_event_t
70  */
71 enum {
72     /* a previous flush operation has completed */
73     META_DATA_FLUSH_COMPLETE = 1,
74     META_DATA_VERSION   /* always last, leave auto-assigned */
75 };
76 
77 /**
78  * Definition of the axis used by the sensor HAL API
79  *
80  * This API is relative to the screen of the device in its default orientation,
81  * that is, if the device can be used in portrait or landscape, this API
82  * is only relative to the NATURAL orientation of the screen. In other words,
83  * the axis are not swapped when the device's screen orientation changes.
84  * Higher level services /may/ perform this transformation.
85  *
86  *   x<0         x>0
87  *                ^
88  *                |
89  *    +-----------+-->  y>0
90  *    |           |
91  *    |           |
92  *    |           |
93  *    |           |   / z<0
94  *    |           |  /
95  *    |           | /
96  *    O-----------+/
97  *    |[]  [ ]  []/
98  *    +----------/+     y<0
99  *              /
100  *             /
101  *           |/ z>0 (toward the sky)
102  *
103  *    O: Origin (x=0,y=0,z=0)
104  *
105  */
106 
107 /*
108  * Interaction with suspend mode
109  *
110  * Unless otherwise noted, an enabled sensor shall not prevent the
111  * SoC to go into suspend mode. It is the responsibility of applications
112  * to keep a partial wake-lock should they wish to receive sensor
113  * events while the screen is off. While in suspend mode, and unless
114  * otherwise noted (batch mode, sensor particularities, ...), enabled sensors'
115  * events are lost.
116  *
117  * Note that conceptually, the sensor itself is not de-activated while in
118  * suspend mode -- it's just that the data it returns are lost. As soon as
119  * the SoC gets out of suspend mode, operations resume as usual. Of course,
120  * in practice sensors shall be disabled while in suspend mode to
121  * save power, unless batch mode is active, in which case they must
122  * continue fill their internal FIFO (see the documentation of batch() to
123  * learn how suspend interacts with batch mode).
124  *
125  * In batch mode, and only when the flag SENSORS_BATCH_WAKE_UPON_FIFO_FULL is
126  * set and supported, the specified sensor must be able to wake-up the SoC and
127  * be able to buffer at least 10 seconds worth of the requested sensor events.
128  *
129  * There are notable exceptions to this behavior, which are sensor-dependent
130  * (see sensor types definitions below)
131  *
132  *
133  * The sensor type documentation below specifies the wake-up behavior of
134  * each sensor:
135  *   wake-up: yes     this sensor must wake-up the SoC to deliver events
136  *   wake-up: no      this sensor shall not wake-up the SoC, events are dropped
137  *
138  */
139 
140 /*
141  * Sensor type
142  *
143  * Each sensor has a type which defines what this sensor measures and how
144  * measures are reported. All types are defined below.
145  *
146  * Device manufacturers (OEMs) can define their own sensor types, for
147  * their private use by applications or services provided by them. Such
148  * sensor types are specific to an OEM and can't be exposed in the SDK.
149  * These types must start at SENSOR_TYPE_DEVICE_PRIVATE_BASE.
150  */
151 
152 /*
153  * Base for device manufacturers private sensor types.
154  * These sensor types can't be exposed in the SDK.
155  */
156 #define SENSOR_TYPE_DEVICE_PRIVATE_BASE     0x10000
157 
158 /*
159  * Sensor fusion and virtual sensors
160  *
161  * Many sensor types are or can be implemented as virtual sensors from
162  * physical sensors on the device. For instance the rotation vector sensor,
163  * orientation sensor, step-detector, step-counter, etc...
164  *
165  * From the point of view of this API these virtual sensors MUST appear as
166  * real, individual sensors. It is the responsibility of the driver and HAL
167  * to make sure this is the case.
168  *
169  * In particular, all sensors must be able to function concurrently.
170  * For example, if defining both an accelerometer and a step counter,
171  * then both must be able to work concurrently.
172  */
173 
174 /*
175  * Trigger modes
176  *
177  * Sensors can report events in different ways called trigger modes,
178  * each sensor type has one and only one trigger mode associated to it.
179  * Currently there are four trigger modes defined:
180  *
181  * continuous: events are reported at a constant rate defined by setDelay().
182  *             eg: accelerometers, gyroscopes.
183  * on-change:  events are reported only if the sensor's value has changed.
184  *             setDelay() is used to set a lower limit to the reporting
185  *             period (minimum time between two events).
186  *             The HAL must return an event immediately when an on-change
187  *             sensor is activated.
188  *             eg: proximity, light sensors
189  * one-shot:   upon detection of an event, the sensor deactivates itself and
190  *             then sends a single event. Order matters to avoid race
191  *             conditions. No other event is sent until the sensor get
192  *             reactivated. setDelay() is ignored.
193  *             eg: significant motion sensor
194  * special:    see details in the sensor type specification below
195  *
196  */
197 
198 
199 /*
200  * SENSOR_TYPE_META_DATA
201  * trigger-mode: n/a
202  * wake-up sensor: n/a
203  *
204  * NO SENSOR OF THAT TYPE MUST BE RETURNED (*get_sensors_list)()
205  *
206  * SENSOR_TYPE_META_DATA is a special token used to populate the
207  * sensors_meta_data_event structure. It doesn't correspond to a physical
208  * sensor. sensors_meta_data_event are special, they exist only inside
209  * the HAL and are generated spontaneously, as opposed to be related to
210  * a physical sensor.
211  *
212  *   sensors_meta_data_event_t.version must be META_DATA_VERSION
213  *   sensors_meta_data_event_t.sensor must be 0
214  *   sensors_meta_data_event_t.type must be SENSOR_TYPE_META_DATA
215  *   sensors_meta_data_event_t.reserved must be 0
216  *   sensors_meta_data_event_t.timestamp must be 0
217  *
218  * The payload is a meta_data_event_t, where:
219  * meta_data_event_t.what can take the following values:
220  *
221  * META_DATA_FLUSH_COMPLETE
222  *   This event indicates that a previous (*flush)() call has completed for the sensor
223  *   handle specified in meta_data_event_t.sensor.
224  *   see (*flush)() for more details
225  *
226  * All other values for meta_data_event_t.what are reserved and
227  * must not be used.
228  *
229  */
230 #define SENSOR_TYPE_META_DATA                           (0)
231 
232 /*
233  * SENSOR_TYPE_ACCELEROMETER
234  * trigger-mode: continuous
235  * wake-up sensor: no
236  *
237  *  All values are in SI units (m/s^2) and measure the acceleration of the
238  *  device minus the force of gravity.
239  *
240  *  Acceleration sensors return sensor events for all 3 axes at a constant
241  *  rate defined by setDelay().
242  *
243  *  x: Acceleration on the x-axis
244  *  y: Acceleration on the y-axis
245  *  z: Acceleration on the z-axis
246  *
247  * Note that the readings from the accelerometer include the acceleration
248  * due to gravity (which is opposite to the direction of the gravity vector).
249  *
250  *  Examples:
251  *    The norm of <x, y, z>  should be close to 0 when in free fall.
252  *
253  *    When the device lies flat on a table and is pushed on its left side
254  *    toward the right, the x acceleration value is positive.
255  *
256  *    When the device lies flat on a table, the acceleration value is +9.81,
257  *    which correspond to the acceleration of the device (0 m/s^2) minus the
258  *    force of gravity (-9.81 m/s^2).
259  *
260  *    When the device lies flat on a table and is pushed toward the sky, the
261  *    acceleration value is greater than +9.81, which correspond to the
262  *    acceleration of the device (+A m/s^2) minus the force of
263  *    gravity (-9.81 m/s^2).
264  */
265 #define SENSOR_TYPE_ACCELEROMETER                    (1)
266 
267 /*
268  * SENSOR_TYPE_GEOMAGNETIC_FIELD
269  * trigger-mode: continuous
270  * wake-up sensor: no
271  *
272  *  All values are in micro-Tesla (uT) and measure the geomagnetic
273  *  field in the X, Y and Z axis.
274  *
275  *  Returned values include calibration mechanisms such that the vector is
276  *  aligned with the magnetic declination and heading of the earth's
277  *  geomagnetic field.
278  *
279  *  Magnetic Field sensors return sensor events for all 3 axes at a constant
280  *  rate defined by setDelay().
281  */
282 #define SENSOR_TYPE_GEOMAGNETIC_FIELD                (2)
283 #define SENSOR_TYPE_MAGNETIC_FIELD  SENSOR_TYPE_GEOMAGNETIC_FIELD
284 
285 /*
286  * SENSOR_TYPE_ORIENTATION
287  * trigger-mode: continuous
288  * wake-up sensor: no
289  *
290  * All values are angles in degrees.
291  *
292  * Orientation sensors return sensor events for all 3 axes at a constant
293  * rate defined by setDelay().
294  *
295  * azimuth: angle between the magnetic north direction and the Y axis, around
296  *  the Z axis (0<=azimuth<360).
297  *      0=North, 90=East, 180=South, 270=West
298  *
299  * pitch: Rotation around X axis (-180<=pitch<=180), with positive values when
300  *  the z-axis moves toward the y-axis.
301  *
302  * roll: Rotation around Y axis (-90<=roll<=90), with positive values when
303  *  the x-axis moves towards the z-axis.
304  *
305  * Note: For historical reasons the roll angle is positive in the clockwise
306  *  direction (mathematically speaking, it should be positive in the
307  *  counter-clockwise direction):
308  *
309  *                Z
310  *                ^
311  *  (+roll)  .--> |
312  *          /     |
313  *         |      |  roll: rotation around Y axis
314  *     X <-------(.)
315  *                 Y
316  *       note that +Y == -roll
317  *
318  *
319  *
320  * Note: This definition is different from yaw, pitch and roll used in aviation
321  *  where the X axis is along the long side of the plane (tail to nose).
322  */
323 #define SENSOR_TYPE_ORIENTATION                      (3)
324 
325 /*
326  * SENSOR_TYPE_GYROSCOPE
327  * trigger-mode: continuous
328  * wake-up sensor: no
329  *
330  *  All values are in radians/second and measure the rate of rotation
331  *  around the X, Y and Z axis.  The coordinate system is the same as is
332  *  used for the acceleration sensor. Rotation is positive in the
333  *  counter-clockwise direction (right-hand rule). That is, an observer
334  *  looking from some positive location on the x, y or z axis at a device
335  *  positioned on the origin would report positive rotation if the device
336  *  appeared to be rotating counter clockwise. Note that this is the
337  *  standard mathematical definition of positive rotation and does not agree
338  *  with the definition of roll given earlier.
339  *  The range should at least be 17.45 rad/s (ie: ~1000 deg/s).
340  *
341  *  automatic gyro-drift compensation is allowed but not required.
342  */
343 #define SENSOR_TYPE_GYROSCOPE                        (4)
344 
345 /*
346  * SENSOR_TYPE_LIGHT
347  * trigger-mode: on-change
348  * wake-up sensor: no
349  *
350  * The light sensor value is returned in SI lux units.
351  */
352 #define SENSOR_TYPE_LIGHT                            (5)
353 
354 /*
355  * SENSOR_TYPE_PRESSURE
356  * trigger-mode: continuous
357  * wake-up sensor: no
358  *
359  * The pressure sensor return the athmospheric pressure in hectopascal (hPa)
360  */
361 #define SENSOR_TYPE_PRESSURE                         (6)
362 
363 /* SENSOR_TYPE_TEMPERATURE is deprecated in the HAL */
364 #define SENSOR_TYPE_TEMPERATURE                      (7)
365 
366 /*
367  * SENSOR_TYPE_PROXIMITY
368  * trigger-mode: on-change
369  * wake-up sensor: yes
370  *
371  * The distance value is measured in centimeters.  Note that some proximity
372  * sensors only support a binary "close" or "far" measurement.  In this case,
373  * the sensor should report its maxRange value in the "far" state and a value
374  * less than maxRange in the "near" state.
375  */
376 #define SENSOR_TYPE_PROXIMITY                        (8)
377 
378 /*
379  * SENSOR_TYPE_GRAVITY
380  * trigger-mode: continuous
381  * wake-up sensor: no
382  *
383  * A gravity output indicates the direction of and magnitude of gravity in
384  * the devices's coordinates.  On Earth, the magnitude is 9.8 m/s^2.
385  * Units are m/s^2.  The coordinate system is the same as is used for the
386  * acceleration sensor. When the device is at rest, the output of the
387  * gravity sensor should be identical to that of the accelerometer.
388  */
389 #define SENSOR_TYPE_GRAVITY                          (9)
390 
391 /*
392  * SENSOR_TYPE_LINEAR_ACCELERATION
393  * trigger-mode: continuous
394  * wake-up sensor: no
395  *
396  * Indicates the linear acceleration of the device in device coordinates,
397  * not including gravity.
398  *
399  * The output is conceptually:
400  *    output of TYPE_ACCELERATION - output of TYPE_GRAVITY
401  *
402  * Readings on all axes should be close to 0 when device lies on a table.
403  * Units are m/s^2.
404  * The coordinate system is the same as is used for the acceleration sensor.
405  */
406 #define SENSOR_TYPE_LINEAR_ACCELERATION             (10)
407 
408 
409 /*
410  * SENSOR_TYPE_ROTATION_VECTOR
411  * trigger-mode: continuous
412  * wake-up sensor: no
413  *
414  * The rotation vector symbolizes the orientation of the device relative to the
415  * East-North-Up coordinates frame. It is usually obtained by integration of
416  * accelerometer, gyroscope and magnetometer readings.
417  *
418  * The East-North-Up coordinate system is defined as a direct orthonormal basis
419  * where:
420  * - X points east and is tangential to the ground.
421  * - Y points north and is tangential to the ground.
422  * - Z points towards the sky and is perpendicular to the ground.
423  *
424  * The orientation of the phone is represented by the rotation necessary to
425  * align the East-North-Up coordinates with the phone's coordinates. That is,
426  * applying the rotation to the world frame (X,Y,Z) would align them with the
427  * phone coordinates (x,y,z).
428  *
429  * The rotation can be seen as rotating the phone by an angle theta around
430  * an axis rot_axis to go from the reference (East-North-Up aligned) device
431  * orientation to the current device orientation.
432  *
433  * The rotation is encoded as the 4 (reordered) components of a unit quaternion:
434  *   sensors_event_t.data[0] = rot_axis.x*sin(theta/2)
435  *   sensors_event_t.data[1] = rot_axis.y*sin(theta/2)
436  *   sensors_event_t.data[2] = rot_axis.z*sin(theta/2)
437  *   sensors_event_t.data[3] = cos(theta/2)
438  * where
439  *   - rot_axis.x,y,z are the North-East-Up coordinates of a unit length vector
440  *     representing the rotation axis
441  *   - theta is the rotation angle
442  *
443  * The quaternion must be of norm 1 (it is a unit quaternion). Failure to ensure
444  * this will cause erratic client behaviour.
445  *
446  * In addition, this sensor reports an estimated heading accuracy.
447  *   sensors_event_t.data[4] = estimated_accuracy (in radians)
448  * The heading error must be less than estimated_accuracy 95% of the time
449  *
450  * This sensor must use a gyroscope and an accelerometer as main orientation
451  * change input.
452  *
453  * This sensor can also include magnetometer input to make up for gyro drift,
454  * but it cannot be implemented using only a magnetometer.
455  */
456 #define SENSOR_TYPE_ROTATION_VECTOR                 (11)
457 
458 /*
459  * SENSOR_TYPE_RELATIVE_HUMIDITY
460  * trigger-mode: on-change
461  * wake-up sensor: no
462  *
463  * A relative humidity sensor measures relative ambient air humidity and
464  * returns a value in percent.
465  */
466 #define SENSOR_TYPE_RELATIVE_HUMIDITY               (12)
467 
468 /*
469  * SENSOR_TYPE_AMBIENT_TEMPERATURE
470  * trigger-mode: on-change
471  * wake-up sensor: no
472  *
473  * The ambient (room) temperature in degree Celsius.
474  */
475 #define SENSOR_TYPE_AMBIENT_TEMPERATURE             (13)
476 
477 /*
478  * SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED
479  * trigger-mode: continuous
480  * wake-up sensor: no
481  *
482  *  Similar to SENSOR_TYPE_MAGNETIC_FIELD, but the hard iron calibration is
483  *  reported separately instead of being included in the measurement.
484  *  Factory calibration and temperature compensation should still be applied to
485  *  the "uncalibrated" measurement.
486  *  Separating away the hard iron calibration estimation allows the system to
487  *  better recover from bad hard iron estimation.
488  *
489  *  All values are in micro-Tesla (uT) and measure the ambient magnetic
490  *  field in the X, Y and Z axis. Assumptions that the the magnetic field
491  *  is due to the Earth's poles should be avoided.
492  *
493  *  The uncalibrated_magnetic event contains
494  *  - 3 fields for uncalibrated measurement: x_uncalib, y_uncalib, z_uncalib.
495  *    Each is a component of the measured magnetic field, with soft iron
496  *    and temperature compensation applied, but not hard iron calibration.
497  *    These values should be continuous (no re-calibration should cause a jump).
498  *  - 3 fields for hard iron bias estimates: x_bias, y_bias, z_bias.
499  *    Each field is a component of the estimated hard iron calibration.
500  *    They represent the offsets to apply to the calibrated readings to obtain
501  *    uncalibrated readings (x_uncalib ~= x_calibrated + x_bias)
502  *    These values are expected to jump as soon as the estimate of the hard iron
503  *    changes, and they should be stable the rest of the time.
504  *
505  *  If this sensor is present, then the corresponding
506  *  SENSOR_TYPE_MAGNETIC_FIELD must be present and both must return the
507  *  same sensor_t::name and sensor_t::vendor.
508  *
509  *  Minimum filtering should be applied to this sensor. In particular, low pass
510  *  filters should be avoided.
511  *
512  * See SENSOR_TYPE_MAGNETIC_FIELD for more information
513  */
514 #define SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED     (14)
515 
516 /*
517  * SENSOR_TYPE_GAME_ROTATION_VECTOR
518  * trigger-mode: continuous
519  * wake-up sensor: no
520  *
521  *  Similar to SENSOR_TYPE_ROTATION_VECTOR, but not using the geomagnetic
522  *  field. Therefore the Y axis doesn't point north, but instead to some other
523  *  reference. That reference is allowed to drift by the same order of
524  *  magnitude than the gyroscope drift around the Z axis.
525  *
526  *  This sensor does not report an estimated heading accuracy:
527  *    sensors_event_t.data[4] is reserved and should be set to 0
528  *
529  *  In the ideal case, a phone rotated and returning to the same real-world
530  *  orientation should report the same game rotation vector
531  *  (without using the earth's geomagnetic field).
532  *
533  *  This sensor must be based on a gyroscope. It cannot be implemented using
534  *  a magnetometer.
535  *
536  * see SENSOR_TYPE_ROTATION_VECTOR for more details
537  */
538 #define SENSOR_TYPE_GAME_ROTATION_VECTOR            (15)
539 
540 /*
541  * SENSOR_TYPE_GYROSCOPE_UNCALIBRATED
542  * trigger-mode: continuous
543  * wake-up sensor: no
544  *
545  *  All values are in radians/second and measure the rate of rotation
546  *  around the X, Y and Z axis. An estimation of the drift on each axis is
547  *  reported as well.
548  *
549  *  No gyro-drift compensation shall be performed.
550  *  Factory calibration and temperature compensation should still be applied
551  *  to the rate of rotation (angular speeds).
552  *
553  *  The coordinate system is the same as is
554  *  used for the acceleration sensor. Rotation is positive in the
555  *  counter-clockwise direction (right-hand rule). That is, an observer
556  *  looking from some positive location on the x, y or z axis at a device
557  *  positioned on the origin would report positive rotation if the device
558  *  appeared to be rotating counter clockwise. Note that this is the
559  *  standard mathematical definition of positive rotation and does not agree
560  *  with the definition of roll given earlier.
561  *  The range should at least be 17.45 rad/s (ie: ~1000 deg/s).
562  *
563  *  Content of an uncalibrated_gyro event: (units are rad/sec)
564  *   x_uncalib : angular speed (w/o drift compensation) around the X axis
565  *   y_uncalib : angular speed (w/o drift compensation) around the Y axis
566  *   z_uncalib : angular speed (w/o drift compensation) around the Z axis
567  *   x_bias : estimated drift around X axis in rad/s
568  *   y_bias : estimated drift around Y axis in rad/s
569  *   z_bias : estimated drift around Z axis in rad/s
570  *
571  *  IMPLEMENTATION NOTES:
572  *
573  *  If the implementation is not able to estimate the drift, then this
574  *  sensor MUST NOT be reported by this HAL. Instead, the regular
575  *  SENSOR_TYPE_GYROSCOPE is used without drift compensation.
576  *
577  *  If this sensor is present, then the corresponding
578  *  SENSOR_TYPE_GYROSCOPE must be present and both must return the
579  *  same sensor_t::name and sensor_t::vendor.
580  */
581 #define SENSOR_TYPE_GYROSCOPE_UNCALIBRATED          (16)
582 
583 
584 /*
585  * SENSOR_TYPE_SIGNIFICANT_MOTION
586  * trigger-mode: one-shot
587  * wake-up sensor: yes
588  *
589  * A sensor of this type triggers an event each time significant motion
590  * is detected and automatically disables itself.
591  * The only allowed value to return is 1.0.
592  *
593  * A significant motion is a motion that might lead to a change in the user
594  * location.
595  * Examples of such motions are:
596  *   walking, biking, sitting in a moving car, coach or train.
597  * Examples of situations that should not trigger significant motion:
598  * - phone in pocket and person is not moving
599  * - phone is on a table, even if the table shakes a bit due to nearby traffic
600  *   or washing machine
601  *
602  * A note on false positive / false negative / power consumption tradeoff
603  *  - The goal of this sensor is to save power.
604  *  - Triggering an event when the user is not moving (false positive) is costly
605  *    in terms of power, so it should be avoided.
606  *  - Not triggering an event when the user is moving (false negative) is
607  *    acceptable as long as it is not done repeatedly. If the user has been
608  *    walking for 10 seconds, not triggering an event within those 10 seconds
609  *    is not acceptable.
610  *
611  *  IMPORTANT NOTE: this sensor type is very different from other types
612  *  in that it must work when the screen is off without the need of
613  *  holding a partial wake-lock and MUST allow the SoC to go into suspend.
614  *  When significant motion is detected, the sensor must awaken the SoC and
615  *  the event be reported.
616  *
617  *  If a particular hardware cannot support this mode of operation then this
618  *  sensor type MUST NOT be reported by the HAL. ie: it is not acceptable
619  *  to "emulate" this sensor in the HAL.
620  *
621  *  The whole point of this sensor type is to save power by keeping the
622  *  SoC in suspend mode when the device is at rest.
623  *
624  *  When the sensor is not activated, it must also be deactivated in the
625  *  hardware: it must not wake up the SoC anymore, even in case of
626  *  significant motion.
627  *
628  *  setDelay() has no effect and is ignored.
629  *  Once a "significant motion" event is returned, a sensor of this type
630  *  must disables itself automatically, as if activate(..., 0) had been called.
631  */
632 
633 #define SENSOR_TYPE_SIGNIFICANT_MOTION              (17)
634 
635 
636 /*
637  * SENSOR_TYPE_STEP_DETECTOR
638  * trigger-mode: special
639  * wake-up sensor: no
640  *
641  * A sensor of this type triggers an event each time a step is taken
642  * by the user. The only allowed value to return is 1.0 and an event is
643  * generated for each step. Like with any other event, the timestamp
644  * indicates when the event (here the step) occurred, this corresponds to when
645  * the foot hit the ground, generating a high variation in acceleration.
646  *
647  * While this sensor operates, it shall not disrupt any other sensors, in
648  * particular, but not limited to, the accelerometer; which might very well
649  * be in use as well.
650  *
651  * This sensor must be low power. That is, if the step detection cannot be
652  * done in hardware, this sensor should not be defined. Also, when the
653  * step detector is activated and the accelerometer is not, only steps should
654  * trigger interrupts (not accelerometer data).
655  *
656  * setDelay() has no impact on this sensor type
657  */
658 
659 #define SENSOR_TYPE_STEP_DETECTOR                   (18)
660 
661 
662 /*
663  * SENSOR_TYPE_STEP_COUNTER
664  * trigger-mode: on-change
665  * wake-up sensor: no
666  *
667  * A sensor of this type returns the number of steps taken by the user since
668  * the last reboot while activated. The value is returned as a uint64_t and is
669  * reset to zero only on a system / android reboot.
670  *
671  * The timestamp of the event is set to the time when the first step
672  * for that event was taken.
673  * See SENSOR_TYPE_STEP_DETECTOR for the signification of the time of a step.
674  *
675  *  The minimum size of the hardware's internal counter shall be 16 bits
676  *  (this restriction is here to avoid too frequent wake-ups when the
677  *  delay is very large).
678  *
679  *  IMPORTANT NOTE: this sensor type is different from other types
680  *  in that it must work when the screen is off without the need of
681  *  holding a partial wake-lock and MUST allow the SoC to go into suspend.
682  *  Unlike other sensors, while in suspend mode this sensor must stay active,
683  *  no events are reported during that time but, steps continue to be
684  *  accounted for; an event will be reported as soon as the SoC resumes if
685  *  the timeout has expired.
686  *
687  *    In other words, when the screen is off and the device allowed to
688  *    go into suspend mode, we don't want to be woken up, regardless of the
689  *    setDelay() value, but the steps shall continue to be counted.
690  *
691  *    The driver must however ensure that the internal step count never
692  *    overflows. It is allowed in this situation to wake the SoC up so the
693  *    driver can do the counter maintenance.
694  *
695  *  While this sensor operates, it shall not disrupt any other sensors, in
696  *  particular, but not limited to, the accelerometer; which might very well
697  *  be in use as well.
698  *
699  *  If a particular hardware cannot support these modes of operation then this
700  *  sensor type MUST NOT be reported by the HAL. ie: it is not acceptable
701  *  to "emulate" this sensor in the HAL.
702  *
703  * This sensor must be low power. That is, if the step detection cannot be
704  * done in hardware, this sensor should not be defined. Also, when the
705  * step counter is activated and the accelerometer is not, only steps should
706  * trigger interrupts (not accelerometer data).
707  *
708  *  The whole point of this sensor type is to save power by keeping the
709  *  SoC in suspend mode when the device is at rest.
710  */
711 
712 #define SENSOR_TYPE_STEP_COUNTER                    (19)
713 
714 /*
715  * SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR
716  * trigger-mode: continuous
717  * wake-up sensor: no
718  *
719  *  Similar to SENSOR_TYPE_ROTATION_VECTOR, but using a magnetometer instead
720  *  of using a gyroscope.
721  *
722  *  This sensor must be based on a magnetometer. It cannot be implemented using
723  *  a gyroscope, and gyroscope input cannot be used by this sensor, as the
724  *  goal of this sensor is to be low power.
725  *  The accelerometer can be (and usually is) used.
726  *
727  *  Just like SENSOR_TYPE_ROTATION_VECTOR, this sensor reports an estimated
728  *  heading accuracy:
729  *    sensors_event_t.data[4] = estimated_accuracy (in radians)
730  *  The heading error must be less than estimated_accuracy 95% of the time
731  *
732  * see SENSOR_TYPE_ROTATION_VECTOR for more details
733  */
734 #define SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR            (20)
735 
736 /**
737  * Values returned by the accelerometer in various locations in the universe.
738  * all values are in SI units (m/s^2)
739  */
740 #define GRAVITY_SUN             (275.0f)
741 #define GRAVITY_EARTH           (9.80665f)
742 
743 /** Maximum magnetic field on Earth's surface */
744 #define MAGNETIC_FIELD_EARTH_MAX    (60.0f)
745 
746 /** Minimum magnetic field on Earth's surface */
747 #define MAGNETIC_FIELD_EARTH_MIN    (30.0f)
748 
749 
750 /**
751  * status of orientation sensor
752  */
753 
754 #define SENSOR_STATUS_UNRELIABLE        0
755 #define SENSOR_STATUS_ACCURACY_LOW      1
756 #define SENSOR_STATUS_ACCURACY_MEDIUM   2
757 #define SENSOR_STATUS_ACCURACY_HIGH     3
758 
759 
760 /**
761  * sensor event data
762  */
763 typedef struct {
764     union {
765         float v[3];
766         struct {
767             float x;
768             float y;
769             float z;
770         };
771         struct {
772             float azimuth;
773             float pitch;
774             float roll;
775         };
776     };
777     int8_t status;
778     uint8_t reserved[3];
779 } sensors_vec_t;
780 
781 /**
782  * uncalibrated gyroscope and magnetometer event data
783  */
784 typedef struct {
785   union {
786     float uncalib[3];
787     struct {
788       float x_uncalib;
789       float y_uncalib;
790       float z_uncalib;
791     };
792   };
793   union {
794     float bias[3];
795     struct {
796       float x_bias;
797       float y_bias;
798       float z_bias;
799     };
800   };
801 } uncalibrated_event_t;
802 
803 typedef struct meta_data_event {
804     int32_t what;
805     int32_t sensor;
806 } meta_data_event_t;
807 
808 /**
809  * Union of the various types of sensor data
810  * that can be returned.
811  */
812 typedef struct sensors_event_t {
813     /* must be sizeof(struct sensors_event_t) */
814     int32_t version;
815 
816     /* sensor identifier */
817     int32_t sensor;
818 
819     /* sensor type */
820     int32_t type;
821 
822     /* reserved */
823     int32_t reserved0;
824 
825     /* time is in nanosecond */
826     int64_t timestamp;
827 
828     union {
829         union {
830             float           data[16];
831 
832             /* acceleration values are in meter per second per second (m/s^2) */
833             sensors_vec_t   acceleration;
834 
835             /* magnetic vector values are in micro-Tesla (uT) */
836             sensors_vec_t   magnetic;
837 
838             /* orientation values are in degrees */
839             sensors_vec_t   orientation;
840 
841             /* gyroscope values are in rad/s */
842             sensors_vec_t   gyro;
843 
844             /* temperature is in degrees centigrade (Celsius) */
845             float           temperature;
846 
847             /* distance in centimeters */
848             float           distance;
849 
850             /* light in SI lux units */
851             float           light;
852 
853             /* pressure in hectopascal (hPa) */
854             float           pressure;
855 
856             /* relative humidity in percent */
857             float           relative_humidity;
858 
859             /* uncalibrated gyroscope values are in rad/s */
860             uncalibrated_event_t uncalibrated_gyro;
861 
862             /* uncalibrated magnetometer values are in micro-Teslas */
863             uncalibrated_event_t uncalibrated_magnetic;
864 
865             /* this is a special event. see SENSOR_TYPE_META_DATA above.
866              * sensors_meta_data_event_t events are all reported with a type of
867              * SENSOR_TYPE_META_DATA. The handle is ignored and must be zero.
868              */
869             meta_data_event_t meta_data;
870         };
871 
872         union {
873             uint64_t        data[8];
874 
875             /* step-counter */
876             uint64_t        step_counter;
877         } u64;
878     };
879     uint32_t reserved1[4];
880 } sensors_event_t;
881 
882 
883 /* see SENSOR_TYPE_META_DATA */
884 typedef sensors_event_t sensors_meta_data_event_t;
885 
886 
887 struct sensor_t;
888 
889 /**
890  * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
891  * and the fields of this data structure must begin with hw_module_t
892  * followed by module specific information.
893  */
894 struct sensors_module_t {
895     struct hw_module_t common;
896 
897     /**
898      * Enumerate all available sensors. The list is returned in "list".
899      * @return number of sensors in the list
900      */
901     int (*get_sensors_list)(struct sensors_module_t* module,
902             struct sensor_t const** list);
903 };
904 
905 struct sensor_t {
906 
907     /* Name of this sensor.
908      * All sensors of the same "type" must have a different "name".
909      */
910     const char*     name;
911 
912     /* vendor of the hardware part */
913     const char*     vendor;
914 
915     /* version of the hardware part + driver. The value of this field
916      * must increase when the driver is updated in a way that changes the
917      * output of this sensor. This is important for fused sensors when the
918      * fusion algorithm is updated.
919      */
920     int             version;
921 
922     /* handle that identifies this sensors. This handle is used to reference
923      * this sensor throughout the HAL API.
924      */
925     int             handle;
926 
927     /* this sensor's type. */
928     int             type;
929 
930     /* maximum range of this sensor's value in SI units */
931     float           maxRange;
932 
933     /* smallest difference between two values reported by this sensor */
934     float           resolution;
935 
936     /* rough estimate of this sensor's power consumption in mA */
937     float           power;
938 
939     /* this value depends on the trigger mode:
940      *
941      *   continuous: minimum sample period allowed in microseconds
942      *   on-change : 0
943      *   one-shot  :-1
944      *   special   : 0, unless otherwise noted
945      */
946     int32_t         minDelay;
947 
948     /* number of events reserved for this sensor in the batch mode FIFO.
949      * If there is a dedicated FIFO for this sensor, then this is the
950      * size of this FIFO. If the FIFO is shared with other sensors,
951      * this is the size reserved for that sensor and it can be zero.
952      */
953     uint32_t        fifoReservedEventCount;
954 
955     /* maximum number of events of this sensor that could be batched.
956      * This is especially relevant when the FIFO is shared between
957      * several sensors; this value is then set to the size of that FIFO.
958      */
959     uint32_t        fifoMaxEventCount;
960 
961     /* reserved fields, must be zero */
962     void*           reserved[6];
963 };
964 
965 
966 /*
967  * sensors_poll_device_t is used with SENSORS_DEVICE_API_VERSION_0_1
968  * and is present for backward binary and source compatibility.
969  * (see documentation of the hooks in struct sensors_poll_device_1 below)
970  */
971 struct sensors_poll_device_t {
972     struct hw_device_t common;
973     int (*activate)(struct sensors_poll_device_t *dev,
974             int handle, int enabled);
975     int (*setDelay)(struct sensors_poll_device_t *dev,
976             int handle, int64_t ns);
977     int (*poll)(struct sensors_poll_device_t *dev,
978             sensors_event_t* data, int count);
979 };
980 
981 /*
982  * struct sensors_poll_device_1 is used with SENSORS_DEVICE_API_VERSION_1_0
983  */
984 typedef struct sensors_poll_device_1 {
985     union {
986         /* sensors_poll_device_1 is compatible with sensors_poll_device_t,
987          * and can be down-cast to it
988          */
989         struct sensors_poll_device_t v0;
990 
991         struct {
992             struct hw_device_t common;
993 
994             /* Activate/de-activate one sensor.
995              *
996              * handle is the handle of the sensor to change.
997              * enabled set to 1 to enable, or 0 to disable the sensor.
998              *
999              * if enabled is set to 1, the sensor is activated even if
1000              * setDelay() wasn't called before. In this case, a default rate
1001              * should be used.
1002              *
1003              * unless otherwise noted in the sensor types definitions, an
1004              * activated sensor never prevents the SoC to go into suspend
1005              * mode; that is, the HAL shall not hold a partial wake-lock on
1006              * behalf of applications.
1007              *
1008              * one-shot sensors de-activate themselves automatically upon
1009              * receiving an event and they must still accept to be deactivated
1010              * through a call to activate(..., ..., 0).
1011              *
1012              * if "enabled" is 1 and the sensor is already activated, this
1013              * function is a no-op and succeeds.
1014              *
1015              * if "enabled" is 0 and the sensor is already de-activated,
1016              * this function is a no-op and succeeds.
1017              *
1018              * return 0 on success, negative errno code otherwise
1019              */
1020             int (*activate)(struct sensors_poll_device_t *dev,
1021                     int handle, int enabled);
1022 
1023             /**
1024              * Set the events's period in nanoseconds for a given sensor.
1025              *
1026              * What the period_ns parameter means depends on the specified
1027              * sensor's trigger mode:
1028              *
1029              * continuous: setDelay() sets the sampling rate.
1030              * on-change: setDelay() limits the delivery rate of events
1031              * one-shot: setDelay() is ignored. it has no effect.
1032              * special: see specific sensor type definitions
1033              *
1034              * For continuous and on-change sensors, if the requested value is
1035              * less than sensor_t::minDelay, then it's silently clamped to
1036              * sensor_t::minDelay unless sensor_t::minDelay is 0, in which
1037              * case it is clamped to >= 1ms.
1038              *
1039              * setDelay will not be called when the sensor is in batching mode.
1040              * In this case, batch() will be called with the new period.
1041              *
1042              * @return 0 if successful, < 0 on error
1043              */
1044             int (*setDelay)(struct sensors_poll_device_t *dev,
1045                     int handle, int64_t period_ns);
1046 
1047             /**
1048              * Returns an array of sensor data.
1049              * This function must block until events are available.
1050              *
1051              * return the number of events read on success, or -errno in case
1052              * of an error.
1053              *
1054              * The number of events returned in data must be less or equal
1055              * to the "count" argument.
1056              *
1057              * This function shall never return 0 (no event).
1058              */
1059             int (*poll)(struct sensors_poll_device_t *dev,
1060                     sensors_event_t* data, int count);
1061         };
1062     };
1063 
1064 
1065     /*
1066      * Enables batch mode for the given sensor and sets the delay between events
1067      *
1068      * A timeout value of zero disables batch mode for the given sensor.
1069      *
1070      * The period_ns parameter is equivalent to calling setDelay() -- this
1071      * function both enables or disables the batch mode AND sets the events's
1072      * period in nanosecond. See setDelay() above for a detailed explanation of
1073      * the period_ns parameter.
1074      *
1075      * BATCH MODE:
1076      * -----------
1077      * In non-batch mode, all sensor events must be reported as soon as they
1078      * are detected. For example, an accelerometer activated at 50Hz will
1079      * trigger interrupts 50 times per second.
1080      * While in batch mode, sensor events do not need to be reported as soon
1081      * as they are detected. They can be temporarily stored in batches and
1082      * reported in batches, as long as no event is delayed by more than
1083      * "timeout" nanoseconds. That is, all events since the previous batch
1084      * are recorded and returned all at once. This allows to reduce the amount
1085      * of interrupts sent to the SoC, and allow the SoC to switch to a lower
1086      * power state (Idle) while the sensor is capturing and batching data.
1087      *
1088      * setDelay() is not affected and it behaves as usual.
1089      *
1090      * Each event has a timestamp associated with it, the timestamp
1091      * must be accurate and correspond to the time at which the event
1092      * physically happened.
1093      *
1094      * Batching does not modify the behavior of poll(): batches from different
1095      * sensors can be interleaved and split. As usual, all events from the same
1096      * sensor are time-ordered.
1097      *
1098      * BEHAVIOUR OUTSIDE OF SUSPEND MODE:
1099      * ----------------------------------
1100      *
1101      * When the SoC is awake (not in suspend mode), events must be reported in
1102      * batches at least every "timeout". No event shall be dropped or lost.
1103      * If internal h/w FIFOs fill-up before the timeout, then events are
1104      * reported at that point to ensure no event is lost.
1105      *
1106      *
1107      * NORMAL BEHAVIOR IN SUSPEND MODE:
1108      * ---------------------------------
1109      *
1110      * By default, batch mode doesn't significantly change the interaction with
1111      * suspend mode. That is, sensors must continue to allow the SoC to
1112      * go into suspend mode and sensors must stay active to fill their
1113      * internal FIFO. In this mode, when the FIFO fills up, it shall wrap
1114      * around (basically behave like a circular buffer, overwriting events).
1115      * As soon as the SoC comes out of suspend mode, a batch is produced with
1116      * as much as the recent history as possible, and batch operation
1117      * resumes as usual.
1118      *
1119      * The behavior described above allows applications to record the recent
1120      * history of a set of sensor while keeping the SoC into suspend. It
1121      * also allows the hardware to not have to rely on a wake-up interrupt line.
1122      *
1123      * WAKE_UPON_FIFO_FULL BEHAVIOR IN SUSPEND MODE:
1124      * ----------------------------------------------
1125      *
1126      * There are cases, however, where an application cannot afford to lose
1127      * any events, even when the device goes into suspend mode.
1128      * For a given rate, if a sensor has the capability to store at least 10
1129      * seconds worth of events in its FIFO and is able to wake up the Soc, it
1130      * can implement an optional secondary mode: the WAKE_UPON_FIFO_FULL mode.
1131      *
1132      * The caller will set the SENSORS_BATCH_WAKE_UPON_FIFO_FULL flag to
1133      * activate this mode. If the sensor does not support this mode, batch()
1134      * will fail when the flag is set.
1135      *
1136      * When running with the WAKE_UPON_FIFO_FULL flag set, no events can be
1137      * lost. When the FIFO is getting full, the sensor must wake up the SoC from
1138      * suspend and return a batch before the FIFO fills-up.
1139      * Depending on the device, it might take a few miliseconds for the SoC to
1140      * entirely come out of suspend and start flushing the FIFO. Enough head
1141      * room must be allocated in the FIFO to allow the device to entirely come
1142      * out of suspend without the FIFO overflowing (no events shall be lost).
1143      *
1144      *   Implementing the WAKE_UPON_FIFO_FULL mode is optional.
1145      *   If the hardware cannot support this mode, or if the physical
1146      *   FIFO is so small that the device would never be allowed to go into
1147      *   suspend for at least 10 seconds, then this function MUST fail when
1148      *   the flag SENSORS_BATCH_WAKE_UPON_FIFO_FULL is set, regardless of
1149      *   the value of the timeout parameter.
1150      *
1151      *
1152      * DRY RUN:
1153      * --------
1154      *
1155      * If the flag SENSORS_BATCH_DRY_RUN is set, this function returns
1156      * without modifying the batch mode or the event period and has no side
1157      * effects, but returns errors as usual (as it would if this flag was
1158      * not set). This flag is used to check if batch mode is available for a
1159      * given configuration -- in particular for a given sensor at a given rate.
1160      *
1161      *
1162      * Return values:
1163      * --------------
1164      *
1165      * Because sensors must be independent, the return value must not depend
1166      * on the state of the system (whether another sensor is on or not),
1167      * nor on whether the flag SENSORS_BATCH_DRY_RUN is set (in other words,
1168      * if a batch call with SENSORS_BATCH_DRY_RUN is successful,
1169      * the same call without SENSORS_BATCH_DRY_RUN must succeed as well).
1170      *
1171      * When timeout is not 0:
1172      *   If successful, 0 is returned.
1173      *   If the specified sensor doesn't support batch mode, return -EINVAL.
1174      *   If the specified sensor's trigger-mode is one-shot, return -EINVAL.
1175      *   If WAKE_UPON_FIFO_FULL is specified and the specified sensor's internal
1176      *   FIFO is too small to store at least 10 seconds worth of data at the
1177      *   given rate, -EINVAL is returned. Note that as stated above, this has to
1178      *   be determined at compile time, and not based on the state of the
1179      *   system.
1180      *   If some other constraints above cannot be satisfied, return -EINVAL.
1181      *
1182      * Note: the timeout parameter, when > 0, has no impact on whether this
1183      *       function succeeds or fails.
1184      *
1185      * When timeout is 0:
1186      *   The caller will never set the wake_upon_fifo_full flag.
1187      *   The function must succeed, and batch mode must be deactivated.
1188      *
1189      * Independently of whether DRY_RUN is specified, When the call to batch()
1190      * fails, no state should be changed. In particular, a failed call to
1191      * batch() should not change the rate of the sensor. Example:
1192      *   setDelay(..., 10ms)
1193      *   batch(..., 20ms, ...) fails
1194      *   rate should stay 10ms.
1195      *
1196      *
1197      * IMPLEMENTATION NOTES:
1198      * ---------------------
1199      *
1200      * Batch mode, if supported, should happen at the hardware level,
1201      * typically using hardware FIFOs. In particular, it SHALL NOT be
1202      * implemented in the HAL, as this would be counter productive.
1203      * The goal here is to save significant amounts of power.
1204      *
1205      * In some implementations, events from several sensors can share the
1206      * same physical FIFO. In that case, all events in the FIFO can be sent and
1207      * processed by the HAL as soon as one batch must be reported.
1208      * For example, if the following sensors are activated:
1209      *  - accelerometer batched with timeout = 20s
1210      *  - gyroscope batched with timeout = 5s
1211      * then the accelerometer batches can be reported at the same time the
1212      * gyroscope batches are reported (every 5 seconds)
1213      *
1214      * Batch mode can be enabled or disabled at any time, in particular
1215      * while the specified sensor is already enabled, and this shall not
1216      * result in the loss of events.
1217      *
1218      * COMPARATIVE IMPORTANCE OF BATCHING FOR DIFFERENT SENSORS:
1219      * ---------------------------------------------------------
1220      *
1221      * On platforms on which hardware fifo size is limited, the system designers
1222      * might have to choose how much fifo to reserve for each sensor. To help
1223      * with this choice, here is a list of applications made possible when
1224      * batching is implemented on the different sensors.
1225      *
1226      * High value: Low power pedestrian dead reckoning
1227      *   Target batching time: 20 seconds to 1 minute
1228      *   Sensors to batch:
1229      *    - Step detector
1230      *    - Rotation vector or game rotation vector at 5Hz
1231      *   Gives us step and heading while letting the SoC go to Suspend.
1232      *
1233      * High value: Medium power activity/gesture recognition
1234      *   Target batching time: 3 seconds
1235      *   Sensors to batch: accelerometer between 20Hz and 50Hz
1236      *   Allows recognizing arbitrary activities and gestures without having
1237      *   to keep the SoC fully awake while the data is collected.
1238      *
1239      * Medium-high value: Interrupt load reduction
1240      *   Target batching time: < 1 second
1241      *   Sensors to batch: any high frequency sensor.
1242      *   If the gyroscope is set at 800Hz, even batching just 10 gyro events can
1243      *   reduce the number of interrupts from 800/second to 80/second.
1244      *
1245      * Medium value: Continuous low frequency data collection
1246      *   Target batching time: > 1 minute
1247      *   Sensors to batch: barometer, humidity sensor, other low frequency
1248      *     sensors.
1249      *   Allows creating monitoring applications at low power.
1250      *
1251      * Medium value: Continuous full-sensors collection
1252      *   Target batching time: > 1 minute
1253      *   Sensors to batch: all, at high frequencies
1254      *   Allows full collection of sensor data while leaving the SoC in
1255      *   suspend mode. Only to consider if fifo space is not an issue.
1256      *
1257      * In each of the cases above, if WAKE_UPON_FIFO_FULL is implemented, the
1258      * applications might decide to let the SoC go to suspend, allowing for even
1259      * more power savings.
1260      */
1261     int (*batch)(struct sensors_poll_device_1* dev,
1262             int handle, int flags, int64_t period_ns, int64_t timeout);
1263 
1264     /*
1265      * Flush adds a META_DATA_FLUSH_COMPLETE event (sensors_event_meta_data_t)
1266      * to the end of the "batch mode" FIFO for the specified sensor and flushes
1267      * the FIFO; those events are delivered as usual (i.e.: as if the batch
1268      * timeout had expired) and removed from the FIFO.
1269      *
1270      * See the META_DATA_FLUSH_COMPLETE section for details about the
1271      * META_DATA_FLUSH_COMPLETE event.
1272      *
1273      * The flush happens asynchronously (i.e.: this function must return
1274      * immediately).
1275      *
1276      * If the implementation uses a single FIFO for several sensors, that
1277      * FIFO is flushed and the META_DATA_FLUSH_COMPLETE event is added only
1278      * for the specified sensor.
1279      *
1280      * If the specified sensor wasn't in batch mode, flush succeeds and
1281      * promptly sends a META_DATA_FLUSH_COMPLETE event for that sensor.
1282      *
1283      * If the FIFO was empty at the time of the call, flush returns
1284      * 0 (success) and promptly sends a META_DATA_FLUSH_COMPLETE event
1285      * for that sensor.
1286      *
1287      * If the specified sensor wasn't enabled, flush returns -EINVAL.
1288      *
1289      * return 0 on success, negative errno code otherwise.
1290      */
1291     int (*flush)(struct sensors_poll_device_1* dev, int handle);
1292 
1293     void (*reserved_procs[8])(void);
1294 
1295 } sensors_poll_device_1_t;
1296 
1297 
1298 
1299 /** convenience API for opening and closing a device */
1300 
sensors_open(const struct hw_module_t * module,struct sensors_poll_device_t ** device)1301 static inline int sensors_open(const struct hw_module_t* module,
1302         struct sensors_poll_device_t** device) {
1303     return module->methods->open(module,
1304             SENSORS_HARDWARE_POLL, (struct hw_device_t**)device);
1305 }
1306 
sensors_close(struct sensors_poll_device_t * device)1307 static inline int sensors_close(struct sensors_poll_device_t* device) {
1308     return device->common.close(&device->common);
1309 }
1310 
sensors_open_1(const struct hw_module_t * module,sensors_poll_device_1_t ** device)1311 static inline int sensors_open_1(const struct hw_module_t* module,
1312         sensors_poll_device_1_t** device) {
1313     return module->methods->open(module,
1314             SENSORS_HARDWARE_POLL, (struct hw_device_t**)device);
1315 }
1316 
sensors_close_1(sensors_poll_device_1_t * device)1317 static inline int sensors_close_1(sensors_poll_device_1_t* device) {
1318     return device->common.close(&device->common);
1319 }
1320 
1321 __END_DECLS
1322 
1323 #endif  // ANDROID_SENSORS_INTERFACE_H
1324