sensors.h revision 98c5309047d2eedfe93ac42243f9750cfeb3517e
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 59f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_TYPE_TEMPERATURE 7 60f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_TYPE_PROXIMITY 8 61f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 62f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 63f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Values returned by the accelerometer in various locations in the universe. 64f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * all values are in SI units (m/s^2) 65f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 66f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 67f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define GRAVITY_SUN (275.0f) 68f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define GRAVITY_EARTH (9.80665f) 69f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 70f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** Maximum magnetic field on Earth's surface */ 71f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define MAGNETIC_FIELD_EARTH_MAX (60.0f) 72f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 73f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** Minimum magnetic field on Earth's surface */ 74f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define MAGNETIC_FIELD_EARTH_MIN (30.0f) 75f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 76f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 77f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 78f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * status of each sensor 79f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 80f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 81f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_STATUS_UNRELIABLE 0 82f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_STATUS_ACCURACY_LOW 1 83f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_STATUS_ACCURACY_MEDIUM 2 84f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSOR_STATUS_ACCURACY_HIGH 3 85f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 86f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 87f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Definition of the axis 88f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * ---------------------- 89f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 90f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * This API is relative to the screen of the device in its default orientation, 91f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * that is, if the device can be used in portrait or landscape, this API 92f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * is only relative to the NATURAL orientation of the screen. In other words, 93f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * the axis are not swapped when the device's screen orientation changes. 94f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Higher level services /may/ perform this transformation. 95f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 96f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * x<0 x>0 97f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * ^ 98f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | 99f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * +-----------+--> y>0 100f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | | 101f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | | 102f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | | 103f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | | / z<0 104f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | | / 105f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * | | / 106f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * O-----------+/ 107f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * |[] [ ] []/ 108f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * +----------/+ y<0 109f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * / 110f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * / 111f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * |/ z>0 (toward the sky) 112f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 113f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * O: Origin (x=0,y=0,z=0) 114f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 115f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 116f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Orientation 117f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * ----------- 118f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 119f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * All values are angles in degrees. 120f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 121f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * azimuth: angle between the magnetic north direction and the Y axis, around 122f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * the Z axis (0<=azimuth<360). 123f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 0=North, 90=East, 180=South, 270=West 124f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 125f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * pitch: Rotation around X axis (-180<=pitch<=180), with positive values when 126f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * the z-axis moves toward the y-axis. 127f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 128f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * roll: Rotation around Y axis (-90<=roll<=90), with positive values when 12919ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * the x-axis moves towards the z-axis. 13019ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * 13119ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * Note: For historical reasons the roll angle is positive in the clockwise 13219ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * direction (mathematically speaking, it should be positive in the 13319ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * counter-clockwise direction): 13419ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * 13519ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * Z 13619ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * ^ 13719ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * (+roll) .--> | 13819ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * / | 13919ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * | | roll: rotation around Y axis 14019ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * X <-------(.) 14119ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * Y 14219ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * note that +Y == -roll 14319ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * 14419ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * 14519ea59f86521c1b3ef72999e3cccc47b48c445adMathias Agopian * 146f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Note: This definition is different from yaw, pitch and roll used in aviation 147f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * where the X axis is along the long side of the plane (tail to nose). 148f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 149f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 150f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Acceleration 151f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * ------------ 152f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 153f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * All values are in SI units (m/s^2) and measure the acceleration of the 154f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * device minus the force of gravity. 155f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 156f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * x: Acceleration minus Gx on the x-axis 157f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * y: Acceleration minus Gy on the y-axis 158f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * z: Acceleration minus Gz on the z-axis 159f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 160f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Examples: 161f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * When the device lies flat on a table and is pushed on its left side 162f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * toward the right, the x acceleration value is positive. 163f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 164f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * When the device lies flat on a table, the acceleration value is +9.81, 165f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * which correspond to the acceleration of the device (0 m/s^2) minus the 166f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * force of gravity (-9.81 m/s^2). 167f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 168f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * When the device lies flat on a table and is pushed toward the sky, the 169f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * acceleration value is greater than +9.81, which correspond to the 170f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * acceleration of the device (+A m/s^2) minus the force of 171f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * gravity (-9.81 m/s^2). 172f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 173f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 174f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Magnetic Field 175f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * -------------- 176f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 177f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * All values are in micro-Tesla (uT) and measure the ambient magnetic 178f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * field in the X, Y and Z axis. 179a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * 180a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * Proximity 181a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * --------- 182a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * 183a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * The distance value is measured in centimeters. Note that some proximity 184a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * sensors only support a binary "close" or "far" measurement. In this case, 185a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * the sensor should report its maxRange value in the "far" state and a value 186a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * less than maxRange in the "near" state. 187a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * 188a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * Light 189a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * ----- 190a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * 191a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * The light sensor value is returned in SI lux units. 192a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * 193f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 194f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projecttypedef struct { 195f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project union { 196f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float v[3]; 197f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct { 198f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float x; 199f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float y; 200f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float z; 201f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project }; 202f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct { 203f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float azimuth; 204f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float pitch; 205f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float roll; 206f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project }; 207f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project }; 208f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int8_t status; 209f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint8_t reserved[3]; 210f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project} sensors_vec_t; 211f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 212f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 213f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Union of the various types of sensor data 214f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * that can be returned. 215f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 216cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopiantypedef struct sensors_event_t { 217cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* must be sizeof(struct sensors_event_t) */ 218cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t version; 219cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 220cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* sensor identifier */ 221cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t sensor; 222cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 223cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* sensor type */ 224cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t type; 225cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 226cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* reserved */ 227cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t reserved0; 228cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 229cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* time is in nanosecond */ 230cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int64_t timestamp; 231cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 232cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian union { 233cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian float data[16]; 234cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 235cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* acceleration values are in meter per second per second (m/s^2) */ 236cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian sensors_vec_t acceleration; 237cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 238cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* magnetic vector values are in micro-Tesla (uT) */ 239cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian sensors_vec_t magnetic; 240cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 241cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* orientation values are in degrees */ 242cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian sensors_vec_t orientation; 243cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 244cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* temperature is in degrees centigrade (Celsius) */ 245cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian float temperature; 246cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 247cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* distance in centimeters */ 248cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian float distance; 249cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 250cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* light in SI lux units */ 251cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian float light; 252cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian }; 253cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian uint32_t reserved1[4]; 254cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian} sensors_event_t; 255cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 256cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 257cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 258f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct sensor_t; 259f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 260f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 261f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM 262f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * and the fields of this data structure must begin with hw_module_t 263f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * followed by module specific information. 264f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 265f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct sensors_module_t { 266f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct hw_module_t common; 267f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 268f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** 269f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Enumerate all available sensors. The list is returned in "list". 270f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * @return number of sensors in the list 271f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 272f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int (*get_sensors_list)(struct sensors_module_t* module, 273f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct sensor_t const** list); 274f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project}; 275f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 276f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct sensor_t { 277f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* name of this sensors */ 278f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char* name; 279f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* vendor of the hardware part */ 280f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char* vendor; 281f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* version of the hardware part + driver. The value of this field is 282b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * left to the implementation and doesn't have to be monotonically 283f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * increasing. 284f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 285f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int version; 286f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* handle that identifies this sensors. This handle is used to activate 287f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * and deactivate this sensor. The value of the handle must be 8 bits 288f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * in this version of the API. 289f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 290f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int handle; 291f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* this sensor's type. */ 292f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int type; 293f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* maximaum range of this sensor's value in SI units */ 294f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float maxRange; 295f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* smallest difference between two values reported by this sensor */ 296f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float resolution; 297f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* rough estimate of this sensor's power consumption in mA */ 298f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float power; 299f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* reserved fields, must be zero */ 300f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project void* reserved[9]; 301f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project}; 302f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 303f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 304f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 305f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Every device data structure must begin with hw_device_t 306f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * followed by module specific public methods and attributes. 307f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 308b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopianstruct sensors_poll_device_t { 309b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian struct hw_device_t common; 310b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 311b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian /** Activate/deactivate one sensor. 312b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * 313b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * @param handle is the handle of the sensor to change. 314b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * @param enabled set to 1 to enable, or 0 to disable the sensor. 315b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * 316b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * @return 0 on success, negative errno code otherwise 317b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian */ 318b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian int (*activate)(struct sensors_poll_device_t *dev, 319b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian int handle, int enabled); 320b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 321b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian /** 322b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * Set the delay between sensor events in nanoseconds for a given sensor 323b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * 324b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * @return 0 if successful, < 0 on error 325b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian */ 326b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian int (*setDelay)(struct sensors_poll_device_t *dev, 327b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian int handle, int64_t ns); 328b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 329b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian /** 330b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * Returns an array of sensor data. 331b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * 332b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * @return the number of events read on success, or -errno in case of an error. 333b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian * 334b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian */ 335b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian int (*poll)(struct sensors_poll_device_t *dev, 336cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian sensors_event_t* data, int count); 337b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian}; 338b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 339f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** convenience API for opening and closing a device */ 340f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 341b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopianstatic inline int sensors_open(const struct hw_module_t* module, 342b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian struct sensors_poll_device_t** device) { 343b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian return module->methods->open(module, 344b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian SENSORS_HARDWARE_POLL, (struct hw_device_t**)device); 345b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian} 346b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 347b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopianstatic inline int sensors_close(struct sensors_poll_device_t* device) { 348b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian return device->common.close(&device->common); 349b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian} 350b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 351f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project__END_DECLS 352f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 35398c5309047d2eedfe93ac42243f9750cfeb3517eMathias Agopian#include <hardware/sensors_deprecated.h> 35498c5309047d2eedfe93ac42243f9750cfeb3517eMathias Agopian 355f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#endif // ANDROID_SENSORS_INTERFACE_H 356