1*4d7e907cSAndroid Build Coastguard Worker/* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker * 8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker * 10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard Workerpackage [email protected]; 18*4d7e907cSAndroid Build Coastguard Worker 19*4d7e907cSAndroid Build Coastguard Workerinterface ISensors { 20*4d7e907cSAndroid Build Coastguard Worker /** 21*4d7e907cSAndroid Build Coastguard Worker * Enumerate all available (static) sensors. 22*4d7e907cSAndroid Build Coastguard Worker */ 23*4d7e907cSAndroid Build Coastguard Worker getSensorsList() generates (vec<SensorInfo> list); 24*4d7e907cSAndroid Build Coastguard Worker 25*4d7e907cSAndroid Build Coastguard Worker /** 26*4d7e907cSAndroid Build Coastguard Worker * Place the module in a specific mode. The following modes are defined 27*4d7e907cSAndroid Build Coastguard Worker * 28*4d7e907cSAndroid Build Coastguard Worker * SENSOR_HAL_NORMAL_MODE - Normal operation. Default state of the module. 29*4d7e907cSAndroid Build Coastguard Worker * 30*4d7e907cSAndroid Build Coastguard Worker * SENSOR_HAL_DATA_INJECTION_MODE - Loopback mode. 31*4d7e907cSAndroid Build Coastguard Worker * Data is injected for the supported sensors by the sensor service in 32*4d7e907cSAndroid Build Coastguard Worker * this mode. 33*4d7e907cSAndroid Build Coastguard Worker * 34*4d7e907cSAndroid Build Coastguard Worker * @return OK on success 35*4d7e907cSAndroid Build Coastguard Worker * BAD_VALUE if requested mode is not supported 36*4d7e907cSAndroid Build Coastguard Worker * PERMISSION_DENIED if operation is not allowed 37*4d7e907cSAndroid Build Coastguard Worker */ 38*4d7e907cSAndroid Build Coastguard Worker setOperationMode(OperationMode mode) generates (Result result); 39*4d7e907cSAndroid Build Coastguard Worker 40*4d7e907cSAndroid Build Coastguard Worker /** 41*4d7e907cSAndroid Build Coastguard Worker * Activate/de-activate one sensor. 42*4d7e907cSAndroid Build Coastguard Worker * 43*4d7e907cSAndroid Build Coastguard Worker * After sensor de-activation, existing sensor events that have not 44*4d7e907cSAndroid Build Coastguard Worker * been picked up by poll() must be abandoned immediately so that 45*4d7e907cSAndroid Build Coastguard Worker * subsequent activation will not get stale sensor events (events 46*4d7e907cSAndroid Build Coastguard Worker * that are generated prior to the latter activation). 47*4d7e907cSAndroid Build Coastguard Worker * 48*4d7e907cSAndroid Build Coastguard Worker * @param sensorHandle is the handle of the sensor to change. 49*4d7e907cSAndroid Build Coastguard Worker * @param enabled set to true to enable, or false to disable the sensor. 50*4d7e907cSAndroid Build Coastguard Worker * 51*4d7e907cSAndroid Build Coastguard Worker * @return result OK on success, BAD_VALUE if sensorHandle is invalid. 52*4d7e907cSAndroid Build Coastguard Worker */ 53*4d7e907cSAndroid Build Coastguard Worker activate(int32_t sensorHandle, bool enabled) generates (Result result); 54*4d7e907cSAndroid Build Coastguard Worker 55*4d7e907cSAndroid Build Coastguard Worker /** 56*4d7e907cSAndroid Build Coastguard Worker * Generate a vector of sensor events containing at most "maxCount" 57*4d7e907cSAndroid Build Coastguard Worker * entries. 58*4d7e907cSAndroid Build Coastguard Worker * 59*4d7e907cSAndroid Build Coastguard Worker * Additionally a vector of SensorInfos is returned for any dynamic sensors 60*4d7e907cSAndroid Build Coastguard Worker * connected as notified by returned events of type DYNAMIC_SENSOR_META. 61*4d7e907cSAndroid Build Coastguard Worker * 62*4d7e907cSAndroid Build Coastguard Worker * If there is no sensor event when this function is being called, block 63*4d7e907cSAndroid Build Coastguard Worker * until there are sensor events available. 64*4d7e907cSAndroid Build Coastguard Worker * 65*4d7e907cSAndroid Build Coastguard Worker * @param maxCount max number of samples can be returned, must be > 0. 66*4d7e907cSAndroid Build Coastguard Worker * Actual number of events returned in data must be <= maxCount 67*4d7e907cSAndroid Build Coastguard Worker * and > 0. 68*4d7e907cSAndroid Build Coastguard Worker * @return result OK on success or BAD_VALUE if maxCount <= 0. 69*4d7e907cSAndroid Build Coastguard Worker * @return data vector of Event contains sensor events. 70*4d7e907cSAndroid Build Coastguard Worker * @return dynamicSensorsAdded vector of SensorInfo contains dynamic sensor 71*4d7e907cSAndroid Build Coastguard Worker * added. Each element corresponds to a dynamic sensor meta events 72*4d7e907cSAndroid Build Coastguard Worker * in data. 73*4d7e907cSAndroid Build Coastguard Worker */ 74*4d7e907cSAndroid Build Coastguard Worker poll(int32_t maxCount) 75*4d7e907cSAndroid Build Coastguard Worker generates ( 76*4d7e907cSAndroid Build Coastguard Worker Result result, 77*4d7e907cSAndroid Build Coastguard Worker vec<Event> data, 78*4d7e907cSAndroid Build Coastguard Worker vec<SensorInfo> dynamicSensorsAdded); 79*4d7e907cSAndroid Build Coastguard Worker 80*4d7e907cSAndroid Build Coastguard Worker /** 81*4d7e907cSAndroid Build Coastguard Worker * Sets a sensor’s parameters, including sampling frequency and maximum 82*4d7e907cSAndroid Build Coastguard Worker * report latency. This function can be called while the sensor is 83*4d7e907cSAndroid Build Coastguard Worker * activated, in which case it must not cause any sensor measurements to 84*4d7e907cSAndroid Build Coastguard Worker * be lost: transitioning from one sampling rate to the other cannot cause 85*4d7e907cSAndroid Build Coastguard Worker * lost events, nor can transitioning from a high maximum report latency to 86*4d7e907cSAndroid Build Coastguard Worker * a low maximum report latency. 87*4d7e907cSAndroid Build Coastguard Worker * See the Batching sensor results page for details: 88*4d7e907cSAndroid Build Coastguard Worker * http://source.android.com/devices/sensors/batching.html 89*4d7e907cSAndroid Build Coastguard Worker * 90*4d7e907cSAndroid Build Coastguard Worker * @param sensorHandle handle of sensor to be changed. 91*4d7e907cSAndroid Build Coastguard Worker * @param samplingPeriodNs specifies sensor sample period in nanoseconds. 92*4d7e907cSAndroid Build Coastguard Worker * @param maxReportLatencyNs allowed delay time before an event is sampled 93*4d7e907cSAndroid Build Coastguard Worker * to time of report. 94*4d7e907cSAndroid Build Coastguard Worker * @return result OK on success, BAD_VALUE if any parameters are invalid. 95*4d7e907cSAndroid Build Coastguard Worker */ 96*4d7e907cSAndroid Build Coastguard Worker batch(int32_t sensorHandle, 97*4d7e907cSAndroid Build Coastguard Worker int64_t samplingPeriodNs, 98*4d7e907cSAndroid Build Coastguard Worker int64_t maxReportLatencyNs) generates (Result result); 99*4d7e907cSAndroid Build Coastguard Worker 100*4d7e907cSAndroid Build Coastguard Worker /** 101*4d7e907cSAndroid Build Coastguard Worker * Trigger a flush of internal FIFO. 102*4d7e907cSAndroid Build Coastguard Worker * 103*4d7e907cSAndroid Build Coastguard Worker * Flush adds a FLUSH_COMPLETE metadata event to the end of the "batch mode" 104*4d7e907cSAndroid Build Coastguard Worker * FIFO for the specified sensor and flushes the FIFO. If the FIFO is empty 105*4d7e907cSAndroid Build Coastguard Worker * or if the sensor doesn't support batching (FIFO size zero), return 106*4d7e907cSAndroid Build Coastguard Worker * OK and add a trivial FLUSH_COMPLETE event added to the event stream. 107*4d7e907cSAndroid Build Coastguard Worker * This applies to all sensors other than one-shot sensors. If the sensor 108*4d7e907cSAndroid Build Coastguard Worker * is a one-shot sensor, flush must return BAD_VALUE and not generate any 109*4d7e907cSAndroid Build Coastguard Worker * flush complete metadata. If the sensor is not active at the time flush() 110*4d7e907cSAndroid Build Coastguard Worker * is called, flush() return BAD_VALUE. 111*4d7e907cSAndroid Build Coastguard Worker * 112*4d7e907cSAndroid Build Coastguard Worker * @param sensorHandle handle of sensor to be flushed. 113*4d7e907cSAndroid Build Coastguard Worker * @return result OK on success and BAD_VALUE if sensorHandle is invalid. 114*4d7e907cSAndroid Build Coastguard Worker */ 115*4d7e907cSAndroid Build Coastguard Worker flush(int32_t sensorHandle) generates (Result result); 116*4d7e907cSAndroid Build Coastguard Worker 117*4d7e907cSAndroid Build Coastguard Worker /** 118*4d7e907cSAndroid Build Coastguard Worker * Inject a single sensor event or push operation environment parameters to 119*4d7e907cSAndroid Build Coastguard Worker * device. 120*4d7e907cSAndroid Build Coastguard Worker * 121*4d7e907cSAndroid Build Coastguard Worker * When device is in NORMAL mode, this function is called to push operation 122*4d7e907cSAndroid Build Coastguard Worker * environment data to device. In this operation, Event is always of 123*4d7e907cSAndroid Build Coastguard Worker * SensorType::AdditionalInfo type. See operation evironment parameters 124*4d7e907cSAndroid Build Coastguard Worker * section in AdditionalInfoType. 125*4d7e907cSAndroid Build Coastguard Worker * 126*4d7e907cSAndroid Build Coastguard Worker * When device is in DATA_INJECTION mode, this function is also used for 127*4d7e907cSAndroid Build Coastguard Worker * injecting sensor events. 128*4d7e907cSAndroid Build Coastguard Worker * 129*4d7e907cSAndroid Build Coastguard Worker * Regardless of OperationMode, injected SensorType::ADDITIONAL_INFO 130*4d7e907cSAndroid Build Coastguard Worker * type events should not be routed back to poll() function. 131*4d7e907cSAndroid Build Coastguard Worker * 132*4d7e907cSAndroid Build Coastguard Worker * @see AdditionalInfoType 133*4d7e907cSAndroid Build Coastguard Worker * @see OperationMode 134*4d7e907cSAndroid Build Coastguard Worker * @param event sensor event to be injected 135*4d7e907cSAndroid Build Coastguard Worker * @return result OK on success; PERMISSION_DENIED if operation is not 136*4d7e907cSAndroid Build Coastguard Worker * allowed; INVALID_OPERATION, if this functionality is 137*4d7e907cSAndroid Build Coastguard Worker * unsupported; BAD_VALUE if sensor event cannot be injected. 138*4d7e907cSAndroid Build Coastguard Worker */ 139*4d7e907cSAndroid Build Coastguard Worker injectSensorData(Event event) generates (Result result); 140*4d7e907cSAndroid Build Coastguard Worker 141*4d7e907cSAndroid Build Coastguard Worker /** 142*4d7e907cSAndroid Build Coastguard Worker * Register direct report channel. 143*4d7e907cSAndroid Build Coastguard Worker * 144*4d7e907cSAndroid Build Coastguard Worker * Register a direct channel with supplied shared memory information. Upon 145*4d7e907cSAndroid Build Coastguard Worker * return, the sensor hardware is responsible for resetting the memory 146*4d7e907cSAndroid Build Coastguard Worker * content to initial value (depending on memory format settings). 147*4d7e907cSAndroid Build Coastguard Worker * 148*4d7e907cSAndroid Build Coastguard Worker * @param mem shared memory info data structure. 149*4d7e907cSAndroid Build Coastguard Worker * @return result OK on success; BAD_VALUE if shared memory information is 150*4d7e907cSAndroid Build Coastguard Worker * not consistent; NO_MEMORY if shared memory cannot be used by 151*4d7e907cSAndroid Build Coastguard Worker * sensor system; INVALID_OPERATION if functionality is not 152*4d7e907cSAndroid Build Coastguard Worker * supported. 153*4d7e907cSAndroid Build Coastguard Worker * @return channelHandle a positive integer used for referencing registered 154*4d7e907cSAndroid Build Coastguard Worker * direct channel (>0) in configureDirectReport and 155*4d7e907cSAndroid Build Coastguard Worker * unregisterDirectChannel if result is OK, -1 otherwise. 156*4d7e907cSAndroid Build Coastguard Worker */ 157*4d7e907cSAndroid Build Coastguard Worker registerDirectChannel(SharedMemInfo mem) 158*4d7e907cSAndroid Build Coastguard Worker generates (Result result, int32_t channelHandle); 159*4d7e907cSAndroid Build Coastguard Worker 160*4d7e907cSAndroid Build Coastguard Worker /** 161*4d7e907cSAndroid Build Coastguard Worker * Unregister direct report channel. 162*4d7e907cSAndroid Build Coastguard Worker * 163*4d7e907cSAndroid Build Coastguard Worker * Unregister a direct channel previously registered using 164*4d7e907cSAndroid Build Coastguard Worker * registerDirectChannel, and remove all active sensor report configured in 165*4d7e907cSAndroid Build Coastguard Worker * still active sensor report configured in the direct channel. 166*4d7e907cSAndroid Build Coastguard Worker * 167*4d7e907cSAndroid Build Coastguard Worker * @param channelHandle handle of direct channel to be unregistered. 168*4d7e907cSAndroid Build Coastguard Worker * @return result OK if direct report is supported; INVALID_OPERATION 169*4d7e907cSAndroid Build Coastguard Worker * otherwise. 170*4d7e907cSAndroid Build Coastguard Worker */ 171*4d7e907cSAndroid Build Coastguard Worker unregisterDirectChannel(int32_t channelHandle) generates (Result result); 172*4d7e907cSAndroid Build Coastguard Worker 173*4d7e907cSAndroid Build Coastguard Worker /** 174*4d7e907cSAndroid Build Coastguard Worker * Configure direct sensor event report in direct channel. 175*4d7e907cSAndroid Build Coastguard Worker * 176*4d7e907cSAndroid Build Coastguard Worker * This function start, modify rate or stop direct report of a sensor in a 177*4d7e907cSAndroid Build Coastguard Worker * certain direct channel. 178*4d7e907cSAndroid Build Coastguard Worker * 179*4d7e907cSAndroid Build Coastguard Worker * @param sensorHandle handle of sensor to be configured. When combined 180*4d7e907cSAndroid Build Coastguard Worker * with STOP rate, sensorHandle can be -1 to denote all active 181*4d7e907cSAndroid Build Coastguard Worker * sensors in the direct channel specified by channel Handle. 182*4d7e907cSAndroid Build Coastguard Worker * @param channelHandle handle of direct channel to be configured. 183*4d7e907cSAndroid Build Coastguard Worker * @param rate rate level, see RateLevel enum. 184*4d7e907cSAndroid Build Coastguard Worker * 185*4d7e907cSAndroid Build Coastguard Worker * @return result OK on success; BAD_VALUE if parameter is invalid (such as 186*4d7e907cSAndroid Build Coastguard Worker * rate level is not supported by sensor, channelHandle does not 187*4d7e907cSAndroid Build Coastguard Worker * exist, etc); INVALID_OPERATION if functionality is not 188*4d7e907cSAndroid Build Coastguard Worker * supported. 189*4d7e907cSAndroid Build Coastguard Worker * @return reportToken positive integer to identify multiple sensors of 190*4d7e907cSAndroid Build Coastguard Worker * the same type in a single direct channel. Ignored if rate is 191*4d7e907cSAndroid Build Coastguard Worker * STOP. See SharedMemFormat. 192*4d7e907cSAndroid Build Coastguard Worker */ 193*4d7e907cSAndroid Build Coastguard Worker configDirectReport( 194*4d7e907cSAndroid Build Coastguard Worker int32_t sensorHandle, int32_t channelHandle, RateLevel rate) 195*4d7e907cSAndroid Build Coastguard Worker generates (Result result, int32_t reportToken); 196*4d7e907cSAndroid Build Coastguard Worker}; 197