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) 386507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi#define SENSORS_DEVICE_API_VERSION_1_4 HARDWARE_DEVICE_API_VERSION_2(1, 4, SENSORS_HEADER_VERSION) 3956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 40f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 418db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * Please see the Sensors section of source.android.com for an 428db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * introduction to and detailed descriptions of Android sensor types: 438db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * http://source.android.com/devices/sensors/index.html 448db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy */ 458db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy 468db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy/** 47f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * The id of this module 48f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 49f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSORS_HARDWARE_MODULE_ID "sensors" 50f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 51f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 52f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Name of the sensors device to open 53f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 54b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian#define SENSORS_HARDWARE_POLL "poll" 55f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 56f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 57f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Handles must be higher than SENSORS_HANDLE_BASE and must be unique. 58f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * A Handle identifies a given sensors. The handle is used to activate 59f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * and/or deactivate sensors. 60f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * In this version of the API there can only be 256 handles. 61f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 62f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSORS_HANDLE_BASE 0 63f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSORS_HANDLE_BITS 8 64f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define SENSORS_HANDLE_COUNT (1<<SENSORS_HANDLE_BITS) 65f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 66f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 67a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 686242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * **** Deprecated ***** 69a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * flags for (*batch)() 70a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * Availability: SENSORS_DEVICE_API_VERSION_1_0 716242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * see (*batch)() documentation for details. 726242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * Deprecated as of SENSORS_DEVICE_API_VERSION_1_3. 736242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * WAKE_UP_* sensors replace WAKE_UPON_FIFO_FULL concept. 74a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 75a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopianenum { 76a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian SENSORS_BATCH_DRY_RUN = 0x00000001, 77a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian SENSORS_BATCH_WAKE_UPON_FIFO_FULL = 0x00000002 78a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian}; 79a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 8016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian/* 8116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * what field for meta_data_event_t 8216671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian */ 8316671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopianenum { 8416671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian /* a previous flush operation has completed */ 85af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian META_DATA_FLUSH_COMPLETE = 1, 86af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian META_DATA_VERSION /* always last, leave auto-assigned */ 8716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian}; 8816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 89a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 90477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * The permission to use for body sensors (like heart rate monitors). 91477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * See sensor types for more details on what sensors should require this 92477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * permission. 93477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella */ 94477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_PERMISSION_BODY_SENSORS "android.permission.BODY_SENSORS" 95477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella 96477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella/* 976507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi * Availability: SENSORS_DEVICE_API_VERSION_1_4 98050f2e45a042638bc2f6c1a51a805847edd9332fAshutosh Joshi * Sensor HAL modes used in set_operation_mode method 996507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi */ 1006507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshienum { 1016507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi /* 1026507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi * Operating modes for the HAL. 1036507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi */ 1046507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi 1056507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi /* 1066507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi * Normal mode operation. This is the default state of operation. 1076507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi * The HAL shall initialize into this mode on device startup. 1086507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi */ 1096507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi SENSOR_HAL_NORMAL_MODE = 0, 1106507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi 111c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella /* 112c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella * Data Injection mode. In this mode, the device shall not source data from the 1136507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi * physical sensors as it would in normal mode. Instead sensor data is 1146507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi * injected by the sensor service. 1156507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi */ 116c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella SENSOR_HAL_DATA_INJECTION_MODE = 0x1 1176507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi}; 1186507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi 119d1562996862712411833171afbb7dcae6fddd1bcPeng Xu#define SENSOR_FLAG_MASK(nbit, shift) (((1<<(nbit))-1)<<(shift)) 120d1562996862712411833171afbb7dcae6fddd1bcPeng Xu#define SENSOR_FLAG_MASK_1(shift) SENSOR_FLAG_MASK(1, shift) 121d1562996862712411833171afbb7dcae6fddd1bcPeng Xu 122d1562996862712411833171afbb7dcae6fddd1bcPeng Xu/* 123d1562996862712411833171afbb7dcae6fddd1bcPeng Xu * Mask and shift for reporting mode sensor flags defined above. 124d1562996862712411833171afbb7dcae6fddd1bcPeng Xu */ 125d1562996862712411833171afbb7dcae6fddd1bcPeng Xu#define REPORTING_MODE_SHIFT (1) 126d1562996862712411833171afbb7dcae6fddd1bcPeng Xu#define REPORTING_MODE_NBIT (3) 127d1562996862712411833171afbb7dcae6fddd1bcPeng Xu#define REPORTING_MODE_MASK SENSOR_FLAG_MASK(REPORTING_MODE_NBIT, REPORTING_MODE_SHIFT) 128d1562996862712411833171afbb7dcae6fddd1bcPeng Xu // 0xE 129d1562996862712411833171afbb7dcae6fddd1bcPeng Xu 130d1562996862712411833171afbb7dcae6fddd1bcPeng Xu/* 131d1562996862712411833171afbb7dcae6fddd1bcPeng Xu * Mask and shift for data_injection mode sensor flags defined above. 132d1562996862712411833171afbb7dcae6fddd1bcPeng Xu */ 133d1562996862712411833171afbb7dcae6fddd1bcPeng Xu#define DATA_INJECTION_SHIFT (4) 134d1562996862712411833171afbb7dcae6fddd1bcPeng Xu#define DATA_INJECTION_MASK SENSOR_FLAG_MASK_1(DATA_INJECTION_SHIFT) //0x10 135d1562996862712411833171afbb7dcae6fddd1bcPeng Xu 136d1562996862712411833171afbb7dcae6fddd1bcPeng Xu/* 137d1562996862712411833171afbb7dcae6fddd1bcPeng Xu * Mask and shift for dynamic sensor flag. 138d1562996862712411833171afbb7dcae6fddd1bcPeng Xu */ 139d1562996862712411833171afbb7dcae6fddd1bcPeng Xu#define DYNAMIC_SENSOR_SHIFT (5) 140d1562996862712411833171afbb7dcae6fddd1bcPeng Xu#define DYNAMIC_SENSOR_MASK SENSOR_FLAG_MASK_1(DYNAMIC_SENSOR_SHIFT) //0x20 141d1562996862712411833171afbb7dcae6fddd1bcPeng Xu 142d1562996862712411833171afbb7dcae6fddd1bcPeng Xu/* 143d1562996862712411833171afbb7dcae6fddd1bcPeng Xu * Mask and shift for sensor additional information support. 144d1562996862712411833171afbb7dcae6fddd1bcPeng Xu */ 145d1562996862712411833171afbb7dcae6fddd1bcPeng Xu#define ADDITIONAL_INFO_SHIFT (6) 146d1562996862712411833171afbb7dcae6fddd1bcPeng Xu#define ADDITIONAL_INFO_MASK SENSOR_FLAG_MASK_1(ADDITIONAL_INFO_SHIFT) //0x40 147d1562996862712411833171afbb7dcae6fddd1bcPeng Xu 1486507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi/* 1496242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * Availability: SENSORS_DEVICE_API_VERSION_1_3 1506242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * Sensor flags used in sensor_t.flags. 1516242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella */ 1526242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akellaenum { 1536242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella /* 154110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * Whether this sensor wakes up the AP from suspend mode when data is available. Whenever 155110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * sensor events are delivered from a wake_up sensor, the driver needs to hold a wake_lock till 156110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * the events are read by the SensorService i.e till sensors_poll_device_t.poll() is called the 157110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * next time. Once poll is called again it means events have been read by the SensorService, the 158110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * driver can safely release the wake_lock. SensorService will continue to hold a wake_lock till 159110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * the app actually reads the events. 1606242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella */ 161c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella SENSOR_FLAG_WAKE_UP = 1U << 0, 162c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella /* 163c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * Reporting modes for various sensors. Each sensor will have exactly one of these modes set. 164c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * The least significant 2nd, 3rd and 4th bits are used to represent four possible reporting 165c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * modes. 166c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella */ 167c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella SENSOR_FLAG_CONTINUOUS_MODE = 0, // 0000 168c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella SENSOR_FLAG_ON_CHANGE_MODE = 0x2, // 0010 169c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella SENSOR_FLAG_ONE_SHOT_MODE = 0x4, // 0100 170c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella SENSOR_FLAG_SPECIAL_REPORTING_MODE = 0x6, // 0110 171c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella 172c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella /* 173c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella * Set this flag if the sensor supports data_injection mode and allows data to be injected 174c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella * from the SensorService. When in data_injection ONLY sensors with this flag set are injected 175c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella * sensor data and only sensors with this flag set are activated. Eg: Accelerometer and Step 176c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella * Counter sensors can be set with this flag and SensorService will inject accelerometer data 177c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella * and read the corresponding step counts. 178c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella */ 179d1562996862712411833171afbb7dcae6fddd1bcPeng Xu SENSOR_FLAG_SUPPORTS_DATA_INJECTION = DATA_INJECTION_MASK, // 1 0000 1806242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella 181d1562996862712411833171afbb7dcae6fddd1bcPeng Xu /* 182d1562996862712411833171afbb7dcae6fddd1bcPeng Xu * Set this flag if the sensor is a dynamically connected sensor. See 183d1562996862712411833171afbb7dcae6fddd1bcPeng Xu * dynamic_sensor_meta_event_t and SENSOR_TYPE_DYNAMIC_SENSOR_META for details. 184d1562996862712411833171afbb7dcae6fddd1bcPeng Xu */ 185d1562996862712411833171afbb7dcae6fddd1bcPeng Xu SENSOR_FLAG_DYNAMIC_SENSOR = DYNAMIC_SENSOR_MASK, 186d1562996862712411833171afbb7dcae6fddd1bcPeng Xu 187d1562996862712411833171afbb7dcae6fddd1bcPeng Xu /* 188d1562996862712411833171afbb7dcae6fddd1bcPeng Xu * Set this flag if sensor additional information is supported. See SENSOR_TYPE_ADDITIONAL_INFO 189d1562996862712411833171afbb7dcae6fddd1bcPeng Xu * and additional_info_event_t for details. 190d1562996862712411833171afbb7dcae6fddd1bcPeng Xu */ 191d1562996862712411833171afbb7dcae6fddd1bcPeng Xu SENSOR_FLAG_ADDITIONAL_INFO = ADDITIONAL_INFO_MASK 192d1562996862712411833171afbb7dcae6fddd1bcPeng Xu}; 193c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella 194c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella 195c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella/* 196a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * Sensor type 197a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 198a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * Each sensor has a type which defines what this sensor measures and how 1998db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * measures are reported. See the Base sensors and Composite sensors lists 2008db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * for complete descriptions: 2018db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * http://source.android.com/devices/sensors/base_triggers.html 2028db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * http://source.android.com/devices/sensors/composite_sensors.html 2031599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * 2041599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * Device manufacturers (OEMs) can define their own sensor types, for 2051599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * their private use by applications or services provided by them. Such 2061599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * sensor types are specific to an OEM and can't be exposed in the SDK. 2071599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * These types must start at SENSOR_TYPE_DEVICE_PRIVATE_BASE. 208477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * 209477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * All sensors defined outside of the device private range must correspond to 210477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * a type defined in this file, and must satisfy the characteristics listed in 211477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * the description of the sensor type. 212477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * 213477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * Starting with version SENSORS_DEVICE_API_VERSION_1_2, each sensor also 214477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * has a stringType. 215477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * - StringType of sensors inside of the device private range MUST be prefixed 216477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * by the sensor provider's or OEM reverse domain name. In particular, they 217477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * cannot use the "android.sensor" prefix. 218477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * - StringType of sensors outside of the device private range MUST correspond 219477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * to the one defined in this file (starting with "android.sensor"). 220477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * For example, accelerometers must have 221477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * type=SENSOR_TYPE_ACCELEROMETER and 222477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * stringType=SENSOR_STRING_TYPE_ACCELEROMETER 223477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * 224477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * When android introduces a new sensor type that can replace an OEM-defined 225477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * sensor type, the OEM must use the official sensor type and stringType on 226477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * versions of the HAL that support this new official sensor type. 227477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * 228477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * Example (made up): Suppose Google's Glass team wants to surface a sensor 229477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * detecting that Glass is on a head. 230477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * - Such a sensor is not officially supported in android KitKat 231477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * - Glass devices launching on KitKat can implement a sensor with 232477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * type = 0x10001 and stringType = "com.google.glass.onheaddetector" 233477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * - In L android release, if android decides to define 234477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * SENSOR_TYPE_ON_HEAD_DETECTOR and STRING_SENSOR_TYPE_ON_HEAD_DETECTOR, 235477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * those types should replace the Glass-team-specific types in all future 236477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * launches. 237772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * - When launching Glass on the L release, Google should now use the official 238477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * type (SENSOR_TYPE_ON_HEAD_DETECTOR) and stringType. 239477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * - This way, all applications can now use this sensor. 2401599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian */ 2411599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian 2421599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian/* 2431599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * Base for device manufacturers private sensor types. 2441599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian * These sensor types can't be exposed in the SDK. 245a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 2461599ec675579eaf8f8e7f79fc03648b9d838f475Mathias Agopian#define SENSOR_TYPE_DEVICE_PRIVATE_BASE 0x10000 247a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 248a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 24916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * SENSOR_TYPE_META_DATA 250c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: n/a 25116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * wake-up sensor: n/a 25216671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 25316671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * NO SENSOR OF THAT TYPE MUST BE RETURNED (*get_sensors_list)() 25416671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 25516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * SENSOR_TYPE_META_DATA is a special token used to populate the 25616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * sensors_meta_data_event structure. It doesn't correspond to a physical 25716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * sensor. sensors_meta_data_event are special, they exist only inside 25816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * the HAL and are generated spontaneously, as opposed to be related to 25916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * a physical sensor. 26016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 261af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian * sensors_meta_data_event_t.version must be META_DATA_VERSION 262af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian * sensors_meta_data_event_t.sensor must be 0 263af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian * sensors_meta_data_event_t.type must be SENSOR_TYPE_META_DATA 264af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian * sensors_meta_data_event_t.reserved must be 0 265af32a8d59463ddf67154cb432da232cfb185e6bcMathias Agopian * sensors_meta_data_event_t.timestamp must be 0 26616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 26716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * The payload is a meta_data_event_t, where: 26816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * meta_data_event_t.what can take the following values: 26916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 27016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * META_DATA_FLUSH_COMPLETE 27116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * This event indicates that a previous (*flush)() call has completed for the sensor 27216671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * handle specified in meta_data_event_t.sensor. 27316671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * see (*flush)() for more details 27416671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 27516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * All other values for meta_data_event_t.what are reserved and 27616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * must not be used. 27716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * 27816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian */ 279477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_TYPE_META_DATA (0) 28016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 28156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 2829057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Wake up sensors. 2839057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Each sensor may have either or both a wake-up and a non-wake variant. 2849057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * When registered in batch mode, wake-up sensors will wake up the AP when 2859057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * their FIFOs are full or when the batch timeout expires. A separate FIFO has 2869057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * to be maintained for wake up sensors and non wake up sensors. The non wake-up 2879057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * sensors need to overwrite their FIFOs when they are full till the AP wakes up 2889057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * and the wake-up sensors will wake-up the AP when their FIFOs are full or when 2899057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * the batch timeout expires without losing events. Wake-up and non wake-up variants 2909057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * of each sensor can be activated at different rates independently of each other. 2919057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 2929057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Note: Proximity sensor and significant motion sensor which were defined in previous 2939057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * releases are also wake-up sensors and should be treated as such. Wake-up one-shot 2949057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * sensors like SIGNIFICANT_MOTION cannot be batched, hence the text about batch above 2959057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * doesn't apply to them. See the definitions of SENSOR_TYPE_PROXIMITY and 2969057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * SENSOR_TYPE_SIGNIFICANT_MOTION for more info. 2979057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 2989057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Set SENSOR_FLAG_WAKE_UP flag for all wake-up sensors. 2999057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 3009057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * For example, A device can have two sensors both of SENSOR_TYPE_ACCELEROMETER and 3019057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * one of them can be a wake_up sensor (with SENSOR_FLAG_WAKE_UP flag set) and the other 3029057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * can be a regular non wake_up sensor. Both of these sensors must be activated/deactivated 3039057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * independently of the other. 3049057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella */ 3059057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella 3069057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella/* 30756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * SENSOR_TYPE_ACCELEROMETER 308c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 30956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * 31056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * All values are in SI units (m/s^2) and measure the acceleration of the 31156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * device minus the force of gravity. 31256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * 3139057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 3149057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 31556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 31656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_ACCELEROMETER (1) 317477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_ACCELEROMETER "android.sensor.accelerometer" 31856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 31956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 32056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * SENSOR_TYPE_GEOMAGNETIC_FIELD 321c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 322f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 32356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * All values are in micro-Tesla (uT) and measure the geomagnetic 32456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * field in the X, Y and Z axis. 32556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * 3269057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 3279057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 32856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 32956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_GEOMAGNETIC_FIELD (2) 33056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_MAGNETIC_FIELD SENSOR_TYPE_GEOMAGNETIC_FIELD 331477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_MAGNETIC_FIELD "android.sensor.magnetic_field" 33256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 33356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 334e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_ORIENTATION 335c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 3368db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * 337f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * All values are angles in degrees. 3388db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * 33966a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * Orientation sensors return sensor events for all 3 axes at a constant 34066a4095ca0ecfe89b10abe5402617450f57759cdMathias Agopian * rate defined by setDelay(). 3419057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 3429057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 3439057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 34456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 34556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_ORIENTATION (3) 346477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_ORIENTATION "android.sensor.orientation" 34756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 34856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 349e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_GYROSCOPE 350c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 351e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * 352b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell * All values are in radians/second and measure the rate of rotation 3538db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * around the X, Y and Z axis. 3549057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 3559057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 3569057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 35756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 35856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_GYROSCOPE (4) 359477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_GYROSCOPE "android.sensor.gyroscope" 36056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 36156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 362e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_LIGHT 363c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: on-change 364a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * 365a2414316075dde4ca5c1393c662f224b36dd3fdcMike Lockwood * The light sensor value is returned in SI lux units. 3669057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 3679057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Both wake-up and non wake-up versions are useful. 36856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 36956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_LIGHT (5) 370477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_LIGHT "android.sensor.light" 37156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 37256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 373e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_PRESSURE 374c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 3751832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian * 376e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * The pressure sensor return the athmospheric pressure in hectopascal (hPa) 3779057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 3789057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 3799057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 38056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 38156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_PRESSURE (6) 382477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_PRESSURE "android.sensor.pressure" 38356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 38456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* SENSOR_TYPE_TEMPERATURE is deprecated in the HAL */ 38556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_TEMPERATURE (7) 386477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_TEMPERATURE "android.sensor.temperature" 38756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 38856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 38956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * SENSOR_TYPE_PROXIMITY 390c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: on-change 3911832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian * 3929057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * The proximity sensor which turns the screen off and back on during calls is the 3939057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * wake-up proximity sensor. Implement wake-up proximity sensor before implementing 3949057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * a non wake-up proximity sensor. For the wake-up proximity sensor set the flag 3959057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * SENSOR_FLAG_WAKE_UP. 3968db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * The value corresponds to the distance to the nearest object in centimeters. 39756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 39856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_PROXIMITY (8) 399477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_PROXIMITY "android.sensor.proximity" 40056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 40156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 402e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_GRAVITY 403c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 4043120b58768ff6aad5ad169b9c18f962ef6abb3c5Makarand Karvekar * 405e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * A gravity output indicates the direction of and magnitude of gravity in 4068db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * the devices's coordinates. 4079057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4089057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 4099057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 41056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 41156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_GRAVITY (9) 412477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_GRAVITY "android.sensor.gravity" 41356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 41456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 415e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_LINEAR_ACCELERATION 416c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 4173120b58768ff6aad5ad169b9c18f962ef6abb3c5Makarand Karvekar * 418e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * Indicates the linear acceleration of the device in device coordinates, 419e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * not including gravity. 4209057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4219057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 4229057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 42356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 42456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_LINEAR_ACCELERATION (10) 425477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_LINEAR_ACCELERATION "android.sensor.linear_acceleration" 42656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 42756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 42856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 429e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_ROTATION_VECTOR 430c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 43142b743c85597e982ff1122b972862396f131db34Mathias Agopian * 43228f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand * The rotation vector symbolizes the orientation of the device relative to the 4338db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * East-North-Up coordinates frame. 4349057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4359057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 4369057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 43756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 43856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_ROTATION_VECTOR (11) 439477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_ROTATION_VECTOR "android.sensor.rotation_vector" 44056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 44156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 442e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_RELATIVE_HUMIDITY 443c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: on-change 444d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch * 445d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch * A relative humidity sensor measures relative ambient air humidity and 446d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch * returns a value in percent. 4479057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4489057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Both wake-up and non wake-up versions are useful. 44956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 45056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_RELATIVE_HUMIDITY (12) 451477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_RELATIVE_HUMIDITY "android.sensor.relative_humidity" 45256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 45356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 454e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * SENSOR_TYPE_AMBIENT_TEMPERATURE 455c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: on-change 45654f9dd032dfbd336ca90e3b44047373f0297c3a5Mathias Agopian * 45754f9dd032dfbd336ca90e3b44047373f0297c3a5Mathias Agopian * The ambient (room) temperature in degree Celsius. 4589057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4599057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Both wake-up and non wake-up versions are useful. 46056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 46156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_AMBIENT_TEMPERATURE (13) 462477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_AMBIENT_TEMPERATURE "android.sensor.ambient_temperature" 46356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 46456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 46556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED 466c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 46756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * 468ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * Similar to SENSOR_TYPE_MAGNETIC_FIELD, but the hard iron calibration is 469ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * reported separately instead of being included in the measurement. 4709057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4719057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 4729057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 473f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 47456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED (14) 475477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_MAGNETIC_FIELD_UNCALIBRATED "android.sensor.magnetic_field_uncalibrated" 476b01a043df41e987321f6c01930ac306befb1d3dcKevin Powell 47756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 47856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * SENSOR_TYPE_GAME_ROTATION_VECTOR 479c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 48056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * 481ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * Similar to SENSOR_TYPE_ROTATION_VECTOR, but not using the geomagnetic 4828db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * field. 4839057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4849057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 4859057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 48656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 48756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_GAME_ROTATION_VECTOR (15) 488477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_GAME_ROTATION_VECTOR "android.sensor.game_rotation_vector" 48956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 49056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/* 49156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * SENSOR_TYPE_GYROSCOPE_UNCALIBRATED 492c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 49356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * 49456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * All values are in radians/second and measure the rate of rotation 4958db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * around the X, Y and Z axis. 4969057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 4979057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 4989057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 49956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 50056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_TYPE_GYROSCOPE_UNCALIBRATED (16) 501477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_GYROSCOPE_UNCALIBRATED "android.sensor.gyroscope_uncalibrated" 50256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 503a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 504a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * SENSOR_TYPE_SIGNIFICANT_MOTION 505c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: one-shot 506a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 507a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * A sensor of this type triggers an event each time significant motion 508a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * is detected and automatically disables itself. 5099057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * For Significant Motion sensor to be useful, it must be defined as a 5109057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * wake-up sensor. (set SENSOR_FLAG_WAKE_UP). Implement the wake-up significant motion 5119057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * sensor. A non wake-up version is not useful. 512a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * The only allowed value to return is 1.0. 513a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 514a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 515a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian#define SENSOR_TYPE_SIGNIFICANT_MOTION (17) 516477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_SIGNIFICANT_MOTION "android.sensor.significant_motion" 517a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 518a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 5192f276f555064a77fa449a3ac21aa06ea3c1b45caMathias Agopian * SENSOR_TYPE_STEP_DETECTOR 520c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: special 521a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 522a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * A sensor of this type triggers an event each time a step is taken 5238db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * by the user. The only allowed value to return is 1.0 and an event 5248db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * is generated for each step. 5259057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 5269057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Both wake-up and non wake-up versions are useful. 527a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 528a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 5292f276f555064a77fa449a3ac21aa06ea3c1b45caMathias Agopian#define SENSOR_TYPE_STEP_DETECTOR (18) 530477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_STEP_DETECTOR "android.sensor.step_detector" 531a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 532a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 533a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 534a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * SENSOR_TYPE_STEP_COUNTER 535c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: on-change 536a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 537a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * A sensor of this type returns the number of steps taken by the user since 5381144bea332fb24789712062bb35fe762f2f17505Mathias Agopian * the last reboot while activated. The value is returned as a uint64_t and is 539f770b7a9b9315fa924de224af188c314a474eb10Etienne Le Grand * reset to zero only on a system / android reboot. 5409057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 5419057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 5429057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 543a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 544a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 545a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian#define SENSOR_TYPE_STEP_COUNTER (19) 546477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_STEP_COUNTER "android.sensor.step_counter" 547a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 548ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand/* 549ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR 550c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: continuous 551ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * 552ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * Similar to SENSOR_TYPE_ROTATION_VECTOR, but using a magnetometer instead 553ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * of using a gyroscope. 5549057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 5559057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement the non-wake-up version of this sensor and implement the wake-up 5569057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * version if the system possesses a wake up fifo. 557ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand */ 558477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR (20) 559477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_GEOMAGNETIC_ROTATION_VECTOR "android.sensor.geomagnetic_rotation_vector" 560477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella 561477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella/* 562477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * SENSOR_TYPE_HEART_RATE 563c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: on-change 564477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * 5657b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * A sensor of this type returns the current heart rate. 5667b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * The events contain the current heart rate in beats per minute (BPM) and the 5677b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * status of the sensor during the measurement. See heart_rate_event_t for more 5687b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * details. 5697b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * 5707b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * Because this sensor is on-change, events must be generated when and only 5717b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * when heart_rate.bpm or heart_rate.status have changed since the last 57274279e3c23bd62c70d53098be91db85df5a68eceVinod Krishnan * event. In particular, upon the first activation, unless the device is known 57374279e3c23bd62c70d53098be91db85df5a68eceVinod Krishnan * to not be on the body, the status field of the first event must be set to 57474279e3c23bd62c70d53098be91db85df5a68eceVinod Krishnan * SENSOR_STATUS_UNRELIABLE. The event should be generated no faster than every 57574279e3c23bd62c70d53098be91db85df5a68eceVinod Krishnan * period_ns passed to setDelay() or to batch(). 576f0f67e6af93a601546b1d915b147dda5da295a1fGriff Hazen * See the definition of the on-change reporting mode for more information. 5777b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * 578477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * sensor_t.requiredPermission must be set to SENSOR_PERMISSION_BODY_SENSORS. 5799057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 5809057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Both wake-up and non wake-up versions are useful. 581477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella */ 582477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_TYPE_HEART_RATE (21) 583477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella#define SENSOR_STRING_TYPE_HEART_RATE "android.sensor.heart_rate" 584a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 5856242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella/* 586f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * SENSOR_TYPE_WAKE_UP_TILT_DETECTOR 587c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: special (setDelay has no impact) 588f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * 589f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * A sensor of this type generates an event each time a tilt event is detected. A tilt event 590f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * should be generated if the direction of the 2-seconds window average gravity changed by at least 59153017efa7b29990c8e9934a0cea27d62d454d055Etienne Le Grand * 35 degrees since the activation or the last trigger of the sensor. 592426f14df08abeeaa5addbf746d0ce8e81fbba31aEtienne Le Grand * reference_estimated_gravity = average of accelerometer measurements over the first 59353017efa7b29990c8e9934a0cea27d62d454d055Etienne Le Grand * 1 second after activation or the estimated gravity at the last 59453017efa7b29990c8e9934a0cea27d62d454d055Etienne Le Grand * trigger. 595f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * current_estimated_gravity = average of accelerometer measurements over the last 2 seconds. 596426f14df08abeeaa5addbf746d0ce8e81fbba31aEtienne Le Grand * trigger when angle (reference_estimated_gravity, current_estimated_gravity) > 35 degrees 597f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * 598f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * Large accelerations without a change in phone orientation should not trigger a tilt event. 599f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * For example, a sharp turn or strong acceleration while driving a car should not trigger a tilt 600f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * event, even though the angle of the average acceleration might vary by more than 35 degrees. 601f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * 602f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * Typically, this sensor is implemented with the help of only an accelerometer. Other sensors can 603f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * be used as well if they do not increase the power consumption significantly. This is a low power 604f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * sensor that should allow the AP to go into suspend mode. Do not emulate this sensor in the HAL. 605f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * Like other wake up sensors, the driver is expected to a hold a wake_lock with a timeout of 200 ms 606f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella * while reporting this event. The only allowed return value is 1.0. 6079057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 6089057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement only the wake-up version of this sensor. 609f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella */ 6109057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella#define SENSOR_TYPE_TILT_DETECTOR (22) 6119057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella#define SENSOR_STRING_TYPE_TILT_DETECTOR "android.sensor.tilt_detector" 612f895c6824f02ae5f4e7ca9b896bdd53f515ca12dAravind Akella 613ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand/* 614ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * SENSOR_TYPE_WAKE_GESTURE 615c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * reporting-mode: one-shot 616ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * 617ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * A sensor enabling waking up the device based on a device specific motion. 618ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * 619ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * When this sensor triggers, the device behaves as if the power button was 620ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * pressed, turning the screen on. This behavior (turning on the screen when 621ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * this sensor triggers) might be deactivated by the user in the device 622ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * settings. Changes in settings do not impact the behavior of the sensor: 623ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * only whether the framework turns the screen on when it triggers. 624ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * 625ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * The actual gesture to be detected is not specified, and can be chosen by 626ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * the manufacturer of the device. 627ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * This sensor must be low power, as it is likely to be activated 24/7. 628ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand * The only allowed value to return is 1.0. 6299057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 6309057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement only the wake-up version of this sensor. 631ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand */ 6329057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella#define SENSOR_TYPE_WAKE_GESTURE (23) 633ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand#define SENSOR_STRING_TYPE_WAKE_GESTURE "android.sensor.wake_gesture" 634ba12312fe1731c627c9acbffdebbd0e16d50d231Etienne Le Grand 6358df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown/* 6368df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * SENSOR_TYPE_GLANCE_GESTURE 6378df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * reporting-mode: one-shot 6388df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * 6398df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * A sensor enabling briefly turning the screen on to enable the user to 6408df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * glance content on screen based on a specific motion. The device should 6418df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * turn the screen off after a few moments. 6428df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * 6438df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * When this sensor triggers, the device turns the screen on momentarily 6448df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * to allow the user to glance notifications or other content while the 6458df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * device remains locked in a non-interactive state (dozing). This behavior 6468df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * (briefly turning on the screen when this sensor triggers) might be deactivated 6478df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * by the user in the device settings. Changes in settings do not impact the 6488df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * behavior of the sensor: only whether the framework briefly turns the screen on 6498df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * when it triggers. 6508df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * 6518df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * The actual gesture to be detected is not specified, and can be chosen by 6528df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * the manufacturer of the device. 6538df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * This sensor must be low power, as it is likely to be activated 24/7. 6548df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown * The only allowed value to return is 1.0. 6559057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 6569057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement only the wake-up version of this sensor. 6578df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown */ 6589057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella#define SENSOR_TYPE_GLANCE_GESTURE (24) 6598df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown#define SENSOR_STRING_TYPE_GLANCE_GESTURE "android.sensor.glance_gesture" 6608df2feb00d3510c16d98a0675a7df361d3851728Jeff Brown 66156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/** 662952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella * SENSOR_TYPE_PICK_UP_GESTURE 663952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella * reporting-mode: one-shot 664952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella * 665952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella * A sensor of this type triggers when the device is picked up regardless of wherever is was 666952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella * before (desk, pocket, bag). The only allowed return value is 1.0. 667952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella * This sensor de-activates itself immediately after it triggers. 6689057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * 6699057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella * Implement only the wake-up version of this sensor. 670952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella */ 6719057e128b069c22ff63be1e116f0409f421c31d2Aravind Akella#define SENSOR_TYPE_PICK_UP_GESTURE (25) 672952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella#define SENSOR_STRING_TYPE_PICK_UP_GESTURE "android.sensor.pick_up_gesture" 673952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella 674adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro/* 675adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro * SENSOR_TYPE_WRIST_TILT_GESTURE 676adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro * trigger-mode: special 677adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro * wake-up sensor: yes 678adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro * 679adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro * A sensor of this type triggers an event each time a tilt of the wrist-worn 680adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro * device is detected. 681adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro * 682adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro * This sensor must be low power, as it is likely to be activated 24/7. 683adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro * The only allowed value to return is 1.0. 684adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro * 685adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro * Implement only the wake-up version of this sensor. 686adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro */ 687adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro#define SENSOR_TYPE_WRIST_TILT_GESTURE (26) 688adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro#define SENSOR_STRING_TYPE_WRIST_TILT_GESTURE "android.sensor.wrist_tilt_gesture" 689adbfbb747de9fe1efc21fc83f6591e7d13c81c36Nick Vaccaro 690f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker/* 691f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * SENSOR_TYPE_DEVICE_ORIENTATION 692f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * reporting-mode: on-change 693f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * 694f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * The current orientation of the device. The value should be reported in the 695f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * first element of the 'data' member variable in sensors_event_t. The only 696f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * values that can be reported are (please refer to Android Sensor Coordinate 697f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * System to understand the X and Y axis direction with respect to default 698f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * orientation): 699f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * - 0: device is in default orientation (Y axis is vertical and points up) 700f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * - 1: device is rotated 90 degrees counter-clockwise from default 701f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * orientation (X axis is vertical and points up) 702f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * - 2: device is rotated 180 degrees from default orientation (Y axis is 703f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * vertical and points down) 704f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * - 3: device is rotated 90 degrees clockwise from default orientation (X axis 705f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * is vertical and points down) 706f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * 707f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * Moving the device to an orientation where the Z axis is vertical (either up 708f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * or down) should not cause a new event to be reported. 709f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * 710f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * To improve the user experience of this sensor, it is recommended to implement 711f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * some physical (i.e., rotation angle) and temporal (i.e., delay) hysteresis. 712f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * In other words, minor or transient rotations should not cause a new event to 713f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * be reported. 714f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * 715f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * This sensor should only be implemented with the help of an accelerometer. 716f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * This is a low power sensor that should reduce the number of interrupts of the 717f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * AP. Do not emulate this sensor in the HAL. 718f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * 719f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker * Both wake-up and non wake-up versions are useful. 720f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker */ 721f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker#define SENSOR_TYPE_DEVICE_ORIENTATION (27) 722f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker#define SENSOR_STRING_TYPE_DEVICE_ORIENTATION "android.sensor.device_orientation" 723f8e7ed34bd054cb565671576b25de67fab383594Trevor Bunker 724ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi/* 725ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * SENSOR_TYPE_POSE_6DOF 726ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * trigger-mode: continuous 727ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * 728ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * A sensor of this type returns the pose of the device. 729ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * Pose of the device is defined as the orientation of the device from a 730ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * Earth Centered Earth Fixed frame and the translation from an arbitrary 731ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * point at subscription. 732ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * 733ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * This sensor can be high power. It can use any and all of the following 734ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * . Accelerometer 735ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * . Gyroscope 736ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * . Camera 737ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * . Depth Camera 738ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi * 739ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi */ 740ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi#define SENSOR_TYPE_POSE_6DOF (28) 741ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi#define SENSOR_STRING_TYPE_POSE_6DOF "android.sensor.pose_6dof" 742ed021eae5cc4ddb962ff7ee0eb875645671aa950Ashutosh Joshi 743cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi/* 744cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * SENSOR_TYPE_STATIONARY_DETECT 745cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * trigger mode: one shot 746cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * 747cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * A sensor of this type returns an event if the device is still/stationary for 748cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * a while. The period of time to monitor for statinarity should be greater than 749cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * 5 seconds, and less than 10 seconds. 750cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * 751cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * Stationarity here refers to absolute stationarity. eg: device on desk. 752cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * 753cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * The only allowed value to return is 1.0. 754cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi */ 755cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi#define SENSOR_TYPE_STATIONARY_DETECT (29) 756cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi#define SENSOR_STRING_TYPE_STATIONARY_DETECT "android.sensor.stationary_detect" 757cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi 758cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi/* 759cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * SENSOR_TYPE_MOTION_DETECT 760cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * trigger mode: one shot 761cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * 762cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * A sensor of this type returns an event if the device is not still for 763cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * a while. The period of time to monitor for statinarity should be greater than 764cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * 5 seconds, and less than 10 seconds. 765cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * 766cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * Motion here refers to any mechanism in which the device is causes to be 767cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * moved in its inertial frame. eg: Pickin up the device and walking with it 768cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * to a nearby room may trigger motion wherewas keeping the device on a table 769cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * on a smooth train moving at constant velocity may not trigger motion. 770cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * 771cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * The only allowed value to return is 1.0. 772cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi */ 773cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi#define SENSOR_TYPE_MOTION_DETECT (30) 774cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi#define SENSOR_STRING_TYPE_MOTION_DETECT "android.sensor.motion_detect" 775cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi 776cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi/* 777cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * SENSOR_TYPE_HEART_BEAT 778cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * trigger mode: continuous 779cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * 780cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * A sensor of this type returns an event everytime a hear beat peak is 781cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * detected. 782cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * 783cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * Peak here ideally corresponds to the positive peak in the QRS complex of 784e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * and ECG signal. 785cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * 786cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * The sensor is not expected to be optimized for latency. As a guide, a 787cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * latency of up to 10 seconds is acceptable. However the timestamp attached 788cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * to the event should be accurate and should correspond to the time the peak 789cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * occured. 790cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * 791cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * The sensor event contains a parameter for the confidence in the detection 792cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * of the peak where 0.0 represent no information at all, and 1.0 represents 793cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi * certainty. 794cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi */ 795cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi#define SENSOR_TYPE_HEART_BEAT (31) 796cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi#define SENSOR_STRING_TYPE_HEART_BEAT "android.sensor.heart_beat" 797cb96331ac31494a77394b3b72acf2fb22a7fcf4fAshutosh Joshi 798952471eb99a0bbf6f61873d18b0f3b92e4bd3492Aravind Akella/** 799e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * SENSOR_TYPE_DYNAMIC_SENSOR_META 800e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * trigger-mode: special 801e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * 802e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * A sensor event of this type is received when a dynamic sensor is added to or removed from the 803e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * system. At most one sensor of this type can be present in one sensor HAL implementation and 804e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * presence of a sensor of this type in sensor HAL implementation indicates that this sensor HAL 805e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * supports dynamic sensor feature. Operations, such as batch, activate and setDelay, to this 806e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * special purpose sensor should be treated as no-op and return successful. 807e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * 808e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * A dynamic sensor connection indicates connection of a physical device or instantiation of a 809e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * virtual sensor backed by algorithm; and a dynamic sensor disconnection indicates the the 810e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * opposite. A sensor event of SENSOR_TYPE_DYNAMIC_SENSOR_META type should be delivered regardless 811e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * of the activation status of the sensor in the event of dynamic sensor connection and 812e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * disconnection. In the sensor event, besides the common data entries, "dynamic_sensor_meta", which 813e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * includes fields for connection status, handle of the sensor involved, pointer to sensor_t 814e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * structure and a uuid field, should be populated. 815e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * 816e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * At a dynamic sensor connection event, fields of sensor_t structure referenced by a pointer in 817e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * dynamic_sensor_meta should be filled as if it was regular sensors. Sensor HAL is responsible for 818e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * recovery of memory if the corresponding data is dynamicially allocated. However, the the pointer 819e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * must be valid until the first activate call to the sensor reported in this connection event. At a 820e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * dynamic sensor disconnection, the sensor_t pointer should be NULL. 821e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * 822e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * The sensor handle assigned to dynamic sensors should never be the same as that of any regular 823e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * static sensors, and should be unique until next boot. In another word, if a handle h is used for 824e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * a dynamic sensor A, that same number cannot be used for the same dynamic sensor A or another 825e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * dynamic sensor B even after disconnection of A until reboot. 826e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * 827e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * The UUID field will be used for identifying the sensor in addition to name, vendor and version 828e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * and type. For physical sensors of the same model, all sensors will have the same values in 829e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * sensor_t, but the UUID should be unique and persistent for each individual unit. An all zero UUID 830e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * indicates it is not possible to differentiate individual sensor unit. 831e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * 832e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu */ 833e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu#define SENSOR_TYPE_DYNAMIC_SENSOR_META (32) 834e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu#define SENSOR_STRING_TYPE_DYNAMIC_SENSOR_META "android.sensor.dynamic_sensor_meta" 835e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu 836e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu/** 8370743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * SENSOR_TYPE_ADDITIONAL_INFO 8380743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * reporting-mode: N/A 8390743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * 8400743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * This sensor type is for delivering additional sensor information aside from sensor event data. 8410743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * Additional information may include sensor front-end group delay, internal calibration parameters, 8420743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * noise level metrics, device internal temperature, etc. 8430743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * 8440743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * This type will never bind to a sensor. In other words, no sensor in the sensor list should be of 8450743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * the type SENSOR_TYPE_ADDITIONAL_INFO. If a sensor HAL supports sensor additional information 8460743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * feature, it reports sensor_event_t with "sensor" field set to handle of the reporting sensor and 8470743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * "type" field set to SENSOR_TYPE_ADDITIONAL_INFO. Delivery of additional information events is 8480743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * triggered under two conditions: an enable activate() call or a flush() call to the corresponding 8490743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * sensor. 8500743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * 8510743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * A single additional information report consists of multiple frames. Sequences of these frames are 8520743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * ordered using timestamps, which means the timestamps of sequential frames have to be at least 1 8530743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * nanosecond apart from each other. Each frame is a sensor_event_t delivered through the HAL 8540743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * interface, with related data stored in the "additional_info" field, which is of type 8550743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * additional_info_event_t. The "type" field of additional_info_event_t denotes the nature of the 8560743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * payload data (see additional_info_type_t). The "serial" field is used to keep the sequence of 8570743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * payload data that spans multiple frames. The first frame of the entire report is always of type 8580743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * AINFO_BEGIN, and the last frame is always AINFO_END. 8590743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * 8600743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * All additional information frames have to be delivered after flush complete event if flush() was 8610743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * triggering the report. 8620743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu */ 8630743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu#define SENSOR_TYPE_ADDITIONAL_INFO (33) 8640743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu#define SENSOR_STRING_TYPE_ADDITIONAL_INFO "android.sensor.additional_info" 8650743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu 8660743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu/** 86756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * Values returned by the accelerometer in various locations in the universe. 86856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * all values are in SI units (m/s^2) 86956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 87056f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define GRAVITY_SUN (275.0f) 87156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define GRAVITY_EARTH (9.80665f) 87256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 87356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/** Maximum magnetic field on Earth's surface */ 87456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define MAGNETIC_FIELD_EARTH_MAX (60.0f) 87556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 87656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/** Minimum magnetic field on Earth's surface */ 87756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define MAGNETIC_FIELD_EARTH_MIN (30.0f) 87856f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 87956f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/** 8807b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * Possible values of the status field of sensor events. 88156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 8827b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand#define SENSOR_STATUS_NO_CONTACT -1 88356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_STATUS_UNRELIABLE 0 88456f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_STATUS_ACCURACY_LOW 1 88556f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_STATUS_ACCURACY_MEDIUM 2 88656f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian#define SENSOR_STATUS_ACCURACY_HIGH 3 88756f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian 888e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu 889e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xustruct sensor_t; 890e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu 89156f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian/** 89256f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian * sensor event data 89356f66ccfb4915b03da4b470916bb2c59bed97216Mathias Agopian */ 894f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projecttypedef struct { 895f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project union { 896f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float v[3]; 897f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct { 898f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float x; 899f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float y; 900f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float z; 901f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project }; 902f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct { 903f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float azimuth; 904f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float pitch; 905f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float roll; 906f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project }; 907f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project }; 908f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int8_t status; 909f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint8_t reserved[3]; 910f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project} sensors_vec_t; 911f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 912f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 913ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand * uncalibrated gyroscope and magnetometer event data 914ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand */ 915ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grandtypedef struct { 91628f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand union { 91728f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float uncalib[3]; 91828f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand struct { 91928f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float x_uncalib; 92028f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float y_uncalib; 92128f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float z_uncalib; 92228f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand }; 92328f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand }; 92428f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand union { 92528f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float bias[3]; 92628f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand struct { 92728f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float x_bias; 92828f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float y_bias; 92928f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand float z_bias; 93028f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand }; 93128f04113f56a05560fc6074579ab5a4fcd424a0fEtienne Le Grand }; 932ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand} uncalibrated_event_t; 933ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand 934772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand/** 935772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * Meta data event data 936772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand */ 93716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopiantypedef struct meta_data_event { 93816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian int32_t what; 93916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian int32_t sensor; 94016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian} meta_data_event_t; 94116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 942ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand/** 943e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * Dynamic sensor meta event. See the description of SENSOR_TYPE_DYNAMIC_SENSOR_META type for 944e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu * details. 945e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu */ 946e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xutypedef struct dynamic_sensor_meta_event { 947e20707ad87c6c0e049596680e8185343b50f6feePeng Xu int32_t connected; 948e20707ad87c6c0e049596680e8185343b50f6feePeng Xu int32_t handle; 949e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu const struct sensor_t * sensor; // should be NULL if connected == false 95069b5dba69cfbf8f101f78f0a0f3ff60868fd5c25Peng Xu uint8_t uuid[16]; // UUID of a dynamic sensor (using RFC 4122 byte order) 95169b5dba69cfbf8f101f78f0a0f3ff60868fd5c25Peng Xu // For UUID 12345678-90AB-CDEF-1122-334455667788 the uuid field 95269b5dba69cfbf8f101f78f0a0f3ff60868fd5c25Peng Xu // should be initialized as: 95369b5dba69cfbf8f101f78f0a0f3ff60868fd5c25Peng Xu // {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x11, ...} 954e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu} dynamic_sensor_meta_event_t; 955e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu 956e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu/** 9577b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand * Heart rate event data 9587b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand */ 9597b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grandtypedef struct { 9607b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand // Heart rate in beats per minute. 9617b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand // Set to 0 when status is SENSOR_STATUS_UNRELIABLE or ..._NO_CONTACT 9627b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand float bpm; 9637b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand // Status of the sensor for this reading. Set to one SENSOR_STATUS_... 964772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand // Note that this value should only be set for sensors that explicitly define 965772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand // the meaning of this field. This field is not piped through the framework 966772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand // for other sensors. 9677b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand int8_t status; 9687b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand} heart_rate_event_t; 9697b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand 9700743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xutypedef struct { 9710743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu int32_t type; // type of payload data, see additional_info_type_t 9720743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu int32_t serial; // sequence number of this frame for this type 9730743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu union { 9740743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // for each frame, a single data type, either int32_t or float, should be used. 9750743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu int32_t data_int32[14]; 9760743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu float data_float[14]; 9770743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu }; 9780743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu} additional_info_event_t; 9790743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu 9800743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xutypedef enum additional_info_type { 9810743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // 9820743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_BEGIN = 0x0, // Marks the beginning of additional information frames 9830743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_END = 0x1, // Marks the end of additional information frames 9840743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // Basic information 9850743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_UNTRACKED_DELAY = 0x10000, // Estimation of the delay that is not tracked by sensor 9860743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // timestamps. This includes delay introduced by 9870743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // sensor front-end filtering, data transport, etc. 9880743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // float[2]: delay in seconds 9890743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // standard deviation of estimated value 9900743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // 9910743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_INTERNAL_TEMPERATURE, // float: Celsius temperature. 9920743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // 9930743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_VEC3_CALIBRATION, // First three rows of a homogeneous matrix, which 9940743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // represents calibration to a three-element vector 9950743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // raw sensor reading. 9960743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // float[12]: 3x4 matrix in row major order 9970743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // 9980743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_SENSOR_PLACEMENT, // Location and orientation of sensor element in the 9990743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // device frame: origin is the geometric center of the 10000743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // mobile device screen surface; the axis definition 10010743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // corresponds to Android sensor definitions. 10020743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // float[12]: 3x4 matrix in row major order 10030743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // 10040743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_SAMPLING, // float[2]: raw sample period in seconds, 10050743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // standard deviation of sampling period 10060743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu 10070743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // Sampling channel modeling information 10080743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_CHANNEL_NOISE = 0x20000, // int32_t: noise type 10090743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // float[n]: parameters 10100743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // 10110743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_CHANNEL_SAMPLER, // float[3]: sample period 10120743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // standard deviation of sample period, 10130743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // quantization unit 10140743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // 10150743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_CHANNEL_FILTER, // Represents a filter: 10160743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // \sum_j a_j y[n-j] == \sum_i b_i x[n-i] 10170743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // 10180743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // int32_t[3]: number of feedforward coefficients, M, 10190743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // number of feedback coefficients, N, for 10200743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // FIR filter, N=1. 10210743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // bit mask that represents which element to 10220743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // which the filter is applied, bit 0 == 1 10230743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // means this filter applies to vector 10240743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // element 0. 10250743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // float[M+N]: filter coefficients (b0, b1, ..., BM-1), 10260743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // then (a0, a1, ..., aN-1), a0 is always 1. 10270743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // Multiple frames may be needed for higher 10280743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // number of taps. 10290743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // 10300743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_CHANNEL_LINEAR_TRANSFORM, // int32_t[2]: size in (row, column) ... 1st frame 10310743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // float[n]: matrix element values in row major order. 10320743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // 10330743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_CHANNEL_NONLINEAR_MAP, // int32_t[2]: extrapolate method 10340743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // interpolate method 10350743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // float[n]: mapping key points in pairs, (in, out)... 10360743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // (may be used to model saturation) 10370743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // 10380743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_CHANNEL_RESAMPLER, // int32_t: resample method (0-th order, 1st order...) 10390743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // float[1]: resample ratio (upsampling if < 1.0; 10400743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // downsampling if > 1.0). 10410743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // 10420743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu 10430743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // Custom information 10440743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_CUSTOM_START = 0x10000000, // 10450743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu // Debugging 10460743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu AINFO_DEBUGGING_START = 0x40000000, // 10470743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu} additional_info_type_t; 10480743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu 10497b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand/** 1050f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Union of the various types of sensor data 1051f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * that can be returned. 1052f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 1053cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopiantypedef struct sensors_event_t { 1054cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* must be sizeof(struct sensors_event_t) */ 1055cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t version; 1056cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 1057cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* sensor identifier */ 1058cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t sensor; 1059cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 1060cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* sensor type */ 1061cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t type; 1062cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 1063cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* reserved */ 1064cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int32_t reserved0; 1065cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 1066cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian /* time is in nanosecond */ 1067cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian int64_t timestamp; 1068cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 1069cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian union { 107027e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian union { 107127e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian float data[16]; 1072cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 107327e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* acceleration values are in meter per second per second (m/s^2) */ 107427e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian sensors_vec_t acceleration; 1075cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 107627e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* magnetic vector values are in micro-Tesla (uT) */ 107727e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian sensors_vec_t magnetic; 1078cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 107927e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* orientation values are in degrees */ 108027e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian sensors_vec_t orientation; 1081cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 108227e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* gyroscope values are in rad/s */ 108327e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian sensors_vec_t gyro; 10843120b58768ff6aad5ad169b9c18f962ef6abb3c5Makarand Karvekar 108527e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* temperature is in degrees centigrade (Celsius) */ 108627e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian float temperature; 1087cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 108827e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* distance in centimeters */ 108927e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian float distance; 1090cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 109127e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* light in SI lux units */ 109227e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian float light; 10931832f55760fff86d00b5d808b3da8f1e55a889e5Mathias Agopian 109427e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* pressure in hectopascal (hPa) */ 109527e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian float pressure; 1096d2ed15a6b81a9a2fd95c1a565f72796869545115Urs Fleisch 109727e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* relative humidity in percent */ 109827e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian float relative_humidity; 1099a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 110027e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* uncalibrated gyroscope values are in rad/s */ 110127e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian uncalibrated_event_t uncalibrated_gyro; 1102ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand 110327e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* uncalibrated magnetometer values are in micro-Teslas */ 110427e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian uncalibrated_event_t uncalibrated_magnetic; 110516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 11067b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand /* heart rate data containing value in bpm and status */ 11077b36158da7d87d4b87be24c13c7607f6460bc3bbEtienne Le Grand heart_rate_event_t heart_rate; 1108477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella 110916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian /* this is a special event. see SENSOR_TYPE_META_DATA above. 111016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * sensors_meta_data_event_t events are all reported with a type of 111116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * SENSOR_TYPE_META_DATA. The handle is ignored and must be zero. 111216671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian */ 111316671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian meta_data_event_t meta_data; 1114e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu 1115e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu /* dynamic sensor meta event. See SENSOR_TYPE_DYNAMIC_SENSOR_META type for details */ 1116e641ba987af43b8b63a9da40741a6d4d37c5ea60Peng Xu dynamic_sensor_meta_event_t dynamic_sensor_meta; 11170743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu 11180743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu /* 11190743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * special additional sensor information frame, see 11200743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * SENSOR_TYPE_ADDITIONAL_INFO for details. 11210743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu */ 11220743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu additional_info_event_t additional_info; 112327e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian }; 112427e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian 112527e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian union { 112627e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian uint64_t data[8]; 1127ca8581433b778c60b074839baa6c3f2233c09614Etienne Le Grand 112827e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian /* step-counter */ 112927e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian uint64_t step_counter; 113027e16688ec7496e72304d093a24d9c1d4fd37be5Mathias Agopian } u64; 1131cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian }; 11326242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella 11336242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella /* Reserved flags for internal use. Set to zero. */ 11346242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella uint32_t flags; 11356242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella 11366242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella uint32_t reserved1[3]; 1137cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian} sensors_event_t; 1138cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 1139cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 114016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian/* see SENSOR_TYPE_META_DATA */ 114116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopiantypedef sensors_event_t sensors_meta_data_event_t; 114216671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 1143cdefccdba52337df41f577d9ebfcfd67c05708cfMathias Agopian 1144f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 1145f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM 1146f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * and the fields of this data structure must begin with hw_module_t 1147f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * followed by module specific information. 1148f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 1149f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct sensors_module_t { 1150f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct hw_module_t common; 1151f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 1152f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** 1153f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Enumerate all available sensors. The list is returned in "list". 1154f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * @return number of sensors in the list 1155f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 1156f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int (*get_sensors_list)(struct sensors_module_t* module, 1157f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct sensor_t const** list); 11586507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi 11596507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi /** 11606507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi * Place the module in a specific mode. The following modes are defined 11616507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi * 1162050f2e45a042638bc2f6c1a51a805847edd9332fAshutosh Joshi * 0 - Normal operation. Default state of the module. 11630743a5ceeb0a0f9d0c403abe9cbb4bcf7d6f3d87Peng Xu * 1 - Loopback mode. Data is injected for the supported 1164050f2e45a042638bc2f6c1a51a805847edd9332fAshutosh Joshi * sensors by the sensor service in this mode. 1165c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella * @return 0 on success 1166050f2e45a042638bc2f6c1a51a805847edd9332fAshutosh Joshi * -EINVAL if requested mode is not supported 1167c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella * -EPERM if operation is not allowed 11686507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi */ 11696507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi int (*set_operation_mode)(unsigned int mode); 1170f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project}; 1171f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 1172f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct sensor_t { 11731144bea332fb24789712062bb35fe762f2f17505Mathias Agopian 11741144bea332fb24789712062bb35fe762f2f17505Mathias Agopian /* Name of this sensor. 11751144bea332fb24789712062bb35fe762f2f17505Mathias Agopian * All sensors of the same "type" must have a different "name". 11761144bea332fb24789712062bb35fe762f2f17505Mathias Agopian */ 1177f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char* name; 1178a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1179f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* vendor of the hardware part */ 1180f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char* vendor; 1181a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1182e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian /* version of the hardware part + driver. The value of this field 1183e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * must increase when the driver is updated in a way that changes the 1184e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * output of this sensor. This is important for fused sensors when the 1185e9eaf3721dd715901d669df6488b1ecd63b1e634Mathias Agopian * fusion algorithm is updated. 11866242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella */ 1187f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int version; 1188a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1189a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian /* handle that identifies this sensors. This handle is used to reference 1190a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * this sensor throughout the HAL API. 1191f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 1192f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int handle; 1193a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1194f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* this sensor's type. */ 1195f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int type; 1196a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1197a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian /* maximum range of this sensor's value in SI units */ 1198f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float maxRange; 1199a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1200f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* smallest difference between two values reported by this sensor */ 1201f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float resolution; 1202a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1203f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* rough estimate of this sensor's power consumption in mA */ 1204f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project float power; 1205a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1206c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella /* this value depends on the reporting mode: 1207a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 1208a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * continuous: minimum sample period allowed in microseconds 1209a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * on-change : 0 1210a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * one-shot :-1 1211a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * special : 0, unless otherwise noted 1212a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 12131511e20fbbdfe7bf30b9de73f06fc981eb494f09Mathias Agopian int32_t minDelay; 1214a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 121516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian /* number of events reserved for this sensor in the batch mode FIFO. 121616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * If there is a dedicated FIFO for this sensor, then this is the 121716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * size of this FIFO. If the FIFO is shared with other sensors, 121816671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * this is the size reserved for that sensor and it can be zero. 121916671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian */ 122016671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian uint32_t fifoReservedEventCount; 122116671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 122216671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian /* maximum number of events of this sensor that could be batched. 122316671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * This is especially relevant when the FIFO is shared between 122416671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * several sensors; this value is then set to the size of that FIFO. 122516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian */ 122616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian uint32_t fifoMaxEventCount; 122716671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 1228477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella /* type of this sensor as a string. Set to corresponding 1229477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * SENSOR_STRING_TYPE_*. 1230477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * When defining an OEM specific sensor or sensor manufacturer specific 1231477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * sensor, use your reserve domain name as a prefix. 1232477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * ex: com.google.glass.onheaddetector 1233477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * For sensors of known type, the android framework might overwrite this 1234477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * string automatically. 1235477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella */ 1236477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella const char* stringType; 1237477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella 1238477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella /* permission required to see this sensor, register to it and receive data. 1239477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * Set to "" if no permission is required. Some sensor types like the 1240477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * heart rate monitor have a mandatory require_permission. 1241477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * For sensors that always require a specific permission, like the heart 1242477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * rate monitor, the android framework might overwrite this string 1243477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella * automatically. 1244477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella */ 1245477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella const char* requiredPermission; 1246477fbd5c7d99c54456ceebbe3d9efd33ed5e7747Aravind Akella 1247110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella /* This value is defined only for continuous mode and on-change sensors. It is the delay between 1248110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * two sensor events corresponding to the lowest frequency that this sensor supports. When lower 1249110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * frequencies are requested through batch()/setDelay() the events will be generated at this 1250110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * frequency instead. It can be used by the framework or applications to estimate when the batch 1251110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * FIFO may be full. 1252c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * 1253c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * NOTE: 1) period_ns is in nanoseconds where as maxDelay/minDelay are in microseconds. 1254110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * continuous, on-change: maximum sampling period allowed in microseconds. 1255110d2f2713490c8c8ae5ce3d66ac7364eb2002a4Aravind Akella * one-shot, special : 0 1256c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * 2) maxDelay should always fit within a 32 bit signed integer. It is declared as 64 bit 1257c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * on 64 bit architectures only for binary compatibility reasons. 12586242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella * Availability: SENSORS_DEVICE_API_VERSION_1_3 12596242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella */ 12606242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella #ifdef __LP64__ 12616242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella int64_t maxDelay; 12626242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella #else 12636242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella int32_t maxDelay; 12646242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella #endif 12656242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella 1266c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella /* Flags for sensor. See SENSOR_FLAG_* above. Only the least significant 32 bits are used here. 1267c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * It is declared as 64 bit on 64 bit architectures only for binary compatibility reasons. 1268c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * Availability: SENSORS_DEVICE_API_VERSION_1_3 1269c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella */ 12706242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella #ifdef __LP64__ 12716242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella uint64_t flags; 12726242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella #else 12736242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella uint32_t flags; 12746242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella #endif 12756242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella 1276f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /* reserved fields, must be zero */ 12776242f32a22c42c81d8a9a12885c794d85bf3cf63Aravind Akella void* reserved[2]; 1278f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project}; 1279f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 1280f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 1281a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 1282a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * sensors_poll_device_t is used with SENSORS_DEVICE_API_VERSION_0_1 1283a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * and is present for backward binary and source compatibility. 12848db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * See the Sensors HAL interface section for complete descriptions of the 12858db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * following functions: 12868db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * http://source.android.com/devices/sensors/index.html#hal 1287f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 1288b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopianstruct sensors_poll_device_t { 1289b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian struct hw_device_t common; 1290b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian int (*activate)(struct sensors_poll_device_t *dev, 1291772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int sensor_handle, int enabled); 1292a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian int (*setDelay)(struct sensors_poll_device_t *dev, 1293772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int sensor_handle, int64_t sampling_period_ns); 1294a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian int (*poll)(struct sensors_poll_device_t *dev, 1295a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian sensors_event_t* data, int count); 1296a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian}; 1297b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 1298a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian/* 1299772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * struct sensors_poll_device_1 is used in HAL versions >= SENSORS_DEVICE_API_VERSION_1_0 1300a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 1301a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopiantypedef struct sensors_poll_device_1 { 1302a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian union { 1303a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian /* sensors_poll_device_1 is compatible with sensors_poll_device_t, 1304a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * and can be down-cast to it 1305a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 13061082c0b54c21c220e975f1c714e41f9183b366d1Andrew Hsieh struct sensors_poll_device_t v0; 1307a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1308a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian struct { 1309a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian struct hw_device_t common; 1310a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 13118db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy /* Activate/de-activate one sensor. Return 0 on success, negative 1312a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 1313772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * sensor_handle is the handle of the sensor to change. 1314a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * enabled set to 1 to enable, or 0 to disable the sensor. 1315a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * 13168db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * Return 0 on success, negative errno code otherwise. 1317a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 1318a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian int (*activate)(struct sensors_poll_device_t *dev, 1319772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int sensor_handle, int enabled); 1320a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1321a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian /** 1322772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * Set the events's period in nanoseconds for a given sensor. 1323772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * If sampling_period_ns > max_delay it will be truncated to 1324772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * max_delay and if sampling_period_ns < min_delay it will be 1325772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * replaced by min_delay. 1326a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 1327a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian int (*setDelay)(struct sensors_poll_device_t *dev, 1328772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int sensor_handle, int64_t sampling_period_ns); 1329a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1330a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian /** 1331a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian * Returns an array of sensor data. 1332a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian */ 1333a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian int (*poll)(struct sensors_poll_device_t *dev, 1334a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian sensors_event_t* data, int count); 1335a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian }; 1336a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian }; 1337a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1338a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1339a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian /* 1340772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * Sets a sensor’s parameters, including sampling frequency and maximum 1341772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * report latency. This function can be called while the sensor is 1342772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * activated, in which case it must not cause any sensor measurements to 1343772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * be lost: transitioning from one sampling rate to the other cannot cause 1344772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * lost events, nor can transitioning from a high maximum report latency to 1345772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * a low maximum report latency. 13468db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * See the Batching sensor results page for details: 13478db1fb408c63f6e57241e68f671b4f0647f1cba9Clay Murphy * http://source.android.com/devices/sensors/batching.html 1348b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian */ 1349a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian int (*batch)(struct sensors_poll_device_1* dev, 1350772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int sensor_handle, int flags, int64_t sampling_period_ns, 1351772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int64_t max_report_latency_ns); 1352a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 135316671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian /* 135416671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * Flush adds a META_DATA_FLUSH_COMPLETE event (sensors_event_meta_data_t) 135516671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian * to the end of the "batch mode" FIFO for the specified sensor and flushes 1356772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * the FIFO. 1357772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * If the FIFO is empty or if the sensor doesn't support batching (FIFO size zero), 1358c841efdc3632bd72961eb215699c5a4c6793bff0Aravind Akella * it should return SUCCESS along with a trivial META_DATA_FLUSH_COMPLETE event added to the 1359772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * event stream. This applies to all sensors other than one-shot sensors. 1360772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * If the sensor is a one-shot sensor, flush must return -EINVAL and not generate 1361772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand * any flush complete metadata. 1362a7f2cda848c2f057921109f03b843a761ad5d563Aravind Akella * If the sensor is not active at the time flush() is called, flush() should return 1363a7f2cda848c2f057921109f03b843a761ad5d563Aravind Akella * -EINVAL. 136416671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian */ 1365772d85ad350f9a4b8844c72206b6e20b91332b62Etienne Le Grand int (*flush)(struct sensors_poll_device_1* dev, int sensor_handle); 136616671c5519003d3be0eab34a8a78fecac9e941a3Mathias Agopian 13676507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi /* 1368050f2e45a042638bc2f6c1a51a805847edd9332fAshutosh Joshi * Inject a single sensor sample to be to this device. 1369050f2e45a042638bc2f6c1a51a805847edd9332fAshutosh Joshi * data points to the sensor event to be injected 1370c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella * @return 0 on success 1371c7f54134ca255810bea017c4c20ffe8cb86fe10eAravind Akella * -EPERM if operation is not allowed 1372050f2e45a042638bc2f6c1a51a805847edd9332fAshutosh Joshi * -EINVAL if sensor event cannot be injected 13736507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi */ 13746507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi int (*inject_sensor_data)(struct sensors_poll_device_1 *dev, const sensors_event_t *data); 13756507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi 13766507f5080bc3fdc8d4b23cfa2d73d3602cc60a6aAshutosh Joshi void (*reserved_procs[7])(void); 1377a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1378a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian} sensors_poll_device_1_t; 1379a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1380a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1381f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** convenience API for opening and closing a device */ 1382f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 1383b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopianstatic inline int sensors_open(const struct hw_module_t* module, 1384b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian struct sensors_poll_device_t** device) { 1385b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian return module->methods->open(module, 1386b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian SENSORS_HARDWARE_POLL, (struct hw_device_t**)device); 1387b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian} 1388b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 1389b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopianstatic inline int sensors_close(struct sensors_poll_device_t* device) { 1390b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian return device->common.close(&device->common); 1391b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian} 1392b1e212e7b6fce2bc5c743b05853129e19760d7a4Mathias Agopian 1393a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopianstatic inline int sensors_open_1(const struct hw_module_t* module, 13941082c0b54c21c220e975f1c714e41f9183b366d1Andrew Hsieh sensors_poll_device_1_t** device) { 1395a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian return module->methods->open(module, 1396a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian SENSORS_HARDWARE_POLL, (struct hw_device_t**)device); 1397a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian} 1398a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 13991082c0b54c21c220e975f1c714e41f9183b366d1Andrew Hsiehstatic inline int sensors_close_1(sensors_poll_device_1_t* device) { 1400a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian return device->common.close(&device->common); 1401a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian} 1402a455772cb30cb8fed26b12f61a6d78c9b689e640Mathias Agopian 1403f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project__END_DECLS 1404f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 1405f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#endif // ANDROID_SENSORS_INTERFACE_H 1406