diff options
Diffstat (limited to 'include/hardware/sensors.h')
-rw-r--r-- | include/hardware/sensors.h | 243 |
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 |