13cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong/*
23cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong * Copyright (C) 2017 The Android Open Source Project
33cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong *
43cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong * Licensed under the Apache License, Version 2.0 (the "License");
53cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong * you may not use this file except in compliance with the License.
63cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong * You may obtain a copy of the License at
73cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong *
83cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong *      http://www.apache.org/licenses/LICENSE-2.0
93cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong *
103cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong * Unless required by applicable law or agreed to in writing, software
113cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong * distributed under the License is distributed on an "AS IS" BASIS,
123cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong * See the License for the specific language governing permissions and
143cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong * limitations under the License.
153cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong */
163cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong
173cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hongpackage android.frameworks.sensorservice@1.0;
183cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong
193cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hongimport IDirectReportChannel;
20fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hongimport IEventQueue;
21fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hongimport IEventQueueCallback;
223cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong
233cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hongimport android.hardware.sensors@1.0::SensorInfo;
243cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hongimport android.hardware.sensors@1.0::SensorType;
253cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong
263cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong/**
273cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong * ISensorManager is an interface to manage sensors
283cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong *
293cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong * This file provides a set of functions that uses
303cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong * ISensorManager to access and list hardware sensors.
313cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong */
323cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Honginterface ISensorManager {
333cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong
343cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong    /**
353cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * Get the list of available sensors.
363cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *
373cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * @return list   the list of available sensors, or empty on failure
383cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * @return result OK on success or UNKNOWN_ERROR on failure
393cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     */
403cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong    getSensorList() generates (vec<SensorInfo> list, Result result);
413cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong
423cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong    /**
433cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * Get the default sensor of the specified type.
443cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *
453cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * @return sensor the default sensor for the given type, or undetermined
463cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *                value on failure.
473cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * @return result OK on success or
483cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong                      NOT_EXIST if no sensor of that type exists.
493cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     */
503cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong    getDefaultSensor(SensorType type)
513cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong          generates (SensorInfo sensor, Result result);
523cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong
533cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong    /**
543cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * Create direct channel based on shared memory
553cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *
563cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * Create a direct channel of DIRECT_CHANNEL_ASHMEM type to be used
573cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * for configuring sensor direct report.
583cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *
593cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * The memory layout looks as follows. These offsets can be found in
603cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * android.hardware.sensors@1.0::SensorsEventFormatOffset.
613cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *   offset   type        name
623cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *  -----------------------------------
633cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *   0x0000  int32_t     size (SensorsEventFormatOffset::TOTAL_LENGTH)
643cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *   0x0004  int32_t     sensor report token
653cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *   0x0008  int32_t     type (see android.hardware.sensors@1.0::SensorType)
663cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *   0x000C  uint32_t    atomic counter
673cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *   0x0010  int64_t     timestamp (see android.hardware.sensors@1.0::Event)
683cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *   0x0018  float[16]/  data
693cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *           int64_t[8]
703cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *   0x0058  int32_t[4]  reserved (set to zero)
713cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *
7244b2a4577db500e90b6b524a68f96c6be483a934Yifan Hong     * @param mem     the shared memory to use, must be ashmem.
7344b2a4577db500e90b6b524a68f96c6be483a934Yifan Hong     * @param size    the intended size to be used. The following must be true:
7444b2a4577db500e90b6b524a68f96c6be483a934Yifan Hong     *                SensorsEventFormatOffset::TOTAL_LENGTH <= size <= mem.size
753cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *
763cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * @return chan   The created channel, or NULL if failure.
773cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * @return result OK if successful;
7844b2a4577db500e90b6b524a68f96c6be483a934Yifan Hong     *                BAD_VALUE if size > mem.size();
7944b2a4577db500e90b6b524a68f96c6be483a934Yifan Hong     *                BAD_VALUE if size < TOTAL_LENGTH;
803cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *                NO_MEMORY, NO_INIT, BAD_VALUE for underlying errors;
813cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *                UNKNOWN_ERROR if the underlying error is not recognized;
823cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *                UNKNOWN_ERROR if the underlying call returns channelId = 0
833cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     */
843cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong    createAshmemDirectChannel(memory mem, uint64_t size)
853cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong                   generates (IDirectReportChannel chan, Result result);
863cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong
873cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong    /**
883cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * Create direct channel based on hardware buffer
893cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *
903cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * Create a direct channel of DIRECT_CHANNEL_GRALLOC type to be used
913cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * for configuring sensor direct report.
923cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *
933cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * @param buffer  file descriptor describing the gralloc buffer.
943cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * @param size    the intended size to be used, must be less than or equal
953cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *                to the size of the buffer.
963cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *
973cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * @return chan   The created channel, or NULL if failure.
983cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     * @return result OK if successful;
993cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *                NO_MEMORY, NO_INIT, BAD_VALUE for underlying errors;
1003cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *                UNKNOWN_ERROR if the underlying error is not recognized;
1013cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     *                UNKNOWN_ERROR if the underlying call returns channelId = 0
1023cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong     */
1033cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong    createGrallocDirectChannel(handle buffer, uint64_t size)
1043cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong                    generates (IDirectReportChannel chan, Result result);
105fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong
106fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong    /**
107fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong     * Create a sensor event queue.
108fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong     *
109fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong     * Create a sensor event queue with an IEventQueueCallback object.
110fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong     * Subsequently, one can enable sensors on the event queue so that sensor
111fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong     * events are passed via the specified callback.
112fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong     *
113fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong     * @param  callback the callback to call on events. Must not be null.
114fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong     * @return queue    the event queue created. null on failure.
115fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong     * @return result   OK if successful, BAD_VALUE if callback is null,
116fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong     *                  or other Result values for any underlying errors.
117fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong     */
118fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong    createEventQueue(IEventQueueCallback callback)
119fd95968f8e5f81e20625f084c37d88197b4c0141Yifan Hong          generates (IEventQueue queue, Result result);
1203cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong};
1213cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong
1223cf4996d6ed09bf5dc2cd049d7d0df0816530aecYifan Hong
123