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