Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

drivers/sensor: add new sensot type to align android sensor type #15610

Merged
merged 1 commit into from
Jan 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions drivers/sensors/bmi088_uorb.c
Original file line number Diff line number Diff line change
Expand Up @@ -735,8 +735,7 @@ static int bmi088_register_accel(int devno,
#endif

priv->lower.ops = &g_bmi088_accel_ops;
priv->lower.type = SENSOR_TYPE_ACCELEROMETER;
priv->lower.uncalibrated = true;
priv->lower.type = SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED;
priv->interval = BMI088_DEFAULT_INTERVAL;
priv->lower.nbuffer = 1;

Expand Down Expand Up @@ -818,8 +817,7 @@ static int bmi088_register_gyro(int devno,
#endif

priv->lower.ops = &g_bmi088_gyro_ops;
priv->lower.type = SENSOR_TYPE_GYROSCOPE;
priv->lower.uncalibrated = true;
priv->lower.type = SENSOR_TYPE_GYROSCOPE_UNCALIBRATED;
priv->interval = BMI088_DEFAULT_INTERVAL;
priv->lower.nbuffer = 1;

Expand Down
6 changes: 2 additions & 4 deletions drivers/sensors/bmi160_uorb.c
Original file line number Diff line number Diff line change
Expand Up @@ -602,8 +602,7 @@ static int bmi160_register_accel(int devno,
#endif

priv->lower.ops = &g_bmi160_accel_ops;
priv->lower.type = SENSOR_TYPE_ACCELEROMETER;
priv->lower.uncalibrated = true;
priv->lower.type = SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED;
priv->interval = BMI160_DEFAULT_INTERVAL;
priv->lower.nbuffer = 1;

Expand Down Expand Up @@ -687,8 +686,7 @@ static int bmi160_register_gyro(int devno,
#endif

priv->lower.ops = &g_bmi160_gyro_ops;
priv->lower.type = SENSOR_TYPE_GYROSCOPE;
priv->lower.uncalibrated = true;
priv->lower.type = SENSOR_TYPE_GYROSCOPE_UNCALIBRATED;
priv->interval = BMI160_DEFAULT_INTERVAL;
priv->lower.nbuffer = 1;

Expand Down
1 change: 0 additions & 1 deletion drivers/sensors/ds18b20_uorb.c
Original file line number Diff line number Diff line change
Expand Up @@ -973,7 +973,6 @@ int ds18b20_register(int devno, FAR struct onewire_master_s *onewire,
#endif
tmp->lower.ops = &g_ds18b20_ops;
tmp->lower.type = SENSOR_TYPE_AMBIENT_TEMPERATURE;
tmp->lower.uncalibrated = false;
tmp->lower.nbuffer = 1;
ret = sensor_register(&tmp->lower, devno);
if (ret < 0)
Expand Down
68 changes: 25 additions & 43 deletions drivers/sensors/goldfish_sensor_uorb.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
#define GOLDFISH_PRESSURE 7
#define GOLDFISH_RELATIVE_HUMIDITY 8
#define GOLDFISH_MAGNETIC_FIELD_UNCALIBRATED 9
#define GOLDFISH_GYROSCOPE_FIELD_UNCALIBRATED 10
#define GOLDFISH_GYROSCOPE_UNCALIBRATED 10
#define GOLDFISH_HINGE_ANGLE0 11
#define GOLDFISH_HINGE_ANGLE1 12
#define GOLDFISH_HINGE_ANGLE2 13
Expand Down Expand Up @@ -620,45 +620,27 @@ static int goldfish_get_priv(FAR struct sensor_lowerhalf_s *lower,
{
switch (lower->type)
{
case SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED:
priv = container_of(lower, struct goldfish_sensor_s,
lower_accel_uncalibrated);
return GOLDFISH_ACCELERATION_UNCALIBRATED;
case SENSOR_TYPE_ACCELEROMETER:
if (lower->uncalibrated)
{
*priv = container_of(lower, struct goldfish_sensor_s,
lower_accel_uncalibrated);
return GOLDFISH_ACCELERATION_UNCALIBRATED;
}
else
{
*priv = container_of(lower, struct goldfish_sensor_s, lower_accel);
return GOLDFISH_ACCELERATION;
}

priv = container_of(lower, struct goldfish_sensor_s, lower_accel);
return GOLDFISH_ACCELERATION;
case SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED:
priv = container_of(lower, struct goldfish_sensor_s,
lower_mag_uncalibrated);
return GOLDFISH_MAGNETIC_FIELD_UNCALIBRATED;
case SENSOR_TYPE_MAGNETIC_FIELD:
if (lower->uncalibrated)
{
*priv = container_of(lower, struct goldfish_sensor_s,
lower_mag_uncalibrated);
return GOLDFISH_MAGNETIC_FIELD_UNCALIBRATED;
}
else
{
*priv = container_of(lower, struct goldfish_sensor_s, lower_mag);
return GOLDFISH_MAGNETIC_FIELD;
}

priv = container_of(lower, struct goldfish_sensor_s, lower_mag);
return GOLDFISH_MAGNETIC_FIELD;
case SENSOR_TYPE_GYROSCOPE_UNCALIBRATED:
priv = container_of(lower, struct goldfish_sensor_s,
lower_gyro_uncalibrated);
return GOLDFISH_GYROSCOPE_UNCALIBRATED;
case SENSOR_TYPE_GYROSCOPE:
if (lower->uncalibrated)
{
*priv = container_of(lower, struct goldfish_sensor_s,
lower_gyro_uncalibrated);
return GOLDFISH_GYROSCOPE_FIELD_UNCALIBRATED;
}
else
{
*priv = container_of(lower, struct goldfish_sensor_s, lower_gyro);
return GOLDFISH_GYROSCOPE;
}

priv = container_of(lower, struct goldfish_sensor_s, lower_gyro);
return GOLDFISH_GYROSCOPE;
case SENSOR_TYPE_PROXIMITY:
*priv = container_of(lower, struct goldfish_sensor_s, lower_prox);
return GOLDFISH_PROXIMITY;
Expand Down Expand Up @@ -868,20 +850,20 @@ int goldfish_sensor_init(int devno, uint32_t batch_number)
sensor->lower_gyro.ops = &g_goldfish_sensor_ops;
sensor->lower_gyro.nbuffer = batch_number;

sensor->lower_accel_uncalibrated.type = SENSOR_TYPE_ACCELEROMETER;
sensor->lower_accel_uncalibrated.type =
SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED;
sensor->lower_accel_uncalibrated.ops = &g_goldfish_sensor_ops;
sensor->lower_accel_uncalibrated.nbuffer = batch_number;
sensor->lower_accel_uncalibrated.uncalibrated = true;

sensor->lower_mag_uncalibrated.type = SENSOR_TYPE_MAGNETIC_FIELD;
sensor->lower_mag_uncalibrated.type =
SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED;
sensor->lower_mag_uncalibrated.ops = &g_goldfish_sensor_ops;
sensor->lower_mag_uncalibrated.nbuffer = batch_number;
sensor->lower_mag_uncalibrated.uncalibrated = true;

sensor->lower_gyro_uncalibrated.type = SENSOR_TYPE_GYROSCOPE;
sensor->lower_gyro_uncalibrated.type =
SENSOR_TYPE_GYROSCOPE_UNCALIBRATED;
sensor->lower_gyro_uncalibrated.ops = &g_goldfish_sensor_ops;
sensor->lower_gyro_uncalibrated.nbuffer = batch_number;
sensor->lower_gyro_uncalibrated.uncalibrated = true;

sensor->lower_prox.type = SENSOR_TYPE_PROXIMITY;
sensor->lower_prox.ops = &g_goldfish_sensor_ops;
Expand Down
2 changes: 0 additions & 2 deletions drivers/sensors/hyt271_uorb.c
Original file line number Diff line number Diff line change
Expand Up @@ -942,7 +942,6 @@ int hyt271_register(int devno, FAR struct i2c_master_s *i2c, uint8_t addr,
tmp->buffer_size = sizeof(struct sensor_humi);
tmp->lower.ops = &g_hyt271_ops;
tmp->lower.type = SENSOR_TYPE_RELATIVE_HUMIDITY;
tmp->lower.uncalibrated = false;
tmp->lower.nbuffer = 1;
ret = sensor_register(&tmp->lower, devno);
if (ret < 0)
Expand All @@ -960,7 +959,6 @@ int hyt271_register(int devno, FAR struct i2c_master_s *i2c, uint8_t addr,
tmp->buffer_size = sizeof(struct sensor_temp);
tmp->lower.ops = &g_hyt271_ops;
tmp->lower.type = SENSOR_TYPE_AMBIENT_TEMPERATURE;
tmp->lower.uncalibrated = false;
tmp->lower.nbuffer = 1;
ret = sensor_register(&tmp->lower, devno);
if (ret < 0)
Expand Down
3 changes: 1 addition & 2 deletions drivers/sensors/l3gd20_uorb.c
Original file line number Diff line number Diff line change
Expand Up @@ -562,10 +562,9 @@ int l3gd20_register(int devno, FAR struct spi_dev_s *spi,
#endif
priv->timestamp = 0;

priv->lower.type = SENSOR_TYPE_GYROSCOPE;
priv->lower.type = SENSOR_TYPE_GYROSCOPE_UNCALIBRATED;
priv->lower.nbuffer = CONFIG_SENSORS_L3GD20_BUFFER_SIZE;
priv->lower.ops = &g_l2gd20_ops;
priv->lower.uncalibrated = true;

/* Setup SPI frequency and mode */

Expand Down
19 changes: 10 additions & 9 deletions drivers/sensors/sensor.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,7 @@
/* Device naming ************************************************************/

#define ROUND_DOWN(x, y) (((x) / (y)) * (y))
#define DEVNAME_FMT "/dev/uorb/sensor_%s%s%d"
#define DEVNAME_UNCAL "_uncal"
#define DEVNAME_FMT "/dev/uorb/sensor_%s%d"
#define TIMING_BUF_ESIZE (sizeof(uint32_t))

/****************************************************************************
Expand Down Expand Up @@ -168,16 +167,16 @@ static const struct sensor_meta_s g_sensor_meta[] =
{sizeof(struct sensor_gyro), "gyro"},
{sizeof(struct sensor_light), "light"},
{sizeof(struct sensor_baro), "baro"},
{sizeof(struct sensor_noise), "noise"},
{sizeof(struct sensor_temp), "temp"},
{sizeof(struct sensor_prox), "prox"},
{sizeof(struct sensor_rgb), "rgb"},
{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_temp), "ambient_temp"},
{sizeof(struct sensor_mag), "mag_uncal"},
{sizeof(struct sensor_pm1p0), "pm1p0"},
{sizeof(struct sensor_pm10), "pm10"},
{sizeof(struct sensor_gyro), "gyro_uncal"},
{sizeof(struct sensor_event), "motion_detect"},
{sizeof(struct sensor_event), "step_detector"},
{sizeof(struct sensor_step_counter), "step_counter"},
Expand All @@ -196,7 +195,7 @@ static const struct sensor_meta_s g_sensor_meta[] =
{sizeof(struct sensor_force), "force"},
{sizeof(struct sensor_hall), "hall"},
{sizeof(struct sensor_event), "offbody_detector"},
{sizeof(struct sensor_uv), "uv"},
{sizeof(struct sensor_accel), "accel_uncal"},
{sizeof(struct sensor_angle), "hinge_angle"},
{sizeof(struct sensor_ir), "ir"},
{sizeof(struct sensor_hcho), "hcho"},
Expand All @@ -215,6 +214,10 @@ static const struct sensor_meta_s g_sensor_meta[] =
{sizeof(struct sensor_gnss_clock), "gnss_clock"},
{sizeof(struct sensor_gnss_geofence_event), "gnss_geofence_event"},
{sizeof(struct sensor_velocity), "velocity"},
{sizeof(struct sensor_noise), "noise"},
{sizeof(struct sensor_pm25), "pm25"},
{sizeof(struct sensor_pm10), "pm10"},
{sizeof(struct sensor_uv), "uv"},
};

static const struct file_operations g_sensor_fops =
Expand Down Expand Up @@ -1255,7 +1258,6 @@ int sensor_register(FAR struct sensor_lowerhalf_s *lower, int devno)

snprintf(path, PATH_MAX, DEVNAME_FMT,
g_sensor_meta[lower->type].name,
lower->uncalibrated ? DEVNAME_UNCAL : "",
devno);
ret = sensor_custom_register(lower, path,
g_sensor_meta[lower->type].esize);
Expand Down Expand Up @@ -1403,7 +1405,6 @@ void sensor_unregister(FAR struct sensor_lowerhalf_s *lower, int devno)

snprintf(path, PATH_MAX, DEVNAME_FMT,
g_sensor_meta[lower->type].name,
lower->uncalibrated ? DEVNAME_UNCAL : "",
devno);
sensor_custom_unregister(lower, path);
lib_put_pathbuffer(path);
Expand Down
2 changes: 0 additions & 2 deletions drivers/sensors/sht4x_uorb.c
Original file line number Diff line number Diff line change
Expand Up @@ -875,7 +875,6 @@ int sht4x_register(FAR struct i2c_master_s *i2c, int devno, uint8_t addr)

priv->hum.sensor_lower.ops = &g_sensor_ops;
priv->hum.sensor_lower.type = SENSOR_TYPE_RELATIVE_HUMIDITY;
priv->hum.sensor_lower.uncalibrated = false;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be good to update the recent documentation on UORB to mention the removal of the uncalibrated member.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

priv->hum.enabled = false;
priv->hum.dev = priv;

Expand All @@ -895,7 +894,6 @@ int sht4x_register(FAR struct i2c_master_s *i2c, int devno, uint8_t addr)

priv->temp.sensor_lower.ops = &g_sensor_ops;
priv->temp.sensor_lower.type = SENSOR_TYPE_AMBIENT_TEMPERATURE;
priv->temp.sensor_lower.uncalibrated = false;
priv->temp.enabled = false;
priv->temp.dev = priv;

Expand Down
7 changes: 0 additions & 7 deletions include/nuttx/sensors/sensor.h
Original file line number Diff line number Diff line change
Expand Up @@ -532,13 +532,6 @@ struct sensor_lowerhalf_s

uint32_t nbuffer;

/* The uncalibrated use to describe whether the sensor event is
* uncalibrated. True is uncalibrated data, false is calibrated data,
* default false.
*/

bool uncalibrated;

/* The lower half sensor driver operations */

FAR const struct sensor_ops_s *ops;
Expand Down
71 changes: 54 additions & 17 deletions include/nuttx/uorb.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,14 @@

/* sensor type definition */

/* Note: Some of the types of these sensors are aligned with Android, and
* the refs link is https://cs.android.com/android/_/android/platform/\
* hardware/libhardware/+/0e67aa0caee9500b61b9c1c8b6e5cab18301364c:\
* include_all/hardware/sensors-base.h.
*
* If you need to make modifications, please align with Android standards
*/

/* Custom Sensor
* Some special sensor whose event size is not fixed or dynamically change,
* are called sensor of custom type. You should treat its events as byte
Expand Down Expand Up @@ -99,11 +107,12 @@

#define SENSOR_TYPE_BAROMETER 6

/* Noise Loudness
* A sensor of this type returns the loudness of noise in SI units (db)
/* Temperature
* A sensor of this type returns the measurement temperature in degree
* Celsius.
*/

#define SENSOR_TYPE_NOISE 7
#define SENSOR_TYPE_TEMPERAUTRE 7

/* Proximity
* The values correspond to the distance to the nearest
Expand Down Expand Up @@ -153,12 +162,12 @@

#define SENSOR_TYPE_AMBIENT_TEMPERATURE 13

/* PM25
* A sensor of this type returns the content of pm2.5 in the air
* This value is in SI units (ug/m^3)
/* Magneric Field Uncalibrated
* Similar to MAGNETIC_FIELD, all values are in micro-Tesla (uT)
* and measure the geomagnetic field in X, Y and Z axis.
*/

#define SENSOR_TYPE_PM25 14
#define SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED 14

/* PM1P0
* A sensor of this type returns the content of pm1.0 in the air
Expand All @@ -167,12 +176,12 @@

#define SENSOR_TYPE_PM1P0 15

/* PM10
* A sensor of this type returns the content of pm10 in the air
* This value is in SI units (ug/m^3)
/* Gyroscope Uncalibrated
* All values are in radians/second and measure the rate of rotation around
* the X, Y and Z axis.
*/

#define SENSOR_TYPE_PM10 16
#define SENSOR_TYPE_GYROSCOPE_UNCALIBRATED 16

/* Significant motion
* A significant motion detector triggers when detecting a significant
Expand Down Expand Up @@ -335,12 +344,12 @@

#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.
/* Accelerometer Uncalibrate
* All values are in SI units (m/s^2), and measure the acceleration of the
* device minus the acceleration dut to gravity.
*/
#define SENSOR_TYPE_ULTRAVIOLET 35

#define SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED 35

/* Hinge angle
* A hinge angle sensor measures the angle, in degrees, between two integral
Expand Down Expand Up @@ -474,11 +483,39 @@

#define SENSOR_TYPE_VELOCITY 53

/* Noise Loudness
* A sensor of this type returns the loudness of noise in SI units (db)
*/

#define SENSOR_TYPE_NOISE 54

/* PM25
* A sensor of this type returns the content of pm2.5 in the air
* This value is in SI units (ug/m^3)
*/

#define SENSOR_TYPE_PM25 55

/* PM10
* A sensor of this type returns the content of pm10 in the air
* This value is in SI units (ug/m^3)
*/

#define SENSOR_TYPE_PM10 56

/* 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 57

/* The total number of sensor
* please increase it if you added a new sensor type!
*/

#define SENSOR_TYPE_COUNT 54
#define SENSOR_TYPE_COUNT 58

/* The additional sensor open flags */

Expand Down
Loading