1e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 2e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Copyright (C) 2010 The Android Open Source Project 3e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 4e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * you may not use this file except in compliance with the License. 6e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * You may obtain a copy of the License at 7e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 8e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 10e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Unless required by applicable law or agreed to in writing, software 11e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * See the License for the specific language governing permissions and 14e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * limitations under the License. 15e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 16e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 17e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 18e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#ifndef ANDROID_SENSOR_H 19e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#define ANDROID_SENSOR_H 20e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 21e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/****************************************************************** 22e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 23e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * IMPORTANT NOTICE: 24e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 25e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * This file is part of Android's set of stable system headers 26e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * exposed by the Android NDK (Native Development Kit). 27e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 28e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Third-party source AND binary code relies on the definitions 29e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES. 30e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 31e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES) 32e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS 33e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY 34e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES 35e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 36e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 37e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 38e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Structures and functions to receive and process sensor events in 39e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * native code. 40e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 41e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 42e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 43e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#include <sys/types.h> 44e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 45e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#include <android/looper.h> 46e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 47e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#ifdef __cplusplus 48e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianextern "C" { 49e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#endif 50e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 51e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 52e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 53e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Sensor types 54e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * (keep in sync with hardware/sensor.h) 55e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 56e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 57e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianenum { 58e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ASENSOR_TYPE_ACCELEROMETER = 1, 59e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ASENSOR_TYPE_MAGNETIC_FIELD = 2, 60e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ASENSOR_TYPE_GYROSCOPE = 4, 61e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ASENSOR_TYPE_LIGHT = 5, 62e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ASENSOR_TYPE_PROXIMITY = 8 63e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian}; 64e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 65e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 66e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Sensor accuracy measure 67e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 68e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianenum { 69630e31d6ed539f5193fd20dde6c5afa58bd34a73Etienne Le Grand ASENSOR_STATUS_NO_CONTACT = -1, 70e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ASENSOR_STATUS_UNRELIABLE = 0, 71e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ASENSOR_STATUS_ACCURACY_LOW = 1, 72e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ASENSOR_STATUS_ACCURACY_MEDIUM = 2, 73e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ASENSOR_STATUS_ACCURACY_HIGH = 3 74e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian}; 75e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 76e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 770e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella * Sensor Reporting Modes. 780e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella */ 790e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akellaenum { 800e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella AREPORTING_MODE_CONTINUOUS = 0, 810e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella AREPORTING_MODE_ON_CHANGE = 1, 820e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella AREPORTING_MODE_ONE_SHOT = 2, 830e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella AREPORTING_MODE_SPECIAL_TRIGGER = 3 840e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella}; 850e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella 860e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella/* 87e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * A few useful constants 88e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 89e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 90e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* Earth's gravity in m/s^2 */ 91e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#define ASENSOR_STANDARD_GRAVITY (9.80665f) 92e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* Maximum magnetic field on Earth's surface in uT */ 93e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#define ASENSOR_MAGNETIC_FIELD_EARTH_MAX (60.0f) 94e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* Minimum magnetic field on Earth's surface in uT*/ 95e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#define ASENSOR_MAGNETIC_FIELD_EARTH_MIN (30.0f) 96e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 97e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 98e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * A sensor event. 99e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 100e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 101e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* NOTE: Must match hardware/sensors.h */ 102e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef struct ASensorVector { 103e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian union { 104e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian float v[3]; 105e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian struct { 106e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian float x; 107e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian float y; 108e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian float z; 109e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian }; 110e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian struct { 111e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian float azimuth; 112e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian float pitch; 113e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian float roll; 114e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian }; 115e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian }; 116e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int8_t status; 117e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian uint8_t reserved[3]; 118e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian} ASensorVector; 119e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 120724d91d778e71c8186399f4955de14b54812b3edAravind Akellatypedef struct AMetaDataEvent { 121724d91d778e71c8186399f4955de14b54812b3edAravind Akella int32_t what; 122724d91d778e71c8186399f4955de14b54812b3edAravind Akella int32_t sensor; 123724d91d778e71c8186399f4955de14b54812b3edAravind Akella} AMetaDataEvent; 124724d91d778e71c8186399f4955de14b54812b3edAravind Akella 125724d91d778e71c8186399f4955de14b54812b3edAravind Akellatypedef struct AUncalibratedEvent { 126724d91d778e71c8186399f4955de14b54812b3edAravind Akella union { 127724d91d778e71c8186399f4955de14b54812b3edAravind Akella float uncalib[3]; 128724d91d778e71c8186399f4955de14b54812b3edAravind Akella struct { 129724d91d778e71c8186399f4955de14b54812b3edAravind Akella float x_uncalib; 130724d91d778e71c8186399f4955de14b54812b3edAravind Akella float y_uncalib; 131724d91d778e71c8186399f4955de14b54812b3edAravind Akella float z_uncalib; 132724d91d778e71c8186399f4955de14b54812b3edAravind Akella }; 133724d91d778e71c8186399f4955de14b54812b3edAravind Akella }; 134724d91d778e71c8186399f4955de14b54812b3edAravind Akella union { 135724d91d778e71c8186399f4955de14b54812b3edAravind Akella float bias[3]; 136724d91d778e71c8186399f4955de14b54812b3edAravind Akella struct { 137724d91d778e71c8186399f4955de14b54812b3edAravind Akella float x_bias; 138724d91d778e71c8186399f4955de14b54812b3edAravind Akella float y_bias; 139724d91d778e71c8186399f4955de14b54812b3edAravind Akella float z_bias; 140724d91d778e71c8186399f4955de14b54812b3edAravind Akella }; 141724d91d778e71c8186399f4955de14b54812b3edAravind Akella }; 142724d91d778e71c8186399f4955de14b54812b3edAravind Akella} AUncalibratedEvent; 143724d91d778e71c8186399f4955de14b54812b3edAravind Akella 144630e31d6ed539f5193fd20dde6c5afa58bd34a73Etienne Le Grandtypedef struct AHeartRateEvent { 145630e31d6ed539f5193fd20dde6c5afa58bd34a73Etienne Le Grand float bpm; 146630e31d6ed539f5193fd20dde6c5afa58bd34a73Etienne Le Grand int8_t status; 147630e31d6ed539f5193fd20dde6c5afa58bd34a73Etienne Le Grand} AHeartRateEvent; 148630e31d6ed539f5193fd20dde6c5afa58bd34a73Etienne Le Grand 149e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* NOTE: Must match hardware/sensors.h */ 150e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef struct ASensorEvent { 151e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t version; /* sizeof(struct ASensorEvent) */ 152e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t sensor; 153e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t type; 154e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t reserved0; 155e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int64_t timestamp; 156e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian union { 157ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian union { 158ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian float data[16]; 159ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian ASensorVector vector; 160ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian ASensorVector acceleration; 161ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian ASensorVector magnetic; 162ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian float temperature; 163ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian float distance; 164ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian float light; 165ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian float pressure; 166724d91d778e71c8186399f4955de14b54812b3edAravind Akella float relative_humidity; 167724d91d778e71c8186399f4955de14b54812b3edAravind Akella AUncalibratedEvent uncalibrated_gyro; 168724d91d778e71c8186399f4955de14b54812b3edAravind Akella AUncalibratedEvent uncalibrated_magnetic; 169724d91d778e71c8186399f4955de14b54812b3edAravind Akella AMetaDataEvent meta_data; 170630e31d6ed539f5193fd20dde6c5afa58bd34a73Etienne Le Grand AHeartRateEvent heart_rate; 171ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian }; 172ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian union { 173ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian uint64_t data[8]; 174ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian uint64_t step_counter; 175ba02cd2f6cc3f59adf66cb2b9176bfe6c9e382d1Mathias Agopian } u64; 176e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian }; 1779a844cf78f09953145200b4074d47589257a408cAravind Akella 1789a844cf78f09953145200b4074d47589257a408cAravind Akella uint32_t flags; 1799a844cf78f09953145200b4074d47589257a408cAravind Akella int32_t reserved1[3]; 180e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian} ASensorEvent; 181e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 182e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianstruct ASensorManager; 183e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef struct ASensorManager ASensorManager; 184e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 185e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianstruct ASensorEventQueue; 186e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef struct ASensorEventQueue ASensorEventQueue; 187e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 188e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianstruct ASensor; 189e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef struct ASensor ASensor; 190e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef ASensor const* ASensorRef; 191e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef ASensorRef const* ASensorList; 192e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 193e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/*****************************************************************************/ 194e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 195e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 1965fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * Get a reference to the sensor manager. ASensorManager is a singleton 1975fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * per package as different packages may have access to different sensors. 1985fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * 1995fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * Deprecated: Use ASensorManager_getInstanceForPackage(const char*) instead. 2005fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * 2015fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * Example: 2025fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * 2035fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * ASensorManager* sensorManager = ASensorManager_getInstance(); 2045fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * 2055fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov */ 2065fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov__attribute__ ((deprecated)) ASensorManager* ASensorManager_getInstance(); 2075fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov 2085fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov/* 2095fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * Get a reference to the sensor manager. ASensorManager is a singleton 2105fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * per package as different packages may have access to different sensors. 2115fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * 2125fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * Example: 2135fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * 2145fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * ASensorManager* sensorManager = ASensorManager_getInstanceForPackage("foo.bar.baz"); 2155fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov * 2165fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov */ 2175fa32d4b08843d0aeca567a173227e8e37322e8eSvet GanovASensorManager* ASensorManager_getInstanceForPackage(const char* packageName); 2185fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov 2195fa32d4b08843d0aeca567a173227e8e37322e8eSvet Ganov/* 220e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Returns the list of available sensors. 221e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 222e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list); 223e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 224e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 225e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Returns the default sensor for the given type, or NULL if no sensor 226b37ba399c1521c3eba40e126f65d9663532de446Aravind Akella * of that type exists. 227e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 228e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias AgopianASensor const* ASensorManager_getDefaultSensor(ASensorManager* manager, int type); 229e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 230e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 231b37ba399c1521c3eba40e126f65d9663532de446Aravind Akella * Returns the default sensor with the given type and wakeUp properties or NULL if no sensor 232b37ba399c1521c3eba40e126f65d9663532de446Aravind Akella * of this type and wakeUp properties exists. 233b37ba399c1521c3eba40e126f65d9663532de446Aravind Akella */ 234b37ba399c1521c3eba40e126f65d9663532de446Aravind AkellaASensor const* ASensorManager_getDefaultSensorEx(ASensorManager* manager, int type, 235b37ba399c1521c3eba40e126f65d9663532de446Aravind Akella bool wakeUp); 236b37ba399c1521c3eba40e126f65d9663532de446Aravind Akella 237b37ba399c1521c3eba40e126f65d9663532de446Aravind Akella/* 238e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Creates a new sensor event queue and associate it with a looper. 239e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 240e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias AgopianASensorEventQueue* ASensorManager_createEventQueue(ASensorManager* manager, 241e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ALooper* looper, int ident, ALooper_callbackFunc callback, void* data); 242e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 243e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 244e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Destroys the event queue and free all resources associated to it. 245e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 246e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint ASensorManager_destroyEventQueue(ASensorManager* manager, ASensorEventQueue* queue); 247e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 248e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 249e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/*****************************************************************************/ 250e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 251e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 252e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Enable the selected sensor. Returns a negative error code on failure. 253e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 254e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint ASensorEventQueue_enableSensor(ASensorEventQueue* queue, ASensor const* sensor); 255e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 256e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 257e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Disable the selected sensor. Returns a negative error code on failure. 258e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 259e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint ASensorEventQueue_disableSensor(ASensorEventQueue* queue, ASensor const* sensor); 260e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 261e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 262e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Sets the delivery rate of events in microseconds for the given sensor. 263e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Note that this is a hint only, generally event will arrive at a higher 264e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * rate. It is an error to set a rate inferior to the value returned by 265e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * ASensor_getMinDelay(). 266e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Returns a negative error code on failure. 267e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 268e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint ASensorEventQueue_setEventRate(ASensorEventQueue* queue, ASensor const* sensor, int32_t usec); 269e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 270e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 271e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Returns true if there are one or more events available in the 272e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * sensor queue. Returns 1 if the queue has events; 0 if 273e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * it does not have events; and a negative value if there is an error. 274e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 275e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint ASensorEventQueue_hasEvents(ASensorEventQueue* queue); 276e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 277e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 278e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Returns the next available events from the queue. Returns a negative 279e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * value if no events are available or an error has occurred, otherwise 280e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * the number of events returned. 281e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 282e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Examples: 283e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * ASensorEvent event; 284e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * ssize_t numEvent = ASensorEventQueue_getEvents(queue, &event, 1); 285e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 286e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * ASensorEvent eventBuffer[8]; 287e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * ssize_t numEvent = ASensorEventQueue_getEvents(queue, eventBuffer, 8); 288e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 289e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 290e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianssize_t ASensorEventQueue_getEvents(ASensorEventQueue* queue, 291e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ASensorEvent* events, size_t count); 292e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 293e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 294e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/*****************************************************************************/ 295e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 296e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 297e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Returns this sensor's name (non localized) 298e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 299e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianconst char* ASensor_getName(ASensor const* sensor); 300e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 301e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 302e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Returns this sensor's vendor's name (non localized) 303e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 304e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianconst char* ASensor_getVendor(ASensor const* sensor); 305e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 306e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 307e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Return this sensor's type 308e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 309e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint ASensor_getType(ASensor const* sensor); 310e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 311e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 312e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Returns this sensors's resolution 313e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 314e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianfloat ASensor_getResolution(ASensor const* sensor); 315e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 316e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 317e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Returns the minimum delay allowed between events in microseconds. 318e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * A value of zero means that this sensor doesn't report events at a 319e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * constant rate, but rather only when a new data is available. 320e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 321e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint ASensor_getMinDelay(ASensor const* sensor); 322e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 323700180487ffec09d9df1657b018a7caadac24b75Aravind Akella/* 324700180487ffec09d9df1657b018a7caadac24b75Aravind Akella * Returns the maximum size of batches for this sensor. Batches will often be 325700180487ffec09d9df1657b018a7caadac24b75Aravind Akella * smaller, as the hardware fifo might be used for other sensors. 326700180487ffec09d9df1657b018a7caadac24b75Aravind Akella */ 327700180487ffec09d9df1657b018a7caadac24b75Aravind Akellaint ASensor_getFifoMaxEventCount(ASensor const* sensor); 328700180487ffec09d9df1657b018a7caadac24b75Aravind Akella 329700180487ffec09d9df1657b018a7caadac24b75Aravind Akella/* 330700180487ffec09d9df1657b018a7caadac24b75Aravind Akella * Returns the hardware batch fifo size reserved to this sensor. 331700180487ffec09d9df1657b018a7caadac24b75Aravind Akella */ 332700180487ffec09d9df1657b018a7caadac24b75Aravind Akellaint ASensor_getFifoReservedEventCount(ASensor const* sensor); 333700180487ffec09d9df1657b018a7caadac24b75Aravind Akella 334700180487ffec09d9df1657b018a7caadac24b75Aravind Akella/* 335700180487ffec09d9df1657b018a7caadac24b75Aravind Akella * Returns this sensor's string type. 336700180487ffec09d9df1657b018a7caadac24b75Aravind Akella */ 337700180487ffec09d9df1657b018a7caadac24b75Aravind Akellaconst char* ASensor_getStringType(ASensor const* sensor); 338700180487ffec09d9df1657b018a7caadac24b75Aravind Akella 3390e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella/* 3400e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella * Returns the reporting mode for this sensor. One of AREPORTING_MODE_* constants. 3410e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella */ 3420e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akellaint ASensor_getReportingMode(ASensor const* sensor); 3430e025c5af365e45e02cb75c1d46b46c7f4cd44cbAravind Akella 344b37ba399c1521c3eba40e126f65d9663532de446Aravind Akella/* 345b37ba399c1521c3eba40e126f65d9663532de446Aravind Akella * Returns true if this is a wake up sensor, false otherwise. 346b37ba399c1521c3eba40e126f65d9663532de446Aravind Akella */ 347b37ba399c1521c3eba40e126f65d9663532de446Aravind Akellabool ASensor_isWakeUpSensor(ASensor const* sensor); 348b37ba399c1521c3eba40e126f65d9663532de446Aravind Akella 349e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#ifdef __cplusplus 350e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian}; 351e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#endif 352e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 353e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#endif // ANDROID_SENSOR_H 354