xref: /aosp_15_r20/hardware/interfaces/sensors/1.0/ISensors.hal (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
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