Initial Contribution
This commit is contained in:
243
include/hardware/sensors.h
Normal file
243
include/hardware/sensors.h
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user