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