sensors.h revision 110d2f2713490c8c8ae5ce3d66ac7364eb2002a4
1f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/* 2a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * Copyright (C) 2012 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 2956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/*****************************************************************************/ 3056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 3156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSORS_HEADER_VERSION 1 3256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSORS_MODULE_API_VERSION_0_1 HARDWARE_MODULE_API_VERSION(0, 1) 3356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSORS_DEVICE_API_VERSION_0_1 HARDWARE_DEVICE_API_VERSION_2(0, 1, SENSORS_HEADER_VERSION) 34a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian#define SENSORS_DEVICE_API_VERSION_1_0 HARDWARE_DEVICE_API_VERSION_2(1, 0, SENSORS_HEADER_VERSION) 3516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian#define SENSORS_DEVICE_API_VERSION_1_1 HARDWARE_DEVICE_API_VERSION_2(1, 1, SENSORS_HEADER_VERSION) 36477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSORS_DEVICE_API_VERSION_1_2 HARDWARE_DEVICE_API_VERSION_2(1, 2, SENSORS_HEADER_VERSION) 376242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella#define SENSORS_DEVICE_API_VERSION_1_3 HARDWARE_DEVICE_API_VERSION_2(1, 3, SENSORS_HEADER_VERSION) 3856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 39f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 408db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * Please see the Sensors section of source.android.com for an 418db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * introduction to and detailed descriptions of Android sensor types: 428db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * http://source.android.com/devices/sensors/index.html 438db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy */ 448db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy 458db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy/** 46f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * The id of this module 47f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 48f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSORS_HARDWARE_MODULE_ID "sensors" 49f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 50f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 51f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Name of the sensors device to open 52f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 53b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian#define SENSORS_HARDWARE_POLL "poll" 54f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 55f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 56f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Handles must be higher than SENSORS_HANDLE_BASE and must be unique. 57f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * A Handle identifies a given sensors. The handle is used to activate 58f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * and/or deactivate sensors. 59f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * In this version of the API there can only be 256 handles. 60f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 61f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSORS_HANDLE_BASE 0 62f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSORS_HANDLE_BITS 8 63f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSORS_HANDLE_COUNT (1<<SENSORS_HANDLE_BITS) 64f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 65f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 66a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 676242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * **** Deprecated ***** 68a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * flags for (*batch)() 69a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * Availability: SENSORS_DEVICE_API_VERSION_1_0 706242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * see (*batch)() documentation for details. 716242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * Deprecated as of SENSORS_DEVICE_API_VERSION_1_3. 726242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * WAKE_UP_* sensors replace WAKE_UPON_FIFO_FULL concept. 73a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 74a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopianenum { 75a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian SENSORS_BATCH_DRY_RUN = 0x00000001, 76a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian SENSORS_BATCH_WAKE_UPON_FIFO_FULL = 0x00000002 77a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian}; 78a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 7916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian/* 8016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * what field for meta_data_event_t 8116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian */ 8216671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopianenum { 8316671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian /* a previous flush operation has completed */ 84af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian META_DATA_FLUSH_COMPLETE = 1, 85af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian META_DATA_VERSION /* always last, leave auto-assigned */ 8616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian}; 8716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 88a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 89477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * The permission to use for body sensors (like heart rate monitors). 90477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * See sensor types for more details on what sensors should require this 91477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * permission. 92477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella */ 93477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_PERMISSION_BODY_SENSORS "android.permission.BODY_SENSORS" 94477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella 95477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella/* 966242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * Availability: SENSORS_DEVICE_API_VERSION_1_3 976242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * Sensor flags used in sensor_t.flags. 986242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella */ 996242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akellaenum { 1006242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella /* 101110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * Whether this sensor wakes up the AP from suspend mode when data is available. Whenever 102110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * sensor events are delivered from a wake_up sensor, the driver needs to hold a wake_lock till 103110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * the events are read by the SensorService i.e till sensors_poll_device_t.poll() is called the 104110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * next time. Once poll is called again it means events have been read by the SensorService, the 105110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * driver can safely release the wake_lock. SensorService will continue to hold a wake_lock till 106110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * the app actually reads the events. 1076242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella */ 108c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella SENSOR_FLAG_WAKE_UP = 1U << 0, 109c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella /* 110c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * Reporting modes for various sensors. Each sensor will have exactly one of these modes set. 111c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * The least significant 2nd, 3rd and 4th bits are used to represent four possible reporting 112c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * modes. 113c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella */ 114c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella SENSOR_FLAG_CONTINUOUS_MODE = 0, // 0000 115c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella SENSOR_FLAG_ON_CHANGE_MODE = 0x2, // 0010 116c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella SENSOR_FLAG_ONE_SHOT_MODE = 0x4, // 0100 117c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella SENSOR_FLAG_SPECIAL_REPORTING_MODE = 0x6 // 0110 1186242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella}; 1196242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella 1206242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella/* 121c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * Mask and shift for reporting mode sensor flags defined above. 122c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella */ 123c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella#define REPORTING_MODE_MASK (0xE) 124c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella#define REPORTING_MODE_SHIFT (1) 125c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella 126c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella/* 127a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * Sensor type 128a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 129a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * Each sensor has a type which defines what this sensor measures and how 1308db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * measures are reported. See the Base sensors and Composite sensors lists 1318db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * for complete descriptions: 1328db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * http://source.android.com/devices/sensors/base_triggers.html 1338db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * http://source.android.com/devices/sensors/composite_sensors.html 1341599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * 1351599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * Device manufacturers (OEMs) can define their own sensor types, for 1361599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * their private use by applications or services provided by them. Such 1371599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * sensor types are specific to an OEM and can't be exposed in the SDK. 1381599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * These types must start at SENSOR_TYPE_DEVICE_PRIVATE_BASE. 139477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * 140477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * All sensors defined outside of the device private range must correspond to 141477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * a type defined in this file, and must satisfy the characteristics listed in 142477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * the description of the sensor type. 143477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * 144477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * Starting with version SENSORS_DEVICE_API_VERSION_1_2, each sensor also 145477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * has a stringType. 146477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * - StringType of sensors inside of the device private range MUST be prefixed 147477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * by the sensor provider's or OEM reverse domain name. In particular, they 148477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * cannot use the "android.sensor" prefix. 149477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * - StringType of sensors outside of the device private range MUST correspond 150477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * to the one defined in this file (starting with "android.sensor"). 151477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * For example, accelerometers must have 152477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * type=SENSOR_TYPE_ACCELEROMETER and 153477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * stringType=SENSOR_STRING_TYPE_ACCELEROMETER 154477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * 155477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * When android introduces a new sensor type that can replace an OEM-defined 156477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * sensor type, the OEM must use the official sensor type and stringType on 157477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * versions of the HAL that support this new official sensor type. 158477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * 159477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * Example (made up): Suppose Google's Glass team wants to surface a sensor 160477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * detecting that Glass is on a head. 161477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * - Such a sensor is not officially supported in android KitKat 162477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * - Glass devices launching on KitKat can implement a sensor with 163477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * type = 0x10001 and stringType = "com.google.glass.onheaddetector" 164477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * - In L android release, if android decides to define 165477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * SENSOR_TYPE_ON_HEAD_DETECTOR and STRING_SENSOR_TYPE_ON_HEAD_DETECTOR, 166477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * those types should replace the Glass-team-specific types in all future 167477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * launches. 168772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * - When launching Glass on the L release, Google should now use the official 169477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * type (SENSOR_TYPE_ON_HEAD_DETECTOR) and stringType. 170477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * - This way, all applications can now use this sensor. 1711599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian */ 1721599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian 1731599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian/* 1741599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * Base for device manufacturers private sensor types. 1751599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * These sensor types can't be exposed in the SDK. 176a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 1771599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian#define SENSOR_TYPE_DEVICE_PRIVATE_BASE 0x10000 178a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 179a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 18016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * SENSOR_TYPE_META_DATA 181c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: n/a 18216671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * wake-up sensor: n/a 18316671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 18416671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * NO SENSOR OF THAT TYPE MUST BE RETURNED (*get_sensors_list)() 18516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 18616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * SENSOR_TYPE_META_DATA is a special token used to populate the 18716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * sensors_meta_data_event structure. It doesn't correspond to a physical 18816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * sensor. sensors_meta_data_event are special, they exist only inside 18916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * the HAL and are generated spontaneously, as opposed to be related to 19016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * a physical sensor. 19116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 192af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian * sensors_meta_data_event_t.version must be META_DATA_VERSION 193af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian * sensors_meta_data_event_t.sensor must be 0 194af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian * sensors_meta_data_event_t.type must be SENSOR_TYPE_META_DATA 195af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian * sensors_meta_data_event_t.reserved must be 0 196af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian * sensors_meta_data_event_t.timestamp must be 0 19716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 19816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * The payload is a meta_data_event_t, where: 19916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * meta_data_event_t.what can take the following values: 20016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 20116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * META_DATA_FLUSH_COMPLETE 20216671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * This event indicates that a previous (*flush)() call has completed for the sensor 20316671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * handle specified in meta_data_event_t.sensor. 20416671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * see (*flush)() for more details 20516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 20616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * All other values for meta_data_event_t.what are reserved and 20716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * must not be used. 20816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 20916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian */ 210477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_TYPE_META_DATA (0) 21116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 21256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 2139057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Wake up sensors. 2149057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Each sensor may have either or both a wake-up and a non-wake variant. 2159057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * When registered in batch mode, wake-up sensors will wake up the AP when 2169057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * their FIFOs are full or when the batch timeout expires. A separate FIFO has 2179057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * to be maintained for wake up sensors and non wake up sensors. The non wake-up 2189057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * sensors need to overwrite their FIFOs when they are full till the AP wakes up 2199057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * and the wake-up sensors will wake-up the AP when their FIFOs are full or when 2209057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * the batch timeout expires without losing events. Wake-up and non wake-up variants 2219057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * of each sensor can be activated at different rates independently of each other. 2229057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 2239057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Note: Proximity sensor and significant motion sensor which were defined in previous 2249057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * releases are also wake-up sensors and should be treated as such. Wake-up one-shot 2259057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * sensors like SIGNIFICANT_MOTION cannot be batched, hence the text about batch above 2269057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * doesn't apply to them. See the definitions of SENSOR_TYPE_PROXIMITY and 2279057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * SENSOR_TYPE_SIGNIFICANT_MOTION for more info. 2289057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 2299057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Set SENSOR_FLAG_WAKE_UP flag for all wake-up sensors. 2309057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 2319057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * For example, A device can have two sensors both of SENSOR_TYPE_ACCELEROMETER and 2329057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * one of them can be a wake_up sensor (with SENSOR_FLAG_WAKE_UP flag set) and the other 2339057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * can be a regular non wake_up sensor. Both of these sensors must be activated/deactivated 2349057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * independently of the other. 2359057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella */ 2369057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella 2379057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella/* 23856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * SENSOR_TYPE_ACCELEROMETER 239c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 24056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * 24156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * All values are in SI units (m/s^2) and measure the acceleration of the 24256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * device minus the force of gravity. 24356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * 2449057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 2459057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 24656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 24756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_ACCELEROMETER (1) 248477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_ACCELEROMETER "android.sensor.accelerometer" 24956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 25056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 25156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * SENSOR_TYPE_GEOMAGNETIC_FIELD 252c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 253f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 25456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * All values are in micro-Tesla (uT) and measure the geomagnetic 25556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * field in the X, Y and Z axis. 25656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * 2579057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 2589057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 25956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 26056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_GEOMAGNETIC_FIELD (2) 26156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_MAGNETIC_FIELD SENSOR_TYPE_GEOMAGNETIC_FIELD 262477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_MAGNETIC_FIELD "android.sensor.magnetic_field" 26356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 26456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 265e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_ORIENTATION 266c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 2678db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * 268f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * All values are angles in degrees. 2698db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * 27066a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * Orientation sensors return sensor events for all 3 axes at a constant 27166a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * rate defined by setDelay(). 2729057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 2739057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 2749057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 27556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 27656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_ORIENTATION (3) 277477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_ORIENTATION "android.sensor.orientation" 27856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 27956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 280e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_GYROSCOPE 281c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 282e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * 283b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * All values are in radians/second and measure the rate of rotation 2848db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * around the X, Y and Z axis. 2859057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 2869057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 2879057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 28856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 28956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_GYROSCOPE (4) 290477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_GYROSCOPE "android.sensor.gyroscope" 29156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 29256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 293e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_LIGHT 294c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: on-change 295a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * 296a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * The light sensor value is returned in SI lux units. 2979057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 2989057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Both wake-up and non wake-up versions are useful. 29956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 30056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_LIGHT (5) 301477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_LIGHT "android.sensor.light" 30256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 30356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 304e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_PRESSURE 305c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 3061832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian * 307e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * The pressure sensor return the athmospheric pressure in hectopascal (hPa) 3089057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 3099057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 3109057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 31156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 31256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_PRESSURE (6) 313477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_PRESSURE "android.sensor.pressure" 31456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 31556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* SENSOR_TYPE_TEMPERATURE is deprecated in the HAL */ 31656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_TEMPERATURE (7) 317477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_TEMPERATURE "android.sensor.temperature" 31856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 31956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 32056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * SENSOR_TYPE_PROXIMITY 321c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: on-change 3221832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian * 3239057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * The proximity sensor which turns the screen off and back on during calls is the 3249057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * wake-up proximity sensor. Implement wake-up proximity sensor before implementing 3259057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * a non wake-up proximity sensor. For the wake-up proximity sensor set the flag 3269057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * SENSOR_FLAG_WAKE_UP. 3278db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * The value corresponds to the distance to the nearest object in centimeters. 32856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 32956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_PROXIMITY (8) 330477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_PROXIMITY "android.sensor.proximity" 33156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 33256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 333e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_GRAVITY 334c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 3353120b58768ff6aad5ad169b9c18f962ef6abb3c5Makarand Karvekar * 336e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * A gravity output indicates the direction of and magnitude of gravity in 3378db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * the devices's coordinates. 3389057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 3399057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 3409057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 34156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 34256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_GRAVITY (9) 343477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_GRAVITY "android.sensor.gravity" 34456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 34556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 346e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_LINEAR_ACCELERATION 347c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 3483120b58768ff6aad5ad169b9c18f962ef6abb3c5Makarand Karvekar * 349e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * Indicates the linear acceleration of the device in device coordinates, 350e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * not including gravity. 3519057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 3529057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 3539057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 35456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 35556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_LINEAR_ACCELERATION (10) 356477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_LINEAR_ACCELERATION "android.sensor.linear_acceleration" 35756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 35856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 35956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 360e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_ROTATION_VECTOR 361c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 36242b743c85597e982ff1122b972862396f131db34Mathias Agopian * 36328f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand * The rotation vector symbolizes the orientation of the device relative to the 3648db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * East-North-Up coordinates frame. 3659057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 3669057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 3679057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 36856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 36956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_ROTATION_VECTOR (11) 370477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_ROTATION_VECTOR "android.sensor.rotation_vector" 37156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 37256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 373e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_RELATIVE_HUMIDITY 374c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: on-change 375d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch * 376d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch * A relative humidity sensor measures relative ambient air humidity and 377d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch * returns a value in percent. 3789057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 3799057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Both wake-up and non wake-up versions are useful. 38056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 38156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_RELATIVE_HUMIDITY (12) 382477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_RELATIVE_HUMIDITY "android.sensor.relative_humidity" 38356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 38456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 385e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_AMBIENT_TEMPERATURE 386c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: on-change 38754f9dd032dfbd336ca90e3b44047373f0297c3a5Mathias Agopian * 38854f9dd032dfbd336ca90e3b44047373f0297c3a5Mathias Agopian * The ambient (room) temperature in degree Celsius. 3899057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 3909057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Both wake-up and non wake-up versions are useful. 39156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 39256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_AMBIENT_TEMPERATURE (13) 393477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_AMBIENT_TEMPERATURE "android.sensor.ambient_temperature" 39456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 39556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 39656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED 397c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 39856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * 399ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * Similar to SENSOR_TYPE_MAGNETIC_FIELD, but the hard iron calibration is 400ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * reported separately instead of being included in the measurement. 4019057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4029057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 4039057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 404f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 40556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED (14) 406477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_MAGNETIC_FIELD_UNCALIBRATED "android.sensor.magnetic_field_uncalibrated" 407b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell 40856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 40956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * SENSOR_TYPE_GAME_ROTATION_VECTOR 410c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 41156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * 412ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * Similar to SENSOR_TYPE_ROTATION_VECTOR, but not using the geomagnetic 4138db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * field. 4149057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4159057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 4169057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 41756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 41856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_GAME_ROTATION_VECTOR (15) 419477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_GAME_ROTATION_VECTOR "android.sensor.game_rotation_vector" 42056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 42156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 42256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * SENSOR_TYPE_GYROSCOPE_UNCALIBRATED 423c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 42456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * 42556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * All values are in radians/second and measure the rate of rotation 4268db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * around the X, Y and Z axis. 4279057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4289057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 4299057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 43056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 43156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_GYROSCOPE_UNCALIBRATED (16) 432477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_GYROSCOPE_UNCALIBRATED "android.sensor.gyroscope_uncalibrated" 43356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 434a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 435a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * SENSOR_TYPE_SIGNIFICANT_MOTION 436c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: one-shot 437a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 438a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * A sensor of this type triggers an event each time significant motion 439a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * is detected and automatically disables itself. 4409057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * For Significant Motion sensor to be useful, it must be defined as a 4419057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * wake-up sensor. (set SENSOR_FLAG_WAKE_UP). Implement the wake-up significant motion 4429057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * sensor. A non wake-up version is not useful. 443a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * The only allowed value to return is 1.0. 444a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 445a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 446a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian#define SENSOR_TYPE_SIGNIFICANT_MOTION (17) 447477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_SIGNIFICANT_MOTION "android.sensor.significant_motion" 448a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 449a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 4502f276f555064a77fa449a3ac21aa06ea3c1b45caMathias Agopian * SENSOR_TYPE_STEP_DETECTOR 451c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: special 452a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 453a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * A sensor of this type triggers an event each time a step is taken 4548db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * by the user. The only allowed value to return is 1.0 and an event 4558db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * is generated for each step. 4569057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4579057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Both wake-up and non wake-up versions are useful. 458a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 459a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 4602f276f555064a77fa449a3ac21aa06ea3c1b45caMathias Agopian#define SENSOR_TYPE_STEP_DETECTOR (18) 461477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_STEP_DETECTOR "android.sensor.step_detector" 462a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 463a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 464a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 465a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * SENSOR_TYPE_STEP_COUNTER 466c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: on-change 467a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 468a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * A sensor of this type returns the number of steps taken by the user since 4691144bea332fb24789712062bb35fe762f2f17505Mathias Agopian * the last reboot while activated. The value is returned as a uint64_t and is 470f770b7a9b9315fa924de224af188c314a474eb10Etienne Le Grand * reset to zero only on a system / android reboot. 4719057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4729057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 4739057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 474a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 475a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 476a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian#define SENSOR_TYPE_STEP_COUNTER (19) 477477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_STEP_COUNTER "android.sensor.step_counter" 478a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 479ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand/* 480ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR 481c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 482ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * 483ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * Similar to SENSOR_TYPE_ROTATION_VECTOR, but using a magnetometer instead 484ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * of using a gyroscope. 4859057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4869057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 4879057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 488ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand */ 489477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR (20) 490477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_GEOMAGNETIC_ROTATION_VECTOR "android.sensor.geomagnetic_rotation_vector" 491477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella 492477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella/* 493477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * SENSOR_TYPE_HEART_RATE 494c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: on-change 495477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * 4967b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * A sensor of this type returns the current heart rate. 4977b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * The events contain the current heart rate in beats per minute (BPM) and the 4987b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * status of the sensor during the measurement. See heart_rate_event_t for more 4997b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * details. 5007b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * 5017b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * Because this sensor is on-change, events must be generated when and only 5027b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * when heart_rate.bpm or heart_rate.status have changed since the last 50374279e3c23bd62c70d53098be91db85df5a68eceVinod Krishnan * event. In particular, upon the first activation, unless the device is known 50474279e3c23bd62c70d53098be91db85df5a68eceVinod Krishnan * to not be on the body, the status field of the first event must be set to 50574279e3c23bd62c70d53098be91db85df5a68eceVinod Krishnan * SENSOR_STATUS_UNRELIABLE. The event should be generated no faster than every 50674279e3c23bd62c70d53098be91db85df5a68eceVinod Krishnan * period_ns passed to setDelay() or to batch(). 507f0f67e6af93a601546b1d915b147dda5da295a1fGriff Hazen * See the definition of the on-change reporting mode for more information. 5087b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * 509477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * sensor_t.requiredPermission must be set to SENSOR_PERMISSION_BODY_SENSORS. 5109057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 5119057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Both wake-up and non wake-up versions are useful. 512477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella */ 513477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_TYPE_HEART_RATE (21) 514477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_HEART_RATE "android.sensor.heart_rate" 515a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 5166242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella/* 517f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * SENSOR_TYPE_WAKE_UP_TILT_DETECTOR 518c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: special (setDelay has no impact) 519f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * 520f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * A sensor of this type generates an event each time a tilt event is detected. A tilt event 521f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * should be generated if the direction of the 2-seconds window average gravity changed by at least 52253017efa7b29990c8e9934a0cea27d62d454d055Etienne Le Grand * 35 degrees since the activation or the last trigger of the sensor. 523426f14df08abeeaa5addbf746d0ce8e81fbba31aEtienne Le Grand * reference_estimated_gravity = average of accelerometer measurements over the first 52453017efa7b29990c8e9934a0cea27d62d454d055Etienne Le Grand * 1 second after activation or the estimated gravity at the last 52553017efa7b29990c8e9934a0cea27d62d454d055Etienne Le Grand * trigger. 526f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * current_estimated_gravity = average of accelerometer measurements over the last 2 seconds. 527426f14df08abeeaa5addbf746d0ce8e81fbba31aEtienne Le Grand * trigger when angle (reference_estimated_gravity, current_estimated_gravity) > 35 degrees 528f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * 529f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * Large accelerations without a change in phone orientation should not trigger a tilt event. 530f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * For example, a sharp turn or strong acceleration while driving a car should not trigger a tilt 531f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * event, even though the angle of the average acceleration might vary by more than 35 degrees. 532f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * 533f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * Typically, this sensor is implemented with the help of only an accelerometer. Other sensors can 534f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * be used as well if they do not increase the power consumption significantly. This is a low power 535f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * sensor that should allow the AP to go into suspend mode. Do not emulate this sensor in the HAL. 536f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * Like other wake up sensors, the driver is expected to a hold a wake_lock with a timeout of 200 ms 537f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * while reporting this event. The only allowed return value is 1.0. 5389057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 5399057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement only the wake-up version of this sensor. 540f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella */ 5419057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella#define SENSOR_TYPE_TILT_DETECTOR (22) 5429057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella#define SENSOR_STRING_TYPE_TILT_DETECTOR "android.sensor.tilt_detector" 543f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella 544ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand/* 545ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * SENSOR_TYPE_WAKE_GESTURE 546c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: one-shot 547ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * 548ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * A sensor enabling waking up the device based on a device specific motion. 549ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * 550ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * When this sensor triggers, the device behaves as if the power button was 551ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * pressed, turning the screen on. This behavior (turning on the screen when 552ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * this sensor triggers) might be deactivated by the user in the device 553ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * settings. Changes in settings do not impact the behavior of the sensor: 554ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * only whether the framework turns the screen on when it triggers. 555ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * 556ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * The actual gesture to be detected is not specified, and can be chosen by 557ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * the manufacturer of the device. 558ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * This sensor must be low power, as it is likely to be activated 24/7. 559ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * The only allowed value to return is 1.0. 5609057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 5619057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement only the wake-up version of this sensor. 562ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand */ 5639057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella#define SENSOR_TYPE_WAKE_GESTURE (23) 564ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand#define SENSOR_STRING_TYPE_WAKE_GESTURE "android.sensor.wake_gesture" 565ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand 5668df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown/* 5678df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * SENSOR_TYPE_GLANCE_GESTURE 5688df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * reporting-mode: one-shot 5698df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * 5708df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * A sensor enabling briefly turning the screen on to enable the user to 5718df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * glance content on screen based on a specific motion. The device should 5728df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * turn the screen off after a few moments. 5738df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * 5748df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * When this sensor triggers, the device turns the screen on momentarily 5758df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * to allow the user to glance notifications or other content while the 5768df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * device remains locked in a non-interactive state (dozing). This behavior 5778df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * (briefly turning on the screen when this sensor triggers) might be deactivated 5788df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * by the user in the device settings. Changes in settings do not impact the 5798df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * behavior of the sensor: only whether the framework briefly turns the screen on 5808df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * when it triggers. 5818df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * 5828df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * The actual gesture to be detected is not specified, and can be chosen by 5838df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * the manufacturer of the device. 5848df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * This sensor must be low power, as it is likely to be activated 24/7. 5858df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * The only allowed value to return is 1.0. 5869057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 5879057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement only the wake-up version of this sensor. 5888df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown */ 5899057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella#define SENSOR_TYPE_GLANCE_GESTURE (24) 5908df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown#define SENSOR_STRING_TYPE_GLANCE_GESTURE "android.sensor.glance_gesture" 5918df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown 59256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/** 593952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella * SENSOR_TYPE_PICK_UP_GESTURE 594952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella * reporting-mode: one-shot 595952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella * 596952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella * A sensor of this type triggers when the device is picked up regardless of wherever is was 597952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella * before (desk, pocket, bag). The only allowed return value is 1.0. 598952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella * This sensor de-activates itself immediately after it triggers. 5999057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 6009057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement only the wake-up version of this sensor. 601952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella */ 6029057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella#define SENSOR_TYPE_PICK_UP_GESTURE (25) 603952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella#define SENSOR_STRING_TYPE_PICK_UP_GESTURE "android.sensor.pick_up_gesture" 604952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella 605952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella/** 60656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * Values returned by the accelerometer in various locations in the universe. 60756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * all values are in SI units (m/s^2) 60856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 60956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define GRAVITY_SUN (275.0f) 61056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define GRAVITY_EARTH (9.80665f) 61156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 61256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/** Maximum magnetic field on Earth's surface */ 61356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define MAGNETIC_FIELD_EARTH_MAX (60.0f) 61456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 61556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/** Minimum magnetic field on Earth's surface */ 61656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define MAGNETIC_FIELD_EARTH_MIN (30.0f) 61756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 61856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/** 6197b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * Possible values of the status field of sensor events. 62056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 6217b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand#define SENSOR_STATUS_NO_CONTACT -1 62256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_STATUS_UNRELIABLE 0 62356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_STATUS_ACCURACY_LOW 1 62456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_STATUS_ACCURACY_MEDIUM 2 62556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_STATUS_ACCURACY_HIGH 3 62656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 62756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/** 62856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * sensor event data 62956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 630f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projecttypedef struct { 631f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project union { 632f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float v[3]; 633f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct { 634f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float x; 635f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float y; 636f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float z; 637f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project }; 638f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct { 639f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float azimuth; 640f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float pitch; 641f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float roll; 642f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project }; 643f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project }; 644f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int8_t status; 645f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint8_t reserved[3]; 646f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project} sensors_vec_t; 647f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 648f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 649ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * uncalibrated gyroscope and magnetometer event data 650ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand */ 651ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grandtypedef struct { 65228f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand union { 65328f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float uncalib[3]; 65428f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand struct { 65528f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float x_uncalib; 65628f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float y_uncalib; 65728f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float z_uncalib; 65828f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand }; 65928f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand }; 66028f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand union { 66128f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float bias[3]; 66228f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand struct { 66328f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float x_bias; 66428f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float y_bias; 66528f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float z_bias; 66628f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand }; 66728f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand }; 668ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand} uncalibrated_event_t; 669ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand 670772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand/** 671772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * Meta data event data 672772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand */ 67316671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopiantypedef struct meta_data_event { 67416671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian int32_t what; 67516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian int32_t sensor; 67616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian} meta_data_event_t; 67716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 678ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand/** 6797b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * Heart rate event data 6807b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand */ 6817b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grandtypedef struct { 6827b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand // Heart rate in beats per minute. 6837b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand // Set to 0 when status is SENSOR_STATUS_UNRELIABLE or ..._NO_CONTACT 6847b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand float bpm; 6857b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand // Status of the sensor for this reading. Set to one SENSOR_STATUS_... 686772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand // Note that this value should only be set for sensors that explicitly define 687772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand // the meaning of this field. This field is not piped through the framework 688772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand // for other sensors. 6897b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand int8_t status; 6907b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand} heart_rate_event_t; 6917b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand 6927b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand/** 693f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Union of the various types of sensor data 694f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * that can be returned. 695f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 696cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopiantypedef struct sensors_event_t { 697cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* must be sizeof(struct sensors_event_t) */ 698cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t version; 699cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 700cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* sensor identifier */ 701cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t sensor; 702cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 703cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* sensor type */ 704cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t type; 705cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 706cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* reserved */ 707cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t reserved0; 708cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 709cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* time is in nanosecond */ 710cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int64_t timestamp; 711cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 712cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian union { 71327e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian union { 71427e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian float data[16]; 715cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 71627e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* acceleration values are in meter per second per second (m/s^2) */ 71727e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian sensors_vec_t acceleration; 718cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 71927e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* magnetic vector values are in micro-Tesla (uT) */ 72027e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian sensors_vec_t magnetic; 721cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 72227e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* orientation values are in degrees */ 72327e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian sensors_vec_t orientation; 724cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 72527e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* gyroscope values are in rad/s */ 72627e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian sensors_vec_t gyro; 7273120b58768ff6aad5ad169b9c18f962ef6abb3c5Makarand Karvekar 72827e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* temperature is in degrees centigrade (Celsius) */ 72927e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian float temperature; 730cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 73127e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* distance in centimeters */ 73227e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian float distance; 733cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 73427e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* light in SI lux units */ 73527e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian float light; 7361832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian 73727e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* pressure in hectopascal (hPa) */ 73827e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian float pressure; 739d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch 74027e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* relative humidity in percent */ 74127e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian float relative_humidity; 742a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 74327e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* uncalibrated gyroscope values are in rad/s */ 74427e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian uncalibrated_event_t uncalibrated_gyro; 745ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand 74627e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* uncalibrated magnetometer values are in micro-Teslas */ 74727e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian uncalibrated_event_t uncalibrated_magnetic; 74816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 7497b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand /* heart rate data containing value in bpm and status */ 7507b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand heart_rate_event_t heart_rate; 751477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella 75216671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian /* this is a special event. see SENSOR_TYPE_META_DATA above. 75316671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * sensors_meta_data_event_t events are all reported with a type of 75416671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * SENSOR_TYPE_META_DATA. The handle is ignored and must be zero. 75516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian */ 75616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian meta_data_event_t meta_data; 75727e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian }; 75827e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian 75927e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian union { 76027e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian uint64_t data[8]; 761ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand 76227e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* step-counter */ 76327e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian uint64_t step_counter; 76427e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian } u64; 765cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian }; 7666242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella 7676242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella /* Reserved flags for internal use. Set to zero. */ 7686242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella uint32_t flags; 7696242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella 7706242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella uint32_t reserved1[3]; 771cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian} sensors_event_t; 772cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 773cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 77416671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian/* see SENSOR_TYPE_META_DATA */ 77516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopiantypedef sensors_event_t sensors_meta_data_event_t; 77616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 777cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 778f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct sensor_t; 779f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 780f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 781f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM 782f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * and the fields of this data structure must begin with hw_module_t 783f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * followed by module specific information. 784f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 785f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct sensors_module_t { 786f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct hw_module_t common; 787f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 788f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** 789f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Enumerate all available sensors. The list is returned in "list". 790f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * @return number of sensors in the list 791f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 792f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int (*get_sensors_list)(struct sensors_module_t* module, 793f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct sensor_t const** list); 794f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project}; 795f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 796f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct sensor_t { 7971144bea332fb24789712062bb35fe762f2f17505Mathias Agopian 7981144bea332fb24789712062bb35fe762f2f17505Mathias Agopian /* Name of this sensor. 7991144bea332fb24789712062bb35fe762f2f17505Mathias Agopian * All sensors of the same "type" must have a different "name". 8001144bea332fb24789712062bb35fe762f2f17505Mathias Agopian */ 801f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char* name; 802a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 803f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* vendor of the hardware part */ 804f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char* vendor; 805a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 806e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian /* version of the hardware part + driver. The value of this field 807e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * must increase when the driver is updated in a way that changes the 808e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * output of this sensor. This is important for fused sensors when the 809e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * fusion algorithm is updated. 8106242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella */ 811f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int version; 812a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 813a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian /* handle that identifies this sensors. This handle is used to reference 814a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * this sensor throughout the HAL API. 815f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 816f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int handle; 817a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 818f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* this sensor's type. */ 819f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int type; 820a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 821a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian /* maximum range of this sensor's value in SI units */ 822f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float maxRange; 823a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 824f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* smallest difference between two values reported by this sensor */ 825f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float resolution; 826a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 827f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* rough estimate of this sensor's power consumption in mA */ 828f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float power; 829a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 830c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella /* this value depends on the reporting mode: 831a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 832a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * continuous: minimum sample period allowed in microseconds 833a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * on-change : 0 834a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * one-shot :-1 835a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * special : 0, unless otherwise noted 836a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 8371511e20fbbdfe7bf30b9de73f06fc981eb494f09Mathias Agopian int32_t minDelay; 838a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 83916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian /* number of events reserved for this sensor in the batch mode FIFO. 84016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * If there is a dedicated FIFO for this sensor, then this is the 84116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * size of this FIFO. If the FIFO is shared with other sensors, 84216671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * this is the size reserved for that sensor and it can be zero. 84316671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian */ 84416671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian uint32_t fifoReservedEventCount; 84516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 84616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian /* maximum number of events of this sensor that could be batched. 84716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * This is especially relevant when the FIFO is shared between 84816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * several sensors; this value is then set to the size of that FIFO. 84916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian */ 85016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian uint32_t fifoMaxEventCount; 85116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 852477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella /* type of this sensor as a string. Set to corresponding 853477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * SENSOR_STRING_TYPE_*. 854477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * When defining an OEM specific sensor or sensor manufacturer specific 855477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * sensor, use your reserve domain name as a prefix. 856477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * ex: com.google.glass.onheaddetector 857477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * For sensors of known type, the android framework might overwrite this 858477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * string automatically. 859477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella */ 860477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella const char* stringType; 861477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella 862477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella /* permission required to see this sensor, register to it and receive data. 863477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * Set to "" if no permission is required. Some sensor types like the 864477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * heart rate monitor have a mandatory require_permission. 865477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * For sensors that always require a specific permission, like the heart 866477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * rate monitor, the android framework might overwrite this string 867477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * automatically. 868477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella */ 869477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella const char* requiredPermission; 870477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella 871110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella /* This value is defined only for continuous mode and on-change sensors. It is the delay between 872110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * two sensor events corresponding to the lowest frequency that this sensor supports. When lower 873110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * frequencies are requested through batch()/setDelay() the events will be generated at this 874110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * frequency instead. It can be used by the framework or applications to estimate when the batch 875110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * FIFO may be full. 876c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * 877c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * NOTE: 1) period_ns is in nanoseconds where as maxDelay/minDelay are in microseconds. 878110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * continuous, on-change: maximum sampling period allowed in microseconds. 879110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * one-shot, special : 0 880c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * 2) maxDelay should always fit within a 32 bit signed integer. It is declared as 64 bit 881c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * on 64 bit architectures only for binary compatibility reasons. 8826242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * Availability: SENSORS_DEVICE_API_VERSION_1_3 8836242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella */ 8846242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella #ifdef __LP64__ 8856242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella int64_t maxDelay; 8866242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella #else 8876242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella int32_t maxDelay; 8886242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella #endif 8896242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella 890c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella /* Flags for sensor. See SENSOR_FLAG_* above. Only the least significant 32 bits are used here. 891c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * It is declared as 64 bit on 64 bit architectures only for binary compatibility reasons. 892c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * Availability: SENSORS_DEVICE_API_VERSION_1_3 893c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella */ 8946242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella #ifdef __LP64__ 8956242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella uint64_t flags; 8966242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella #else 8976242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella uint32_t flags; 8986242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella #endif 8996242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella 900f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* reserved fields, must be zero */ 9016242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella void* reserved[2]; 902f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project}; 903f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 904f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 905a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 906a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * sensors_poll_device_t is used with SENSORS_DEVICE_API_VERSION_0_1 907a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * and is present for backward binary and source compatibility. 9088db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * See the Sensors HAL interface section for complete descriptions of the 9098db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * following functions: 9108db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * http://source.android.com/devices/sensors/index.html#hal 911f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 912b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopianstruct sensors_poll_device_t { 913b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian struct hw_device_t common; 914b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian int (*activate)(struct sensors_poll_device_t *dev, 915772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int sensor_handle, int enabled); 916a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian int (*setDelay)(struct sensors_poll_device_t *dev, 917772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int sensor_handle, int64_t sampling_period_ns); 918a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian int (*poll)(struct sensors_poll_device_t *dev, 919a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian sensors_event_t* data, int count); 920a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian}; 921b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 922a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 923772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * struct sensors_poll_device_1 is used in HAL versions >= SENSORS_DEVICE_API_VERSION_1_0 924a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 925a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopiantypedef struct sensors_poll_device_1 { 926a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian union { 927a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian /* sensors_poll_device_1 is compatible with sensors_poll_device_t, 928a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * and can be down-cast to it 929a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 9301082c0b54c21c220e975f1c714e41f9183b366d1Andrew Hsieh struct sensors_poll_device_t v0; 931a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 932a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian struct { 933a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian struct hw_device_t common; 934a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 9358db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy /* Activate/de-activate one sensor. Return 0 on success, negative 936a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 937772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * sensor_handle is the handle of the sensor to change. 938a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * enabled set to 1 to enable, or 0 to disable the sensor. 939a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 9408db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * Return 0 on success, negative errno code otherwise. 941a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 942a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian int (*activate)(struct sensors_poll_device_t *dev, 943772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int sensor_handle, int enabled); 944a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 945a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian /** 946772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * Set the events's period in nanoseconds for a given sensor. 947772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * If sampling_period_ns > max_delay it will be truncated to 948772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * max_delay and if sampling_period_ns < min_delay it will be 949772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * replaced by min_delay. 950a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 951a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian int (*setDelay)(struct sensors_poll_device_t *dev, 952772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int sensor_handle, int64_t sampling_period_ns); 953a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 954a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian /** 955a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * Returns an array of sensor data. 956a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 957a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian int (*poll)(struct sensors_poll_device_t *dev, 958a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian sensors_event_t* data, int count); 959a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian }; 960a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian }; 961a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 962a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 963a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian /* 964772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * Sets a sensor’s parameters, including sampling frequency and maximum 965772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * report latency. This function can be called while the sensor is 966772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * activated, in which case it must not cause any sensor measurements to 967772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * be lost: transitioning from one sampling rate to the other cannot cause 968772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * lost events, nor can transitioning from a high maximum report latency to 969772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * a low maximum report latency. 9708db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * See the Batching sensor results page for details: 9718db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * http://source.android.com/devices/sensors/batching.html 972b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian */ 973a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian int (*batch)(struct sensors_poll_device_1* dev, 974772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int sensor_handle, int flags, int64_t sampling_period_ns, 975772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int64_t max_report_latency_ns); 976a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 97716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian /* 97816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * Flush adds a META_DATA_FLUSH_COMPLETE event (sensors_event_meta_data_t) 97916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * to the end of the "batch mode" FIFO for the specified sensor and flushes 980772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * the FIFO. 981772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * If the FIFO is empty or if the sensor doesn't support batching (FIFO size zero), 982c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * it should return SUCCESS along with a trivial META_DATA_FLUSH_COMPLETE event added to the 983772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * event stream. This applies to all sensors other than one-shot sensors. 984772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * If the sensor is a one-shot sensor, flush must return -EINVAL and not generate 985772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * any flush complete metadata. 986a7f2cda848c2f057921109f03b843a761ad5d563Aravind Akella * If the sensor is not active at the time flush() is called, flush() should return 987a7f2cda848c2f057921109f03b843a761ad5d563Aravind Akella * -EINVAL. 98816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian */ 989772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int (*flush)(struct sensors_poll_device_1* dev, int sensor_handle); 99016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 991a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian void (*reserved_procs[8])(void); 992a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 993a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian} sensors_poll_device_1_t; 994a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 995a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 996f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** convenience API for opening and closing a device */ 997f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 998b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopianstatic inline int sensors_open(const struct hw_module_t* module, 999b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian struct sensors_poll_device_t** device) { 1000b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian return module->methods->open(module, 1001b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian SENSORS_HARDWARE_POLL, (struct hw_device_t**)device); 1002b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian} 1003b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 1004b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopianstatic inline int sensors_close(struct sensors_poll_device_t* device) { 1005b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian return device->common.close(&device->common); 1006b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian} 1007b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 1008a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopianstatic inline int sensors_open_1(const struct hw_module_t* module, 10091082c0b54c21c220e975f1c714e41f9183b366d1Andrew Hsieh sensors_poll_device_1_t** device) { 1010a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian return module->methods->open(module, 1011a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian SENSORS_HARDWARE_POLL, (struct hw_device_t**)device); 1012a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian} 1013a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 10141082c0b54c21c220e975f1c714e41f9183b366d1Andrew Hsiehstatic inline int sensors_close_1(sensors_poll_device_1_t* device) { 1015a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian return device->common.close(&device->common); 1016a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian} 1017a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1018f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project__END_DECLS 1019f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 1020f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#endif // ANDROID_SENSORS_INTERFACE_H 1021