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