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