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