1f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/* 2f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 4f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * you may not use this file except in compliance with the License. 6f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * You may obtain a copy of the License at 7f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 8f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 10f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * See the License for the specific language governing permissions and 14f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * limitations under the License. 15f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 16f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 17f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#ifndef ANDROID_SENSORS_INTERFACE_H 18f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define ANDROID_SENSORS_INTERFACE_H 19f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 20f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#include <stdint.h> 21f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#include <sys/cdefs.h> 22f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#include <sys/types.h> 23f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 24f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#include <hardware/hardware.h> 2521b652f933b21aa37bd73364b486347fcc333d5cMike Lockwood#include <cutils/native_handle.h> 26f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 27f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project__BEGIN_DECLS 28f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 29f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 30f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * The id of this module 31f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 32f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSORS_HARDWARE_MODULE_ID "sensors" 33f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 34f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 35f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Name of the sensors device to open 36f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 37b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian#define SENSORS_HARDWARE_POLL "poll" 38f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 39f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 40f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Handles must be higher than SENSORS_HANDLE_BASE and must be unique. 41f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * A Handle identifies a given sensors. The handle is used to activate 42f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * and/or deactivate sensors. 43f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * In this version of the API there can only be 256 handles. 44f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 45f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSORS_HANDLE_BASE 0 46f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSORS_HANDLE_BITS 8 47f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSORS_HANDLE_COUNT (1<<SENSORS_HANDLE_BITS) 48f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 49f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 50f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 51f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Sensor types 52f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 53f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_TYPE_ACCELEROMETER 1 54f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_TYPE_MAGNETIC_FIELD 2 55f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_TYPE_ORIENTATION 3 56f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_TYPE_GYROSCOPE 4 57f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_TYPE_LIGHT 5 58f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_TYPE_PRESSURE 6 5954f9dd032dfbd336ca90e3b44047373f0297c3a5Mathias Agopian#define SENSOR_TYPE_TEMPERATURE 7 // deprecated 60f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_TYPE_PROXIMITY 8 61b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell#define SENSOR_TYPE_GRAVITY 9 62b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell#define SENSOR_TYPE_LINEAR_ACCELERATION 10 63b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell#define SENSOR_TYPE_ROTATION_VECTOR 11 64d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch#define SENSOR_TYPE_RELATIVE_HUMIDITY 12 6554f9dd032dfbd336ca90e3b44047373f0297c3a5Mathias Agopian#define SENSOR_TYPE_AMBIENT_TEMPERATURE 13 66f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 67f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 68f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Values returned by the accelerometer in various locations in the universe. 69f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * all values are in SI units (m/s^2) 70f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 71f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 72f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define GRAVITY_SUN (275.0f) 73f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define GRAVITY_EARTH (9.80665f) 74f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 75f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** Maximum magnetic field on Earth's surface */ 76f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define MAGNETIC_FIELD_EARTH_MAX (60.0f) 77f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 78f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** Minimum magnetic field on Earth's surface */ 79f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define MAGNETIC_FIELD_EARTH_MIN (30.0f) 80f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 81f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 82f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 83f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * status of each sensor 84f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 85f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 86f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_STATUS_UNRELIABLE 0 87f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_STATUS_ACCURACY_LOW 1 88f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_STATUS_ACCURACY_MEDIUM 2 89f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_STATUS_ACCURACY_HIGH 3 90f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 91f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 92f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Definition of the axis 93f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * ---------------------- 94f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 95f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * This API is relative to the screen of the device in its default orientation, 96f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * that is, if the device can be used in portrait or landscape, this API 97f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * is only relative to the NATURAL orientation of the screen. In other words, 98f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * the axis are not swapped when the device's screen orientation changes. 99f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Higher level services /may/ perform this transformation. 100f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 101f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * x<0 x>0 102f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * ^ 103f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | 104f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * +-----------+--> y>0 105f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | | 106f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | | 107f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | | 108f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | | / z<0 109f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | | / 110f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | | / 111f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * O-----------+/ 112f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * |[] [ ] []/ 113f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * +----------/+ y<0 114f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * / 115f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * / 116f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * |/ z>0 (toward the sky) 117f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 118f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * O: Origin (x=0,y=0,z=0) 119f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 120f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 121e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_ORIENTATION 122e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * ----------------------- 123f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 124f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * All values are angles in degrees. 125f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 12666a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * Orientation sensors return sensor events for all 3 axes at a constant 12766a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * rate defined by setDelay(). 12866a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * 129f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * azimuth: angle between the magnetic north direction and the Y axis, around 130f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * the Z axis (0<=azimuth<360). 131f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 0=North, 90=East, 180=South, 270=West 132f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 133f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * pitch: Rotation around X axis (-180<=pitch<=180), with positive values when 134f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * the z-axis moves toward the y-axis. 135f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 136f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * roll: Rotation around Y axis (-90<=roll<=90), with positive values when 13719ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * the x-axis moves towards the z-axis. 13819ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * 13919ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * Note: For historical reasons the roll angle is positive in the clockwise 14019ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * direction (mathematically speaking, it should be positive in the 14119ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * counter-clockwise direction): 14219ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * 14319ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * Z 14419ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * ^ 14519ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * (+roll) .--> | 14619ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * / | 14719ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * | | roll: rotation around Y axis 14819ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * X <-------(.) 14919ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * Y 15019ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * note that +Y == -roll 15119ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * 15219ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * 15319ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * 154f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Note: This definition is different from yaw, pitch and roll used in aviation 155f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * where the X axis is along the long side of the plane (tail to nose). 156f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 157f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 158e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_ACCELEROMETER 159e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * ------------------------- 160f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 161f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * All values are in SI units (m/s^2) and measure the acceleration of the 162f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * device minus the force of gravity. 163f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 16466a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * Acceleration sensors return sensor events for all 3 axes at a constant 16566a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * rate defined by setDelay(). 16666a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * 167f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * x: Acceleration minus Gx on the x-axis 168f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * y: Acceleration minus Gy on the y-axis 169f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * z: Acceleration minus Gz on the z-axis 170f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 171f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Examples: 172f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * When the device lies flat on a table and is pushed on its left side 173f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * toward the right, the x acceleration value is positive. 174f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 175f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * When the device lies flat on a table, the acceleration value is +9.81, 176f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * which correspond to the acceleration of the device (0 m/s^2) minus the 177f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * force of gravity (-9.81 m/s^2). 178f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 179f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * When the device lies flat on a table and is pushed toward the sky, the 180f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * acceleration value is greater than +9.81, which correspond to the 181f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * acceleration of the device (+A m/s^2) minus the force of 182f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * gravity (-9.81 m/s^2). 183f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 184f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 185e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_MAGNETIC_FIELD 186e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * -------------------------- 187f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 188f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * All values are in micro-Tesla (uT) and measure the ambient magnetic 189f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * field in the X, Y and Z axis. 190a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * 19166a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * Magnetic Field sensors return sensor events for all 3 axes at a constant 19266a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * rate defined by setDelay(). 19366a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * 194e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_GYROSCOPE 195e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * --------------------- 196e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * 197b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * All values are in radians/second and measure the rate of rotation 198b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * around the X, Y and Z axis. The coordinate system is the same as is 199c04e5f68905127ae4c1a0c17d225db9cebe66a07Mathias Agopian * used for the acceleration sensor. Rotation is positive in the 200c04e5f68905127ae4c1a0c17d225db9cebe66a07Mathias Agopian * counter-clockwise direction (right-hand rule). That is, an observer 201c04e5f68905127ae4c1a0c17d225db9cebe66a07Mathias Agopian * looking from some positive location on the x, y or z axis at a device 202c04e5f68905127ae4c1a0c17d225db9cebe66a07Mathias Agopian * positioned on the origin would report positive rotation if the device 203c04e5f68905127ae4c1a0c17d225db9cebe66a07Mathias Agopian * appeared to be rotating counter clockwise. Note that this is the 204c04e5f68905127ae4c1a0c17d225db9cebe66a07Mathias Agopian * standard mathematical definition of positive rotation and does not agree 205c04e5f68905127ae4c1a0c17d225db9cebe66a07Mathias Agopian * with the definition of roll given earlier. 206c04e5f68905127ae4c1a0c17d225db9cebe66a07Mathias Agopian * The range should at least be 17.45 rad/s (ie: ~1000 deg/s). 207b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * 208e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_PROXIMITY 209e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * ---------------------- 210a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * 211a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * The distance value is measured in centimeters. Note that some proximity 212a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * sensors only support a binary "close" or "far" measurement. In this case, 213a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * the sensor should report its maxRange value in the "far" state and a value 214a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * less than maxRange in the "near" state. 215a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * 216478994a758e48b0de7f56f3de0678d5c2b6a4b61Mathias Agopian * Proximity sensors report a value only when it changes and each time the 21715879d89af055f6cd651a94125a3802b526c3d66Mathias Agopian * sensor is enabled. 21866a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * 219e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_LIGHT 220e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * ----------------- 221a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * 222a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * The light sensor value is returned in SI lux units. 223a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * 224478994a758e48b0de7f56f3de0678d5c2b6a4b61Mathias Agopian * Light sensors report a value only when it changes and each time the 22515879d89af055f6cd651a94125a3802b526c3d66Mathias Agopian * sensor is enabled. 22666a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * 227e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_PRESSURE 228e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * -------------------- 2291832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian * 230e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * The pressure sensor return the athmospheric pressure in hectopascal (hPa) 2311832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian * 2321832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian * Pressure sensors report events at a constant rate defined by setDelay(). 2331832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian * 234e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_GRAVITY 235e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * ------------------- 2363120b58768ff6aad5ad169b9c18f962ef6abb3c5Makarand Karvekar * 237e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * A gravity output indicates the direction of and magnitude of gravity in 238e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * the devices's coordinates. On Earth, the magnitude is 9.8 m/s^2. 239e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * Units are m/s^2. The coordinate system is the same as is used for the 240e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * acceleration sensor. When the device is at rest, the output of the 241e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * gravity sensor should be identical to that of the accelerometer. 2423120b58768ff6aad5ad169b9c18f962ef6abb3c5Makarand Karvekar * 243e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_LINEAR_ACCELERATION 244e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * -------------------------------- 2453120b58768ff6aad5ad169b9c18f962ef6abb3c5Makarand Karvekar * 246e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * Indicates the linear acceleration of the device in device coordinates, 247e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * not including gravity. 248e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * This output is essentially Acceleration - Gravity. Units are m/s^2. 249e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * The coordinate system is the same as is used for the acceleration sensor. 250b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * 25142b743c85597e982ff1122b972862396f131db34Mathias Agopian * 252e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_ROTATION_VECTOR 253e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * --------------------------- 25442b743c85597e982ff1122b972862396f131db34Mathias Agopian * 255b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * A rotation vector represents the orientation of the device as a combination 256b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * of an angle and an axis, in which the device has rotated through an angle 257b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * theta around an axis <x, y, z>. The three elements of the rotation vector 258b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * are <x*sin(theta/2), y*sin(theta/2), z*sin(theta/2)>, such that the magnitude 259b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * of the rotation vector is equal to sin(theta/2), and the direction of the 260b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * rotation vector is equal to the direction of the axis of rotation. The three 261b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * elements of the rotation vector are equal to the last three components of a 262b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * unit quaternion <cos(theta/2), x*sin(theta/2), y*sin(theta/2), z*sin(theta/2)>. 263b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * Elements of the rotation vector are unitless. The x, y, and z axis are defined 264b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * in the same was as for the acceleration sensor. 26542b743c85597e982ff1122b972862396f131db34Mathias Agopian * 266d93ff971bd507e92ac81c149079906d2123795afMathias Agopian * The reference coordinate system is defined as a direct orthonormal basis, 267d93ff971bd507e92ac81c149079906d2123795afMathias Agopian * where: 268d93ff971bd507e92ac81c149079906d2123795afMathias Agopian * 269d93ff971bd507e92ac81c149079906d2123795afMathias Agopian * - X is defined as the vector product Y.Z (It is tangential to 270d93ff971bd507e92ac81c149079906d2123795afMathias Agopian * the ground at the device's current location and roughly points East). 271d93ff971bd507e92ac81c149079906d2123795afMathias Agopian * 272d93ff971bd507e92ac81c149079906d2123795afMathias Agopian * - Y is tangential to the ground at the device's current location and 273d93ff971bd507e92ac81c149079906d2123795afMathias Agopian * points towards the magnetic North Pole. 274d93ff971bd507e92ac81c149079906d2123795afMathias Agopian * 275d93ff971bd507e92ac81c149079906d2123795afMathias Agopian * - Z points towards the sky and is perpendicular to the ground. 276d93ff971bd507e92ac81c149079906d2123795afMathias Agopian * 277d93ff971bd507e92ac81c149079906d2123795afMathias Agopian * 27842b743c85597e982ff1122b972862396f131db34Mathias Agopian * The rotation-vector is stored as: 27942b743c85597e982ff1122b972862396f131db34Mathias Agopian * 28042b743c85597e982ff1122b972862396f131db34Mathias Agopian * sensors_event_t.data[0] = x*sin(theta/2) 28142b743c85597e982ff1122b972862396f131db34Mathias Agopian * sensors_event_t.data[1] = y*sin(theta/2) 28242b743c85597e982ff1122b972862396f131db34Mathias Agopian * sensors_event_t.data[2] = z*sin(theta/2) 28342b743c85597e982ff1122b972862396f131db34Mathias Agopian * sensors_event_t.data[3] = cos(theta/2) 28442b743c85597e982ff1122b972862396f131db34Mathias Agopian * 2856e17d2c46caad76497da1070efd41481b0f40b27Jean-Baptiste Queru * 286e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_RELATIVE_HUMIDITY 287e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * ------------------------------ 288d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch * 289d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch * A relative humidity sensor measures relative ambient air humidity and 290d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch * returns a value in percent. 291d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch * 292d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch * Relative humidity sensors report a value only when it changes and each 29315879d89af055f6cd651a94125a3802b526c3d66Mathias Agopian * time the sensor is enabled. 2946e17d2c46caad76497da1070efd41481b0f40b27Jean-Baptiste Queru * 2956e17d2c46caad76497da1070efd41481b0f40b27Jean-Baptiste Queru * 296e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_AMBIENT_TEMPERATURE 297e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * ------------------------------- 29854f9dd032dfbd336ca90e3b44047373f0297c3a5Mathias Agopian * 29954f9dd032dfbd336ca90e3b44047373f0297c3a5Mathias Agopian * The ambient (room) temperature in degree Celsius. 30054f9dd032dfbd336ca90e3b44047373f0297c3a5Mathias Agopian * 30154f9dd032dfbd336ca90e3b44047373f0297c3a5Mathias Agopian * Temperature sensors report a value only when it changes and each time the 30215879d89af055f6cd651a94125a3802b526c3d66Mathias Agopian * sensor is enabled. 30354f9dd032dfbd336ca90e3b44047373f0297c3a5Mathias Agopian * 304f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 305b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell 306f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projecttypedef struct { 307f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project union { 308f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float v[3]; 309f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct { 310f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float x; 311f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float y; 312f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float z; 313f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project }; 314f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct { 315f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float azimuth; 316f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float pitch; 317f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float roll; 318f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project }; 319f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project }; 320f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int8_t status; 321f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint8_t reserved[3]; 322f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project} sensors_vec_t; 323f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 324f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 325f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Union of the various types of sensor data 326f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * that can be returned. 327f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 328cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopiantypedef struct sensors_event_t { 329cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* must be sizeof(struct sensors_event_t) */ 330cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t version; 331cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 332cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* sensor identifier */ 333cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t sensor; 334cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 335cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* sensor type */ 336cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t type; 337cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 338cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* reserved */ 339cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t reserved0; 340cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 341cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* time is in nanosecond */ 342cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int64_t timestamp; 343cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 344cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian union { 345cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian float data[16]; 346cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 347cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* acceleration values are in meter per second per second (m/s^2) */ 348cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian sensors_vec_t acceleration; 349cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 350cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* magnetic vector values are in micro-Tesla (uT) */ 351cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian sensors_vec_t magnetic; 352cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 353cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* orientation values are in degrees */ 354cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian sensors_vec_t orientation; 355cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 356c04e5f68905127ae4c1a0c17d225db9cebe66a07Mathias Agopian /* gyroscope values are in rad/s */ 357c04e5f68905127ae4c1a0c17d225db9cebe66a07Mathias Agopian sensors_vec_t gyro; 3583120b58768ff6aad5ad169b9c18f962ef6abb3c5Makarand Karvekar 359cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* temperature is in degrees centigrade (Celsius) */ 360cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian float temperature; 361cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 362cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* distance in centimeters */ 363cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian float distance; 364cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 365cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* light in SI lux units */ 366cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian float light; 3671832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian 3681832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian /* pressure in hectopascal (hPa) */ 3691832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian float pressure; 370d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch 371d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch /* relative humidity in percent */ 372d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch float relative_humidity; 373cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian }; 374cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian uint32_t reserved1[4]; 375cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian} sensors_event_t; 376cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 377cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 378cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 379f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct sensor_t; 380f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 381f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 382f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM 383f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * and the fields of this data structure must begin with hw_module_t 384f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * followed by module specific information. 385f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 386f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct sensors_module_t { 387f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct hw_module_t common; 388f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 389f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** 390f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Enumerate all available sensors. The list is returned in "list". 391f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * @return number of sensors in the list 392f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 393f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int (*get_sensors_list)(struct sensors_module_t* module, 394f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct sensor_t const** list); 395f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project}; 396f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 397f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct sensor_t { 398f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* name of this sensors */ 399f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char* name; 400f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* vendor of the hardware part */ 401f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char* vendor; 402e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian /* version of the hardware part + driver. The value of this field 403e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * must increase when the driver is updated in a way that changes the 404e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * output of this sensor. This is important for fused sensors when the 405e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * fusion algorithm is updated. 406f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 407f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int version; 408f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* handle that identifies this sensors. This handle is used to activate 409f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * and deactivate this sensor. The value of the handle must be 8 bits 410f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * in this version of the API. 411f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 412f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int handle; 413f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* this sensor's type. */ 414f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int type; 415f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* maximaum range of this sensor's value in SI units */ 416f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float maxRange; 417f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* smallest difference between two values reported by this sensor */ 418f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float resolution; 419f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* rough estimate of this sensor's power consumption in mA */ 420f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float power; 4211511e20fbbdfe7bf30b9de73f06fc981eb494f09Mathias Agopian /* minimum delay allowed between events in microseconds. A value of zero 4221511e20fbbdfe7bf30b9de73f06fc981eb494f09Mathias Agopian * means that this sensor doesn't report events at a constant rate, but 4231511e20fbbdfe7bf30b9de73f06fc981eb494f09Mathias Agopian * rather only when a new data is available */ 4241511e20fbbdfe7bf30b9de73f06fc981eb494f09Mathias Agopian int32_t minDelay; 425f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* reserved fields, must be zero */ 4261511e20fbbdfe7bf30b9de73f06fc981eb494f09Mathias Agopian void* reserved[8]; 427f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project}; 428f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 429f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 430f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 431f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Every device data structure must begin with hw_device_t 432f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * followed by module specific public methods and attributes. 433f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 434b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopianstruct sensors_poll_device_t { 435b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian struct hw_device_t common; 436b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 437b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian /** Activate/deactivate one sensor. 438b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * 439b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * @param handle is the handle of the sensor to change. 440b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * @param enabled set to 1 to enable, or 0 to disable the sensor. 441b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * 442b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * @return 0 on success, negative errno code otherwise 443b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian */ 444b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian int (*activate)(struct sensors_poll_device_t *dev, 445b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian int handle, int enabled); 446b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 447b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian /** 4481511e20fbbdfe7bf30b9de73f06fc981eb494f09Mathias Agopian * Set the delay between sensor events in nanoseconds for a given sensor. 44915879d89af055f6cd651a94125a3802b526c3d66Mathias Agopian * 450e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * If the requested value is less than sensor_t::minDelay, then it's 451e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * silently clamped to sensor_t::minDelay unless sensor_t::minDelay is 452e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * 0, in which case it is clamped to >= 1ms. 453b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * 454b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * @return 0 if successful, < 0 on error 455b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian */ 456b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian int (*setDelay)(struct sensors_poll_device_t *dev, 457b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian int handle, int64_t ns); 458b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 459b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian /** 460b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * Returns an array of sensor data. 4611511e20fbbdfe7bf30b9de73f06fc981eb494f09Mathias Agopian * This function must block until events are available. 462b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * 463b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * @return the number of events read on success, or -errno in case of an error. 4641511e20fbbdfe7bf30b9de73f06fc981eb494f09Mathias Agopian * This function should never return 0 (no event). 465b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * 466b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian */ 467b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian int (*poll)(struct sensors_poll_device_t *dev, 468cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian sensors_event_t* data, int count); 469b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian}; 470b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 471f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** convenience API for opening and closing a device */ 472f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 473b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopianstatic inline int sensors_open(const struct hw_module_t* module, 474b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian struct sensors_poll_device_t** device) { 475b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian return module->methods->open(module, 476b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian SENSORS_HARDWARE_POLL, (struct hw_device_t**)device); 477b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian} 478b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 479b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopianstatic inline int sensors_close(struct sensors_poll_device_t* device) { 480b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian return device->common.close(&device->common); 481b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian} 482b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 483f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project__END_DECLS 484f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 485f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#endif // ANDROID_SENSORS_INTERFACE_H 486