111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (C) 2010 The Android Open Source Project 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Licensed under the Apache License, Version 2.0 (the "License"); 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * you may not use this file except in compliance with the License. 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * You may obtain a copy of the License at 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * http://www.apache.org/licenses/LICENSE-2.0 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Unless required by applicable law or agreed to in writing, software 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * distributed under the License is distributed on an "AS IS" BASIS, 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * See the License for the specific language governing permissions and 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * limitations under the License. 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef ANDROID_SENSOR_H 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ANDROID_SENSOR_H 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************** 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * IMPORTANT NOTICE: 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This file is part of Android's set of stable system headers 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * exposed by the Android NDK (Native Development Kit). 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Third-party source AND binary code relies on the definitions 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES. 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES) 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Structures and functions to receive and process sensor events in 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * native code. 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <sys/types.h> 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <stdbool.h> 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <android/looper.h> 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __cplusplus 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern "C" { 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Sensor types 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * (keep in sync with hardware/sensor.h) 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum { 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASENSOR_TYPE_ACCELEROMETER = 1, 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASENSOR_TYPE_MAGNETIC_FIELD = 2, 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASENSOR_TYPE_GYROSCOPE = 4, 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASENSOR_TYPE_LIGHT = 5, 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASENSOR_TYPE_PROXIMITY = 8 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Sensor accuracy measure 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum { 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASENSOR_STATUS_NO_CONTACT = -1, 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASENSOR_STATUS_UNRELIABLE = 0, 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASENSOR_STATUS_ACCURACY_LOW = 1, 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASENSOR_STATUS_ACCURACY_MEDIUM = 2, 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASENSOR_STATUS_ACCURACY_HIGH = 3 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Sensor Reporting Modes. 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum { 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert AREPORTING_MODE_CONTINUOUS = 0, 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert AREPORTING_MODE_ON_CHANGE = 1, 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert AREPORTING_MODE_ONE_SHOT = 2, 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert AREPORTING_MODE_SPECIAL_TRIGGER = 3 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * A few useful constants 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Earth's gravity in m/s^2 */ 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ASENSOR_STANDARD_GRAVITY (9.80665f) 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Maximum magnetic field on Earth's surface in uT */ 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ASENSOR_MAGNETIC_FIELD_EARTH_MAX (60.0f) 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Minimum magnetic field on Earth's surface in uT*/ 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ASENSOR_MAGNETIC_FIELD_EARTH_MIN (30.0f) 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * A sensor event. 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* NOTE: Must match hardware/sensors.h */ 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct ASensorVector { 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union { 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float v[3]; 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct { 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float x; 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float y; 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float z; 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert }; 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct { 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float azimuth; 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float pitch; 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float roll; 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert }; 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert }; 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int8_t status; 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint8_t reserved[3]; 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} ASensorVector; 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct AMetaDataEvent { 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int32_t what; 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int32_t sensor; 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} AMetaDataEvent; 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct AUncalibratedEvent { 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union { 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float uncalib[3]; 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct { 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float x_uncalib; 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float y_uncalib; 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float z_uncalib; 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert }; 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert }; 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union { 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float bias[3]; 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct { 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float x_bias; 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float y_bias; 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float z_bias; 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert }; 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert }; 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} AUncalibratedEvent; 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct AHeartRateEvent { 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float bpm; 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int8_t status; 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} AHeartRateEvent; 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* NOTE: Must match hardware/sensors.h */ 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct ASensorEvent { 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int32_t version; /* sizeof(struct ASensorEvent) */ 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int32_t sensor; 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int32_t type; 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int32_t reserved0; 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int64_t timestamp; 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union { 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union { 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float data[16]; 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASensorVector vector; 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASensorVector acceleration; 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASensorVector magnetic; 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float temperature; 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float distance; 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float light; 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float pressure; 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert float relative_humidity; 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert AUncalibratedEvent uncalibrated_gyro; 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert AUncalibratedEvent uncalibrated_magnetic; 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert AMetaDataEvent meta_data; 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert AHeartRateEvent heart_rate; 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert }; 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union { 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint64_t data[8]; 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint64_t step_counter; 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } u64; 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert }; 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t flags; 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int32_t reserved1[3]; 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} ASensorEvent; 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct ASensorManager; 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct ASensorManager ASensorManager; 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct ASensorEventQueue; 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct ASensorEventQueue ASensorEventQueue; 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct ASensor; 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct ASensor ASensor; 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef ASensor const* ASensorRef; 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef ASensorRef const* ASensorList; 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*****************************************************************************/ 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Get a reference to the sensor manager. ASensorManager is a singleton. 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Example: 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * ASensorManager* sensorManager = ASensorManager_getInstance(); 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 20411cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertASensorManager* ASensorManager_getInstance(); 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns the list of available sensors. 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list); 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns the default sensor for the given type, or NULL if no sensor 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * of that type exists. 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 21611cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertASensor const* ASensorManager_getDefaultSensor(ASensorManager* manager, int type); 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns the default sensor with the given type and wakeUp properties or NULL if no sensor 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * of this type and wakeUp properties exists. 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 22211cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertASensor const* ASensorManager_getDefaultSensorEx(ASensorManager* manager, int type, 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool wakeUp); 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Creates a new sensor event queue and associate it with a looper. 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 22811cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertASensorEventQueue* ASensorManager_createEventQueue(ASensorManager* manager, 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ALooper* looper, int ident, ALooper_callbackFunc callback, void* data); 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Destroys the event queue and free all resources associated to it. 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint ASensorManager_destroyEventQueue(ASensorManager* manager, ASensorEventQueue* queue); 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*****************************************************************************/ 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Enable the selected sensor. Returns a negative error code on failure. 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint ASensorEventQueue_enableSensor(ASensorEventQueue* queue, ASensor const* sensor); 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Disable the selected sensor. Returns a negative error code on failure. 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint ASensorEventQueue_disableSensor(ASensorEventQueue* queue, ASensor const* sensor); 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Sets the delivery rate of events in microseconds for the given sensor. 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Note that this is a hint only, generally event will arrive at a higher 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * rate. It is an error to set a rate inferior to the value returned by 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * ASensor_getMinDelay(). 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns a negative error code on failure. 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint ASensorEventQueue_setEventRate(ASensorEventQueue* queue, ASensor const* sensor, int32_t usec); 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns true if there are one or more events available in the 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * sensor queue. Returns 1 if the queue has events; 0 if 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * it does not have events; and a negative value if there is an error. 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint ASensorEventQueue_hasEvents(ASensorEventQueue* queue); 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns the next available events from the queue. Returns a negative 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * value if no events are available or an error has occurred, otherwise 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * the number of events returned. 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Examples: 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * ASensorEvent event; 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * ssize_t numEvent = ASensorEventQueue_getEvents(queue, &event, 1); 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * ASensorEvent eventBuffer[8]; 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * ssize_t numEvent = ASensorEventQueue_getEvents(queue, eventBuffer, 8); 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertssize_t ASensorEventQueue_getEvents(ASensorEventQueue* queue, 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ASensorEvent* events, size_t count); 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*****************************************************************************/ 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns this sensor's name (non localized) 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst char* ASensor_getName(ASensor const* sensor); 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns this sensor's vendor's name (non localized) 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst char* ASensor_getVendor(ASensor const* sensor); 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Return this sensor's type 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint ASensor_getType(ASensor const* sensor); 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns this sensors's resolution 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfloat ASensor_getResolution(ASensor const* sensor); 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns the minimum delay allowed between events in microseconds. 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * A value of zero means that this sensor doesn't report events at a 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * constant rate, but rather only when a new data is available. 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint ASensor_getMinDelay(ASensor const* sensor); 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns the maximum size of batches for this sensor. Batches will often be 31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * smaller, as the hardware fifo might be used for other sensors. 31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint ASensor_getFifoMaxEventCount(ASensor const* sensor); 31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns the hardware batch fifo size reserved to this sensor. 31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint ASensor_getFifoReservedEventCount(ASensor const* sensor); 32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns this sensor's string type. 32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst char* ASensor_getStringType(ASensor const* sensor); 32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns the reporting mode for this sensor. One of AREPORTING_MODE_* constants. 32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint ASensor_getReportingMode(ASensor const* sensor); 33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns true if this is a wake up sensor, false otherwise. 33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool ASensor_isWakeUpSensor(ASensor const* sensor); 33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __cplusplus 33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif // ANDROID_SENSOR_H 342