summaryrefslogtreecommitdiffstats
path: root/include/hardware/sensors.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/hardware/sensors.h')
-rw-r--r--include/hardware/sensors.h243
1 files changed, 243 insertions, 0 deletions
diff --git a/include/hardware/sensors.h b/include/hardware/sensors.h
new file mode 100644
index 0000000..19fd72c
--- /dev/null
+++ b/include/hardware/sensors.h
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _HARDWARE_SENSORS_H
+#define _HARDWARE_SENSORS_H
+
+#include <stdint.h>
+
+#if __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Sensor IDs must be a power of two and
+ * must match values in SensorManager.java
+ */
+
+#define SENSORS_ORIENTATION 0x00000001
+#define SENSORS_ACCELERATION 0x00000002
+#define SENSORS_TEMPERATURE 0x00000004
+#define SENSORS_MAGNETIC_FIELD 0x00000008
+#define SENSORS_LIGHT 0x00000010
+#define SENSORS_PROXIMITY 0x00000020
+#define SENSORS_TRICORDER 0x00000040
+#define SENSORS_ORIENTATION_RAW 0x00000080
+#define SENSORS_MASK 0x000000FF
+
+/**
+ * Values returned by the accelerometer in various locations in the universe.
+ * all values are in SI units (m/s^2)
+ */
+
+#define GRAVITY_SUN (275.0f)
+#define GRAVITY_MERCURY (3.70f)
+#define GRAVITY_VENUS (8.87f)
+#define GRAVITY_EARTH (9.80665f)
+#define GRAVITY_MOON (1.6f)
+#define GRAVITY_MARS (3.71f)
+#define GRAVITY_JUPITER (23.12f)
+#define GRAVITY_SATURN (8.96f)
+#define GRAVITY_URANUS (8.69f)
+#define GRAVITY_NEPTUN (11.0f)
+#define GRAVITY_PLUTO (0.6f)
+#define GRAVITY_DEATH_STAR_I (0.000000353036145f)
+#define GRAVITY_THE_ISLAND (4.815162342f)
+
+/** Maximum magnetic field on Earth's surface */
+#define MAGNETIC_FIELD_EARTH_MAX (60.0f)
+
+/** Minimum magnetic field on Earth's surface */
+#define MAGNETIC_FIELD_EARTH_MIN (30.0f)
+
+/**
+ * Various luminance values during the day (lux)
+ */
+
+#define LIGHT_SUNLIGHT_MAX (120000.0f)
+#define LIGHT_SUNLIGHT (110000.0f)
+#define LIGHT_SHADE (20000.0f)
+#define LIGHT_OVERCAST (10000.0f)
+#define LIGHT_SUNRISE (400.0f)
+#define LIGHT_CLOUDY (100.0f)
+
+/*
+ * Various luminance values during the night (lux)
+ */
+
+#define LIGHT_FULLMOON (0.25f)
+#define LIGHT_NO_MOON (0.001f)
+
+/**
+ * status of each sensor
+ */
+
+#define SENSOR_STATUS_UNRELIABLE 0
+#define SENSOR_STATUS_ACCURACY_LOW 1
+#define SENSOR_STATUS_ACCURACY_MEDIUM 2
+#define SENSOR_STATUS_ACCURACY_HIGH 3
+
+/**
+ * Definition of the axis
+ *
+ * This API is relative to the screen of the device in its default orientation,
+ * that is, if the device can be used in portrait or landscape, this API
+ * is only relative to the NATURAL orientation of the screen. In other words,
+ * the axis are not swapped when the device's screen orientation changes.
+ * Higher level services /may/ perform this transformation.
+ *
+ * -x +x
+ * ^
+ * |
+ * +-----------+--> +y
+ * | |
+ * | |
+ * | |
+ * | | / -z
+ * | | /
+ * | | /
+ * +-----------+/
+ * | o O o /
+ * +----------/+ -y
+ * /
+ * /
+ * |/ +z
+ *
+ */
+typedef struct {
+ union {
+ float v[3];
+ struct {
+ float x;
+ float y;
+ float z;
+ };
+ struct {
+ float yaw;
+ float pitch;
+ float roll;
+ };
+ };
+ int8_t status;
+ uint8_t reserved[3];
+} sensors_vec_t;
+
+/**
+ * Union of the various types of sensor data
+ * that can be returned.
+ */
+typedef struct {
+ /* sensor identifier */
+ int sensor;
+
+ union {
+ /* x,y,z values of the given sensor */
+ sensors_vec_t vector;
+
+ /* orientation values are in degres */
+ sensors_vec_t orientation;
+
+ /* acceleration values are in meter per second per second (m/s^2) */
+ sensors_vec_t acceleration;
+
+ /* magnetic vector values are in micro-Tesla (uT) */
+ sensors_vec_t magnetic;
+
+ /* temperature is in degres C */
+ float temperature;
+ };
+
+ /* time is in nanosecond */
+ int64_t time;
+
+ uint32_t reserved;
+} sensors_data_t;
+
+/**
+ * Initialize the module. This is the first entry point
+ * called and typically initializes the hardware.
+ *
+ * @return bit map of available sensors defined by
+ * the constants SENSORS_XXXX.
+ */
+uint32_t sensors_control_init();
+
+/**
+ * Returns the fd which will be the parameter to
+ * sensors_data_open. The caller takes ownership
+ * of this fd.
+ *
+ * @return a fd if successful, < 0 on error
+ */
+int sensors_control_open();
+
+/** Activate/deactiveate one or more of the sensors.
+ *
+ * @param sensors is a bitmask of the sensors to change.
+ * @param mask is a bitmask for enabling/disabling sensors.
+ *
+ * @return bitmask of SENSORS_XXXX indicating which sensors are enabled
+ */
+uint32_t sensors_control_activate(uint32_t sensors, uint32_t mask);
+
+/**
+ * Set the delay between sensor events in ms
+ *
+ * @return 0 if successful, < 0 on error
+ */
+int sensors_control_delay(int32_t ms);
+
+/**
+ * Prepare to read sensor data.
+ *
+ * This routiune does NOT take ownership of the fd
+ * and must not close it. Typcially this routine would
+ * use a duplicate of the fd parameter.
+ *
+ * @param fd from sensors_control_open.
+ *
+ * @return 0 if successful, < 0 on error
+ */
+int sensors_data_open(int fd);
+
+/**
+ * Caller has completed using the sensor data.
+ * The caller will not be blocked in sensors_data_poll
+ * when this routine is called.
+ *
+ * @return 0 if successful, < 0 on error
+ */
+int sensors_data_close();
+
+/**
+ * Return sensor data for one of the enabled sensors.
+ *
+ * @return SENSOR_XXXX for the returned data, -1 on error
+ * */
+int sensors_data_poll(sensors_data_t* data, uint32_t sensors_of_interest);
+
+/**
+ * @return bit map of available sensors defined by
+ * the constants SENSORS_XXXX.
+ */
+uint32_t sensors_data_get_sensors();
+
+
+#if __cplusplus
+} // extern "C"
+#endif
+
+#endif // _HARDWARE_SENSORS_H