diff options
author | Aravind Akella <aakella@google.com> | 2014-04-24 00:41:18 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-04-24 00:41:18 +0000 |
commit | 4fa0f418a3b6c3b26671e6f6456577990d411eb4 (patch) | |
tree | e16ab8ce87e54c046deee433edb1352a3954739e | |
parent | 69fad6c5299e04f94b3dbccf95bc9281713ee4c2 (diff) | |
parent | 6242f32a22c42c81d8a9a12885c794d85bf3cf63 (diff) | |
download | hardware_libhardware-4fa0f418a3b6c3b26671e6f6456577990d411eb4.zip hardware_libhardware-4fa0f418a3b6c3b26671e6f6456577990d411eb4.tar.gz hardware_libhardware-4fa0f418a3b6c3b26671e6f6456577990d411eb4.tar.bz2 |
Merge "Define new wake_up sensors in sensors.h"
-rw-r--r-- | include/hardware/sensors.h | 136 | ||||
-rw-r--r-- | tests/hardware/struct-offset.cpp | 7 |
2 files changed, 136 insertions, 7 deletions
diff --git a/include/hardware/sensors.h b/include/hardware/sensors.h index ca017a0..de4ac0d 100644 --- a/include/hardware/sensors.h +++ b/include/hardware/sensors.h @@ -34,6 +34,7 @@ __BEGIN_DECLS #define SENSORS_DEVICE_API_VERSION_1_0 HARDWARE_DEVICE_API_VERSION_2(1, 0, SENSORS_HEADER_VERSION) #define SENSORS_DEVICE_API_VERSION_1_1 HARDWARE_DEVICE_API_VERSION_2(1, 1, SENSORS_HEADER_VERSION) #define SENSORS_DEVICE_API_VERSION_1_2 HARDWARE_DEVICE_API_VERSION_2(1, 2, SENSORS_HEADER_VERSION) +#define SENSORS_DEVICE_API_VERSION_1_3 HARDWARE_DEVICE_API_VERSION_2(1, 3, SENSORS_HEADER_VERSION) /** * Please see the Sensors section of source.android.com for an @@ -63,9 +64,12 @@ __BEGIN_DECLS /* + * **** Deprecated ***** * flags for (*batch)() * Availability: SENSORS_DEVICE_API_VERSION_1_0 - * see (*batch)() documentation for details + * see (*batch)() documentation for details. + * Deprecated as of SENSORS_DEVICE_API_VERSION_1_3. + * WAKE_UP_* sensors replace WAKE_UPON_FIFO_FULL concept. */ enum { SENSORS_BATCH_DRY_RUN = 0x00000001, @@ -89,6 +93,17 @@ enum { #define SENSOR_PERMISSION_BODY_SENSORS "android.permission.BODY_SENSORS" /* + * Availability: SENSORS_DEVICE_API_VERSION_1_3 + * Sensor flags used in sensor_t.flags. + */ +enum { + /* + * Whether this sensor wakes up the AP from suspend mode when data is available. + */ + SENSOR_FLAG_WAKE_UP = 1U << 0 +}; + +/* * Sensor type * * Each sensor has a type which defines what this sensor measures and how @@ -250,7 +265,7 @@ enum { /* * SENSOR_TYPE_PROXIMITY * trigger-mode: on-change - * wake-up sensor: yes + * wake-up sensor: yes (set SENSOR_FLAG_WAKE_UP flag) * * The value corresponds to the distance to the nearest object in centimeters. */ @@ -348,7 +363,7 @@ enum { /* * SENSOR_TYPE_SIGNIFICANT_MOTION * trigger-mode: one-shot - * wake-up sensor: yes + * wake-up sensor: yes (set SENSOR_FLAG_WAKE_UP flag) * * A sensor of this type triggers an event each time significant motion * is detected and automatically disables itself. @@ -410,6 +425,84 @@ enum { #define SENSOR_TYPE_HEART_RATE (21) #define SENSOR_STRING_TYPE_HEART_RATE "android.sensor.heart_rate" +/* + * SENSOR_TYPE_NON_WAKE_UP_PROXIMITY_SENSOR + * Same as proximity_sensor but does not wake up the AP from suspend mode. + * wake-up sensor: no + */ +#define SENSOR_TYPE_NON_WAKE_UP_PROXIMITY_SENSOR (22) +#define SENSOR_STRING_TYPE_NON_WAKE_UP_PROXIMITY_SENSOR "android.sensor.non_wake_up_proximity_sensor" + +/* + * The sensors below are wake_up variants of the base sensor types defined + * above. When registered in batch mode, these sensors will wake up the AP when + * their FIFOs are full. A separate FIFO has to be maintained for wake up + * sensors and non wake up sensors. The non wake-up sensors need to overwrite + * their FIFOs when they are full till the AP wakes up and the wake-up sensors + * will wake-up the AP when their FIFOs are full without losing events. + * + * Define these sensors only if: + * 1) batching is supported. + * 2) wake-up and non wake-up variants of each sensor can be activated at + * different rates. + * + * wake-up sensor: yes + * Set SENSOR_FLAG_WAKE_UP flag for all these sensors. + */ +#define SENSOR_TYPE_WAKE_UP_ACCELEROMETER (23) +#define SENSOR_STRING_TYPE_WAKE_UP_ACCELEROMETER "android.sensor.wake_up_accelerometer" + +#define SENSOR_TYPE_WAKE_UP_MAGNETIC_FIELD (24) +#define SENSOR_STRING_TYPE_WAKE_UP_MAGNETIC_FIELD "android.sensor.wake_up_magnetic_field" + +#define SENSOR_TYPE_WAKE_UP_ORIENTATION (25) +#define SENSOR_STRING_TYPE_WAKE_UP_ORIENTATION "android.sensor.wake_up_orientation" + +#define SENSOR_TYPE_WAKE_UP_GYROSCOPE (26) +#define SENSOR_STRING_TYPE_WAKE_UP_GYROSCOPE "android.sensor.wake_up_gyroscope" + +#define SENSOR_TYPE_WAKE_UP_LIGHT (27) +#define SENSOR_STRING_TYPE_WAKE_UP_LIGHT "android.sensor.wake_up_light" + +#define SENSOR_TYPE_WAKE_UP_PRESSURE (28) +#define SENSOR_STRING_TYPE_WAKE_UP_PRESSURE "android.sensor.wake_up_pressure" + +#define SENSOR_TYPE_WAKE_UP_GRAVITY (29) +#define SENSOR_STRING_TYPE_WAKE_UP_GRAVITY "android.sensor.wake_up_gravity" + +#define SENSOR_TYPE_WAKE_UP_LINEAR_ACCELERATION (30) +#define SENSOR_STRING_TYPE_WAKE_UP_LINEAR_ACCELERATION "android.sensor.wake_up_linear_acceleration" + +#define SENSOR_TYPE_WAKE_UP_ROTATION_VECTOR (31) +#define SENSOR_STRING_TYPE_WAKE_UP_ROTATION_VECTOR "android.sensor.wake_up_rotation_vector" + +#define SENSOR_TYPE_WAKE_UP_RELATIVE_HUMIDITY (32) +#define SENSOR_STRING_TYPE_WAKE_UP_RELATIVE_HUMIDITY "android.sensor.wake_up_relative_humidity" + +#define SENSOR_TYPE_WAKE_UP_AMBIENT_TEMPERATURE (33) +#define SENSOR_STRING_TYPE_WAKE_UP_AMBIENT_TEMPERATURE "android.sensor.wake_up_ambient_temperature" + +#define SENSOR_TYPE_WAKE_UP_MAGNETIC_FIELD_UNCALIBRATED (34) +#define SENSOR_STRING_TYPE_WAKE_UP_MAGNETIC_FIELD_UNCALIBRATED "android.sensor.wake_up_magnetic_field_uncalibrated" + +#define SENSOR_TYPE_WAKE_UP_GAME_ROTATION_VECTOR (35) +#define SENSOR_STRING_TYPE_WAKE_UP_GAME_ROTATION_VECTOR "android.sensor.wake_up_game_rotation_vector" + +#define SENSOR_TYPE_WAKE_UP_GYROSCOPE_UNCALIBRATED (36) +#define SENSOR_STRING_TYPE_WAKE_UP_GYROSCOPE_UNCALIBRATED "android.sensor.wake_up_gyroscope_uncalibrated" + +#define SENSOR_TYPE_WAKE_UP_STEP_DETECTOR (37) +#define SENSOR_STRING_TYPE_WAKE_UP_STEP_DETECTOR "android.sensor.wake_up_step_detector" + +#define SENSOR_TYPE_WAKE_UP_STEP_COUNTER (38) +#define SENSOR_STRING_TYPE_WAKE_UP_STEP_COUNTER "android.sensor.wake_up_step_counter" + +#define SENSOR_TYPE_WAKE_UP_GEOMAGNETIC_ROTATION_VECTOR (39) +#define SENSOR_STRING_TYPE_WAKE_UP_GEOMAGNETIC_ROTATION_VECTOR "android.sensor.wake_up_geomagnetic_rotation_vector" + +#define SENSOR_TYPE_WAKE_UP_HEART_RATE (40) +#define SENSOR_STRING_TYPE_WAKE_UP_HEART_RATE "android.sensor.wake_up_heart_rate" + /** * Values returned by the accelerometer in various locations in the universe. * all values are in SI units (m/s^2) @@ -556,7 +649,11 @@ typedef struct sensors_event_t { uint64_t step_counter; } u64; }; - uint32_t reserved1[4]; + + /* Reserved flags for internal use. Set to zero. */ + uint32_t flags; + + uint32_t reserved1[3]; } sensors_event_t; @@ -596,7 +693,7 @@ struct sensor_t { * must increase when the driver is updated in a way that changes the * output of this sensor. This is important for fused sensors when the * fusion algorithm is updated. - */ + */ int version; /* handle that identifies this sensors. This handle is used to reference @@ -657,8 +754,31 @@ struct sensor_t { */ const char* requiredPermission; + /* This value is defined only for continuous mode sensors. It is the delay between two + * sensor events corresponding to the lowest frequency that this sensor supports. When + * lower frequencies are requested through batch()/setDelay() the events will be generated + * at this frequency instead. It can be used by the framework or applications to estimate + * when the batch FIFO may be full. + * NOTE: period_ns is in nanoseconds where as maxDelay/minDelay are in microseconds. + * continuous: maximum sampling period allowed in microseconds. + * on-change, one-shot, special : -1 + * Availability: SENSORS_DEVICE_API_VERSION_1_3 + */ + #ifdef __LP64__ + int64_t maxDelay; + #else + int32_t maxDelay; + #endif + + /* Flags for sensor. See SENSOR_FLAG_* above. */ + #ifdef __LP64__ + uint64_t flags; + #else + uint32_t flags; + #endif + /* reserved fields, must be zero */ - void* reserved[4]; + void* reserved[2]; }; @@ -703,7 +823,9 @@ typedef struct sensors_poll_device_1 { int handle, int enabled); /** - * Set the events's period in nanoseconds for a given sensor. + * Set the events's period in nanoseconds for a given sensor. If + * period_ns > max_delay it will be truncated to max_delay and if + * period_ns < min_delay it will be replaced by min_delay. */ int (*setDelay)(struct sensors_poll_device_t *dev, int handle, int64_t period_ns); diff --git a/tests/hardware/struct-offset.cpp b/tests/hardware/struct-offset.cpp index bdb1fad..523becc 100644 --- a/tests/hardware/struct-offset.cpp +++ b/tests/hardware/struct-offset.cpp @@ -88,6 +88,8 @@ void CheckOffsets(void) { CHECK_MEMBER_AT(sensors_event_t, u64, 24, 24); CHECK_MEMBER_AT(sensors_event_t, u64.data, 24, 24); CHECK_MEMBER_AT(sensors_event_t, u64.step_counter, 24, 24); + CHECK_MEMBER_AT(sensors_event_t, flags, 88, 88); + CHECK_MEMBER_AT(sensors_event_t, reserved1, 92, 92); CHECK_MEMBER_AT(struct sensor_t, name, 0, 0); CHECK_MEMBER_AT(struct sensor_t, vendor, 4, 8); @@ -100,6 +102,11 @@ void CheckOffsets(void) { CHECK_MEMBER_AT(struct sensor_t, minDelay, 32, 40); CHECK_MEMBER_AT(struct sensor_t, fifoReservedEventCount, 36, 44); CHECK_MEMBER_AT(struct sensor_t, fifoMaxEventCount, 40, 48); + CHECK_MEMBER_AT(struct sensor_t, stringType, 44, 56); + CHECK_MEMBER_AT(struct sensor_t, requiredPermission, 48, 64); + CHECK_MEMBER_AT(struct sensor_t, maxDelay, 52, 72); + CHECK_MEMBER_AT(struct sensor_t, flags, 56, 80); + CHECK_MEMBER_AT(struct sensor_t, reserved, 60, 88); CHECK_MEMBER_AT(sensors_poll_device_1_t, v0, 0, 0); CHECK_MEMBER_AT(sensors_poll_device_1_t, common, 0, 0); |