1*38e8c45fSAndroid Build Coastguard Worker /* 2*38e8c45fSAndroid Build Coastguard Worker * Copyright (C) 2010 The Android Open Source Project 3*38e8c45fSAndroid Build Coastguard Worker * 4*38e8c45fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*38e8c45fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*38e8c45fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*38e8c45fSAndroid Build Coastguard Worker * 8*38e8c45fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*38e8c45fSAndroid Build Coastguard Worker * 10*38e8c45fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*38e8c45fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*38e8c45fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*38e8c45fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*38e8c45fSAndroid Build Coastguard Worker * limitations under the License. 15*38e8c45fSAndroid Build Coastguard Worker */ 16*38e8c45fSAndroid Build Coastguard Worker 17*38e8c45fSAndroid Build Coastguard Worker /** 18*38e8c45fSAndroid Build Coastguard Worker * Structures and functions to receive and process sensor events in 19*38e8c45fSAndroid Build Coastguard Worker * native code. 20*38e8c45fSAndroid Build Coastguard Worker * 21*38e8c45fSAndroid Build Coastguard Worker * @addtogroup Sensor 22*38e8c45fSAndroid Build Coastguard Worker * @{ 23*38e8c45fSAndroid Build Coastguard Worker */ 24*38e8c45fSAndroid Build Coastguard Worker 25*38e8c45fSAndroid Build Coastguard Worker /** 26*38e8c45fSAndroid Build Coastguard Worker * @file sensor.h 27*38e8c45fSAndroid Build Coastguard Worker */ 28*38e8c45fSAndroid Build Coastguard Worker 29*38e8c45fSAndroid Build Coastguard Worker #ifndef ANDROID_SENSOR_H 30*38e8c45fSAndroid Build Coastguard Worker #define ANDROID_SENSOR_H 31*38e8c45fSAndroid Build Coastguard Worker 32*38e8c45fSAndroid Build Coastguard Worker #include <sys/cdefs.h> 33*38e8c45fSAndroid Build Coastguard Worker 34*38e8c45fSAndroid Build Coastguard Worker /****************************************************************** 35*38e8c45fSAndroid Build Coastguard Worker * 36*38e8c45fSAndroid Build Coastguard Worker * IMPORTANT NOTICE: 37*38e8c45fSAndroid Build Coastguard Worker * 38*38e8c45fSAndroid Build Coastguard Worker * This file is part of Android's set of stable system headers 39*38e8c45fSAndroid Build Coastguard Worker * exposed by the Android NDK (Native Development Kit). 40*38e8c45fSAndroid Build Coastguard Worker * 41*38e8c45fSAndroid Build Coastguard Worker * Third-party source AND binary code relies on the definitions 42*38e8c45fSAndroid Build Coastguard Worker * here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES. 43*38e8c45fSAndroid Build Coastguard Worker * 44*38e8c45fSAndroid Build Coastguard Worker * - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES) 45*38e8c45fSAndroid Build Coastguard Worker * - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS 46*38e8c45fSAndroid Build Coastguard Worker * - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY 47*38e8c45fSAndroid Build Coastguard Worker * - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES 48*38e8c45fSAndroid Build Coastguard Worker */ 49*38e8c45fSAndroid Build Coastguard Worker 50*38e8c45fSAndroid Build Coastguard Worker #include <android/looper.h> 51*38e8c45fSAndroid Build Coastguard Worker 52*38e8c45fSAndroid Build Coastguard Worker #include <stdbool.h> 53*38e8c45fSAndroid Build Coastguard Worker #include <sys/types.h> 54*38e8c45fSAndroid Build Coastguard Worker #include <math.h> 55*38e8c45fSAndroid Build Coastguard Worker #include <stdint.h> 56*38e8c45fSAndroid Build Coastguard Worker 57*38e8c45fSAndroid Build Coastguard Worker // This file may also be built on glibc or on Windows/MacOS libc's, so no-op 58*38e8c45fSAndroid Build Coastguard Worker // and deprecated definitions are provided. 59*38e8c45fSAndroid Build Coastguard Worker #if !defined(__INTRODUCED_IN) 60*38e8c45fSAndroid Build Coastguard Worker #define __INTRODUCED_IN(__api_level) /* nothing */ 61*38e8c45fSAndroid Build Coastguard Worker #endif 62*38e8c45fSAndroid Build Coastguard Worker #if !defined(__DEPRECATED_IN) 63*38e8c45fSAndroid Build Coastguard Worker #define __DEPRECATED_IN(__api_level, msg) __attribute__((__deprecated__(msg))) 64*38e8c45fSAndroid Build Coastguard Worker #endif 65*38e8c45fSAndroid Build Coastguard Worker 66*38e8c45fSAndroid Build Coastguard Worker #ifdef __cplusplus 67*38e8c45fSAndroid Build Coastguard Worker extern "C" { 68*38e8c45fSAndroid Build Coastguard Worker #endif 69*38e8c45fSAndroid Build Coastguard Worker 70*38e8c45fSAndroid Build Coastguard Worker typedef struct AHardwareBuffer AHardwareBuffer; 71*38e8c45fSAndroid Build Coastguard Worker 72*38e8c45fSAndroid Build Coastguard Worker #define ASENSOR_RESOLUTION_INVALID (nanf("")) 73*38e8c45fSAndroid Build Coastguard Worker #define ASENSOR_FIFO_COUNT_INVALID (-1) 74*38e8c45fSAndroid Build Coastguard Worker #define ASENSOR_DELAY_INVALID INT32_MIN 75*38e8c45fSAndroid Build Coastguard Worker #define ASENSOR_INVALID (-1) 76*38e8c45fSAndroid Build Coastguard Worker 77*38e8c45fSAndroid Build Coastguard Worker /* (Keep in sync with hardware/sensors-base.h and Sensor.java.) */ 78*38e8c45fSAndroid Build Coastguard Worker 79*38e8c45fSAndroid Build Coastguard Worker /** 80*38e8c45fSAndroid Build Coastguard Worker * Sensor types. 81*38e8c45fSAndroid Build Coastguard Worker * 82*38e8c45fSAndroid Build Coastguard Worker * See 83*38e8c45fSAndroid Build Coastguard Worker * [android.hardware.SensorEvent#values](https://developer.android.com/reference/android/hardware/SensorEvent.html#values) 84*38e8c45fSAndroid Build Coastguard Worker * for detailed explanations of the data returned for each of these types. 85*38e8c45fSAndroid Build Coastguard Worker */ 86*38e8c45fSAndroid Build Coastguard Worker enum { 87*38e8c45fSAndroid Build Coastguard Worker /** 88*38e8c45fSAndroid Build Coastguard Worker * Invalid sensor type. Returned by {@link ASensor_getType} as error value. 89*38e8c45fSAndroid Build Coastguard Worker */ 90*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_INVALID = -1, 91*38e8c45fSAndroid Build Coastguard Worker /** 92*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_ACCELEROMETER} 93*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: continuous 94*38e8c45fSAndroid Build Coastguard Worker * 95*38e8c45fSAndroid Build Coastguard Worker * All values are in SI units (m/s^2) and measure the acceleration of the 96*38e8c45fSAndroid Build Coastguard Worker * device minus the force of gravity. 97*38e8c45fSAndroid Build Coastguard Worker */ 98*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_ACCELEROMETER = 1, 99*38e8c45fSAndroid Build Coastguard Worker /** 100*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_MAGNETIC_FIELD} 101*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: continuous 102*38e8c45fSAndroid Build Coastguard Worker * 103*38e8c45fSAndroid Build Coastguard Worker * All values are in micro-Tesla (uT) and measure the geomagnetic 104*38e8c45fSAndroid Build Coastguard Worker * field in the X, Y and Z axis. 105*38e8c45fSAndroid Build Coastguard Worker */ 106*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_MAGNETIC_FIELD = 2, 107*38e8c45fSAndroid Build Coastguard Worker /** 108*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_GYROSCOPE} 109*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: continuous 110*38e8c45fSAndroid Build Coastguard Worker * 111*38e8c45fSAndroid Build Coastguard Worker * All values are in radians/second and measure the rate of rotation 112*38e8c45fSAndroid Build Coastguard Worker * around the X, Y and Z axis. 113*38e8c45fSAndroid Build Coastguard Worker */ 114*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_GYROSCOPE = 4, 115*38e8c45fSAndroid Build Coastguard Worker /** 116*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_LIGHT} 117*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: on-change 118*38e8c45fSAndroid Build Coastguard Worker * 119*38e8c45fSAndroid Build Coastguard Worker * The light sensor value is returned in SI lux units. 120*38e8c45fSAndroid Build Coastguard Worker */ 121*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_LIGHT = 5, 122*38e8c45fSAndroid Build Coastguard Worker /** 123*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_PRESSURE} 124*38e8c45fSAndroid Build Coastguard Worker * 125*38e8c45fSAndroid Build Coastguard Worker * The pressure sensor value is returned in hPa (millibar). 126*38e8c45fSAndroid Build Coastguard Worker */ 127*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_PRESSURE = 6, 128*38e8c45fSAndroid Build Coastguard Worker /** 129*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_PROXIMITY} 130*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: on-change 131*38e8c45fSAndroid Build Coastguard Worker * 132*38e8c45fSAndroid Build Coastguard Worker * The proximity sensor which turns the screen off and back on during calls is the 133*38e8c45fSAndroid Build Coastguard Worker * wake-up proximity sensor. Implement wake-up proximity sensor before implementing 134*38e8c45fSAndroid Build Coastguard Worker * a non wake-up proximity sensor. For the wake-up proximity sensor set the flag 135*38e8c45fSAndroid Build Coastguard Worker * SENSOR_FLAG_WAKE_UP. 136*38e8c45fSAndroid Build Coastguard Worker * The value corresponds to the distance to the nearest object in centimeters. 137*38e8c45fSAndroid Build Coastguard Worker */ 138*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_PROXIMITY = 8, 139*38e8c45fSAndroid Build Coastguard Worker /** 140*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_GRAVITY} 141*38e8c45fSAndroid Build Coastguard Worker * 142*38e8c45fSAndroid Build Coastguard Worker * All values are in SI units (m/s^2) and measure the direction and 143*38e8c45fSAndroid Build Coastguard Worker * magnitude of gravity. When the device is at rest, the output of 144*38e8c45fSAndroid Build Coastguard Worker * the gravity sensor should be identical to that of the accelerometer. 145*38e8c45fSAndroid Build Coastguard Worker */ 146*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_GRAVITY = 9, 147*38e8c45fSAndroid Build Coastguard Worker /** 148*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_LINEAR_ACCELERATION} 149*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: continuous 150*38e8c45fSAndroid Build Coastguard Worker * 151*38e8c45fSAndroid Build Coastguard Worker * All values are in SI units (m/s^2) and measure the acceleration of the 152*38e8c45fSAndroid Build Coastguard Worker * device not including the force of gravity. 153*38e8c45fSAndroid Build Coastguard Worker */ 154*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_LINEAR_ACCELERATION = 10, 155*38e8c45fSAndroid Build Coastguard Worker /** 156*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_ROTATION_VECTOR} 157*38e8c45fSAndroid Build Coastguard Worker */ 158*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_ROTATION_VECTOR = 11, 159*38e8c45fSAndroid Build Coastguard Worker /** 160*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_RELATIVE_HUMIDITY} 161*38e8c45fSAndroid Build Coastguard Worker * 162*38e8c45fSAndroid Build Coastguard Worker * The relative humidity sensor value is returned in percent. 163*38e8c45fSAndroid Build Coastguard Worker */ 164*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_RELATIVE_HUMIDITY = 12, 165*38e8c45fSAndroid Build Coastguard Worker /** 166*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_AMBIENT_TEMPERATURE} 167*38e8c45fSAndroid Build Coastguard Worker * 168*38e8c45fSAndroid Build Coastguard Worker * The ambient temperature sensor value is returned in Celcius. 169*38e8c45fSAndroid Build Coastguard Worker */ 170*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_AMBIENT_TEMPERATURE = 13, 171*38e8c45fSAndroid Build Coastguard Worker /** 172*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED} 173*38e8c45fSAndroid Build Coastguard Worker */ 174*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED = 14, 175*38e8c45fSAndroid Build Coastguard Worker /** 176*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_GAME_ROTATION_VECTOR} 177*38e8c45fSAndroid Build Coastguard Worker */ 178*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_GAME_ROTATION_VECTOR = 15, 179*38e8c45fSAndroid Build Coastguard Worker /** 180*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_GYROSCOPE_UNCALIBRATED} 181*38e8c45fSAndroid Build Coastguard Worker */ 182*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_GYROSCOPE_UNCALIBRATED = 16, 183*38e8c45fSAndroid Build Coastguard Worker /** 184*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_SIGNIFICANT_MOTION} 185*38e8c45fSAndroid Build Coastguard Worker */ 186*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_SIGNIFICANT_MOTION = 17, 187*38e8c45fSAndroid Build Coastguard Worker /** 188*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_STEP_DETECTOR} 189*38e8c45fSAndroid Build Coastguard Worker */ 190*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_STEP_DETECTOR = 18, 191*38e8c45fSAndroid Build Coastguard Worker /** 192*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_STEP_COUNTER} 193*38e8c45fSAndroid Build Coastguard Worker */ 194*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_STEP_COUNTER = 19, 195*38e8c45fSAndroid Build Coastguard Worker /** 196*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR} 197*38e8c45fSAndroid Build Coastguard Worker */ 198*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR = 20, 199*38e8c45fSAndroid Build Coastguard Worker /** 200*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_HEART_RATE} 201*38e8c45fSAndroid Build Coastguard Worker */ 202*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_HEART_RATE = 21, 203*38e8c45fSAndroid Build Coastguard Worker /** 204*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_POSE_6DOF} 205*38e8c45fSAndroid Build Coastguard Worker */ 206*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_POSE_6DOF = 28, 207*38e8c45fSAndroid Build Coastguard Worker /** 208*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_STATIONARY_DETECT} 209*38e8c45fSAndroid Build Coastguard Worker */ 210*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_STATIONARY_DETECT = 29, 211*38e8c45fSAndroid Build Coastguard Worker /** 212*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_MOTION_DETECT} 213*38e8c45fSAndroid Build Coastguard Worker */ 214*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_MOTION_DETECT = 30, 215*38e8c45fSAndroid Build Coastguard Worker /** 216*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_HEART_BEAT} 217*38e8c45fSAndroid Build Coastguard Worker */ 218*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_HEART_BEAT = 31, 219*38e8c45fSAndroid Build Coastguard Worker /** 220*38e8c45fSAndroid Build Coastguard Worker * A constant describing a dynamic sensor meta event sensor. 221*38e8c45fSAndroid Build Coastguard Worker * 222*38e8c45fSAndroid Build Coastguard Worker * A sensor event of this type is received when a dynamic sensor is added to or removed from 223*38e8c45fSAndroid Build Coastguard Worker * the system. This sensor type should always use special trigger report mode. 224*38e8c45fSAndroid Build Coastguard Worker */ 225*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_DYNAMIC_SENSOR_META = 32, 226*38e8c45fSAndroid Build Coastguard Worker /** 227*38e8c45fSAndroid Build Coastguard Worker * This sensor type is for delivering additional sensor information aside 228*38e8c45fSAndroid Build Coastguard Worker * from sensor event data. 229*38e8c45fSAndroid Build Coastguard Worker * 230*38e8c45fSAndroid Build Coastguard Worker * Additional information may include: 231*38e8c45fSAndroid Build Coastguard Worker * - {@link ASENSOR_ADDITIONAL_INFO_INTERNAL_TEMPERATURE} 232*38e8c45fSAndroid Build Coastguard Worker * - {@link ASENSOR_ADDITIONAL_INFO_SAMPLING} 233*38e8c45fSAndroid Build Coastguard Worker * - {@link ASENSOR_ADDITIONAL_INFO_SENSOR_PLACEMENT} 234*38e8c45fSAndroid Build Coastguard Worker * - {@link ASENSOR_ADDITIONAL_INFO_UNTRACKED_DELAY} 235*38e8c45fSAndroid Build Coastguard Worker * - {@link ASENSOR_ADDITIONAL_INFO_VEC3_CALIBRATION} 236*38e8c45fSAndroid Build Coastguard Worker * 237*38e8c45fSAndroid Build Coastguard Worker * This type will never bind to a sensor. In other words, no sensor in the 238*38e8c45fSAndroid Build Coastguard Worker * sensor list can have the type {@link ASENSOR_TYPE_ADDITIONAL_INFO}. 239*38e8c45fSAndroid Build Coastguard Worker * 240*38e8c45fSAndroid Build Coastguard Worker * If a device supports the sensor additional information feature, it will 241*38e8c45fSAndroid Build Coastguard Worker * report additional information events via {@link ASensorEvent} and will 242*38e8c45fSAndroid Build Coastguard Worker * have the type of {@link ASensorEvent} set to 243*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_ADDITIONAL_INFO} and the sensor of {@link ASensorEvent} set 244*38e8c45fSAndroid Build Coastguard Worker * to the handle of the reporting sensor. 245*38e8c45fSAndroid Build Coastguard Worker * 246*38e8c45fSAndroid Build Coastguard Worker * Additional information reports consist of multiple frames ordered by 247*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorEvent#timestamp}. The first frame in the report will have 248*38e8c45fSAndroid Build Coastguard Worker * a {@link AAdditionalInfoEvent#type} of 249*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_ADDITIONAL_INFO_BEGIN}, and the last frame in the report 250*38e8c45fSAndroid Build Coastguard Worker * will have a {@link AAdditionalInfoEvent#type} of 251*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_ADDITIONAL_INFO_END}. 252*38e8c45fSAndroid Build Coastguard Worker * 253*38e8c45fSAndroid Build Coastguard Worker */ 254*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_ADDITIONAL_INFO = 33, 255*38e8c45fSAndroid Build Coastguard Worker /** 256*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_LOW_LATENCY_OFFBODY_DETECT} 257*38e8c45fSAndroid Build Coastguard Worker */ 258*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_LOW_LATENCY_OFFBODY_DETECT = 34, 259*38e8c45fSAndroid Build Coastguard Worker /** 260*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_ACCELEROMETER_UNCALIBRATED} 261*38e8c45fSAndroid Build Coastguard Worker */ 262*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_ACCELEROMETER_UNCALIBRATED = 35, 263*38e8c45fSAndroid Build Coastguard Worker /** 264*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_HINGE_ANGLE} 265*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: on-change 266*38e8c45fSAndroid Build Coastguard Worker * 267*38e8c45fSAndroid Build Coastguard Worker * The hinge angle sensor value is returned in degrees. 268*38e8c45fSAndroid Build Coastguard Worker */ 269*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_HINGE_ANGLE = 36, 270*38e8c45fSAndroid Build Coastguard Worker /** 271*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_HEAD_TRACKER} 272*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: continuous 273*38e8c45fSAndroid Build Coastguard Worker * 274*38e8c45fSAndroid Build Coastguard Worker * Measures the orientation and rotational velocity of a user's head. Only for internal use 275*38e8c45fSAndroid Build Coastguard Worker * within the Android system. 276*38e8c45fSAndroid Build Coastguard Worker */ 277*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_HEAD_TRACKER = 37, 278*38e8c45fSAndroid Build Coastguard Worker /** 279*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_ACCELEROMETER_LIMITED_AXES} 280*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: continuous 281*38e8c45fSAndroid Build Coastguard Worker * 282*38e8c45fSAndroid Build Coastguard Worker * The first three values are in SI units (m/s^2) and measure the acceleration of the device 283*38e8c45fSAndroid Build Coastguard Worker * minus the force of gravity. The last three values indicate which acceleration axes are 284*38e8c45fSAndroid Build Coastguard Worker * supported. A value of 1.0 means supported and a value of 0 means not supported. 285*38e8c45fSAndroid Build Coastguard Worker */ 286*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_ACCELEROMETER_LIMITED_AXES = 38, 287*38e8c45fSAndroid Build Coastguard Worker /** 288*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_GYROSCOPE_LIMITED_AXES} 289*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: continuous 290*38e8c45fSAndroid Build Coastguard Worker * 291*38e8c45fSAndroid Build Coastguard Worker * The first three values are in radians/second and measure the rate of rotation around the X, 292*38e8c45fSAndroid Build Coastguard Worker * Y and Z axis. The last three values indicate which rotation axes are supported. A value of 293*38e8c45fSAndroid Build Coastguard Worker * 1.0 means supported and a value of 0 means not supported. 294*38e8c45fSAndroid Build Coastguard Worker */ 295*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_GYROSCOPE_LIMITED_AXES = 39, 296*38e8c45fSAndroid Build Coastguard Worker /** 297*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED} 298*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: continuous 299*38e8c45fSAndroid Build Coastguard Worker * 300*38e8c45fSAndroid Build Coastguard Worker * The first three values are in SI units (m/s^2) and measure the acceleration of the device 301*38e8c45fSAndroid Build Coastguard Worker * minus the force of gravity. The middle three values represent the estimated bias for each 302*38e8c45fSAndroid Build Coastguard Worker * axis. The last three values indicate which acceleration axes are supported. A value of 1.0 303*38e8c45fSAndroid Build Coastguard Worker * means supported and a value of 0 means not supported. 304*38e8c45fSAndroid Build Coastguard Worker */ 305*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED = 40, 306*38e8c45fSAndroid Build Coastguard Worker /** 307*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED} 308*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: continuous 309*38e8c45fSAndroid Build Coastguard Worker * 310*38e8c45fSAndroid Build Coastguard Worker * The first three values are in radians/second and measure the rate of rotation around the X, 311*38e8c45fSAndroid Build Coastguard Worker * Y and Z axis. The middle three values represent the estimated drift around each axis in 312*38e8c45fSAndroid Build Coastguard Worker * rad/s. The last three values indicate which rotation axes are supported. A value of 1.0 means 313*38e8c45fSAndroid Build Coastguard Worker * supported and a value of 0 means not supported. 314*38e8c45fSAndroid Build Coastguard Worker */ 315*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED = 41, 316*38e8c45fSAndroid Build Coastguard Worker /** 317*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_HEADING} 318*38e8c45fSAndroid Build Coastguard Worker * reporting-mode: continuous 319*38e8c45fSAndroid Build Coastguard Worker * 320*38e8c45fSAndroid Build Coastguard Worker * A heading sensor measures the direction in which the device is pointing 321*38e8c45fSAndroid Build Coastguard Worker * relative to true north in degrees. 322*38e8c45fSAndroid Build Coastguard Worker */ 323*38e8c45fSAndroid Build Coastguard Worker ASENSOR_TYPE_HEADING = 42, 324*38e8c45fSAndroid Build Coastguard Worker }; 325*38e8c45fSAndroid Build Coastguard Worker 326*38e8c45fSAndroid Build Coastguard Worker /** 327*38e8c45fSAndroid Build Coastguard Worker * Sensor accuracy measure. 328*38e8c45fSAndroid Build Coastguard Worker */ 329*38e8c45fSAndroid Build Coastguard Worker enum { 330*38e8c45fSAndroid Build Coastguard Worker /** no contact */ 331*38e8c45fSAndroid Build Coastguard Worker ASENSOR_STATUS_NO_CONTACT = -1, 332*38e8c45fSAndroid Build Coastguard Worker /** unreliable */ 333*38e8c45fSAndroid Build Coastguard Worker ASENSOR_STATUS_UNRELIABLE = 0, 334*38e8c45fSAndroid Build Coastguard Worker /** low accuracy */ 335*38e8c45fSAndroid Build Coastguard Worker ASENSOR_STATUS_ACCURACY_LOW = 1, 336*38e8c45fSAndroid Build Coastguard Worker /** medium accuracy */ 337*38e8c45fSAndroid Build Coastguard Worker ASENSOR_STATUS_ACCURACY_MEDIUM = 2, 338*38e8c45fSAndroid Build Coastguard Worker /** high accuracy */ 339*38e8c45fSAndroid Build Coastguard Worker ASENSOR_STATUS_ACCURACY_HIGH = 3 340*38e8c45fSAndroid Build Coastguard Worker }; 341*38e8c45fSAndroid Build Coastguard Worker 342*38e8c45fSAndroid Build Coastguard Worker /** 343*38e8c45fSAndroid Build Coastguard Worker * Sensor Reporting Modes. 344*38e8c45fSAndroid Build Coastguard Worker */ 345*38e8c45fSAndroid Build Coastguard Worker enum { 346*38e8c45fSAndroid Build Coastguard Worker /** invalid reporting mode */ 347*38e8c45fSAndroid Build Coastguard Worker AREPORTING_MODE_INVALID = -1, 348*38e8c45fSAndroid Build Coastguard Worker /** continuous reporting */ 349*38e8c45fSAndroid Build Coastguard Worker AREPORTING_MODE_CONTINUOUS = 0, 350*38e8c45fSAndroid Build Coastguard Worker /** reporting on change */ 351*38e8c45fSAndroid Build Coastguard Worker AREPORTING_MODE_ON_CHANGE = 1, 352*38e8c45fSAndroid Build Coastguard Worker /** on shot reporting */ 353*38e8c45fSAndroid Build Coastguard Worker AREPORTING_MODE_ONE_SHOT = 2, 354*38e8c45fSAndroid Build Coastguard Worker /** special trigger reporting */ 355*38e8c45fSAndroid Build Coastguard Worker AREPORTING_MODE_SPECIAL_TRIGGER = 3 356*38e8c45fSAndroid Build Coastguard Worker }; 357*38e8c45fSAndroid Build Coastguard Worker 358*38e8c45fSAndroid Build Coastguard Worker /** 359*38e8c45fSAndroid Build Coastguard Worker * Sensor Direct Report Rates. 360*38e8c45fSAndroid Build Coastguard Worker */ 361*38e8c45fSAndroid Build Coastguard Worker enum { 362*38e8c45fSAndroid Build Coastguard Worker /** stopped */ 363*38e8c45fSAndroid Build Coastguard Worker ASENSOR_DIRECT_RATE_STOP = 0, 364*38e8c45fSAndroid Build Coastguard Worker /** nominal 50Hz */ 365*38e8c45fSAndroid Build Coastguard Worker ASENSOR_DIRECT_RATE_NORMAL = 1, 366*38e8c45fSAndroid Build Coastguard Worker /** nominal 200Hz */ 367*38e8c45fSAndroid Build Coastguard Worker ASENSOR_DIRECT_RATE_FAST = 2, 368*38e8c45fSAndroid Build Coastguard Worker /** nominal 800Hz */ 369*38e8c45fSAndroid Build Coastguard Worker ASENSOR_DIRECT_RATE_VERY_FAST = 3 370*38e8c45fSAndroid Build Coastguard Worker }; 371*38e8c45fSAndroid Build Coastguard Worker 372*38e8c45fSAndroid Build Coastguard Worker /** 373*38e8c45fSAndroid Build Coastguard Worker * Sensor Direct Channel Type. 374*38e8c45fSAndroid Build Coastguard Worker */ 375*38e8c45fSAndroid Build Coastguard Worker enum { 376*38e8c45fSAndroid Build Coastguard Worker /** shared memory created by ASharedMemory_create */ 377*38e8c45fSAndroid Build Coastguard Worker ASENSOR_DIRECT_CHANNEL_TYPE_SHARED_MEMORY = 1, 378*38e8c45fSAndroid Build Coastguard Worker /** AHardwareBuffer */ 379*38e8c45fSAndroid Build Coastguard Worker ASENSOR_DIRECT_CHANNEL_TYPE_HARDWARE_BUFFER = 2 380*38e8c45fSAndroid Build Coastguard Worker }; 381*38e8c45fSAndroid Build Coastguard Worker 382*38e8c45fSAndroid Build Coastguard Worker /** 383*38e8c45fSAndroid Build Coastguard Worker * Sensor Additional Info Types. 384*38e8c45fSAndroid Build Coastguard Worker * 385*38e8c45fSAndroid Build Coastguard Worker * Used to populate {@link AAdditionalInfoEvent#type}. 386*38e8c45fSAndroid Build Coastguard Worker */ 387*38e8c45fSAndroid Build Coastguard Worker enum { 388*38e8c45fSAndroid Build Coastguard Worker /** Marks the beginning of additional information frames */ 389*38e8c45fSAndroid Build Coastguard Worker ASENSOR_ADDITIONAL_INFO_BEGIN = 0, 390*38e8c45fSAndroid Build Coastguard Worker 391*38e8c45fSAndroid Build Coastguard Worker /** Marks the end of additional information frames */ 392*38e8c45fSAndroid Build Coastguard Worker ASENSOR_ADDITIONAL_INFO_END = 1, 393*38e8c45fSAndroid Build Coastguard Worker 394*38e8c45fSAndroid Build Coastguard Worker /** 395*38e8c45fSAndroid Build Coastguard Worker * Estimation of the delay that is not tracked by sensor timestamps. This 396*38e8c45fSAndroid Build Coastguard Worker * includes delay introduced by sensor front-end filtering, data transport, 397*38e8c45fSAndroid Build Coastguard Worker * etc. 398*38e8c45fSAndroid Build Coastguard Worker * float[2]: delay in seconds, standard deviation of estimated value 399*38e8c45fSAndroid Build Coastguard Worker */ 400*38e8c45fSAndroid Build Coastguard Worker ASENSOR_ADDITIONAL_INFO_UNTRACKED_DELAY = 0x10000, 401*38e8c45fSAndroid Build Coastguard Worker 402*38e8c45fSAndroid Build Coastguard Worker /** float: Celsius temperature */ 403*38e8c45fSAndroid Build Coastguard Worker ASENSOR_ADDITIONAL_INFO_INTERNAL_TEMPERATURE, 404*38e8c45fSAndroid Build Coastguard Worker 405*38e8c45fSAndroid Build Coastguard Worker /** 406*38e8c45fSAndroid Build Coastguard Worker * First three rows of a homogeneous matrix, which represents calibration to 407*38e8c45fSAndroid Build Coastguard Worker * a three-element vector raw sensor reading. 408*38e8c45fSAndroid Build Coastguard Worker * float[12]: 3x4 matrix in row major order 409*38e8c45fSAndroid Build Coastguard Worker */ 410*38e8c45fSAndroid Build Coastguard Worker ASENSOR_ADDITIONAL_INFO_VEC3_CALIBRATION, 411*38e8c45fSAndroid Build Coastguard Worker 412*38e8c45fSAndroid Build Coastguard Worker /** 413*38e8c45fSAndroid Build Coastguard Worker * Location and orientation of sensor element in the device frame: origin is 414*38e8c45fSAndroid Build Coastguard Worker * the geometric center of the mobile device screen surface; the axis 415*38e8c45fSAndroid Build Coastguard Worker * definition corresponds to Android sensor definitions. 416*38e8c45fSAndroid Build Coastguard Worker * float[12]: 3x4 matrix in row major order 417*38e8c45fSAndroid Build Coastguard Worker */ 418*38e8c45fSAndroid Build Coastguard Worker ASENSOR_ADDITIONAL_INFO_SENSOR_PLACEMENT, 419*38e8c45fSAndroid Build Coastguard Worker 420*38e8c45fSAndroid Build Coastguard Worker /** 421*38e8c45fSAndroid Build Coastguard Worker * float[2]: raw sample period in seconds, 422*38e8c45fSAndroid Build Coastguard Worker * standard deviation of sampling period 423*38e8c45fSAndroid Build Coastguard Worker */ 424*38e8c45fSAndroid Build Coastguard Worker ASENSOR_ADDITIONAL_INFO_SAMPLING, 425*38e8c45fSAndroid Build Coastguard Worker }; 426*38e8c45fSAndroid Build Coastguard Worker 427*38e8c45fSAndroid Build Coastguard Worker /* 428*38e8c45fSAndroid Build Coastguard Worker * A few useful constants 429*38e8c45fSAndroid Build Coastguard Worker */ 430*38e8c45fSAndroid Build Coastguard Worker 431*38e8c45fSAndroid Build Coastguard Worker /** Earth's gravity in m/s^2 */ 432*38e8c45fSAndroid Build Coastguard Worker #define ASENSOR_STANDARD_GRAVITY (9.80665f) 433*38e8c45fSAndroid Build Coastguard Worker /** Maximum magnetic field on Earth's surface in uT */ 434*38e8c45fSAndroid Build Coastguard Worker #define ASENSOR_MAGNETIC_FIELD_EARTH_MAX (60.0f) 435*38e8c45fSAndroid Build Coastguard Worker /** Minimum magnetic field on Earth's surface in uT*/ 436*38e8c45fSAndroid Build Coastguard Worker #define ASENSOR_MAGNETIC_FIELD_EARTH_MIN (30.0f) 437*38e8c45fSAndroid Build Coastguard Worker 438*38e8c45fSAndroid Build Coastguard Worker /** 439*38e8c45fSAndroid Build Coastguard Worker * A sensor event. 440*38e8c45fSAndroid Build Coastguard Worker */ 441*38e8c45fSAndroid Build Coastguard Worker 442*38e8c45fSAndroid Build Coastguard Worker /* NOTE: changes to these structs have to be backward compatible */ 443*38e8c45fSAndroid Build Coastguard Worker typedef struct ASensorVector { 444*38e8c45fSAndroid Build Coastguard Worker union { 445*38e8c45fSAndroid Build Coastguard Worker float v[3]; 446*38e8c45fSAndroid Build Coastguard Worker struct { 447*38e8c45fSAndroid Build Coastguard Worker float x; 448*38e8c45fSAndroid Build Coastguard Worker float y; 449*38e8c45fSAndroid Build Coastguard Worker float z; 450*38e8c45fSAndroid Build Coastguard Worker }; 451*38e8c45fSAndroid Build Coastguard Worker struct { 452*38e8c45fSAndroid Build Coastguard Worker float azimuth; 453*38e8c45fSAndroid Build Coastguard Worker float pitch; 454*38e8c45fSAndroid Build Coastguard Worker float roll; 455*38e8c45fSAndroid Build Coastguard Worker }; 456*38e8c45fSAndroid Build Coastguard Worker }; 457*38e8c45fSAndroid Build Coastguard Worker int8_t status; 458*38e8c45fSAndroid Build Coastguard Worker uint8_t reserved[3]; 459*38e8c45fSAndroid Build Coastguard Worker } ASensorVector; 460*38e8c45fSAndroid Build Coastguard Worker 461*38e8c45fSAndroid Build Coastguard Worker typedef struct AMetaDataEvent { 462*38e8c45fSAndroid Build Coastguard Worker int32_t what; 463*38e8c45fSAndroid Build Coastguard Worker int32_t sensor; 464*38e8c45fSAndroid Build Coastguard Worker } AMetaDataEvent; 465*38e8c45fSAndroid Build Coastguard Worker 466*38e8c45fSAndroid Build Coastguard Worker typedef struct AUncalibratedEvent { 467*38e8c45fSAndroid Build Coastguard Worker union { 468*38e8c45fSAndroid Build Coastguard Worker float uncalib[3]; 469*38e8c45fSAndroid Build Coastguard Worker struct { 470*38e8c45fSAndroid Build Coastguard Worker float x_uncalib; 471*38e8c45fSAndroid Build Coastguard Worker float y_uncalib; 472*38e8c45fSAndroid Build Coastguard Worker float z_uncalib; 473*38e8c45fSAndroid Build Coastguard Worker }; 474*38e8c45fSAndroid Build Coastguard Worker }; 475*38e8c45fSAndroid Build Coastguard Worker union { 476*38e8c45fSAndroid Build Coastguard Worker float bias[3]; 477*38e8c45fSAndroid Build Coastguard Worker struct { 478*38e8c45fSAndroid Build Coastguard Worker float x_bias; 479*38e8c45fSAndroid Build Coastguard Worker float y_bias; 480*38e8c45fSAndroid Build Coastguard Worker float z_bias; 481*38e8c45fSAndroid Build Coastguard Worker }; 482*38e8c45fSAndroid Build Coastguard Worker }; 483*38e8c45fSAndroid Build Coastguard Worker } AUncalibratedEvent; 484*38e8c45fSAndroid Build Coastguard Worker 485*38e8c45fSAndroid Build Coastguard Worker typedef struct AHeartRateEvent { 486*38e8c45fSAndroid Build Coastguard Worker float bpm; 487*38e8c45fSAndroid Build Coastguard Worker int8_t status; 488*38e8c45fSAndroid Build Coastguard Worker } AHeartRateEvent; 489*38e8c45fSAndroid Build Coastguard Worker 490*38e8c45fSAndroid Build Coastguard Worker typedef struct ADynamicSensorEvent { 491*38e8c45fSAndroid Build Coastguard Worker int32_t connected; 492*38e8c45fSAndroid Build Coastguard Worker int32_t handle; 493*38e8c45fSAndroid Build Coastguard Worker } ADynamicSensorEvent; 494*38e8c45fSAndroid Build Coastguard Worker 495*38e8c45fSAndroid Build Coastguard Worker typedef struct AAdditionalInfoEvent { 496*38e8c45fSAndroid Build Coastguard Worker /** 497*38e8c45fSAndroid Build Coastguard Worker * Event type, such as ASENSOR_ADDITIONAL_INFO_BEGIN, ASENSOR_ADDITIONAL_INFO_END and others. 498*38e8c45fSAndroid Build Coastguard Worker * Refer to {@link ASENSOR_TYPE_ADDITIONAL_INFO} for the expected reporting behavior. 499*38e8c45fSAndroid Build Coastguard Worker */ 500*38e8c45fSAndroid Build Coastguard Worker int32_t type; 501*38e8c45fSAndroid Build Coastguard Worker int32_t serial; 502*38e8c45fSAndroid Build Coastguard Worker union { 503*38e8c45fSAndroid Build Coastguard Worker int32_t data_int32[14]; 504*38e8c45fSAndroid Build Coastguard Worker float data_float[14]; 505*38e8c45fSAndroid Build Coastguard Worker }; 506*38e8c45fSAndroid Build Coastguard Worker } AAdditionalInfoEvent; 507*38e8c45fSAndroid Build Coastguard Worker 508*38e8c45fSAndroid Build Coastguard Worker typedef struct AHeadTrackerEvent { 509*38e8c45fSAndroid Build Coastguard Worker /** 510*38e8c45fSAndroid Build Coastguard Worker * The fields rx, ry, rz are an Euler vector (rotation vector, i.e. a vector 511*38e8c45fSAndroid Build Coastguard Worker * whose direction indicates the axis of rotation and magnitude indicates 512*38e8c45fSAndroid Build Coastguard Worker * the angle to rotate around that axis) representing the transform from 513*38e8c45fSAndroid Build Coastguard Worker * the (arbitrary, possibly slowly drifting) reference frame to the 514*38e8c45fSAndroid Build Coastguard Worker * head frame. Expressed in radians. Magnitude of the vector must be 515*38e8c45fSAndroid Build Coastguard Worker * in the range [0, pi], while the value of individual axes are 516*38e8c45fSAndroid Build Coastguard Worker * in the range [-pi, pi]. 517*38e8c45fSAndroid Build Coastguard Worker */ 518*38e8c45fSAndroid Build Coastguard Worker float rx; 519*38e8c45fSAndroid Build Coastguard Worker float ry; 520*38e8c45fSAndroid Build Coastguard Worker float rz; 521*38e8c45fSAndroid Build Coastguard Worker 522*38e8c45fSAndroid Build Coastguard Worker /** 523*38e8c45fSAndroid Build Coastguard Worker * The fields vx, vy, vz are an Euler vector (rotation vector) representing 524*38e8c45fSAndroid Build Coastguard Worker * the angular velocity of the head (relative to itself), in radians per 525*38e8c45fSAndroid Build Coastguard Worker * second. The direction of this vector indicates the axis of rotation, and 526*38e8c45fSAndroid Build Coastguard Worker * the magnitude indicates the rate of rotation. 527*38e8c45fSAndroid Build Coastguard Worker */ 528*38e8c45fSAndroid Build Coastguard Worker float vx; 529*38e8c45fSAndroid Build Coastguard Worker float vy; 530*38e8c45fSAndroid Build Coastguard Worker float vz; 531*38e8c45fSAndroid Build Coastguard Worker 532*38e8c45fSAndroid Build Coastguard Worker /** 533*38e8c45fSAndroid Build Coastguard Worker * This value changes each time the reference frame is suddenly and 534*38e8c45fSAndroid Build Coastguard Worker * significantly changed, for example if an orientation filter algorithm 535*38e8c45fSAndroid Build Coastguard Worker * used for determining the orientation has had its state reset. 536*38e8c45fSAndroid Build Coastguard Worker */ 537*38e8c45fSAndroid Build Coastguard Worker int32_t discontinuity_count; 538*38e8c45fSAndroid Build Coastguard Worker } AHeadTrackerEvent; 539*38e8c45fSAndroid Build Coastguard Worker 540*38e8c45fSAndroid Build Coastguard Worker typedef struct ALimitedAxesImuEvent { 541*38e8c45fSAndroid Build Coastguard Worker union { 542*38e8c45fSAndroid Build Coastguard Worker float calib[3]; 543*38e8c45fSAndroid Build Coastguard Worker struct { 544*38e8c45fSAndroid Build Coastguard Worker float x; 545*38e8c45fSAndroid Build Coastguard Worker float y; 546*38e8c45fSAndroid Build Coastguard Worker float z; 547*38e8c45fSAndroid Build Coastguard Worker }; 548*38e8c45fSAndroid Build Coastguard Worker }; 549*38e8c45fSAndroid Build Coastguard Worker union { 550*38e8c45fSAndroid Build Coastguard Worker float supported[3]; 551*38e8c45fSAndroid Build Coastguard Worker struct { 552*38e8c45fSAndroid Build Coastguard Worker float x_supported; 553*38e8c45fSAndroid Build Coastguard Worker float y_supported; 554*38e8c45fSAndroid Build Coastguard Worker float z_supported; 555*38e8c45fSAndroid Build Coastguard Worker }; 556*38e8c45fSAndroid Build Coastguard Worker }; 557*38e8c45fSAndroid Build Coastguard Worker } ALimitedAxesImuEvent; 558*38e8c45fSAndroid Build Coastguard Worker 559*38e8c45fSAndroid Build Coastguard Worker typedef struct ALimitedAxesImuUncalibratedEvent { 560*38e8c45fSAndroid Build Coastguard Worker union { 561*38e8c45fSAndroid Build Coastguard Worker float uncalib[3]; 562*38e8c45fSAndroid Build Coastguard Worker struct { 563*38e8c45fSAndroid Build Coastguard Worker float x_uncalib; 564*38e8c45fSAndroid Build Coastguard Worker float y_uncalib; 565*38e8c45fSAndroid Build Coastguard Worker float z_uncalib; 566*38e8c45fSAndroid Build Coastguard Worker }; 567*38e8c45fSAndroid Build Coastguard Worker }; 568*38e8c45fSAndroid Build Coastguard Worker union { 569*38e8c45fSAndroid Build Coastguard Worker float bias[3]; 570*38e8c45fSAndroid Build Coastguard Worker struct { 571*38e8c45fSAndroid Build Coastguard Worker float x_bias; 572*38e8c45fSAndroid Build Coastguard Worker float y_bias; 573*38e8c45fSAndroid Build Coastguard Worker float z_bias; 574*38e8c45fSAndroid Build Coastguard Worker }; 575*38e8c45fSAndroid Build Coastguard Worker }; 576*38e8c45fSAndroid Build Coastguard Worker union { 577*38e8c45fSAndroid Build Coastguard Worker float supported[3]; 578*38e8c45fSAndroid Build Coastguard Worker struct { 579*38e8c45fSAndroid Build Coastguard Worker float x_supported; 580*38e8c45fSAndroid Build Coastguard Worker float y_supported; 581*38e8c45fSAndroid Build Coastguard Worker float z_supported; 582*38e8c45fSAndroid Build Coastguard Worker }; 583*38e8c45fSAndroid Build Coastguard Worker }; 584*38e8c45fSAndroid Build Coastguard Worker } ALimitedAxesImuUncalibratedEvent; 585*38e8c45fSAndroid Build Coastguard Worker 586*38e8c45fSAndroid Build Coastguard Worker typedef struct AHeadingEvent { 587*38e8c45fSAndroid Build Coastguard Worker /** 588*38e8c45fSAndroid Build Coastguard Worker * The direction in which the device is pointing relative to true north in 589*38e8c45fSAndroid Build Coastguard Worker * degrees. The value must be between 0.0 (inclusive) and 360.0 (exclusive), 590*38e8c45fSAndroid Build Coastguard Worker * with 0 indicating north, 90 east, 180 south, and 270 west. 591*38e8c45fSAndroid Build Coastguard Worker */ 592*38e8c45fSAndroid Build Coastguard Worker float heading; 593*38e8c45fSAndroid Build Coastguard Worker /** 594*38e8c45fSAndroid Build Coastguard Worker * Accuracy is defined at 68% confidence. In the case where the underlying 595*38e8c45fSAndroid Build Coastguard Worker * distribution is assumed Gaussian normal, this would be considered one 596*38e8c45fSAndroid Build Coastguard Worker * standard deviation. For example, if the heading returns 60 degrees, and 597*38e8c45fSAndroid Build Coastguard Worker * accuracy returns 10 degrees, then there is a 68 percent probability of 598*38e8c45fSAndroid Build Coastguard Worker * the true heading being between 50 degrees and 70 degrees. 599*38e8c45fSAndroid Build Coastguard Worker */ 600*38e8c45fSAndroid Build Coastguard Worker float accuracy; 601*38e8c45fSAndroid Build Coastguard Worker } AHeadingEvent; 602*38e8c45fSAndroid Build Coastguard Worker 603*38e8c45fSAndroid Build Coastguard Worker // LINT.IfChange 604*38e8c45fSAndroid Build Coastguard Worker /** 605*38e8c45fSAndroid Build Coastguard Worker * Information that describes a sensor event, refer to 606*38e8c45fSAndroid Build Coastguard Worker * <a href="/reference/android/hardware/SensorEvent">SensorEvent</a> for additional 607*38e8c45fSAndroid Build Coastguard Worker * documentation. 608*38e8c45fSAndroid Build Coastguard Worker * 609*38e8c45fSAndroid Build Coastguard Worker * NOTE: changes to this struct has to be backward compatible and reflected in 610*38e8c45fSAndroid Build Coastguard Worker * sensors_event_t 611*38e8c45fSAndroid Build Coastguard Worker */ 612*38e8c45fSAndroid Build Coastguard Worker typedef struct ASensorEvent { 613*38e8c45fSAndroid Build Coastguard Worker /* sizeof(struct ASensorEvent) */ 614*38e8c45fSAndroid Build Coastguard Worker int32_t version; 615*38e8c45fSAndroid Build Coastguard Worker /** The sensor that generates this event */ 616*38e8c45fSAndroid Build Coastguard Worker int32_t sensor; 617*38e8c45fSAndroid Build Coastguard Worker /** Sensor type for the event, such as {@link ASENSOR_TYPE_ACCELEROMETER} */ 618*38e8c45fSAndroid Build Coastguard Worker int32_t type; 619*38e8c45fSAndroid Build Coastguard Worker /** do not use */ 620*38e8c45fSAndroid Build Coastguard Worker int32_t reserved0; 621*38e8c45fSAndroid Build Coastguard Worker /** 622*38e8c45fSAndroid Build Coastguard Worker * The time in nanoseconds at which the event happened, and its behavior 623*38e8c45fSAndroid Build Coastguard Worker * is identical to <a href="/reference/android/hardware/SensorEvent#timestamp"> 624*38e8c45fSAndroid Build Coastguard Worker * SensorEvent::timestamp</a> in Java API. 625*38e8c45fSAndroid Build Coastguard Worker */ 626*38e8c45fSAndroid Build Coastguard Worker int64_t timestamp; 627*38e8c45fSAndroid Build Coastguard Worker union { 628*38e8c45fSAndroid Build Coastguard Worker union { 629*38e8c45fSAndroid Build Coastguard Worker float data[16]; 630*38e8c45fSAndroid Build Coastguard Worker ASensorVector vector; 631*38e8c45fSAndroid Build Coastguard Worker ASensorVector acceleration; 632*38e8c45fSAndroid Build Coastguard Worker ASensorVector gyro; 633*38e8c45fSAndroid Build Coastguard Worker ASensorVector magnetic; 634*38e8c45fSAndroid Build Coastguard Worker float temperature; 635*38e8c45fSAndroid Build Coastguard Worker float distance; 636*38e8c45fSAndroid Build Coastguard Worker float light; 637*38e8c45fSAndroid Build Coastguard Worker float pressure; 638*38e8c45fSAndroid Build Coastguard Worker float relative_humidity; 639*38e8c45fSAndroid Build Coastguard Worker AUncalibratedEvent uncalibrated_acceleration; 640*38e8c45fSAndroid Build Coastguard Worker AUncalibratedEvent uncalibrated_gyro; 641*38e8c45fSAndroid Build Coastguard Worker AUncalibratedEvent uncalibrated_magnetic; 642*38e8c45fSAndroid Build Coastguard Worker AMetaDataEvent meta_data; 643*38e8c45fSAndroid Build Coastguard Worker AHeartRateEvent heart_rate; 644*38e8c45fSAndroid Build Coastguard Worker ADynamicSensorEvent dynamic_sensor_meta; 645*38e8c45fSAndroid Build Coastguard Worker AAdditionalInfoEvent additional_info; 646*38e8c45fSAndroid Build Coastguard Worker AHeadTrackerEvent head_tracker; 647*38e8c45fSAndroid Build Coastguard Worker ALimitedAxesImuEvent limited_axes_imu; 648*38e8c45fSAndroid Build Coastguard Worker ALimitedAxesImuUncalibratedEvent limited_axes_imu_uncalibrated; 649*38e8c45fSAndroid Build Coastguard Worker AHeadingEvent heading; 650*38e8c45fSAndroid Build Coastguard Worker }; 651*38e8c45fSAndroid Build Coastguard Worker union { 652*38e8c45fSAndroid Build Coastguard Worker uint64_t data[8]; 653*38e8c45fSAndroid Build Coastguard Worker uint64_t step_counter; 654*38e8c45fSAndroid Build Coastguard Worker } u64; 655*38e8c45fSAndroid Build Coastguard Worker }; 656*38e8c45fSAndroid Build Coastguard Worker 657*38e8c45fSAndroid Build Coastguard Worker uint32_t flags; 658*38e8c45fSAndroid Build Coastguard Worker int32_t reserved1[3]; 659*38e8c45fSAndroid Build Coastguard Worker } ASensorEvent; 660*38e8c45fSAndroid Build Coastguard Worker // LINT.ThenChange(hardware/libhardware/include/hardware/sensors.h) 661*38e8c45fSAndroid Build Coastguard Worker 662*38e8c45fSAndroid Build Coastguard Worker struct ASensorManager; 663*38e8c45fSAndroid Build Coastguard Worker /** 664*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager} is an opaque type to manage sensors and 665*38e8c45fSAndroid Build Coastguard Worker * events queues. 666*38e8c45fSAndroid Build Coastguard Worker * 667*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager} is a singleton that can be obtained using 668*38e8c45fSAndroid Build Coastguard Worker * ASensorManager_getInstance(). 669*38e8c45fSAndroid Build Coastguard Worker * 670*38e8c45fSAndroid Build Coastguard Worker * This file provides a set of functions that uses {@link 671*38e8c45fSAndroid Build Coastguard Worker * ASensorManager} to access and list hardware sensors, and 672*38e8c45fSAndroid Build Coastguard Worker * create and destroy event queues: 673*38e8c45fSAndroid Build Coastguard Worker * - ASensorManager_getSensorList() 674*38e8c45fSAndroid Build Coastguard Worker * - ASensorManager_getDefaultSensor() 675*38e8c45fSAndroid Build Coastguard Worker * - ASensorManager_getDefaultSensorEx() 676*38e8c45fSAndroid Build Coastguard Worker * - ASensorManager_createEventQueue() 677*38e8c45fSAndroid Build Coastguard Worker * - ASensorManager_destroyEventQueue() 678*38e8c45fSAndroid Build Coastguard Worker */ 679*38e8c45fSAndroid Build Coastguard Worker typedef struct ASensorManager ASensorManager; 680*38e8c45fSAndroid Build Coastguard Worker 681*38e8c45fSAndroid Build Coastguard Worker 682*38e8c45fSAndroid Build Coastguard Worker struct ASensorEventQueue; 683*38e8c45fSAndroid Build Coastguard Worker /** 684*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorEventQueue} is an opaque type that provides access to 685*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorEvent} from hardware sensors. 686*38e8c45fSAndroid Build Coastguard Worker * 687*38e8c45fSAndroid Build Coastguard Worker * A new {@link ASensorEventQueue} can be obtained using ASensorManager_createEventQueue(). 688*38e8c45fSAndroid Build Coastguard Worker * 689*38e8c45fSAndroid Build Coastguard Worker * This file provides a set of functions to enable and disable 690*38e8c45fSAndroid Build Coastguard Worker * sensors, check and get events, and set event rates on a {@link 691*38e8c45fSAndroid Build Coastguard Worker * ASensorEventQueue}. 692*38e8c45fSAndroid Build Coastguard Worker * - ASensorEventQueue_enableSensor() 693*38e8c45fSAndroid Build Coastguard Worker * - ASensorEventQueue_disableSensor() 694*38e8c45fSAndroid Build Coastguard Worker * - ASensorEventQueue_hasEvents() 695*38e8c45fSAndroid Build Coastguard Worker * - ASensorEventQueue_getEvents() 696*38e8c45fSAndroid Build Coastguard Worker * - ASensorEventQueue_setEventRate() 697*38e8c45fSAndroid Build Coastguard Worker * - ASensorEventQueue_requestAdditionalInfoEvents() 698*38e8c45fSAndroid Build Coastguard Worker */ 699*38e8c45fSAndroid Build Coastguard Worker typedef struct ASensorEventQueue ASensorEventQueue; 700*38e8c45fSAndroid Build Coastguard Worker 701*38e8c45fSAndroid Build Coastguard Worker struct ASensor; 702*38e8c45fSAndroid Build Coastguard Worker /** 703*38e8c45fSAndroid Build Coastguard Worker * {@link ASensor} is an opaque type that provides information about 704*38e8c45fSAndroid Build Coastguard Worker * an hardware sensors. 705*38e8c45fSAndroid Build Coastguard Worker * 706*38e8c45fSAndroid Build Coastguard Worker * A {@link ASensor} pointer can be obtained using 707*38e8c45fSAndroid Build Coastguard Worker * ASensorManager_getDefaultSensor(), 708*38e8c45fSAndroid Build Coastguard Worker * ASensorManager_getDefaultSensorEx() or from a {@link ASensorList}. 709*38e8c45fSAndroid Build Coastguard Worker * 710*38e8c45fSAndroid Build Coastguard Worker * This file provides a set of functions to access properties of a 711*38e8c45fSAndroid Build Coastguard Worker * {@link ASensor}: 712*38e8c45fSAndroid Build Coastguard Worker * - ASensor_getName() 713*38e8c45fSAndroid Build Coastguard Worker * - ASensor_getVendor() 714*38e8c45fSAndroid Build Coastguard Worker * - ASensor_getType() 715*38e8c45fSAndroid Build Coastguard Worker * - ASensor_getResolution() 716*38e8c45fSAndroid Build Coastguard Worker * - ASensor_getMinDelay() 717*38e8c45fSAndroid Build Coastguard Worker * - ASensor_getFifoMaxEventCount() 718*38e8c45fSAndroid Build Coastguard Worker * - ASensor_getFifoReservedEventCount() 719*38e8c45fSAndroid Build Coastguard Worker * - ASensor_getStringType() 720*38e8c45fSAndroid Build Coastguard Worker * - ASensor_getReportingMode() 721*38e8c45fSAndroid Build Coastguard Worker * - ASensor_isWakeUpSensor() 722*38e8c45fSAndroid Build Coastguard Worker * - ASensor_getHandle() 723*38e8c45fSAndroid Build Coastguard Worker */ 724*38e8c45fSAndroid Build Coastguard Worker typedef struct ASensor ASensor; 725*38e8c45fSAndroid Build Coastguard Worker /** 726*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorRef} is a type for constant pointers to {@link ASensor}. 727*38e8c45fSAndroid Build Coastguard Worker * 728*38e8c45fSAndroid Build Coastguard Worker * This is used to define entry in {@link ASensorList} arrays. 729*38e8c45fSAndroid Build Coastguard Worker */ 730*38e8c45fSAndroid Build Coastguard Worker typedef ASensor const* ASensorRef; 731*38e8c45fSAndroid Build Coastguard Worker /** 732*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorList} is an array of reference to {@link ASensor}. 733*38e8c45fSAndroid Build Coastguard Worker * 734*38e8c45fSAndroid Build Coastguard Worker * A {@link ASensorList} can be initialized using ASensorManager_getSensorList(). 735*38e8c45fSAndroid Build Coastguard Worker */ 736*38e8c45fSAndroid Build Coastguard Worker typedef ASensorRef const* ASensorList; 737*38e8c45fSAndroid Build Coastguard Worker 738*38e8c45fSAndroid Build Coastguard Worker /*****************************************************************************/ 739*38e8c45fSAndroid Build Coastguard Worker 740*38e8c45fSAndroid Build Coastguard Worker /** 741*38e8c45fSAndroid Build Coastguard Worker * Get a reference to the sensor manager. ASensorManager is a singleton 742*38e8c45fSAndroid Build Coastguard Worker * per package as different packages may have access to different sensors. 743*38e8c45fSAndroid Build Coastguard Worker * 744*38e8c45fSAndroid Build Coastguard Worker * Deprecated: Use ASensorManager_getInstanceForPackage(const char*) instead. 745*38e8c45fSAndroid Build Coastguard Worker * 746*38e8c45fSAndroid Build Coastguard Worker * Example: 747*38e8c45fSAndroid Build Coastguard Worker * 748*38e8c45fSAndroid Build Coastguard Worker * ASensorManager* sensorManager = ASensorManager_getInstance(); 749*38e8c45fSAndroid Build Coastguard Worker * 750*38e8c45fSAndroid Build Coastguard Worker */ 751*38e8c45fSAndroid Build Coastguard Worker ASensorManager* ASensorManager_getInstance() 752*38e8c45fSAndroid Build Coastguard Worker __DEPRECATED_IN(26, "Use ASensorManager_getInstanceForPackage instead"); 753*38e8c45fSAndroid Build Coastguard Worker 754*38e8c45fSAndroid Build Coastguard Worker /** 755*38e8c45fSAndroid Build Coastguard Worker * Get a reference to the sensor manager. ASensorManager is a singleton 756*38e8c45fSAndroid Build Coastguard Worker * per package as different packages may have access to different sensors. 757*38e8c45fSAndroid Build Coastguard Worker * 758*38e8c45fSAndroid Build Coastguard Worker * Example: 759*38e8c45fSAndroid Build Coastguard Worker * 760*38e8c45fSAndroid Build Coastguard Worker * ASensorManager* sensorManager = ASensorManager_getInstanceForPackage("foo.bar.baz"); 761*38e8c45fSAndroid Build Coastguard Worker * 762*38e8c45fSAndroid Build Coastguard Worker * Available since API level 26. 763*38e8c45fSAndroid Build Coastguard Worker */ 764*38e8c45fSAndroid Build Coastguard Worker ASensorManager* ASensorManager_getInstanceForPackage(const char* packageName) __INTRODUCED_IN(26); 765*38e8c45fSAndroid Build Coastguard Worker 766*38e8c45fSAndroid Build Coastguard Worker /** 767*38e8c45fSAndroid Build Coastguard Worker * Returns the list of available sensors. The returned list is owned by the 768*38e8c45fSAndroid Build Coastguard Worker * sensor manager and will not change between calls to this function. 769*38e8c45fSAndroid Build Coastguard Worker * 770*38e8c45fSAndroid Build Coastguard Worker * \param manager the {@link ASensorManager} instance obtained from 771*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_getInstanceForPackage}. 772*38e8c45fSAndroid Build Coastguard Worker * \param list the returned list of sensors. 773*38e8c45fSAndroid Build Coastguard Worker * \return positive number of returned sensors or negative error code. 774*38e8c45fSAndroid Build Coastguard Worker * BAD_VALUE: manager is NULL. 775*38e8c45fSAndroid Build Coastguard Worker */ 776*38e8c45fSAndroid Build Coastguard Worker int ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list); 777*38e8c45fSAndroid Build Coastguard Worker 778*38e8c45fSAndroid Build Coastguard Worker /** 779*38e8c45fSAndroid Build Coastguard Worker * Returns the list of available dynamic sensors. If there are no dynamic 780*38e8c45fSAndroid Build Coastguard Worker * sensors available, returns nullptr in list. 781*38e8c45fSAndroid Build Coastguard Worker * 782*38e8c45fSAndroid Build Coastguard Worker * Each time this is called, the previously returned list is deallocated and 783*38e8c45fSAndroid Build Coastguard Worker * must no longer be used. 784*38e8c45fSAndroid Build Coastguard Worker * 785*38e8c45fSAndroid Build Coastguard Worker * Clients should call this if they receive a sensor update from 786*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_DYNAMIC_SENSOR_META} indicating the sensors have changed. 787*38e8c45fSAndroid Build Coastguard Worker * If this happens, previously received lists from this method will be stale. 788*38e8c45fSAndroid Build Coastguard Worker * 789*38e8c45fSAndroid Build Coastguard Worker * Available since API level 33. 790*38e8c45fSAndroid Build Coastguard Worker * 791*38e8c45fSAndroid Build Coastguard Worker * \param manager the {@link ASensorManager} instance obtained from 792*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_getInstanceForPackage}. 793*38e8c45fSAndroid Build Coastguard Worker * \param list the returned list of dynamic sensors. 794*38e8c45fSAndroid Build Coastguard Worker * \return positive number of returned sensors or negative error code. 795*38e8c45fSAndroid Build Coastguard Worker * BAD_VALUE: manager is NULL. 796*38e8c45fSAndroid Build Coastguard Worker */ 797*38e8c45fSAndroid Build Coastguard Worker ssize_t ASensorManager_getDynamicSensorList( 798*38e8c45fSAndroid Build Coastguard Worker ASensorManager* manager, ASensorList* list) __INTRODUCED_IN(33); 799*38e8c45fSAndroid Build Coastguard Worker 800*38e8c45fSAndroid Build Coastguard Worker /** 801*38e8c45fSAndroid Build Coastguard Worker * Returns the default sensor for the given type, or NULL if no sensor 802*38e8c45fSAndroid Build Coastguard Worker * of that type exists. 803*38e8c45fSAndroid Build Coastguard Worker */ 804*38e8c45fSAndroid Build Coastguard Worker ASensor const* ASensorManager_getDefaultSensor(ASensorManager* manager, int type); 805*38e8c45fSAndroid Build Coastguard Worker 806*38e8c45fSAndroid Build Coastguard Worker /** 807*38e8c45fSAndroid Build Coastguard Worker * Returns the default sensor with the given type and wakeUp properties or NULL if no sensor 808*38e8c45fSAndroid Build Coastguard Worker * of this type and wakeUp properties exists. 809*38e8c45fSAndroid Build Coastguard Worker * 810*38e8c45fSAndroid Build Coastguard Worker * Available since API level 21. 811*38e8c45fSAndroid Build Coastguard Worker */ 812*38e8c45fSAndroid Build Coastguard Worker ASensor const* ASensorManager_getDefaultSensorEx(ASensorManager* manager, int type, bool wakeUp) __INTRODUCED_IN(21); 813*38e8c45fSAndroid Build Coastguard Worker 814*38e8c45fSAndroid Build Coastguard Worker /** 815*38e8c45fSAndroid Build Coastguard Worker * Creates a new sensor event queue and associate it with a looper. 816*38e8c45fSAndroid Build Coastguard Worker * 817*38e8c45fSAndroid Build Coastguard Worker * "ident" is a identifier for the events that will be returned when 818*38e8c45fSAndroid Build Coastguard Worker * calling ALooper_pollOnce(). The identifier must be >= 0, or 819*38e8c45fSAndroid Build Coastguard Worker * ALOOPER_POLL_CALLBACK if providing a non-NULL callback. 820*38e8c45fSAndroid Build Coastguard Worker */ 821*38e8c45fSAndroid Build Coastguard Worker ASensorEventQueue* ASensorManager_createEventQueue(ASensorManager* manager, 822*38e8c45fSAndroid Build Coastguard Worker ALooper* looper, int ident, ALooper_callbackFunc callback, void* data); 823*38e8c45fSAndroid Build Coastguard Worker 824*38e8c45fSAndroid Build Coastguard Worker /** 825*38e8c45fSAndroid Build Coastguard Worker * Destroys the event queue and free all resources associated to it. 826*38e8c45fSAndroid Build Coastguard Worker */ 827*38e8c45fSAndroid Build Coastguard Worker int ASensorManager_destroyEventQueue(ASensorManager* manager, ASensorEventQueue* queue); 828*38e8c45fSAndroid Build Coastguard Worker 829*38e8c45fSAndroid Build Coastguard Worker /** 830*38e8c45fSAndroid Build Coastguard Worker * Create direct channel based on shared memory 831*38e8c45fSAndroid Build Coastguard Worker * 832*38e8c45fSAndroid Build Coastguard Worker * Create a direct channel of {@link ASENSOR_DIRECT_CHANNEL_TYPE_SHARED_MEMORY} to be used 833*38e8c45fSAndroid Build Coastguard Worker * for configuring sensor direct report. 834*38e8c45fSAndroid Build Coastguard Worker * 835*38e8c45fSAndroid Build Coastguard Worker * Available since API level 26. 836*38e8c45fSAndroid Build Coastguard Worker * 837*38e8c45fSAndroid Build Coastguard Worker * \param manager the {@link ASensorManager} instance obtained from 838*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_getInstanceForPackage}. 839*38e8c45fSAndroid Build Coastguard Worker * \param fd file descriptor representing a shared memory created by 840*38e8c45fSAndroid Build Coastguard Worker * {@link ASharedMemory_create} 841*38e8c45fSAndroid Build Coastguard Worker * \param size size to be used, must be less or equal to size of shared memory. 842*38e8c45fSAndroid Build Coastguard Worker * 843*38e8c45fSAndroid Build Coastguard Worker * \return a positive integer as a channel id to be used in 844*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_destroyDirectChannel} and 845*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_configureDirectReport}, or value less or equal to 0 for failures. 846*38e8c45fSAndroid Build Coastguard Worker */ 847*38e8c45fSAndroid Build Coastguard Worker int ASensorManager_createSharedMemoryDirectChannel(ASensorManager* manager, int fd, size_t size) __INTRODUCED_IN(26); 848*38e8c45fSAndroid Build Coastguard Worker 849*38e8c45fSAndroid Build Coastguard Worker /** 850*38e8c45fSAndroid Build Coastguard Worker * Create direct channel based on AHardwareBuffer 851*38e8c45fSAndroid Build Coastguard Worker * 852*38e8c45fSAndroid Build Coastguard Worker * Create a direct channel of {@link ASENSOR_DIRECT_CHANNEL_TYPE_HARDWARE_BUFFER} type to be used 853*38e8c45fSAndroid Build Coastguard Worker * for configuring sensor direct report. 854*38e8c45fSAndroid Build Coastguard Worker * 855*38e8c45fSAndroid Build Coastguard Worker * Available since API level 26. 856*38e8c45fSAndroid Build Coastguard Worker * 857*38e8c45fSAndroid Build Coastguard Worker * \param manager the {@link ASensorManager} instance obtained from 858*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_getInstanceForPackage}. 859*38e8c45fSAndroid Build Coastguard Worker * \param buffer {@link AHardwareBuffer} instance created by {@link AHardwareBuffer_allocate}. 860*38e8c45fSAndroid Build Coastguard Worker * \param size the intended size to be used, must be less or equal to size of buffer. 861*38e8c45fSAndroid Build Coastguard Worker * 862*38e8c45fSAndroid Build Coastguard Worker * \return a positive integer as a channel id to be used in 863*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_destroyDirectChannel} and 864*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_configureDirectReport}, or value less or equal to 0 for failures. 865*38e8c45fSAndroid Build Coastguard Worker */ 866*38e8c45fSAndroid Build Coastguard Worker int ASensorManager_createHardwareBufferDirectChannel( 867*38e8c45fSAndroid Build Coastguard Worker ASensorManager* manager, AHardwareBuffer const * buffer, size_t size) __INTRODUCED_IN(26); 868*38e8c45fSAndroid Build Coastguard Worker 869*38e8c45fSAndroid Build Coastguard Worker /** 870*38e8c45fSAndroid Build Coastguard Worker * Destroy a direct channel 871*38e8c45fSAndroid Build Coastguard Worker * 872*38e8c45fSAndroid Build Coastguard Worker * Destroy a direct channel previously created by using one of 873*38e8c45fSAndroid Build Coastguard Worker * ASensorManager_create*DirectChannel() derivative functions. 874*38e8c45fSAndroid Build Coastguard Worker * Note that the buffer used for creating the direct channel does not get destroyed with 875*38e8c45fSAndroid Build Coastguard Worker * ASensorManager_destroyDirectChannel and has to be closed or released separately. 876*38e8c45fSAndroid Build Coastguard Worker * 877*38e8c45fSAndroid Build Coastguard Worker * Available since API level 26. 878*38e8c45fSAndroid Build Coastguard Worker * 879*38e8c45fSAndroid Build Coastguard Worker * \param manager the {@link ASensorManager} instance obtained from 880*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_getInstanceForPackage}. 881*38e8c45fSAndroid Build Coastguard Worker * \param channelId channel id (a positive integer) returned from 882*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_createSharedMemoryDirectChannel} or 883*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_createHardwareBufferDirectChannel}. 884*38e8c45fSAndroid Build Coastguard Worker */ 885*38e8c45fSAndroid Build Coastguard Worker void ASensorManager_destroyDirectChannel(ASensorManager* manager, int channelId) __INTRODUCED_IN(26); 886*38e8c45fSAndroid Build Coastguard Worker 887*38e8c45fSAndroid Build Coastguard Worker /** 888*38e8c45fSAndroid Build Coastguard Worker * Configure direct report on channel 889*38e8c45fSAndroid Build Coastguard Worker * 890*38e8c45fSAndroid Build Coastguard Worker * Configure sensor direct report on a direct channel: set rate to value other than 891*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_DIRECT_RATE_STOP} so that sensor event can be directly 892*38e8c45fSAndroid Build Coastguard Worker * written into the shared memory region used for creating the buffer. It returns a positive token 893*38e8c45fSAndroid Build Coastguard Worker * which can be used for identify sensor events from different sensors on success. Calling with rate 894*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_DIRECT_RATE_STOP} will stop direct report of the sensor specified in the channel. 895*38e8c45fSAndroid Build Coastguard Worker * 896*38e8c45fSAndroid Build Coastguard Worker * To stop all active sensor direct report configured to a channel, set sensor to NULL and rate to 897*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_DIRECT_RATE_STOP}. 898*38e8c45fSAndroid Build Coastguard Worker * 899*38e8c45fSAndroid Build Coastguard Worker * In order to successfully configure a direct report, the sensor has to support the specified rate 900*38e8c45fSAndroid Build Coastguard Worker * and the channel type, which can be checked by {@link ASensor_getHighestDirectReportRateLevel} and 901*38e8c45fSAndroid Build Coastguard Worker * {@link ASensor_isDirectChannelTypeSupported}, respectively. 902*38e8c45fSAndroid Build Coastguard Worker * 903*38e8c45fSAndroid Build Coastguard Worker * Example: 904*38e8c45fSAndroid Build Coastguard Worker * 905*38e8c45fSAndroid Build Coastguard Worker * ASensorManager *manager = ...; 906*38e8c45fSAndroid Build Coastguard Worker * ASensor *sensor = ...; 907*38e8c45fSAndroid Build Coastguard Worker * int channelId = ...; 908*38e8c45fSAndroid Build Coastguard Worker * 909*38e8c45fSAndroid Build Coastguard Worker * ASensorManager_configureDirectReport(manager, sensor, channel_id, ASENSOR_DIRECT_RATE_FAST); 910*38e8c45fSAndroid Build Coastguard Worker * 911*38e8c45fSAndroid Build Coastguard Worker * Available since API level 26. 912*38e8c45fSAndroid Build Coastguard Worker * 913*38e8c45fSAndroid Build Coastguard Worker * \param manager the {@link ASensorManager} instance obtained from 914*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_getInstanceForPackage}. 915*38e8c45fSAndroid Build Coastguard Worker * \param sensor a {@link ASensor} to denote which sensor to be operate. It can be NULL if rate 916*38e8c45fSAndroid Build Coastguard Worker * is {@link ASENSOR_DIRECT_RATE_STOP}, denoting stopping of all active sensor 917*38e8c45fSAndroid Build Coastguard Worker * direct report. 918*38e8c45fSAndroid Build Coastguard Worker * \param channelId channel id (a positive integer) returned from 919*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_createSharedMemoryDirectChannel} or 920*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorManager_createHardwareBufferDirectChannel}. 921*38e8c45fSAndroid Build Coastguard Worker * \param rate one of predefined ASENSOR_DIRECT_RATE_... that is supported by the sensor. 922*38e8c45fSAndroid Build Coastguard Worker * \return positive token for success or negative error code. 923*38e8c45fSAndroid Build Coastguard Worker */ 924*38e8c45fSAndroid Build Coastguard Worker int ASensorManager_configureDirectReport(ASensorManager* manager, 925*38e8c45fSAndroid Build Coastguard Worker ASensor const* sensor, int channelId, int rate) __INTRODUCED_IN(26); 926*38e8c45fSAndroid Build Coastguard Worker 927*38e8c45fSAndroid Build Coastguard Worker /*****************************************************************************/ 928*38e8c45fSAndroid Build Coastguard Worker 929*38e8c45fSAndroid Build Coastguard Worker /** 930*38e8c45fSAndroid Build Coastguard Worker * Enable the selected sensor with sampling and report parameters 931*38e8c45fSAndroid Build Coastguard Worker * 932*38e8c45fSAndroid Build Coastguard Worker * Enable the selected sensor at a specified sampling period and max batch report latency. 933*38e8c45fSAndroid Build Coastguard Worker * To disable sensor, use {@link ASensorEventQueue_disableSensor}. 934*38e8c45fSAndroid Build Coastguard Worker * 935*38e8c45fSAndroid Build Coastguard Worker * \param queue {@link ASensorEventQueue} for sensor event to be report to. 936*38e8c45fSAndroid Build Coastguard Worker * \param sensor {@link ASensor} to be enabled. 937*38e8c45fSAndroid Build Coastguard Worker * \param samplingPeriodUs sampling period of sensor in microseconds. 938*38e8c45fSAndroid Build Coastguard Worker * \param maxBatchReportLatencyUs maximum time interval between two batches of sensor events are 939*38e8c45fSAndroid Build Coastguard Worker * delievered in microseconds. For sensor streaming, set to 0. 940*38e8c45fSAndroid Build Coastguard Worker * \return 0 on success or a negative error code on failure. 941*38e8c45fSAndroid Build Coastguard Worker */ 942*38e8c45fSAndroid Build Coastguard Worker int ASensorEventQueue_registerSensor(ASensorEventQueue* queue, ASensor const* sensor, 943*38e8c45fSAndroid Build Coastguard Worker int32_t samplingPeriodUs, int64_t maxBatchReportLatencyUs); 944*38e8c45fSAndroid Build Coastguard Worker 945*38e8c45fSAndroid Build Coastguard Worker /** 946*38e8c45fSAndroid Build Coastguard Worker * Enable the selected sensor at default sampling rate. 947*38e8c45fSAndroid Build Coastguard Worker * 948*38e8c45fSAndroid Build Coastguard Worker * Start event reports of a sensor to specified sensor event queue at a default rate. 949*38e8c45fSAndroid Build Coastguard Worker * 950*38e8c45fSAndroid Build Coastguard Worker * \param queue {@link ASensorEventQueue} for sensor event to be report to. 951*38e8c45fSAndroid Build Coastguard Worker * \param sensor {@link ASensor} to be enabled. 952*38e8c45fSAndroid Build Coastguard Worker * 953*38e8c45fSAndroid Build Coastguard Worker * \return 0 on success or a negative error code on failure. 954*38e8c45fSAndroid Build Coastguard Worker */ 955*38e8c45fSAndroid Build Coastguard Worker int ASensorEventQueue_enableSensor(ASensorEventQueue* queue, ASensor const* sensor); 956*38e8c45fSAndroid Build Coastguard Worker 957*38e8c45fSAndroid Build Coastguard Worker /** 958*38e8c45fSAndroid Build Coastguard Worker * Disable the selected sensor. 959*38e8c45fSAndroid Build Coastguard Worker * 960*38e8c45fSAndroid Build Coastguard Worker * Stop event reports from the sensor to specified sensor event queue. 961*38e8c45fSAndroid Build Coastguard Worker * 962*38e8c45fSAndroid Build Coastguard Worker * \param queue {@link ASensorEventQueue} to be changed 963*38e8c45fSAndroid Build Coastguard Worker * \param sensor {@link ASensor} to be disabled 964*38e8c45fSAndroid Build Coastguard Worker * \return 0 on success or a negative error code on failure. 965*38e8c45fSAndroid Build Coastguard Worker */ 966*38e8c45fSAndroid Build Coastguard Worker int ASensorEventQueue_disableSensor(ASensorEventQueue* queue, ASensor const* sensor); 967*38e8c45fSAndroid Build Coastguard Worker 968*38e8c45fSAndroid Build Coastguard Worker /** 969*38e8c45fSAndroid Build Coastguard Worker * Sets the delivery rate of events in microseconds for the given sensor. 970*38e8c45fSAndroid Build Coastguard Worker * 971*38e8c45fSAndroid Build Coastguard Worker * This function has to be called after {@link ASensorEventQueue_enableSensor}. 972*38e8c45fSAndroid Build Coastguard Worker * Note that this is a hint only, generally event will arrive at a higher 973*38e8c45fSAndroid Build Coastguard Worker * rate. It is an error to set a rate inferior to the value returned by 974*38e8c45fSAndroid Build Coastguard Worker * ASensor_getMinDelay(). 975*38e8c45fSAndroid Build Coastguard Worker * 976*38e8c45fSAndroid Build Coastguard Worker * \param queue {@link ASensorEventQueue} to which sensor event is delivered. 977*38e8c45fSAndroid Build Coastguard Worker * \param sensor {@link ASensor} of which sampling rate to be updated. 978*38e8c45fSAndroid Build Coastguard Worker * \param usec sensor sampling period (1/sampling rate) in microseconds 979*38e8c45fSAndroid Build Coastguard Worker * \return 0 on sucess or a negative error code on failure. 980*38e8c45fSAndroid Build Coastguard Worker */ 981*38e8c45fSAndroid Build Coastguard Worker int ASensorEventQueue_setEventRate(ASensorEventQueue* queue, ASensor const* sensor, int32_t usec); 982*38e8c45fSAndroid Build Coastguard Worker 983*38e8c45fSAndroid Build Coastguard Worker /** 984*38e8c45fSAndroid Build Coastguard Worker * Determine if a sensor event queue has pending event to be processed. 985*38e8c45fSAndroid Build Coastguard Worker * 986*38e8c45fSAndroid Build Coastguard Worker * \param queue {@link ASensorEventQueue} to be queried 987*38e8c45fSAndroid Build Coastguard Worker * \return 1 if the queue has events; 0 if it does not have events; 988*38e8c45fSAndroid Build Coastguard Worker * or a negative value if there is an error. 989*38e8c45fSAndroid Build Coastguard Worker */ 990*38e8c45fSAndroid Build Coastguard Worker int ASensorEventQueue_hasEvents(ASensorEventQueue* queue); 991*38e8c45fSAndroid Build Coastguard Worker 992*38e8c45fSAndroid Build Coastguard Worker /** 993*38e8c45fSAndroid Build Coastguard Worker * Retrieve pending events in sensor event queue 994*38e8c45fSAndroid Build Coastguard Worker * 995*38e8c45fSAndroid Build Coastguard Worker * Retrieve next available events from the queue to a specified event array. 996*38e8c45fSAndroid Build Coastguard Worker * 997*38e8c45fSAndroid Build Coastguard Worker * \param queue {@link ASensorEventQueue} to get events from 998*38e8c45fSAndroid Build Coastguard Worker * \param events pointer to an array of {@link ASensorEvent}. 999*38e8c45fSAndroid Build Coastguard Worker * \param count max number of event that can be filled into array event. 1000*38e8c45fSAndroid Build Coastguard Worker * \return number of events returned on success; negative error code when 1001*38e8c45fSAndroid Build Coastguard Worker * no events are pending or an error has occurred. 1002*38e8c45fSAndroid Build Coastguard Worker * 1003*38e8c45fSAndroid Build Coastguard Worker * Examples: 1004*38e8c45fSAndroid Build Coastguard Worker * 1005*38e8c45fSAndroid Build Coastguard Worker * ASensorEvent event; 1006*38e8c45fSAndroid Build Coastguard Worker * ssize_t numEvent = ASensorEventQueue_getEvents(queue, &event, 1); 1007*38e8c45fSAndroid Build Coastguard Worker * 1008*38e8c45fSAndroid Build Coastguard Worker * ASensorEvent eventBuffer[8]; 1009*38e8c45fSAndroid Build Coastguard Worker * ssize_t numEvent = ASensorEventQueue_getEvents(queue, eventBuffer, 8); 1010*38e8c45fSAndroid Build Coastguard Worker * 1011*38e8c45fSAndroid Build Coastguard Worker */ 1012*38e8c45fSAndroid Build Coastguard Worker ssize_t ASensorEventQueue_getEvents(ASensorEventQueue* queue, ASensorEvent* events, size_t count); 1013*38e8c45fSAndroid Build Coastguard Worker 1014*38e8c45fSAndroid Build Coastguard Worker /** 1015*38e8c45fSAndroid Build Coastguard Worker * Request that {@link ASENSOR_TYPE_ADDITIONAL_INFO} events to be delivered on 1016*38e8c45fSAndroid Build Coastguard Worker * the given {@link ASensorEventQueue}. 1017*38e8c45fSAndroid Build Coastguard Worker * 1018*38e8c45fSAndroid Build Coastguard Worker * Sensor data events are always delivered to the {@link ASensorEventQueue}. 1019*38e8c45fSAndroid Build Coastguard Worker * 1020*38e8c45fSAndroid Build Coastguard Worker * The {@link ASENSOR_TYPE_ADDITIONAL_INFO} events will be returned through 1021*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorEventQueue_getEvents}. The client is responsible for checking 1022*38e8c45fSAndroid Build Coastguard Worker * {@link ASensorEvent#type} to determine the event type prior to handling of 1023*38e8c45fSAndroid Build Coastguard Worker * the event. 1024*38e8c45fSAndroid Build Coastguard Worker * 1025*38e8c45fSAndroid Build Coastguard Worker * The client must be tolerant of any value for 1026*38e8c45fSAndroid Build Coastguard Worker * {@link AAdditionalInfoEvent#type}, as new values may be defined in the future 1027*38e8c45fSAndroid Build Coastguard Worker * and may delivered to the client. 1028*38e8c45fSAndroid Build Coastguard Worker * 1029*38e8c45fSAndroid Build Coastguard Worker * Available since API level 29. 1030*38e8c45fSAndroid Build Coastguard Worker * 1031*38e8c45fSAndroid Build Coastguard Worker * \param queue {@link ASensorEventQueue} to configure 1032*38e8c45fSAndroid Build Coastguard Worker * \param enable true to request {@link ASENSOR_TYPE_ADDITIONAL_INFO} events, 1033*38e8c45fSAndroid Build Coastguard Worker * false to stop receiving events 1034*38e8c45fSAndroid Build Coastguard Worker * \return 0 on success or a negative error code on failure 1035*38e8c45fSAndroid Build Coastguard Worker */ 1036*38e8c45fSAndroid Build Coastguard Worker int ASensorEventQueue_requestAdditionalInfoEvents(ASensorEventQueue* queue, bool enable) __INTRODUCED_IN(29); 1037*38e8c45fSAndroid Build Coastguard Worker 1038*38e8c45fSAndroid Build Coastguard Worker /*****************************************************************************/ 1039*38e8c45fSAndroid Build Coastguard Worker 1040*38e8c45fSAndroid Build Coastguard Worker /** 1041*38e8c45fSAndroid Build Coastguard Worker * Returns this sensor's name (non localized) 1042*38e8c45fSAndroid Build Coastguard Worker */ 1043*38e8c45fSAndroid Build Coastguard Worker const char* ASensor_getName(ASensor const* sensor); 1044*38e8c45fSAndroid Build Coastguard Worker 1045*38e8c45fSAndroid Build Coastguard Worker /** 1046*38e8c45fSAndroid Build Coastguard Worker * Returns this sensor's vendor's name (non localized) 1047*38e8c45fSAndroid Build Coastguard Worker */ 1048*38e8c45fSAndroid Build Coastguard Worker const char* ASensor_getVendor(ASensor const* sensor); 1049*38e8c45fSAndroid Build Coastguard Worker 1050*38e8c45fSAndroid Build Coastguard Worker /** 1051*38e8c45fSAndroid Build Coastguard Worker * Return this sensor's type 1052*38e8c45fSAndroid Build Coastguard Worker */ 1053*38e8c45fSAndroid Build Coastguard Worker int ASensor_getType(ASensor const* sensor); 1054*38e8c45fSAndroid Build Coastguard Worker 1055*38e8c45fSAndroid Build Coastguard Worker /** 1056*38e8c45fSAndroid Build Coastguard Worker * Returns this sensors's resolution 1057*38e8c45fSAndroid Build Coastguard Worker */ 1058*38e8c45fSAndroid Build Coastguard Worker float ASensor_getResolution(ASensor const* sensor); 1059*38e8c45fSAndroid Build Coastguard Worker 1060*38e8c45fSAndroid Build Coastguard Worker /** 1061*38e8c45fSAndroid Build Coastguard Worker * Returns the minimum delay allowed between events in microseconds. 1062*38e8c45fSAndroid Build Coastguard Worker * A value of zero means that this sensor doesn't report events at a 1063*38e8c45fSAndroid Build Coastguard Worker * constant rate, but rather only when a new data is available. 1064*38e8c45fSAndroid Build Coastguard Worker */ 1065*38e8c45fSAndroid Build Coastguard Worker int ASensor_getMinDelay(ASensor const* sensor); 1066*38e8c45fSAndroid Build Coastguard Worker 1067*38e8c45fSAndroid Build Coastguard Worker /** 1068*38e8c45fSAndroid Build Coastguard Worker * Returns the maximum size of batches for this sensor. Batches will often be 1069*38e8c45fSAndroid Build Coastguard Worker * smaller, as the hardware fifo might be used for other sensors. 1070*38e8c45fSAndroid Build Coastguard Worker * 1071*38e8c45fSAndroid Build Coastguard Worker * Available since API level 21. 1072*38e8c45fSAndroid Build Coastguard Worker */ 1073*38e8c45fSAndroid Build Coastguard Worker int ASensor_getFifoMaxEventCount(ASensor const* sensor) __INTRODUCED_IN(21); 1074*38e8c45fSAndroid Build Coastguard Worker 1075*38e8c45fSAndroid Build Coastguard Worker /** 1076*38e8c45fSAndroid Build Coastguard Worker * Returns the hardware batch fifo size reserved to this sensor. 1077*38e8c45fSAndroid Build Coastguard Worker * 1078*38e8c45fSAndroid Build Coastguard Worker * Available since API level 21. 1079*38e8c45fSAndroid Build Coastguard Worker */ 1080*38e8c45fSAndroid Build Coastguard Worker int ASensor_getFifoReservedEventCount(ASensor const* sensor) __INTRODUCED_IN(21); 1081*38e8c45fSAndroid Build Coastguard Worker 1082*38e8c45fSAndroid Build Coastguard Worker /** 1083*38e8c45fSAndroid Build Coastguard Worker * Returns this sensor's string type. 1084*38e8c45fSAndroid Build Coastguard Worker * 1085*38e8c45fSAndroid Build Coastguard Worker * Available since API level 21. 1086*38e8c45fSAndroid Build Coastguard Worker */ 1087*38e8c45fSAndroid Build Coastguard Worker const char* ASensor_getStringType(ASensor const* sensor) __INTRODUCED_IN(21); 1088*38e8c45fSAndroid Build Coastguard Worker 1089*38e8c45fSAndroid Build Coastguard Worker /** 1090*38e8c45fSAndroid Build Coastguard Worker * Returns the reporting mode for this sensor. One of AREPORTING_MODE_* constants. 1091*38e8c45fSAndroid Build Coastguard Worker * 1092*38e8c45fSAndroid Build Coastguard Worker * Available since API level 21. 1093*38e8c45fSAndroid Build Coastguard Worker */ 1094*38e8c45fSAndroid Build Coastguard Worker int ASensor_getReportingMode(ASensor const* sensor) __INTRODUCED_IN(21); 1095*38e8c45fSAndroid Build Coastguard Worker 1096*38e8c45fSAndroid Build Coastguard Worker /** 1097*38e8c45fSAndroid Build Coastguard Worker * Returns true if this is a wake up sensor, false otherwise. 1098*38e8c45fSAndroid Build Coastguard Worker * 1099*38e8c45fSAndroid Build Coastguard Worker * Available since API level 21. 1100*38e8c45fSAndroid Build Coastguard Worker */ 1101*38e8c45fSAndroid Build Coastguard Worker bool ASensor_isWakeUpSensor(ASensor const* sensor) __INTRODUCED_IN(21); 1102*38e8c45fSAndroid Build Coastguard Worker 1103*38e8c45fSAndroid Build Coastguard Worker /** 1104*38e8c45fSAndroid Build Coastguard Worker * Test if sensor supports a certain type of direct channel. 1105*38e8c45fSAndroid Build Coastguard Worker * 1106*38e8c45fSAndroid Build Coastguard Worker * Available since API level 26. 1107*38e8c45fSAndroid Build Coastguard Worker * 1108*38e8c45fSAndroid Build Coastguard Worker * \param sensor a {@link ASensor} to denote the sensor to be checked. 1109*38e8c45fSAndroid Build Coastguard Worker * \param channelType Channel type constant, either 1110*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_DIRECT_CHANNEL_TYPE_SHARED_MEMORY} 1111*38e8c45fSAndroid Build Coastguard Worker * or {@link ASENSOR_DIRECT_CHANNEL_TYPE_HARDWARE_BUFFER}. 1112*38e8c45fSAndroid Build Coastguard Worker * \returns true if sensor supports the specified direct channel type. 1113*38e8c45fSAndroid Build Coastguard Worker */ 1114*38e8c45fSAndroid Build Coastguard Worker bool ASensor_isDirectChannelTypeSupported(ASensor const* sensor, int channelType) __INTRODUCED_IN(26); 1115*38e8c45fSAndroid Build Coastguard Worker 1116*38e8c45fSAndroid Build Coastguard Worker /** 1117*38e8c45fSAndroid Build Coastguard Worker * Get the highest direct rate level that a sensor supports. 1118*38e8c45fSAndroid Build Coastguard Worker * 1119*38e8c45fSAndroid Build Coastguard Worker * Available since API level 26. 1120*38e8c45fSAndroid Build Coastguard Worker * 1121*38e8c45fSAndroid Build Coastguard Worker * \param sensor a {@link ASensor} to denote the sensor to be checked. 1122*38e8c45fSAndroid Build Coastguard Worker * 1123*38e8c45fSAndroid Build Coastguard Worker * \return a ASENSOR_DIRECT_RATE_... enum denoting the highest rate level supported by the sensor. 1124*38e8c45fSAndroid Build Coastguard Worker * If return value is {@link ASENSOR_DIRECT_RATE_STOP}, it means the sensor 1125*38e8c45fSAndroid Build Coastguard Worker * does not support direct report. 1126*38e8c45fSAndroid Build Coastguard Worker */ 1127*38e8c45fSAndroid Build Coastguard Worker int ASensor_getHighestDirectReportRateLevel(ASensor const* sensor) __INTRODUCED_IN(26); 1128*38e8c45fSAndroid Build Coastguard Worker 1129*38e8c45fSAndroid Build Coastguard Worker /** 1130*38e8c45fSAndroid Build Coastguard Worker * Returns the sensor's handle. 1131*38e8c45fSAndroid Build Coastguard Worker * 1132*38e8c45fSAndroid Build Coastguard Worker * The handle identifies the sensor within the system and is included in the 1133*38e8c45fSAndroid Build Coastguard Worker * sensor field of {@link ASensorEvent}, including those sent with type 1134*38e8c45fSAndroid Build Coastguard Worker * {@link ASENSOR_TYPE_ADDITIONAL_INFO}. 1135*38e8c45fSAndroid Build Coastguard Worker * 1136*38e8c45fSAndroid Build Coastguard Worker * A sensor's handle is able to be used to map {@link ASENSOR_TYPE_ADDITIONAL_INFO} events to the 1137*38e8c45fSAndroid Build Coastguard Worker * sensor that generated the event. 1138*38e8c45fSAndroid Build Coastguard Worker * 1139*38e8c45fSAndroid Build Coastguard Worker * It is important to note that the value returned by {@link ASensor_getHandle} is not the same as 1140*38e8c45fSAndroid Build Coastguard Worker * the value returned by the Java API <a href="/reference/android/hardware/Sensor#getId()"> 1141*38e8c45fSAndroid Build Coastguard Worker * android.hardware.Sensor's getId()</a> and no mapping exists between the values. 1142*38e8c45fSAndroid Build Coastguard Worker * 1143*38e8c45fSAndroid Build Coastguard Worker * Available since API level 29. 1144*38e8c45fSAndroid Build Coastguard Worker */ 1145*38e8c45fSAndroid Build Coastguard Worker int ASensor_getHandle(ASensor const* sensor) __INTRODUCED_IN(29); 1146*38e8c45fSAndroid Build Coastguard Worker 1147*38e8c45fSAndroid Build Coastguard Worker #ifdef __cplusplus 1148*38e8c45fSAndroid Build Coastguard Worker }; 1149*38e8c45fSAndroid Build Coastguard Worker #endif 1150*38e8c45fSAndroid Build Coastguard Worker 1151*38e8c45fSAndroid Build Coastguard Worker #endif // ANDROID_SENSOR_H 1152*38e8c45fSAndroid Build Coastguard Worker 1153*38e8c45fSAndroid Build Coastguard Worker /** @} */ 1154