sensor: Added 6dof motion and gesture related types. For details, see: https://developer.android.com/reference/android/hardware/SensorEvent#values

Signed-off-by: likun17 <likun17@xiaomi.com>
This commit is contained in:
likun17 2024-08-05 20:56:32 +08:00 committed by Xiang Xiao
parent a4e90b7268
commit 57f84aaca8
2 changed files with 341 additions and 132 deletions

View File

@ -161,36 +161,51 @@ static const struct sensor_meta_s g_sensor_meta[] =
{0, NULL},
{sizeof(struct sensor_accel), "accel"},
{sizeof(struct sensor_mag), "mag"},
{sizeof(struct sensor_uv), "uv"},
{sizeof(struct sensor_orientation), "orientation"},
{sizeof(struct sensor_gyro), "gyro"},
{sizeof(struct sensor_light), "light"},
{sizeof(struct sensor_baro), "baro"},
{sizeof(struct sensor_noise), "noise"},
{sizeof(struct sensor_prox), "prox"},
{sizeof(struct sensor_rgb), "rgb"},
{sizeof(struct sensor_hall), "hall"},
{sizeof(struct sensor_ir), "ir"},
{sizeof(struct sensor_accel), "linear_accel"},
{sizeof(struct sensor_rotation), "rotation"},
{sizeof(struct sensor_humi), "humi"},
{sizeof(struct sensor_temp), "temp"},
{sizeof(struct sensor_pm25), "pm25"},
{sizeof(struct sensor_pm1p0), "pm1p0"},
{sizeof(struct sensor_pm10), "pm10"},
{sizeof(struct sensor_co2), "co2"},
{sizeof(struct sensor_hcho), "hcho"},
{sizeof(struct sensor_tvoc), "tvoc"},
{sizeof(struct sensor_event), "motion_detect"},
{sizeof(struct sensor_event), "step_detector"},
{sizeof(struct sensor_step_counter), "step_counter"},
{sizeof(struct sensor_ph), "ph"},
{sizeof(struct sensor_hrate), "hrate"},
{sizeof(struct sensor_event), "tilt_detector"},
{sizeof(struct sensor_event), "wake_gesture"},
{sizeof(struct sensor_event), "glance_gesture"},
{sizeof(struct sensor_event), "pickup_gesture"},
{sizeof(struct sensor_event), "wrist_tilt"},
{sizeof(struct sensor_orientation), "device_orientation"},
{sizeof(struct sensor_pose_6dof), "pose_6dof"},
{sizeof(struct sensor_gas), "gas"},
{sizeof(struct sensor_event), "significant_motion"},
{sizeof(struct sensor_hbeat), "hbeat"},
{sizeof(struct sensor_force), "force"},
{sizeof(struct sensor_hall), "hall"},
{sizeof(struct sensor_event), "offbody_detector"},
{sizeof(struct sensor_uv), "uv"},
{sizeof(struct sensor_angle), "hinge_angle"},
{sizeof(struct sensor_ir), "ir"},
{sizeof(struct sensor_hcho), "hcho"},
{sizeof(struct sensor_tvoc), "tvoc"},
{sizeof(struct sensor_dust), "dust"},
{sizeof(struct sensor_wake_gesture), "wake_gesture"},
{sizeof(struct sensor_ecg), "ecg"},
{sizeof(struct sensor_ppgd), "ppgd"},
{sizeof(struct sensor_ppgq), "ppgq"},
{sizeof(struct sensor_impd), "impd"},
{sizeof(struct sensor_ots), "ots"},
{sizeof(struct sensor_gas), "gas"},
{sizeof(struct sensor_co2), "co2"},
{sizeof(struct sensor_cap), "cap"},
{sizeof(struct sensor_hbeat), "hbeat"},
{sizeof(struct sensor_force), "force"},
{sizeof(struct sensor_gnss), "gnss"},
{sizeof(struct sensor_gnss_satellite), "gnss_satellite"},
{sizeof(struct sensor_gnss_measurement), "gnss_measurement"},

View File

@ -63,12 +63,19 @@
#define SENSOR_TYPE_MAGNETIC_FIELD 2
/* Ultraviolet light sensor
* This sensor can identify the UV index in ambient light help people
* to effectively protect themselves from sunburns, cancer or eye damage.
* This value range is 0 - 15.
/* Orientation
* An orientation sensor reports the attitude of the device. The measurements
* are reported in degrees in the x, y, and z.
* x:azimuth, the angle between the magnetic north direction and the
* Y axis, around the Z axis (0<=azimuth<360). 0=North, 90=East,
* 180=South, 270=West.
* y:pitch, rotation around X axis (-180<=pitch<=180), with positive values
* when the Z axis moves toward the Y axis.
* z:roll, rotation around Y axis (-90<=roll<=90), with positive values
* when the X axis moves towards the Z axis.
*/
#define SENSOR_TYPE_ULTRAVIOLET 3
#define SENSOR_TYPE_ORIENTATION 3
/* Gyroscope
* All values are in radians/second and measure the rate of rotation around
@ -110,19 +117,26 @@
#define SENSOR_TYPE_RGB 9
/* Hall
* All values are in bool type (0 or 1) and it often is used to as switch.
* A values of 1 indicates that switch on.
/* Linear acceleration
* A linear acceleration sensor reports the linear acceleration of the device
* in the sensor frame, not including gravity(output of the accelerometer
* minus the output of the gravity sensor).
*/
#define SENSOR_TYPE_HALL 10
#define SENSOR_TYPE_LINEAR_ACCELERATION 10
/* IR (Infrared Ray)
* This sensor can detect a human approach and outputs a signal from
* interrupt pins. This sensor value is in lux.
/* Rotation
* A rotation vector sensor reports the orientation of the device relative
* to the East-North-Up coordinates frame. It's usually obtained by
* integration of accelerometer, gyroscope, and magnetometer readings.
* The East-North-Up coordinate system is defined as a direct orthonormal
* basis where:
* X points east and is tangential to the ground.
* Y points north and is tangential to the ground.
* Z points towards the sky and is perpendicular to the ground.
*/
#define SENSOR_TYPE_IR 11
#define SENSOR_TYPE_ROTATION_VECTOR 11
/* Relative Humidity
* A relative humidity sensor measure relative ambient air humidity and
@ -158,26 +172,32 @@
#define SENSOR_TYPE_PM10 16
/* CO2
* A sensor of this type returns the content of CO2 in the air
* This value is in units (ppm-part per million).
/* Significant motion
* A significant motion detector triggers when detecting a significant
* motion: a motion that might lead to a change in the user location.
*/
#define SENSOR_TYPE_CO2 17
#define SENSOR_TYPE_SIGNIFICANT_MOTION 17
/* HCHO
* The HCHO pollution is an important indicator of household air
* pollution. This value is in units (ppm-part per million).
/* Step detector
* A step detector generates an event each time a step is taken by the user.
* The timestamp of the event corresponds to when the foot hit the ground,
* generating a high variation in acceleration. Compared to the step counter,
* the step detector should have a lower latency (less than two seconds).
* Both the step detector and the step counter detect when the user is
* walking, running, and walking up the stairs. They shouldn't trigger when
* the user is biking, driving, or in other vehicles.
*/
#define SENSOR_TYPE_HCHO 18
#define SENSOR_TYPE_STEP_DETECTOR 18
/* TVOC (total volatile organic compounds)
* The indoor TVOC is cause indoor air pollution is one of the
* main reasons why. This value is in units (ppb-part per billion).
/* Step counter
* A step counter reports the number of steps taken by the user since the
* last reboot while activated. A step counter reports the number of steps
* taken by the user since the last reboot while activated.
*/
#define SENSOR_TYPE_TVOC 19
#define SENSOR_TYPE_STEP_COUNTER 19
/* PH
* The acid-base degree describes the strength of the aqueous
@ -195,12 +215,11 @@
#define SENSOR_TYPE_HEART_RATE 21
/* Dust
* A sensor of this type returns the content of dust in the air
* values is in ug/m^3.
/* Tilt detector
* A tilt detector generates an event each time a tilt event is detected.
*/
#define SENSOR_TYPE_DUST 22
#define SENSOR_TYPE_TILT_DETECTOR 22
/* Wake gesture
* A sensor enabling waking up the device based on a device specific
@ -211,52 +230,57 @@
#define SENSOR_TYPE_WAKE_GESTURE 23
/* ECG (Electrocardiogram)
* A sensor of this type returns the ECG voltage in μV. Sensors may amplify
* the input ECG signal. Here the ECG voltage is the un-amplified ECG
* voltage.
/* Glance gesture
* A glance gesture sensor enables briefly turning the screen on to enable
* the user to glance content on screen based on a specific motion.
* When this sensor triggers, the device will turn the screen on momentarily
* to allow the user to glance notifications or other content while the
* device remains locked in a non-interactive state (dozing), then the screen
* will turn off again.
*/
#define SENSOR_TYPE_ECG 24
#define SENSOR_TYPE_GLANCE_GESTURE 24
/* PPG Dual (2-channel photoplethysmography)
* A sensor of this type returns the 2 channels PPG measurements in ADC
* counts and their corresponding LED current and ADC gains. The PPG
* measurements come from photodiodes and following current amplifiers and
* ADCs, where a photodiode switches reflected light intensity to current.
* The LED current decides the lightness of LED, which is the input of PPG
* measurements. The ADC gains are multipled on the output and affect SNR.
/* Pick up gesture
* A pick-up gesture sensor triggers when the device is picked up regardless
* of wherever it was before (desk, pocket, bag).
*/
#define SENSOR_TYPE_PPGD 25
#define SENSOR_TYPE_PICK_UP_GESTURE 25
/* PPG Quad (4-channel photoplethysmography)
* A sensor of this type returns the 4 channels PPG measurements in ADC
* counts and their corresponding LED current and ADC gains. The PPG
* measurements come from photodiodes and following current amplifiers and
* ADCs, where a photodiode switches reflected light intensity to current.
* The LED current decides the lightness of LED, which is the input of PPG
* measurements. The ADC gains are multipled on the output and affect SNR.
/* Wrist tilt
* The wrist-off detection sensor is only triggered when the device is off
* the wrist.
*/
#define SENSOR_TYPE_PPGQ 26
#define SENSOR_TYPE_WRIST_TILT_GESTURE 26
/* Imdepance
* A sensor of this type returns the impedance measurements. An impedance
* is a complex number, which consists of a real part(resistance) and an
* imaginary part(reactance). Both of them are in uint Ohm(Ω).
/* Device_orientation
* A device orientation sensor reports the current orientation of the device.
*/
#define SENSOR_TYPE_IMPEDANCE 27
#define SENSOR_TYPE_DEVICE_ORIENTATION 27
/* OTS (Optical tracking sensor)
* A sensor of this type returns the OTS measurements in counts. It
* integrates an optical chip and a LASER light source in a single miniature
* package. It provies wide depth of field range on glossy surface, and
* design flexibility into a compact device.
/* Pose 6DOF
* A Pose 6DOF sensor reports the orientation of the device relative to the
* East-North-Up coordinates frame. It is obtained by integration of
* accelerometer and gyroscope readings.
* The East-North-Up coordinate system is defined as a direct orthonormal
* basis where:
* X points east and is tangential to the ground.
* Y points north and is tangential to the ground.
* Z points towards the sky and is perpendicular to the ground.
* The orientation is represented by the rotation necessary to align the
* East-North-Up coordinates with the device's coordinates. That is, applying
* the rotation to the world frame (X,Y,Z) would align them with the device
* coordinates (x,y,z).
* The rotation can be seen as rotating the device by an angle theta around
* an axis rot_axis to go from the reference (East-North-Up aligned) device
* orientation to the current device orientation. The rotation is encoded as
* the four unitless x, y, z, w components of a unit quaternion.
*/
#define SENSOR_TYPE_OTS 28
#define SENSOR_TYPE_POSE_6DOF 28
/* Gas sensor
* This sensor measures the gas resistance, indicating the presence
@ -265,13 +289,15 @@
#define SENSOR_TYPE_GAS 29
/* CAP (Capacitive proximity sensor)
* The purpose of the proximity sensing interface is to detect when a
* conductive object (usually a body part i.e. finger, palm, face, etc.)
* is in the proximity of the system.
/* Motion detect
* Motion detection sensor is used to detect the motion status of the device.
* motion detect event is produced if the device has been in motion
* for at least 5 seconds with a maximal latency of 5 additional seconds.
* ie: it may take up anywhere from 5 to 10 seconds afte the device has been
* at rest to trigger this event. The only allowed value is 1.0.
*/
#define SENSOR_TYPE_CAP 30
#define SENSOR_TYPE_MOTION_DETECT 30
/* Heart Beat
* A sensor of this type returns an event evetytime
@ -291,35 +317,157 @@
#define SENSOR_TYPE_FORCE 32
/* Hall
* All values are in bool type (0 or 1) and it often is used to as switch.
* A values of 1 indicates that switch on.
*/
#define SENSOR_TYPE_HALL 33
/* Offbody detect
* An offbody detect sensor reports every time the device transitions from
* off-body to on-body and from on-body to off-body (e.g. a wearable device
* being removed from the wrist would trigger an event indicating an off-body
* transition).
*/
#define SENSOR_TYPE_LOW_LATENCY_OFFBODY_DETECT 34
/* Ultraviolet light sensor
* This sensor can identify the UV index in ambient light help people
* to effectively protect themselves from sunburns, cancer or eye damage.
* This value range is 0 - 15.
*/
#define SENSOR_TYPE_ULTRAVIOLET 35
/* Hinge angle
* A hinge angle sensor measures the angle, in degrees, between two integral
* parts of the device. Movement of a hinge measured by this sensor type is
* expected to alter the ways in which the user can interact with the device,
* for example, by unfolding or revealing a display.
*/
#define SENSOR_TYPE_HINGE_ANGLE 36
/* IR (Infrared Ray)
* This sensor can detect a human approach and outputs a signal from
* interrupt pins. This sensor value is in lux.
*/
#define SENSOR_TYPE_IR 37
/* HCHO
* The HCHO pollution is an important indicator of household air
* pollution. This value is in units (ppm-part per million).
*/
#define SENSOR_TYPE_HCHO 38
/* TVOC (total volatile organic compounds)
* The indoor TVOC is cause indoor air pollution is one of the
* main reasons why. This value is in units (ppb-part per billion).
*/
#define SENSOR_TYPE_TVOC 39
/* Dust
* A sensor of this type returns the content of dust in the air
* values is in ug/m^3.
*/
#define SENSOR_TYPE_DUST 40
/* ECG (Electrocardiogram)
* A sensor of this type returns the ECG voltage in μV. Sensors may amplify
* the input ECG signal. Here the ECG voltage is the un-amplified ECG
* voltage.
*/
#define SENSOR_TYPE_ECG 41
/* PPG Dual (2-channel photoplethysmography)
* A sensor of this type returns the 2 channels PPG measurements in ADC
* counts and their corresponding LED current and ADC gains. The PPG
* measurements come from photodiodes and following current amplifiers and
* ADCs, where a photodiode switches reflected light intensity to current.
* The LED current decides the lightness of LED, which is the input of PPG
* measurements. The ADC gains are multipled on the output and affect SNR.
*/
#define SENSOR_TYPE_PPGD 42
/* PPG Quad (4-channel photoplethysmography)
* A sensor of this type returns the 4 channels PPG measurements in ADC
* counts and their corresponding LED current and ADC gains. The PPG
* measurements come from photodiodes and following current amplifiers and
* ADCs, where a photodiode switches reflected light intensity to current.
* The LED current decides the lightness of LED, which is the input of PPG
* measurements. The ADC gains are multipled on the output and affect SNR.
*/
#define SENSOR_TYPE_PPGQ 43
/* Imdepance
* A sensor of this type returns the impedance measurements. An impedance
* is a complex number, which consists of a real part(resistance) and an
* imaginary part(reactance). Both of them are in uint Ohm(Ω).
*/
#define SENSOR_TYPE_IMPEDANCE 44
/* OTS (Optical tracking sensor)
* A sensor of this type returns the OTS measurements in counts. It
* integrates an optical chip and a LASER light source in a single miniature
* package. It provies wide depth of field range on glossy surface, and
* design flexibility into a compact device.
*/
#define SENSOR_TYPE_OTS 45
/* CO2
* A sensor of this type returns the content of CO2 in the air
* This value is in units (ppm-part per million).
*/
#define SENSOR_TYPE_CO2 46
/* CAP (Capacitive proximity sensor)
* The purpose of the proximity sensing interface is to detect when a
* conductive object (usually a body part i.e. finger, palm, face, etc.)
* is in the proximity of the system.
*/
#define SENSOR_TYPE_CAP 47
/* GNSS
* A sensor of this type returns GNSS data. Include latitude, longitude,
* altitude, horizontal position accuracy, vertical position accuracy,
* horizontal dilution of precision, vertical dilution of precision...
*/
#define SENSOR_TYPE_GNSS 33
#define SENSOR_TYPE_GNSS 48
/* Sensor of GNSS satellite
* A sensor of this type returns the GNSS satellite information.
*/
#define SENSOR_TYPE_GNSS_SATELLITE 34
#define SENSOR_TYPE_GNSS_SATELLITE 49
/* GNSS Measurement */
#define SENSOR_TYPE_GNSS_MEASUREMENT 35
#define SENSOR_TYPE_GNSS_MEASUREMENT 50
/* GNSS Clock */
#define SENSOR_TYPE_GNSS_CLOCK 36
#define SENSOR_TYPE_GNSS_CLOCK 51
/* GNSS Geofence */
#define SENSOR_TYPE_GNSS_GEOFENCE 37
#define SENSOR_TYPE_GNSS_GEOFENCE 52
/* The total number of sensor */
#define SENSOR_TYPE_COUNT 38
#define SENSOR_TYPE_COUNT 53
/* The additional sensor open flags */
@ -423,6 +571,12 @@
* reported.
*/
struct sensor_event /* Type: Sensor Common Event */
{
uint64_t timestamp; /* Units is microseconds */
uint32_t event; /* Common events */
};
struct sensor_accel /* Type: Accerometer */
{
uint64_t timestamp; /* Units is microseconds */
@ -442,10 +596,12 @@ struct sensor_mag /* Type: Magnetic Field */
int32_t status; /* Status of calibration */
};
struct sensor_uv /* Type: Ultraviolet Light */
struct sensor_orientation /* Type: Orientation */
{
uint64_t timestamp; /* Units is microseconds */
float uvi; /* the value range is 0 - 15 */
float x; /* azimuth */
float y; /* pitch */
float z; /* roll */
};
struct sensor_gyro /* Type: Gyroscope */
@ -491,16 +647,14 @@ struct sensor_rgb /* Type: RGB */
float b; /* Units is percent */
};
struct sensor_hall /* Type: HALL */
struct sensor_rotation /* Type: Rotation */
{
uint64_t timestamp; /* Units is microseconds */
int32_t hall; /* Hall state */
};
struct sensor_ir /* Type: Infrared Ray */
{
uint64_t timestamp; /* Units is microseconds */
float ir; /* in SI units lux */
float x; /* x*sin(θ/2) */
float y; /* y*sin(θ/2) */
float z; /* z*sin(θ/2) */
float w; /* cos(θ/2) */
float status; /* estimated heading Accuracy (in radians) (-1 if unavailable) */
};
struct sensor_humi /* Type: Relative Humidity */
@ -533,22 +687,11 @@ struct sensor_pm10 /* Type: PM10 */
float pm10; /* in SI units ug/m^3 */
};
struct sensor_co2 /* Type: CO2 */
struct sensor_step_counter /* Type: Step Coun */
{
uint64_t timestamp; /* Units is microseconds */
float co2; /* in SI units ppm */
};
struct sensor_hcho /* Type: HCHO */
{
uint64_t timestamp; /* Units is microseconds */
float hcho; /* in SI units ppm */
};
struct sensor_tvoc /* Type: TVOC */
{
uint64_t timestamp; /* Units is microseconds */
float tvoc; /* in SI units ppm */
uint32_t steps; /* Step counting */
uint32_t cadence; /* Stride frequency */
};
struct sensor_ph /* Type: PH */
@ -563,23 +706,87 @@ struct sensor_hrate /* Type: Heart Rate */
float bpm; /* is SI units BPM */
};
struct sensor_pose_6dof /* Type: Pose 6dof */
{
uint64_t timestamp; /* Units is microseconds */
float x; /* x*sin(theta/2) */
float y; /* y*sin(theta/2) */
float z; /* z*sin(theta/2) */
float w; /* cos(theta/2) */
float tx; /* Translation along x axis from an arbitrary origin. */
float ty; /* Translation along y axis from an arbitrary origin. */
float tz; /* Translation along z axis from an arbitrary origin. */
float dx; /* Delta quaternion rotation x*sin(theta/2) */
float dy; /* Delta quaternion rotation y*sin(theta/2) */
float dz; /* Delta quaternion rotation z*sin(theta/2) */
float dw; /* Delta quaternion rotation cos(theta/2) */
float dtx; /* Delta translation along x axis. */
float dty; /* Delta translation along y axis. */
float dtz; /* Delta translation along z axis. */
uint64_t number; /* Sequence number; ascending sequentially from 0 */
};
struct sensor_gas /* Type: Gas */
{
uint64_t timestamp; /* Units is microseconds */
float gas_resistance; /* Gas resistance in kOhm */
};
struct sensor_hbeat /* Type: Heart Beat */
{
uint64_t timestamp; /* Units is microseconds */
float beat; /* Units is times/minutes */
};
struct sensor_force /* Type: Force */
{
uint64_t timestamp; /* Unit is microseconds */
float force; /* Force value, units is N */
int32_t event; /* Force event */
};
struct sensor_hall /* Type: HALL */
{
uint64_t timestamp; /* Units is microseconds */
int32_t hall; /* Hall state */
};
struct sensor_uv /* Type: Ultraviolet Light */
{
uint64_t timestamp; /* Units is microseconds */
float uvi; /* the value range is 0 - 15 */
};
struct sensor_angle /* Type: Angle */
{
uint64_t timestamp; /* Units is microseconds */
float angle; /* Angle. Unit is degree */
};
struct sensor_ir /* Type: Infrared Ray */
{
uint64_t timestamp; /* Units is microseconds */
float ir; /* in SI units lux */
};
struct sensor_hcho /* Type: HCHO */
{
uint64_t timestamp; /* Units is microseconds */
float hcho; /* in SI units ppm */
};
struct sensor_tvoc /* Type: TVOC */
{
uint64_t timestamp; /* Units is microseconds */
float tvoc; /* in SI units ppm */
};
struct sensor_dust /* Type: DUST */
{
uint64_t timestamp; /* Units is microseconds */
float dust; /* is SI units ug/m^3 */
};
struct sensor_wake_gesture /* Type: Wake gesture */
{
uint64_t timestamp; /* Units is microseconds */
/* wake gesture event, 0: sleep, 1: wake,
* others: Uncalibrated status value.
*/
uint32_t event;
};
struct sensor_ecg /* Type: ECG */
{
uint64_t timestamp; /* Unit is microseconds */
@ -617,10 +824,10 @@ struct sensor_ots /* Type: OTS */
int32_t y; /* Axis Y in counts */
};
struct sensor_gas /* Type: Gas */
struct sensor_co2 /* Type: CO2 */
{
uint64_t timestamp; /* Units is microseconds */
float gas_resistance; /* Gas resistance in kOhm */
float co2; /* in SI units ppm */
};
struct sensor_cap /* Type: Capacitance */
@ -630,19 +837,6 @@ struct sensor_cap /* Type: Capacitance */
int32_t rawdata[4]; /* in SI units pF */
};
struct sensor_hbeat /* Type: Heart Beat */
{
uint64_t timestamp; /* Units is microseconds */
float beat; /* Units is times/minutes */
};
struct sensor_force /* Type: Force */
{
uint64_t timestamp; /* Unit is microseconds */
float force; /* Force value, units is N */
int32_t event; /* Force event */
};
struct sensor_gnss /* Type: GNSS */
{
uint64_t timestamp; /* Time since system start, Units is microseconds */