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