1db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber/*
2db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber * Copyright (C) 2016 The Android Open Source Project
3db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber *
4db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber * you may not use this file except in compliance with the License.
6db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber * You may obtain a copy of the License at
7db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber *
8db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber *
10db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber * Unless required by applicable law or agreed to in writing, software
11db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber * See the License for the specific language governing permissions and
14db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber * limitations under the License.
15db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber */
16db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber
17db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huberpackage android.hardware.sensors@1.0;
18db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber
19db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huberinterface ISensors {
20db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber    /**
21db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * Enumerate all available (static) sensors.
22db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     */
23db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber    getSensorsList() generates (vec<SensorInfo> list);
24db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber
25db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber    /**
260873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * Place the module in a specific mode. The following modes are defined
27db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *
28db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *  SENSOR_HAL_NORMAL_MODE - Normal operation. Default state of the module.
29db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *
30db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *  SENSOR_HAL_DATA_INJECTION_MODE - Loopback mode.
31db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *    Data is injected for the supported sensors by the sensor service in
32db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *    this mode.
33db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *
34db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * @return OK on success
35db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *         BAD_VALUE if requested mode is not supported
36db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *         PERMISSION_DENIED if operation is not allowed
37db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     */
38db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber    setOperationMode(OperationMode mode) generates (Result result);
39db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber
4040d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
4140d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber     * Activate/de-activate one sensor.
42db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *
43db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * After sensor de-activation, existing sensor events that have not
440873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * been picked up by poll() must be abandoned immediately so that
45db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * subsequent activation will not get stale sensor events (events
46db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * that are generated prior to the latter activation).
47db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *
480873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * @param  sensorHandle is the handle of the sensor to change.
490873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * @param  enabled set to true to enable, or false to disable the sensor.
500873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     *
510873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * @return result OK on success, BAD_VALUE if sensorHandle is invalid.
52db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     */
53db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber    activate(int32_t sensorHandle, bool enabled) generates (Result result);
54db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber
55db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber    /**
56db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * Generate a vector of sensor events containing at most "maxCount"
57db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * entries.
58db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *
59db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * Additionally a vector of SensorInfos is returned for any dynamic sensors
60db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * connected as notified by returned events of type DYNAMIC_SENSOR_META.
61db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *
620873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * If there is no sensor event when this function is being called, block
630873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * until there are sensor events available.
64db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *
65cefa91bb5108c947afe69251ad2a4366e540a2aaPeng Xu     * @param  maxCount max number of samples can be returned, must be > 0.
66cefa91bb5108c947afe69251ad2a4366e540a2aaPeng Xu     *         Actual number of events returned in data must be <= maxCount
67cefa91bb5108c947afe69251ad2a4366e540a2aaPeng Xu     *         and > 0.
680873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * @return result OK on success or BAD_VALUE if maxCount <= 0.
690873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * @return data vector of Event contains sensor events.
700873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * @return dynamicSensorsAdded vector of SensorInfo contains dynamic sensor
710873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     *         added. Each element corresponds to a dynamic sensor meta events
720873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     *         in data.
73db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     */
74db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber    poll(int32_t maxCount)
75db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber        generates (
76db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber                Result result,
77db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber                vec<Event> data,
78db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber                vec<SensorInfo> dynamicSensorsAdded);
79db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber
8040d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
81db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * Sets a sensor’s parameters, including sampling frequency and maximum
82db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * report latency. This function can be called while the sensor is
83db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * activated, in which case it must not cause any sensor measurements to
84db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * be lost: transitioning from one sampling rate to the other cannot cause
85db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * lost events, nor can transitioning from a high maximum report latency to
86db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * a low maximum report latency.
87db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * See the Batching sensor results page for details:
88db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * http://source.android.com/devices/sensors/batching.html
89db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     *
900873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * @param  sensorHandle handle of sensor to be changed.
910873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * @param  samplingPeriodNs specifies sensor sample period in nanoseconds.
920873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * @param  maxReportLatencyNs allowed delay time before an event is sampled
930873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     *         to time of report.
940873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * @return result OK on success, BAD_VALUE if any parameters are invalid.
95db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     */
96db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber    batch(int32_t sensorHandle,
97db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber          int64_t samplingPeriodNs,
98db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber          int64_t maxReportLatencyNs) generates (Result result);
99db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber
10040d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
1010873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * Trigger a flush of internal FIFO.
1020873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     *
103db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     * Flush adds a FLUSH_COMPLETE metadata event to the end of the "batch mode"
1040873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * FIFO for the specified sensor and flushes the FIFO.  If the FIFO is empty
1050873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * or if the sensor doesn't support batching (FIFO size zero), return
1060873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * SUCCESS and add a trivial FLUSH_COMPLETE event added to the event stream.
1070873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * This applies to all sensors other than one-shot sensors. If the sensor
1080873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * is a one-shot sensor, flush must return BAD_VALUE and not generate any
1090873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * flush complete metadata.  If the sensor is not active at the time flush()
1100873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * is called, flush() return BAD_VALUE.
1110873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     *
1120873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * @param   sensorHandle handle of sensor to be flushed.
1130873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * @return  result OK on success and BAD_VALUE if sensorHandle is invalid.
114db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     */
115db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber    flush(int32_t sensorHandle) generates (Result result);
116db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber
11740d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
118e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * Inject a single sensor event or push operation environment parameters to
119e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * device.
120e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     *
121e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * When device is in NORMAL mode, this function is called to push operation
122e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * environment data to device. In this operation, Event is always of
123e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * SensorType::AdditionalInfo type. See operation evironment parameters
124e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * section in AdditionalInfoType.
125e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     *
126e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * When device is in DATA_INJECTION mode, this function is also used for
127e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * injecting sensor events.
128e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     *
129e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * Regardless of OperationMode, injected SensorType::ADDITIONAL_INFO
130e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * type events should not be routed back to poll() function.
131e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     *
132e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * @see AdditionalInfoType
133e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * @see OperationMode
134e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * @param   event sensor event to be injected
135e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     * @return  result OK on success; PERMISSION_DENIED if operation is not
136e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     *          allowed; INVALID_OPERATION, if this functionality is
137e82ec56a75c7926a3a40b4c280214fcc2f400ad9Peng Xu     *          unsupported; BAD_VALUE if sensor event cannot be injected.
138db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber     */
139db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber    injectSensorData(Event event) generates (Result result);
1400f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu
14140d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
1420f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * Register direct report channel.
1430f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *
1440f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * Register a direct channel with supplied shared memory information. Upon
1450f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * return, the sensor hardware is responsible for resetting the memory
1460f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * content to initial value (depending on memory format settings).
1470f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *
1480f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * @param   mem shared memory info data structure.
1490f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * @return  result OK on success; BAD_VALUE if shared memory information is
1500f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          not consistent; NO_MEMORY if shared memory cannot be used by
1510f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          sensor system; INVALID_OPERATION if functionality is not
1520f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          supported.
1530f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * @return  channelHandle a positive integer used for referencing registered
1540f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          direct channel (>0) in configureDirectReport and
1550f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          unregisterDirectChannel if result is OK, -1 otherwise.
1560f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     */
1570f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu    registerDirectChannel(SharedMemInfo mem)
1580f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu            generates (Result result, int32_t channelHandle);
1590f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu
16040d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
1610f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * Unregister direct report channel.
1620f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *
1630f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * Unregister a direct channel previously registered using
1640873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * registerDirectChannel, and remove all active sensor report configured in
1650873e641cf8afc8ac3d1adcce321bc0f41e21524Peng Xu     * still active sensor report configured in the direct channel.
1660f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *
1670f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * @param   channelHandle handle of direct channel to be unregistered.
1680f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * @return  result OK if direct report is supported; INVALID_OPERATION
1690f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          otherwise.
1700f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     */
1710f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu    unregisterDirectChannel(int32_t channelHandle) generates (Result result);
1720f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu
17340d3a9bd8c62714ee58f9363c4456f764aa5a95dAndreas Huber    /**
1740f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * Configure direct sensor event report in direct channel.
1750f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *
1760f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * This function start, modify rate or stop direct report of a sensor in a
1770f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * certain direct channel.
1780f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *
1790f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * @param   sensorHandle handle of sensor to be configured. When combined
1800f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          with STOP rate, sensorHandle can be -1 to denote all active
1810f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          sensors in the direct channel specified by channel Handle.
1820f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * @param   channelHandle handle of direct channel to be configured.
1830f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * @param   rate rate level, see RateLevel enum.
1840f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *
1850f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * @return  result OK on success; BAD_VALUE if parameter is invalid (such as
1860f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          rate level is not supported by sensor, channelHandle does not
1870f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          exist, etc); INVALID_OPERATION if functionality is not
1880f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          supported.
1890f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     * @return  reportToken positive integer to identify multiple sensors of
1900f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          the same type in a single direct channel. Ignored if rate is
1910f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     *          STOP. See SharedMemFormat.
1920f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu     */
1930f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu    configDirectReport(
1940f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu            int32_t sensorHandle, int32_t channelHandle, RateLevel rate)
1950f0df7ed0a1a7cfb1ce4ab9c161f4641c868bc39Peng Xu            generates (Result result, int32_t reportToken);
196db49a41180f4b3e88a9523ae1127a396d970adf7Andreas Huber};
197