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